File indexing completed on 2023-03-17 11:00:04
0001 #include "FWCore/Framework/interface/Event.h"
0002 #include "EventFilter/L1TRawToDigi/plugins/PackerFactory.h"
0003
0004 #include "GTTokens.h"
0005 #include "GlobalAlgBlkPacker.h"
0006
0007 namespace l1t {
0008 namespace stage2 {
0009 Blocks GlobalAlgBlkPacker::pack(const edm::Event& event, const PackerTokens* toks) {
0010 edm::Handle<GlobalAlgBlkBxCollection> algs;
0011 event.getByToken(static_cast<const GTTokens*>(toks)->getAlgToken(), algs);
0012
0013 unsigned int wdPerBX = 6;
0014
0015 Blocks res;
0016
0017 for (int blk = 0; blk < 9; blk++) {
0018 unsigned int blkID = blk * 2 + 33;
0019
0020 unsigned int algOffset = (2 * blk + 1) / 2;
0021 algOffset = (algOffset % 3) * 192;
0022
0023
0024 std::vector<uint32_t> load;
0025
0026 for (int i = algs->getFirstBX(); i <= algs->getLastBX(); ++i) {
0027 for (auto j = algs->begin(i); j != algs->end(i); ++j) {
0028 for (unsigned int wd = 0; wd < wdPerBX; wd++) {
0029 uint32_t word = 0;
0030
0031 if ((blk + 1) % 3 > 0 || wd < 4) {
0032 unsigned int startAlg = wd * 32 + algOffset;
0033 for (unsigned bt = 0; bt < 32; bt++) {
0034 if (blk < 3) {
0035 if (j->getAlgoDecisionInitial(bt + startAlg))
0036 word |= (0x1 << bt);
0037 } else if (blk < 6) {
0038 if (j->getAlgoDecisionInterm(bt + startAlg))
0039 word |= (0x1 << bt);
0040 } else {
0041 if (j->getAlgoDecisionFinal(bt + startAlg))
0042 word |= (0x1 << bt);
0043 }
0044 }
0045
0046 } else if (blk == 2 && (wd == 4 || wd == 5)) {
0047
0048 if (wd == 4)
0049 word |= (j->getL1MenuUUID() & 0xFFFFFFFF);
0050 if (wd == 5)
0051 word |= (j->getL1FirmwareUUID() & 0xFFFFFFFF);
0052
0053 } else if (blk == 8) {
0054 if (wd == 4) {
0055 if (j->getFinalOR())
0056 word |= (0x1 << 16);
0057 if (j->getFinalORVeto())
0058 word |= (0x1 << 8);
0059 if (j->getFinalORPreVeto())
0060 word |= (0x1 << 0);
0061 } else if (wd == 5) {
0062 word |= (j->getPreScColumn() & 0xFF);
0063 }
0064 }
0065
0066 load.push_back(word);
0067 }
0068
0069 }
0070
0071 }
0072
0073 res.push_back(Block(blkID, load));
0074
0075 }
0076
0077 return res;
0078 }
0079 }
0080 }
0081
0082 DEFINE_L1T_PACKER(l1t::stage2::GlobalAlgBlkPacker);