File indexing completed on 2024-04-06 12:10:53
0001 #include "FWCore/Framework/interface/Event.h"
0002 #include "EventFilter/L1TRawToDigi/plugins/PackerFactory.h"
0003
0004 #include "CaloTokens.h"
0005
0006 #include "L1TStage2Layer2Constants.h"
0007 #include "ZDCPacker.h"
0008 #include "GTSetup.h"
0009
0010 namespace l1t {
0011 namespace stage2 {
0012 Blocks ZDCPacker::pack(const edm::Event& event, const PackerTokens* toks) {
0013 edm::Handle<EtSumBxCollection> ZDCSums;
0014 event.getByToken(static_cast<const CommonTokens*>(toks)->getEtSumZDCToken(), ZDCSums);
0015
0016 std::vector<uint32_t> load;
0017 int nBx = 0;
0018
0019 for (int i = ZDCSums->getFirstBX(); i <= ZDCSums->getLastBX(); ++i) {
0020 int zdc_mask = 0x3FF;
0021 uint32_t empty_word = 0;
0022 uint32_t zdcm_word = 0;
0023 uint32_t zdcp_word = 0;
0024
0025 for (auto j = ZDCSums->begin(i); j != ZDCSums->end(i); ++j) {
0026 uint32_t word = std::min(j->hwPt(), zdc_mask);
0027
0028 if (j->getType() == l1t::EtSum::kZDCM)
0029 zdcm_word |= word;
0030 if (j->getType() == l1t::EtSum::kZDCP)
0031 zdcp_word |= word;
0032 }
0033 load.push_back(empty_word);
0034 load.push_back(zdcm_word);
0035 load.push_back(zdcp_word);
0036
0037
0038 while (load.size() - nBx * zdc::nOutputFramePerBX < zdc::nOutputFramePerBX)
0039 load.push_back(0);
0040 nBx++;
0041 }
0042
0043 return {Block(b1_, load)};
0044 }
0045 }
0046 }
0047
0048
0049 DEFINE_L1T_PACKER(l1t::stage2::GTEtSumZDCPacker);