Back to home page

Project CMSSW displayed by LXR

 
 

    


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         //pad with zeros to fill out block; must do this for each BX
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   }  // namespace stage2
0046 }  // namespace l1t
0047 
0048 // DEFINE_L1T_PACKER(l1t::stage2::CaloEtSumZDCPacker);
0049 DEFINE_L1T_PACKER(l1t::stage2::GTEtSumZDCPacker);