Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:10:49

0001 #include "EventFilter/L1TRawToDigi/plugins/PackerFactory.h"
0002 #include "EventFilter/L1TRawToDigi/plugins/PackingSetupFactory.h"
0003 #include "EventFilter/L1TRawToDigi/plugins/UnpackerFactory.h"
0004 
0005 #include "CaloSetup.h"
0006 
0007 namespace l1t {
0008   namespace stage2 {
0009     std::unique_ptr<PackerTokens> CaloSetup::registerConsumes(const edm::ParameterSet& cfg,
0010                                                               edm::ConsumesCollector& cc) {
0011       return std::unique_ptr<PackerTokens>(new CaloTokens(cfg, cc));
0012     }
0013 
0014     void CaloSetup::fillDescription(edm::ParameterSetDescription& desc) {
0015       desc.addOptional<edm::InputTag>("TowerInputLabel")->setComment("for stage 2");
0016     }
0017 
0018     PackerMap CaloSetup::getPackers(int fed, unsigned int fw) {
0019       PackerMap res;
0020 
0021       if (fed == 1366) {
0022         // Use board id 1 for packing
0023         res[{1, 1}] = {//                     PackerFactory::get()->make("stage2::CaloTowerPacker"),
0024                        PackerFactory::get()->make("stage2::CaloEGammaPacker"),
0025                        PackerFactory::get()->make("stage2::CaloEtSumPacker"),
0026                        PackerFactory::get()->make("stage2::CaloJetPacker"),
0027                        PackerFactory::get()->make("stage2::CaloTauPacker")};
0028       }
0029 
0030       return res;
0031     }
0032 
0033     void CaloSetup::registerProducts(edm::ProducesCollector prod) {
0034       prod.produces<CaloTowerBxCollection>("CaloTower");
0035       prod.produces<EGammaBxCollection>("EGamma");
0036       prod.produces<EtSumBxCollection>("EtSum");
0037       prod.produces<JetBxCollection>("Jet");
0038       prod.produces<TauBxCollection>("Tau");
0039 
0040       prod.produces<EtSumBxCollection>("MP");
0041       prod.produces<JetBxCollection>("MP");
0042       prod.produces<EGammaBxCollection>("MP");
0043       prod.produces<TauBxCollection>("MP");
0044     }
0045 
0046     std::unique_ptr<UnpackerCollections> CaloSetup::getCollections(edm::Event& e) {
0047       return std::unique_ptr<UnpackerCollections>(new CaloCollections(e));
0048     }
0049 
0050     UnpackerMap CaloSetup::getUnpackers(int fed, int board, int amc, unsigned int fw) {
0051       UnpackerMap res;
0052       if (fed == 1366 || (fed == 1360 && board == 0x221B)) {
0053         auto egamma_unp = UnpackerFactory::get()->make("stage2::EGammaUnpacker");
0054         auto etsum_unp = UnpackerFactory::get()->make("stage2::EtSumUnpacker");
0055         auto jet_unp = UnpackerFactory::get()->make("stage2::JetUnpacker");
0056         auto tau_unp = UnpackerFactory::get()->make("stage2::TauUnpacker");
0057 
0058         if (fw >= 0x10010057) {
0059           etsum_unp = UnpackerFactory::get()->make("stage2::EtSumUnpacker_0x10010057");
0060         }
0061 
0062         res[9] = egamma_unp;
0063         res[11] = egamma_unp;
0064         res[13] = jet_unp;
0065         res[15] = jet_unp;
0066         res[17] = tau_unp;
0067         res[19] = tau_unp;
0068         res[21] = etsum_unp;
0069 
0070       } else if (fed == 1360 && board != 0x221B) {
0071         auto tower_unp = UnpackerFactory::get()->make("stage2::CaloTowerUnpacker");
0072         auto mp_unp = UnpackerFactory::get()->make("stage2::MPUnpacker");
0073         if (fw >= 0x1001000b) {
0074           mp_unp = UnpackerFactory::get()->make("stage2::MPUnpacker_0x1001000b");
0075         }
0076         if (fw >= 0x10010010) {
0077           mp_unp = UnpackerFactory::get()->make("stage2::MPUnpacker_0x10010010");
0078         }
0079         if (fw >= 0x10010033) {
0080           mp_unp = UnpackerFactory::get()->make("stage2::MPUnpacker_0x10010033");
0081         }
0082 
0083         res[121] = mp_unp;
0084         res[123] = mp_unp;
0085         res[125] = mp_unp;
0086         res[127] = mp_unp;
0087         res[129] = mp_unp;
0088         res[131] = mp_unp;
0089 
0090         for (int link = 0; link < 144; link += 2)
0091           res[link] = tower_unp;
0092       }
0093 
0094       return res;
0095     }
0096   }  // namespace stage2
0097 }  // namespace l1t
0098 
0099 DEFINE_L1T_PACKING_SETUP(l1t::stage2::CaloSetup);