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
0023 res[{1, 1}] = {
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 }
0097 }
0098
0099 DEFINE_L1T_PACKING_SETUP(l1t::stage2::CaloSetup);