From b392d89416409924278603493fb0061824d48b0a Mon Sep 17 00:00:00 2001 From: gk199 Date: Wed, 9 Feb 2022 00:31:34 +0100 Subject: [PATCH 1/5] L1 emulator (Calo L1 6:1 LUT, L2 jet algo with hwQual), L1TNtuples addition of jet hwQual, fix comment in HcalFinegrainBit.cc --- .../CaloLayer1Packer.cc | 7 +++++- .../implementations_stage2/UCTCTP7RawData.h | 9 +++++++- .../L1TCaloLayer1/plugins/L1TCaloLayer1.cc | 22 +++++++++++++------ .../Stage2Layer2JetAlgorithmFirmwareImp1.cc | 10 ++++++++- .../interface/L1AnalysisL1UpgradeDataFormat.h | 2 ++ .../L1TNtuples/src/L1AnalysisL1Upgrade.cc | 1 + .../HcalTrigPrimAlgos/src/HcalFinegrainBit.cc | 2 +- 7 files changed, 42 insertions(+), 11 deletions(-) diff --git a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/CaloLayer1Packer.cc b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/CaloLayer1Packer.cc index 078613bcb8196..fa01fc91eea39 100644 --- a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/CaloLayer1Packer.cc +++ b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/CaloLayer1Packer.cc @@ -107,9 +107,14 @@ namespace l1t { HcalTrigTowerDetId id(cEta, cPhi); const auto tp = hcalTPGs->find(id); + + int fg_bits = 0; + for (int index = 0; index < 6; index++) + fg_bits += tp->SOI_fineGrain(index) << index; + if (tp != hcalTPGs->end()) { ctp7Data.setET(cType, negativeEta, iEta, iPhi, tp->SOI_compressedEt()); - ctp7Data.setFB(cType, negativeEta, iEta, iPhi, tp->SOI_fineGrain()); + ctp7Data.setFB(cType, negativeEta, iEta, iPhi, fg_bits); } } } diff --git a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/UCTCTP7RawData.h b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/UCTCTP7RawData.h index c8a859858bbfb..c083b311c2700 100644 --- a/EventFilter/L1TRawToDigi/plugins/implementations_stage2/UCTCTP7RawData.h +++ b/EventFilter/L1TRawToDigi/plugins/implementations_stage2/UCTCTP7RawData.h @@ -200,7 +200,14 @@ class UCTCTP7RawData { if (((cEta - 1) % 2) == 1) { tower += 4; } - data |= (fb & 0x1) << tower; + if (cType == HBHE) { + int depth = fb & 0b1; + int prompt = (fb & 0b10) >> 1; + int delay1 = (fb & 0b100) >> 2; + int delay2 = (fb & 0b1000) >> 3; + data |= (depth | ((!prompt) & (delay1 | delay2))) << tower; // bit[0] | (!bit[1] & (bit[2] | bit[3])) + } else + data |= (fb & 0x1) << tower; } } diff --git a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc index a417efb8c6530..108cefc05969d 100644 --- a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc +++ b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc @@ -209,16 +209,24 @@ void L1TCaloLayer1::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { } else if (absCaloEta <= 41) { int caloPhi = hcalTp.id().iphi(); int et = hcalTp.SOI_compressedEt(); - bool fg = hcalTp.t0().fineGrain(0); - bool fg2 = hcalTp.t0().fineGrain(1); + bool fg = hcalTp.t0().fineGrain(0); // depth + bool fg2 = hcalTp.t0().fineGrain(1); // prompt + bool fg3 = hcalTp.t0().fineGrain(2); // delay 1 + bool fg4 = hcalTp.t0().fineGrain(3); // delay 2 + bool fg5 = hcalTp.t0().fineGrain(4); // MIP + bool fg6 = hcalTp.t0().fineGrain(5); // MIP if (caloPhi <= 72) { UCTTowerIndex t = UCTTowerIndex(caloEta, caloPhi); uint32_t featureBits = 0; - if (fg) - featureBits |= 0b01; - // fg2 should only be set for HF - if (absCaloEta > 29 && fg2) - featureBits |= 0b10; + if (absCaloEta > 29) { + if (fg) + featureBits |= 0b01; + // fg2 should only be set for HF + if (absCaloEta > 29 && fg2) + featureBits |= 0b10; + } + if (absCaloEta <= 29) + featureBits |= (fg | ((!fg2) & (fg3 | fg4))); // depth | (!prompt & (delay1 | delay2)) if (!layer1->setHCALData(t, featureBits, et)) { LOG_ERROR << "caloEta = " << caloEta << "; caloPhi =" << caloPhi << std::endl; LOG_ERROR << "UCT: Failed loading an HCAL tower" << std::endl; diff --git a/L1Trigger/L1TCalorimeter/src/firmware/Stage2Layer2JetAlgorithmFirmwareImp1.cc b/L1Trigger/L1TCalorimeter/src/firmware/Stage2Layer2JetAlgorithmFirmwareImp1.cc index 326d0951be12d..52bf9dadbbfd6 100644 --- a/L1Trigger/L1TCalorimeter/src/firmware/Stage2Layer2JetAlgorithmFirmwareImp1.cc +++ b/L1Trigger/L1TCalorimeter/src/firmware/Stage2Layer2JetAlgorithmFirmwareImp1.cc @@ -102,6 +102,7 @@ void l1t::Stage2Layer2JetAlgorithmFirmwareImp1::create(const std::vector> 2; int iEt = seedEt; bool satSeed = false; bool vetoCandidate = false; @@ -117,6 +118,7 @@ void l1t::Stage2Layer2JetAlgorithmFirmwareImp1::create(const std::vector> 2; if (mask_[8 - (dphi + 4)][deta + 4] == 0) continue; @@ -145,8 +148,11 @@ void l1t::Stage2Layer2JetAlgorithmFirmwareImp1::create(const std::vector= 2) + jet.setHwQual(1); jet.setRawEt((short int)rawEt); jet.setSeedEt((short int)seedEt); jet.setTowerIEta((short int)caloEta); diff --git a/L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeDataFormat.h b/L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeDataFormat.h index 7f01488b42283..210da667eeff3 100644 --- a/L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeDataFormat.h +++ b/L1Trigger/L1TNtuples/interface/L1AnalysisL1UpgradeDataFormat.h @@ -92,6 +92,7 @@ namespace L1Analysis { jetIEt.clear(); jetIEta.clear(); jetIPhi.clear(); + jetHwQual.clear(); jetBx.clear(); jetTowerIPhi.clear(); jetTowerIEta.clear(); @@ -184,6 +185,7 @@ namespace L1Analysis { std::vector jetIEt; std::vector jetIEta; std::vector jetIPhi; + std::vector jetHwQual; std::vector jetBx; std::vector jetTowerIPhi; std::vector jetTowerIEta; diff --git a/L1Trigger/L1TNtuples/src/L1AnalysisL1Upgrade.cc b/L1Trigger/L1TNtuples/src/L1AnalysisL1Upgrade.cc index 0472960563a7e..a76d1173b350f 100644 --- a/L1Trigger/L1TNtuples/src/L1AnalysisL1Upgrade.cc +++ b/L1Trigger/L1TNtuples/src/L1AnalysisL1Upgrade.cc @@ -73,6 +73,7 @@ void L1Analysis::L1AnalysisL1Upgrade::SetJet(const edm::HandlehwPt()); l1upgrade_.jetIEta.push_back(it->hwEta()); l1upgrade_.jetIPhi.push_back(it->hwPhi()); + l1upgrade_.jetHwQual.push_back(it->hwQual()); l1upgrade_.jetBx.push_back(ibx); l1upgrade_.jetRawEt.push_back(it->rawEt()); l1upgrade_.jetSeedEt.push_back(it->seedEt()); diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalFinegrainBit.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalFinegrainBit.cc index 71ff163c0d32c..8af181da03873 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalFinegrainBit.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalFinegrainBit.cc @@ -92,7 +92,7 @@ std::bitset<6> HcalFinegrainBit::compute(const HcalFinegrainBit::TowerTDC& tower 1; // deep layers, 3+. If bit13 = 1, energy in deep layers. Require ADC > 0 to ensure valid hit in cell } - // very delayed (100000), slightly delayed (010000), prompt (001000), 2 reserved bits (000110), depth flag (000001) + // very delayed (001000), slightly delayed (000100), prompt (000010), depth flag (000001), 2 reserved bits (110000) if (DeepEnergy > 0 && EarlyEnergy == 0) result[0] = true; // 000001 else From 3ef9bf06aeff1a158d0c9058761b926f20a48137 Mon Sep 17 00:00:00 2001 From: gk199 Date: Thu, 10 Feb 2022 14:59:46 +0100 Subject: [PATCH 2/5] fixing unused variables, commenting on finegrain bit 5 and 6 (MIP, not for LLP trigger logic) --- L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc index 108cefc05969d..37a9355499e03 100644 --- a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc +++ b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc @@ -213,8 +213,7 @@ void L1TCaloLayer1::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { bool fg2 = hcalTp.t0().fineGrain(1); // prompt bool fg3 = hcalTp.t0().fineGrain(2); // delay 1 bool fg4 = hcalTp.t0().fineGrain(3); // delay 2 - bool fg5 = hcalTp.t0().fineGrain(4); // MIP - bool fg6 = hcalTp.t0().fineGrain(5); // MIP + // note that hcalTp.t0().fineGrain(4) and hcalTp.t0().fineGrain(5) are the reserved MIP bits (not used for LLP logic) if (caloPhi <= 72) { UCTTowerIndex t = UCTTowerIndex(caloEta, caloPhi); uint32_t featureBits = 0; From d894408c34bf850782f06facb025285da1f94e0b Mon Sep 17 00:00:00 2001 From: Gillian Kopp Date: Wed, 16 Feb 2022 09:19:28 -0500 Subject: [PATCH 3/5] Update L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc Co-authored-by: Andrea Perrotta --- L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc index 37a9355499e03..ebdc1550e2545 100644 --- a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc +++ b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc @@ -221,7 +221,7 @@ void L1TCaloLayer1::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { if (fg) featureBits |= 0b01; // fg2 should only be set for HF - if (absCaloEta > 29 && fg2) + if (fg2) featureBits |= 0b10; } if (absCaloEta <= 29) From 1082e79df68548fc9074c65e95f21975f0c2aac9 Mon Sep 17 00:00:00 2001 From: Gillian Kopp Date: Wed, 16 Feb 2022 09:21:16 -0500 Subject: [PATCH 4/5] Update L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc Co-authored-by: Andrea Perrotta --- L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc index ebdc1550e2545..f8122511cacc6 100644 --- a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc +++ b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc @@ -224,7 +224,7 @@ void L1TCaloLayer1::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { if (fg2) featureBits |= 0b10; } - if (absCaloEta <= 29) + else featureBits |= (fg | ((!fg2) & (fg3 | fg4))); // depth | (!prompt & (delay1 | delay2)) if (!layer1->setHCALData(t, featureBits, et)) { LOG_ERROR << "caloEta = " << caloEta << "; caloPhi =" << caloPhi << std::endl; From 93edb1a1094424671e84f634747bbaee0dfaf5f4 Mon Sep 17 00:00:00 2001 From: gk199 Date: Wed, 16 Feb 2022 15:51:45 +0100 Subject: [PATCH 5/5] fixing code format after accepting suggestion --- L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc index 37a9355499e03..9cf7aa6ecfc9a 100644 --- a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc +++ b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc @@ -221,10 +221,9 @@ void L1TCaloLayer1::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { if (fg) featureBits |= 0b01; // fg2 should only be set for HF - if (absCaloEta > 29 && fg2) + if (fg2) featureBits |= 0b10; - } - if (absCaloEta <= 29) + } else featureBits |= (fg | ((!fg2) & (fg3 | fg4))); // depth | (!prompt & (delay1 | delay2)) if (!layer1->setHCALData(t, featureBits, et)) { LOG_ERROR << "caloEta = " << caloEta << "; caloPhi =" << caloPhi << std::endl;