Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-09-27 23:16:39

0001 #include "EventFilter/L1TRawToDigi/plugins/PackerFactory.h"
0002 #include "EventFilter/L1TRawToDigi/plugins/PackingSetupFactory.h"
0003 #include "EventFilter/L1TRawToDigi/plugins/UnpackerFactory.h"
0004 
0005 #include "EventFilter/L1TRawToDigi/plugins/implementations_stage2/MuonPacker.h"
0006 #include "EventFilter/L1TRawToDigi/plugins/implementations_stage2/MuonUnpacker.h"
0007 #include "EventFilter/L1TRawToDigi/plugins/implementations_stage2/EGammaUnpacker.h"
0008 #include "EventFilter/L1TRawToDigi/plugins/implementations_stage2/EtSumUnpacker.h"
0009 #include "EventFilter/L1TRawToDigi/plugins/implementations_stage2/ZDCUnpacker.h"
0010 #include "EventFilter/L1TRawToDigi/plugins/implementations_stage2/JetUnpacker.h"
0011 #include "EventFilter/L1TRawToDigi/plugins/implementations_stage2/TauUnpacker.h"
0012 #include "EventFilter/L1TRawToDigi/plugins/implementations_stage2/CaloSummaryUnpacker.h"
0013 
0014 #include "GTSetup.h"
0015 
0016 const unsigned int l1t::stage2::zdc::nOutputFramePerBX = 6;
0017 
0018 namespace l1t {
0019   namespace stage2 {
0020 
0021     std::unique_ptr<PackerTokens> GTSetup::registerConsumes(const edm::ParameterSet& cfg, edm::ConsumesCollector& cc) {
0022       return std::unique_ptr<PackerTokens>(new GTTokens(cfg, cc));
0023     }
0024 
0025     void GTSetup::fillDescription(edm::ParameterSetDescription& desc) {
0026       desc.addOptional<edm::InputTag>("GtInputTag")->setComment("for stage2");
0027       desc.addOptional<edm::InputTag>("ExtInputTag")->setComment("for stage2");
0028       desc.addOptional<edm::InputTag>("MuonInputTag")->setComment("for stage2");
0029       desc.addOptional<edm::InputTag>("ShowerInputTag")->setComment("for Run3");
0030       desc.addOptional<edm::InputTag>("EGammaInputTag")->setComment("for stage2");
0031       desc.addOptional<edm::InputTag>("JetInputTag")->setComment("for stage2");
0032       desc.addOptional<edm::InputTag>("TauInputTag")->setComment("for stage2");
0033       desc.addOptional<edm::InputTag>("EtSumInputTag")->setComment("for stage2");
0034       desc.addOptional<edm::InputTag>("EtSumZDCInputTag")->setComment("for stage2");
0035       desc.addOptional<edm::InputTag>("CICADAScoreInputTag")->setComment("for 2024 and beyond");
0036     }
0037 
0038     PackerMap GTSetup::getPackers(int fed, unsigned int fw) {
0039       PackerMap res;
0040 
0041       if ((fed == 1404) || (fed == 1405)) {
0042         // Use board id 1 for packing
0043         //fed id 1404 corresponds to the production crate, 1405 to the test crate
0044         auto gt_muon_packer =
0045             static_pointer_cast<l1t::stage2::GTMuonPacker>(PackerFactory::get()->make("stage2::GTMuonPacker"));
0046         gt_muon_packer->setFed(fed);
0047         gt_muon_packer->setFwVersion(fw);
0048         res[{1, 1}] = {
0049             gt_muon_packer,
0050             PackerFactory::get()->make("stage2::GTEGammaPacker"),
0051             PackerFactory::get()->make("stage2::GTEtSumPacker"),
0052             PackerFactory::get()->make("stage2::GTEtSumZDCPacker"),
0053             PackerFactory::get()->make("stage2::GTJetPacker"),
0054             PackerFactory::get()->make("stage2::GTTauPacker"),
0055             PackerFactory::get()->make("stage2::GlobalAlgBlkPacker"),
0056             PackerFactory::get()->make("stage2::GlobalExtBlkPacker"),
0057             PackerFactory::get()->make("stage2::CaloSummaryPacker"),
0058         };
0059       }
0060 
0061       return res;
0062     }
0063 
0064     void GTSetup::registerProducts(edm::ProducesCollector prod) {
0065       prod.produces<MuonBxCollection>("Muon");
0066       prod.produces<MuonShowerBxCollection>("MuonShower");
0067       prod.produces<EGammaBxCollection>("EGamma");
0068       prod.produces<EtSumBxCollection>("EtSum");
0069       prod.produces<EtSumBxCollection>("EtSumZDC");
0070       prod.produces<JetBxCollection>("Jet");
0071       prod.produces<TauBxCollection>("Tau");
0072       prod.produces<CICADABxCollection>("CICADAScore");
0073       prod.produces<GlobalAlgBlkBxCollection>();
0074       prod.produces<GlobalExtBlkBxCollection>();
0075       for (int i = 2; i < 7; ++i) {  // Collections from boards 2-6
0076         prod.produces<MuonBxCollection>("Muon" + std::to_string(i));
0077         prod.produces<MuonShowerBxCollection>("MuonShower" + std::to_string(i));
0078         prod.produces<EGammaBxCollection>("EGamma" + std::to_string(i));
0079         prod.produces<EtSumBxCollection>("EtSum" + std::to_string(i));
0080         prod.produces<EtSumBxCollection>("EtSumZDC" + std::to_string(i));
0081         prod.produces<JetBxCollection>("Jet" + std::to_string(i));
0082         prod.produces<TauBxCollection>("Tau" + std::to_string(i));
0083       }
0084     }
0085 
0086     std::unique_ptr<UnpackerCollections> GTSetup::getCollections(edm::Event& e) {
0087       return std::unique_ptr<UnpackerCollections>(new GTCollections(e));
0088     }
0089 
0090     UnpackerMap GTSetup::getUnpackers(int fed, int board, int amc, unsigned int fw) {
0091       auto muon_unp =
0092           static_pointer_cast<l1t::stage2::MuonUnpacker>(UnpackerFactory::get()->make("stage2::MuonUnpacker"));
0093       auto egamma_unp =
0094           static_pointer_cast<l1t::stage2::EGammaUnpacker>(UnpackerFactory::get()->make("stage2::EGammaUnpacker"));
0095       auto etsum_unp =
0096           static_pointer_cast<l1t::stage2::EtSumUnpacker>(UnpackerFactory::get()->make("stage2::EtSumUnpacker"));
0097       auto zdc_unp = static_pointer_cast<l1t::stage2::ZDCUnpacker>(UnpackerFactory::get()->make("stage2::ZDCUnpacker"));
0098       auto jet_unp = static_pointer_cast<l1t::stage2::JetUnpacker>(UnpackerFactory::get()->make("stage2::JetUnpacker"));
0099       auto tau_unp = static_pointer_cast<l1t::stage2::TauUnpacker>(UnpackerFactory::get()->make("stage2::TauUnpacker"));
0100       auto caloSummary_unp = static_pointer_cast<l1t::stage2::CaloSummaryUnpacker>(
0101           UnpackerFactory::get()->make("stage2::CaloSummaryUnpacker"));
0102 
0103       if (fw >= 0x10f2) {
0104         etsum_unp = static_pointer_cast<l1t::stage2::EtSumUnpacker>(
0105             UnpackerFactory::get()->make("stage2::EtSumUnpacker_0x10010057"));
0106       }
0107 
0108       auto alg_unp = UnpackerFactory::get()->make("stage2::GlobalAlgBlkUnpacker");
0109       auto ext_unp = UnpackerFactory::get()->make("stage2::GlobalExtBlkUnpacker");
0110 
0111       muon_unp->setAlgoVersion(fw);
0112       muon_unp->setFedNumber(fed);
0113 
0114       muon_unp->setMuonCopy(amc - 1);
0115       egamma_unp->setEGammaCopy(amc - 1);
0116       etsum_unp->setEtSumCopy(amc - 1);
0117       zdc_unp->setEtSumZDCCopy(amc - 1);
0118       jet_unp->setJetCopy(amc - 1);
0119       tau_unp->setTauCopy(amc - 1);
0120 
0121       UnpackerMap res;
0122 
0123       if ((fed == 1404) || (fed == 1405)) {
0124         // From the rx buffers
0125         // fed id 1404 corresponds to the production crate, 1405 to the test crate
0126         res[0] = muon_unp;
0127         res[2] = muon_unp;
0128         res[4] = muon_unp;
0129         res[6] = muon_unp;
0130         res[8] = egamma_unp;
0131         res[10] = egamma_unp;
0132         res[12] = jet_unp;
0133         res[14] = jet_unp;
0134         res[16] = tau_unp;
0135         res[18] = tau_unp;
0136         res[20] = etsum_unp;
0137         res[22] = caloSummary_unp;
0138 
0139         if (amc == 1) {  // only unpack first uGT board for the external signal inputs (single copy)
0140           res[24] = ext_unp;
0141           //res[22] = empty link no data
0142           res[26] = ext_unp;
0143           res[28] = ext_unp;
0144           res[30] = ext_unp;
0145         }
0146 
0147         //From tx buffers
0148         res[33] = alg_unp;
0149         res[35] = alg_unp;
0150         res[37] = alg_unp;
0151         res[39] = alg_unp;
0152         res[41] = alg_unp;
0153         res[43] = alg_unp;
0154         res[45] = alg_unp;
0155         res[47] = alg_unp;
0156         res[49] = alg_unp;
0157 
0158         res[142] = zdc_unp;
0159       }
0160 
0161       return res;
0162     }
0163   }  // namespace stage2
0164 }  // namespace l1t
0165 
0166 DEFINE_L1T_PACKING_SETUP(l1t::stage2::GTSetup);