File indexing completed on 2024-06-28 02:36:16
0001 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0002
0003 #include "EventFilter/L1TRawToDigi/plugins/PackerFactory.h"
0004 #include "EventFilter/L1TRawToDigi/plugins/PackingSetupFactory.h"
0005 #include "EventFilter/L1TRawToDigi/plugins/UnpackerFactory.h"
0006
0007 #include "CaloLayer1Setup.h"
0008
0009 #include "DataFormats/L1CaloTrigger/interface/CICADA.h"
0010
0011 namespace l1t {
0012 namespace stage2 {
0013 std::unique_ptr<PackerTokens> CaloLayer1Setup::registerConsumes(const edm::ParameterSet& cfg,
0014 edm::ConsumesCollector& cc) {
0015 return std::unique_ptr<PackerTokens>(new CaloLayer1Tokens(cfg, cc));
0016 }
0017
0018 void CaloLayer1Setup::fillDescription(edm::ParameterSetDescription& desc) {
0019 desc.addOptional<edm::InputTag>("ecalDigis");
0020 desc.addOptional<edm::InputTag>("hcalDigis");
0021 desc.addOptional<edm::InputTag>("caloRegions");
0022 }
0023
0024 PackerMap CaloLayer1Setup::getPackers(int fed, unsigned int fw) {
0025 PackerMap res;
0026
0027 if (fed == 1354) {
0028
0029 res[{2, 3}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0030 res[{3, 4}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0031 res[{5, 5}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0032 res[{8, 6}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0033 res[{9, 7}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0034 res[{11, 8}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0035 } else if (fed == 1356) {
0036
0037 res[{2, 15}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0038 res[{3, 16}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0039 res[{5, 17}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0040 res[{8, 0}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0041 res[{9, 1}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0042 res[{11, 2}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0043 } else if (fed == 1358) {
0044
0045 res[{2, 9}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0046 res[{3, 10}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0047 res[{5, 11}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0048 res[{8, 12}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0049 res[{9, 13}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0050 res[{11, 14}] = {PackerFactory::get()->make("stage2::CaloLayer1Packer")};
0051 }
0052
0053 return res;
0054 }
0055
0056 void CaloLayer1Setup::registerProducts(edm::ProducesCollector prod) {
0057 prod.produces<EcalTrigPrimDigiCollection>();
0058 prod.produces<HcalTrigPrimDigiCollection>();
0059 prod.produces<L1CaloRegionCollection>();
0060 for (int i = 0; i < 5; ++i) {
0061 prod.produces<EcalTrigPrimDigiCollection>("EcalDigisBx" + std::to_string(i + 1));
0062 }
0063 prod.produces<CICADABxCollection>("CICADAScore");
0064 }
0065
0066 std::unique_ptr<UnpackerCollections> CaloLayer1Setup::getCollections(edm::Event& e) {
0067 return std::unique_ptr<UnpackerCollections>(new CaloLayer1Collections(e));
0068 }
0069
0070 UnpackerMap CaloLayer1Setup::getUnpackers(int fed, int board, int amc, unsigned int fw) {
0071 UnpackerMap res;
0072 LogDebug("L1T") << "CaloLayer1Setup: about to pick an unpacker for fed " << fed << " board " << board << " amc "
0073 << amc << " fw 0x" << std::hex << fw << std::dec;
0074 if (fed == 1354 || fed == 1356 || fed == 1358) {
0075 if (board < 18) {
0076 res[0] = UnpackerFactory::get()->make("stage2::CaloLayer1Unpacker");
0077 }
0078 if (fed == 1356 && amc == 7) {
0079 res[0] = UnpackerFactory::get()->make("stage2::CICADAUnpacker");
0080 }
0081 }
0082
0083 return res;
0084 }
0085 }
0086 }
0087
0088 DEFINE_L1T_PACKING_SETUP(l1t::stage2::CaloLayer1Setup);