File indexing completed on 2024-04-06 12:10:49
0001 #include "BMTFPackerOutput.h"
0002 #include <vector>
0003
0004
0005 namespace l1t {
0006 namespace stage2 {
0007 Blocks BMTFPackerOutput::pack(const edm::Event& event, const PackerTokens* toks) {
0008 int board_id = (int)board();
0009
0010 auto muonToken = static_cast<const BMTFTokens*>(toks)->getOutputMuonToken();
0011
0012 Blocks blocks;
0013 const int bmtfBlockID = 123;
0014 edm::LogInfo("L1T-BMTFPackerOutput") << "Will use setup:"
0015 << " isKalman->" << isKalman_;
0016
0017 edm::Handle<RegionalMuonCandBxCollection> muons;
0018 event.getByToken(muonToken, muons);
0019
0020 for (auto imu = muons->begin(); imu != muons->end(); imu++) {
0021 if (imu->processor() + 1 == board_id) {
0022 uint32_t firstWord(0), lastWord(0);
0023 RegionalMuonRawDigiTranslator::generatePackedDataWords(*imu, firstWord, lastWord, isKalman_, false, false);
0024 payloadMap_[bmtfBlockID].push_back(firstWord);
0025 payloadMap_[bmtfBlockID].push_back(lastWord);
0026 }
0027 }
0028
0029
0030 if (payloadMap_[bmtfBlockID].size() < 6) {
0031 unsigned int initialSize = payloadMap_[bmtfBlockID].size();
0032
0033 for (unsigned int j = 0; j < 3 - initialSize / 2; j++) {
0034 payloadMap_[bmtfBlockID].push_back(0);
0035 uint32_t nullMuon_word2 = 0 | ((65532 & 0xFFFF) << 3) | ((2 & 0x3) << 0);
0036 payloadMap_[bmtfBlockID].push_back(nullMuon_word2);
0037 }
0038 } else if (payloadMap_[bmtfBlockID].size() < 30 && payloadMap_[bmtfBlockID].size() > 6) {
0039 unsigned int initialSize = payloadMap_[bmtfBlockID].size();
0040
0041 for (unsigned int j = 0; j < 15 - initialSize / 2; j++) {
0042 payloadMap_[bmtfBlockID].push_back(0);
0043 uint32_t nullMuon_word2 = 0 | ((65532 & 0xFFFF) << 3) | ((2 & 0x3) << 0);
0044 payloadMap_[bmtfBlockID].push_back(nullMuon_word2);
0045 }
0046 }
0047
0048 Block block(bmtfBlockID, payloadMap_[bmtfBlockID]);
0049
0050 blocks.push_back(block);
0051
0052 return blocks;
0053 }
0054
0055 }
0056 }
0057 DEFINE_L1T_PACKER(l1t::stage2::BMTFPackerOutput);