Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 09:45:37

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