From b6a725d583cf537e2c011d3c7892ba8efe041f72 Mon Sep 17 00:00:00 2001 From: "R. Alex Barbieri" Date: Fri, 18 Sep 2015 20:18:28 +0200 Subject: [PATCH] Stage 1 MET fixes --- .../src/PUSubtractionMethods.cc | 2 ++ .../Stage1Layer2EtSumAlgorithmImpHW.cc | 34 +++++++++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/L1Trigger/L1TCalorimeter/src/PUSubtractionMethods.cc b/L1Trigger/L1TCalorimeter/src/PUSubtractionMethods.cc index c50218bd5e40a..4d2a9485602db 100644 --- a/L1Trigger/L1TCalorimeter/src/PUSubtractionMethods.cc +++ b/L1Trigger/L1TCalorimeter/src/PUSubtractionMethods.cc @@ -130,6 +130,8 @@ namespace l1t { //std::cout << "eta: " << regionEta << " pusub: " << puSub << std::endl; int regionEtCorr = std::max(0, regionET - puSub); + if(regionET == 1023) + regionEtCorr = 1023; // do not subtract overflow regions ROOT::Math::LorentzVector > lorentz(0,0,0,0); CaloRegion newSubRegion(*&lorentz, 0, 0, regionEtCorr, regionEta, regionPhi, notCorrectedRegion->hwQual(), notCorrectedRegion->hwEtEm(), notCorrectedRegion->hwEtHad()); diff --git a/L1Trigger/L1TCalorimeter/src/firmware/Stage1Layer2EtSumAlgorithmImpHW.cc b/L1Trigger/L1TCalorimeter/src/firmware/Stage1Layer2EtSumAlgorithmImpHW.cc index 0d2e875f41622..9ecc2df09f88f 100644 --- a/L1Trigger/L1TCalorimeter/src/firmware/Stage1Layer2EtSumAlgorithmImpHW.cc +++ b/L1Trigger/L1TCalorimeter/src/firmware/Stage1Layer2EtSumAlgorithmImpHW.cc @@ -63,6 +63,26 @@ void l1t::Stage1Layer2EtSumAlgorithmImpHW::processEvent(const std::vector regionEtVect; std::vector regionHtVect; + // check the un-subtracted regions for overflow + bool regionOverflowEt(false); + bool regionOverflowHt(false); + for (auto& region : regions) { + if(region.hwEta() >= etSumEtaMinEt && region.hwEta() <= etSumEtaMaxEt) + { + if(region.hwPt() >= 1023) + { + regionOverflowEt = true; + } + } + if ( region.hwEta() >= etSumEtaMinHt && region.hwEta() <= etSumEtaMaxHt) + { + if(region.hwPt() >= 1023) + { + regionOverflowHt = true; + } + } + } + // hwPt() is the sum ET+HT in region, for stage 1 this will be // the region sum input to MET algorithm // In stage 2, we would move to hwEtEm() and hwEtHad() for separate MET/MHT @@ -108,13 +128,13 @@ void l1t::Stage1Layer2EtSumAlgorithmImpHW::processEvent(const std::vector= 0xfff) // MET 12 bits + if(MET >= 0xfff || regionOverflowEt) // MET 12 bits METqual = 1; - if(MHT >= 0x7f) // MHT 7 bits + if(MHT >= 0x7f || regionOverflowHt) // MHT 7 bits MHTqual = 1; - if(sumET >= 0xfff) + if(sumET >= 0xfff || regionOverflowEt) ETTqual = 1; - if(sumHT >= 0xfff) + if(sumHT >= 0xfff || regionOverflowHt) HTTqual = 1; @@ -171,16 +191,12 @@ l1t::Stage1Layer2EtSumAlgorithmImpHW::doSumAndMET(const std::vector sumEtaPos{}; std::array sumEtaNeg{}; - bool inputOverflow(false); for (const auto& r : regionEt) { if ( r.ieta < 11 ) sumEtaNeg[r.iphi] += r.et; else sumEtaPos[r.iphi] += r.et; - - if ( r.et >= (1<<10) ) - inputOverflow = true; } std::array sumEta{}; @@ -191,8 +207,6 @@ l1t::Stage1Layer2EtSumAlgorithmImpHW::doSumAndMET(const std::vector= (1<<12) || inputOverflow) ? (1<<12):0); - assert(sumEt>=0 && sumEt < (1<<13)); // 0, 20, 40, 60, 80 degrees std::array sumsForCos{};