From 40329615baba738164d9f996df831cb9bf783033 Mon Sep 17 00:00:00 2001 From: Matthias Wolf Date: Wed, 7 Sep 2016 14:40:20 +0200 Subject: [PATCH 01/11] Initial hookup of the DB parameters. --- .../interface/HcalTriggerPrimitiveAlgo.h | 29 ++++++++---- .../src/HcalTriggerPrimitiveAlgo.cc | 46 +++++++++++++++---- .../python/hcaltpdigi_cfi.py | 15 +++--- .../src/HcalTrigPrimDigiProducer.cc | 9 ++-- 4 files changed, 69 insertions(+), 30 deletions(-) diff --git a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h index 8e313e64f947c..c76c647fcaf27 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h +++ b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h @@ -3,15 +3,17 @@ #include "DataFormats/HcalDetId/interface/HcalTrigTowerDetId.h" #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" -#include "Geometry/HcalTowerAlgo/interface/HcalTrigTowerGeometry.h" -#include "CalibFormats/CaloObjects/interface/CaloSamples.h" -#include "CalibFormats/CaloObjects/interface/IntegerCaloSamples.h" #include "CalibCalorimetry/HcalTPGAlgos/interface/HcaluLUTTPGCoder.h" #include "CalibFormats/CaloTPG/interface/HcalTPGCompressor.h" +#include "CalibFormats/HcalObjects/interface/HcalDbService.h" #include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h" + #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" -#include "SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureHFEMBit.h"//cuts based on short and long energy deposited. + +#include "Geometry/HcalTowerAlgo/interface/HcalTrigTowerGeometry.h" + +#include "SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureHFEMBit.h" #include "SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFinegrainBit.h" #include @@ -23,6 +25,7 @@ class IntegerCaloSamples; class HcalTriggerPrimitiveAlgo { public: struct TPParameters { + uint32_t hbhe_fg_version; uint64_t hf_tdc_mask; uint32_t hf_adc_threshold; uint32_t hf_fg_threshold; @@ -38,6 +41,7 @@ class HcalTriggerPrimitiveAlgo { template void run(const HcalTPGCoder* incoder, const HcalTPGCompressor* outcoder, + const HcalDbService* conditions, HcalTrigPrimDigiCollection& result, const HcalTrigTowerGeometry* trigTowerGeometry, float rctlsb, const HcalFeatureBit* LongvrsShortCut, @@ -73,7 +77,8 @@ class HcalTriggerPrimitiveAlgo { void setRCTScaleShift(int); void setUpgradeFlags(bool hb, bool he, bool hf); - void overrideParameters(unsigned int hf_tdc_mask, + void overrideParameters(unsigned int hbhe_fg_version, + unsigned int hf_tdc_mask, unsigned int hf_adc_threshold, unsigned int hf_fg_threshold); @@ -89,6 +94,7 @@ class HcalTriggerPrimitiveAlgo { void addUpgradeFG(const HcalTrigTowerDetId& id, int depth, const std::vector>& bits); bool validUpgradeFG(const HcalTrigTowerDetId& id, int depth) const; + bool validChannel(const QIE10DataFrame& digi, int ts) const; /// adds the actual RecHits void analyze(IntegerCaloSamples & samples, HcalTriggerPrimitiveDigi & result); @@ -114,6 +120,7 @@ class HcalTriggerPrimitiveAlgo { // Member initialized by constructor const HcaluLUTTPGCoder* incoder_; const HcalTPGCompressor* outcoder_; + const HcalDbService* conditions_; double theThreshold; bool peakfind_; std::vector weights_; @@ -206,14 +213,16 @@ class HcalTriggerPrimitiveAlgo { template void HcalTriggerPrimitiveAlgo::run(const HcalTPGCoder* incoder, const HcalTPGCompressor* outcoder, + const HcalDbService* conditions, HcalTrigPrimDigiCollection& result, const HcalTrigTowerGeometry* trigTowerGeometry, float rctlsb, const HcalFeatureBit* LongvrsShortCut, const Digis&... digis) { theTrigTowerGeometry = trigTowerGeometry; - - incoder_=dynamic_cast(incoder); - outcoder_=outcoder; + + incoder_ = dynamic_cast(incoder); + outcoder_ = outcoder; + conditions_ = conditions; theSumMap.clear(); theTowerMapFGSum.clear(); @@ -227,7 +236,9 @@ void HcalTriggerPrimitiveAlgo::run(const HcalTPGCoder* incoder, addDigis(digis...); // Prepare the fine-grain calculation algorithm for HB/HE - int version = 0; + int version = conditions_->getHcalTPParameters()->getFGVersionHBHE(); + if (override_parameters_) + version = override_parameters_->hbhe_fg_version; HcalFinegrainBit fg_algo(version); // VME produces additional bits on the front used by lumi but not the diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc index 2d9f22ec30363..48900fa0dfae6 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc @@ -1,16 +1,22 @@ #include "SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "CalibFormats/CaloObjects/interface/IntegerCaloSamples.h" +#include "CondFormats/HcalObjects/interface/HcalTPParameters.h" +#include "CondFormats/HcalObjects/interface/HcalTPChannelParameters.h" #include "DataFormats/HcalDetId/interface/HcalDetId.h" -#include "Geometry/HcalTowerAlgo/interface/HcalTrigTowerGeometry.h" -#include "DataFormats/HcalDetId/interface/HcalTrigTowerDetId.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" #include "DataFormats/HcalDetId/interface/HcalElectronicsId.h" + #include "EventFilter/HcalRawToDigi/interface/HcalDCCHeader.h" #include "EventFilter/HcalRawToDigi/interface/HcalHTRData.h" -#include "SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureHFEMBit.h"//cuts based on short and long energy deposited. + +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "Geometry/HcalTowerAlgo/interface/HcalTrigTowerGeometry.h" + #include + using namespace std; HcalTriggerPrimitiveAlgo::HcalTriggerPrimitiveAlgo( bool pf, const std::vector& w, int latency, @@ -57,11 +63,13 @@ HcalTriggerPrimitiveAlgo::setUpgradeFlags(bool hb, bool he, bool hf) void -HcalTriggerPrimitiveAlgo::overrideParameters(unsigned int hf_tdc_mask, +HcalTriggerPrimitiveAlgo::overrideParameters(unsigned int hbhe_fg_version, + unsigned int hf_tdc_mask, unsigned int hf_adc_threshold, unsigned int hf_fg_threshold) { auto parameters = new TPParameters(); + parameters->hbhe_fg_version = hbhe_fg_version; parameters->hf_tdc_mask = hf_tdc_mask; parameters->hf_adc_threshold = hf_adc_threshold; parameters->hf_fg_threshold = hf_fg_threshold; @@ -513,6 +521,28 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2016( } +bool +HcalTriggerPrimitiveAlgo::validChannel(const QIE10DataFrame& digi, int ts) const +{ + auto mask = conditions_->getHcalTPChannelParameter(HcalDetId(digi.id()))->getMask(); + if (mask) + return false; + + auto parameters = conditions_->getHcalTPParameters(); + auto adc_threshold = parameters->getADCThresholdHF(); + auto tdc_mask = parameters->getTDCMaskHF(); + + if (override_parameters_) { + adc_threshold = override_parameters_->hf_adc_threshold; + tdc_mask = override_parameters_->hf_tdc_mask; + } + + if (digi[ts].adc() < adc_threshold) + return true; + + return (1ul << (digi[ts].le_tdc() - 1)) & tdc_mask; +} + void HcalTriggerPrimitiveAlgo::analyzeHF2017( const IntegerCaloSamples& samples, HcalTriggerPrimitiveDigi& result, const int hf_lumi_shift, const HcalFeatureBit* hcalfem) @@ -550,8 +580,7 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2017( for (auto i: {0, 2}) { if (idx < details[i].samples.size()) { - if ((unsigned int) details[i].digi[idx].adc() < override_parameters_->hf_adc_threshold - or (1ul << (details[i].digi[idx].le_tdc() - 1)) & override_parameters_->hf_tdc_mask) { + if (validChannel(details[i].digi, idx)) { long_fiber_val += details[i].samples[idx]; saturated = saturated || (details[i].samples[idx] == QIE10_LINEARIZATION_ET); ++long_fiber_count; @@ -560,8 +589,7 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2017( } for (auto i: {1, 3}) { if (idx < details[i].samples.size()) { - if ((unsigned int) details[i].digi[idx].adc() < override_parameters_->hf_adc_threshold - or (1ul << (details[i].digi[idx].le_tdc() - 1)) & override_parameters_->hf_tdc_mask) { + if (validChannel(details[i].digi, idx)) { short_fiber_val += details[i].samples[idx]; saturated = saturated || (details[i].samples[idx] == QIE10_LINEARIZATION_ET); ++short_fiber_count; diff --git a/SimCalorimetry/HcalTrigPrimProducers/python/hcaltpdigi_cfi.py b/SimCalorimetry/HcalTrigPrimProducers/python/hcaltpdigi_cfi.py index 3e8f700942fb8..80f5d6c1edeb4 100644 --- a/SimCalorimetry/HcalTrigPrimProducers/python/hcaltpdigi_cfi.py +++ b/SimCalorimetry/HcalTrigPrimProducers/python/hcaltpdigi_cfi.py @@ -29,14 +29,13 @@ upgradeHB = cms.bool(False), upgradeHE = cms.bool(False), - parameters = cms.untracked.PSet( - TDCMask=cms.uint64(0xFFFFFFFFFFFFFFFF), - ADCThreshold=cms.uint32(0), - FGThreshold=cms.uint32(12) - ), - - -# + # parameters = cms.untracked.PSet( + # FGVersionHBHE=cms.uint32(0), + # TDCMask=cms.uint64(0xFFFFFFFFFFFFFFFF), + # ADCThreshold=cms.uint32(0), + # FGThreshold=cms.uint32(12) + # ), + #vdouble weights = { -1, -1, 1, 1} //low lumi algo # Input digi label (_must_ be without zero-suppression!) inputLabel = cms.VInputTag(cms.InputTag('simHcalUnsuppressedDigis'), diff --git a/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc b/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc index 3be317a2b535f..ec8c4fe32b413 100644 --- a/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc +++ b/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc @@ -52,7 +52,8 @@ HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer(const edm::ParameterSet& ps) if (ps.exists("parameters")) { auto pset = ps.getUntrackedParameter("parameters"); - theAlgo_.overrideParameters(pset.getParameter("TDCMask"), + theAlgo_.overrideParameters(pset.getParameter("FGVersionHBHE"), + pset.getParameter("TDCMask"), pset.getParameter("ADCThreshold"), pset.getParameter("FGThreshold")); } @@ -196,13 +197,13 @@ void HcalTrigPrimDigiProducer::produce(edm::Event& iEvent, const edm::EventSetup // Step C: Invoke the algorithm, passing in inputs and getting back outputs. if (legacy_ and not upgrade_) { - theAlgo_.run(inputCoder.product(), outTranscoder->getHcalCompressor().get(), + theAlgo_.run(inputCoder.product(), outTranscoder->getHcalCompressor().get(), pSetup.product(), *result, &(*pG), rctlsb, hfembit, *hbheDigis, *hfDigis); } else if (legacy_ and upgrade_) { - theAlgo_.run(inputCoder.product(), outTranscoder->getHcalCompressor().get(), + theAlgo_.run(inputCoder.product(), outTranscoder->getHcalCompressor().get(), pSetup.product(), *result, &(*pG), rctlsb, hfembit, *hbheDigis, *hfDigis, *hbheUpDigis, *hfUpDigis); } else { - theAlgo_.run(inputCoder.product(), outTranscoder->getHcalCompressor().get(), + theAlgo_.run(inputCoder.product(), outTranscoder->getHcalCompressor().get(), pSetup.product(), *result, &(*pG), rctlsb, hfembit, *hbheUpDigis, *hfUpDigis); } From d8551c545786281d96f8ccb0ebc784cbbee8990e Mon Sep 17 00:00:00 2001 From: Matthias Wolf Date: Wed, 7 Sep 2016 22:36:53 +0200 Subject: [PATCH 02/11] Use a PSet to overwrite parameters. Allows for finer-grain overwriting, and still taking some parameters from the database. --- .../interface/HcalTriggerPrimitiveAlgo.h | 18 +++--------- .../src/HcalTriggerPrimitiveAlgo.cc | 28 +++++-------------- .../src/HcalTrigPrimDigiProducer.cc | 5 +--- 3 files changed, 12 insertions(+), 39 deletions(-) diff --git a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h index c76c647fcaf27..42a54fb5b143a 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h +++ b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h @@ -24,13 +24,6 @@ class IntegerCaloSamples; class HcalTriggerPrimitiveAlgo { public: - struct TPParameters { - uint32_t hbhe_fg_version; - uint64_t hf_tdc_mask; - uint32_t hf_adc_threshold; - uint32_t hf_fg_threshold; - }; - HcalTriggerPrimitiveAlgo(bool pf, const std::vector& w, int latency, uint32_t FG_threshold, uint32_t FG_HF_threshold, uint32_t ZS_threshold, int numberOfSamples, int numberOfPresamples, @@ -77,10 +70,7 @@ class HcalTriggerPrimitiveAlgo { void setRCTScaleShift(int); void setUpgradeFlags(bool hb, bool he, bool hf); - void overrideParameters(unsigned int hbhe_fg_version, - unsigned int hf_tdc_mask, - unsigned int hf_adc_threshold, - unsigned int hf_fg_threshold); + void overrideParameters(const edm::ParameterSet& ps) { override_parameters_ = ps; }; private: @@ -196,7 +186,7 @@ class HcalTriggerPrimitiveAlgo { bool upgrade_he_ = false; bool upgrade_hf_ = false; - std::unique_ptr override_parameters_; + edm::ParameterSet override_parameters_; static const int HBHE_OVERLAP_TOWER = 16; static const int LAST_FINEGRAIN_DEPTH = 6; @@ -237,8 +227,8 @@ void HcalTriggerPrimitiveAlgo::run(const HcalTPGCoder* incoder, // Prepare the fine-grain calculation algorithm for HB/HE int version = conditions_->getHcalTPParameters()->getFGVersionHBHE(); - if (override_parameters_) - version = override_parameters_->hbhe_fg_version; + if (override_parameters_.exists("FGVersionHBHE")) + version = override_parameters_.getParameter("FGVersionHBHE"); HcalFinegrainBit fg_algo(version); // VME produces additional bits on the front used by lumi but not the diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc index 48900fa0dfae6..aa905e0f422e9 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc @@ -12,6 +12,7 @@ #include "EventFilter/HcalRawToDigi/interface/HcalHTRData.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "Geometry/HcalTowerAlgo/interface/HcalTrigTowerGeometry.h" @@ -35,7 +36,8 @@ HcalTriggerPrimitiveAlgo::HcalTriggerPrimitiveAlgo( bool pf, const std::vectorhbhe_fg_version = hbhe_fg_version; - parameters->hf_tdc_mask = hf_tdc_mask; - parameters->hf_adc_threshold = hf_adc_threshold; - parameters->hf_fg_threshold = hf_fg_threshold; - - override_parameters_ = std::unique_ptr(parameters); -} - - void HcalTriggerPrimitiveAlgo::addSignal(const HBHEDataFrame & frame) { // TODO: Need to add support for seperate 28, 29 in HE //Hack for 300_pre10, should be removed. @@ -532,10 +518,10 @@ HcalTriggerPrimitiveAlgo::validChannel(const QIE10DataFrame& digi, int ts) const auto adc_threshold = parameters->getADCThresholdHF(); auto tdc_mask = parameters->getTDCMaskHF(); - if (override_parameters_) { - adc_threshold = override_parameters_->hf_adc_threshold; - tdc_mask = override_parameters_->hf_tdc_mask; - } + if (override_parameters_.exists("ADCThresholdHF")) + adc_threshold = override_parameters_.getParameter("ADCThresholdHF"); + if (override_parameters_.exists("TDCMaskHF")) + adc_threshold = override_parameters_.getParameter("TDCMaskHF"); if (digi[ts].adc() < adc_threshold) return true; diff --git a/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc b/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc index ec8c4fe32b413..807d73b86cf9b 100644 --- a/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc +++ b/SimCalorimetry/HcalTrigPrimProducers/src/HcalTrigPrimDigiProducer.cc @@ -52,10 +52,7 @@ HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer(const edm::ParameterSet& ps) if (ps.exists("parameters")) { auto pset = ps.getUntrackedParameter("parameters"); - theAlgo_.overrideParameters(pset.getParameter("FGVersionHBHE"), - pset.getParameter("TDCMask"), - pset.getParameter("ADCThreshold"), - pset.getParameter("FGThreshold")); + theAlgo_.overrideParameters(ps); } theAlgo_.setUpgradeFlags(upgrades[0], upgrades[1], upgrades[2]); From 9a4ef3a1eac3384f6b7712770ecb3867f49edab7 Mon Sep 17 00:00:00 2001 From: Matthias Wolf Date: Thu, 22 Sep 2016 11:43:30 +0200 Subject: [PATCH 03/11] Don't use DB parameters for the FG algo before 2017. --- .../HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h index 42a54fb5b143a..7c72b611e435b 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h +++ b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h @@ -226,7 +226,9 @@ void HcalTriggerPrimitiveAlgo::run(const HcalTPGCoder* incoder, addDigis(digis...); // Prepare the fine-grain calculation algorithm for HB/HE - int version = conditions_->getHcalTPParameters()->getFGVersionHBHE(); + int version = 0; + if (upgrade_he_ or upgrade_hb_) + version = conditions_->getHcalTPParameters()->getFGVersionHBHE(); if (override_parameters_.exists("FGVersionHBHE")) version = override_parameters_.getParameter("FGVersionHBHE"); HcalFinegrainBit fg_algo(version); From f2911cc4bf46812239c025fd4487d4eb42b1e2db Mon Sep 17 00:00:00 2001 From: Matthias Wolf Date: Thu, 22 Sep 2016 13:09:27 +0200 Subject: [PATCH 04/11] Fix variable name. --- .../HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc index aa905e0f422e9..8648c370ca5d4 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc @@ -521,7 +521,7 @@ HcalTriggerPrimitiveAlgo::validChannel(const QIE10DataFrame& digi, int ts) const if (override_parameters_.exists("ADCThresholdHF")) adc_threshold = override_parameters_.getParameter("ADCThresholdHF"); if (override_parameters_.exists("TDCMaskHF")) - adc_threshold = override_parameters_.getParameter("TDCMaskHF"); + tdc_mask = override_parameters_.getParameter("TDCMaskHF"); if (digi[ts].adc() < adc_threshold) return true; From 31e0c3a473a3b49ca2e17c7ee2a6f29e4376f36e Mon Sep 17 00:00:00 2001 From: Matthias Wolf Date: Thu, 22 Sep 2016 13:26:54 +0200 Subject: [PATCH 05/11] Fix shifting too little. --- .../HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc index 8648c370ca5d4..3480ea4c2a5d2 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc @@ -526,7 +526,7 @@ HcalTriggerPrimitiveAlgo::validChannel(const QIE10DataFrame& digi, int ts) const if (digi[ts].adc() < adc_threshold) return true; - return (1ul << (digi[ts].le_tdc() - 1)) & tdc_mask; + return (1ul << digi[ts].le_tdc()) & tdc_mask; } void HcalTriggerPrimitiveAlgo::analyzeHF2017( From 25fb1d1ee5983db4b0903ea52e510bc3a61a3dfb Mon Sep 17 00:00:00 2001 From: Matthias Wolf Date: Fri, 30 Sep 2016 23:56:10 +0200 Subject: [PATCH 06/11] Check channel validity when adding signal. --- .../interface/HcalTriggerPrimitiveAlgo.h | 1 + .../src/HcalTriggerPrimitiveAlgo.cc | 23 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h index 7c72b611e435b..0e2402036a549 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h +++ b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h @@ -154,6 +154,7 @@ class HcalTriggerPrimitiveAlgo { struct HFUpgradeDetails { IntegerCaloSamples samples; QIE10DataFrame digi; + std::vector validity; }; typedef std::map>> HFUpgradeDetailMap; HFUpgradeDetailMap theHFUpgradeDetailMap; diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc index 3480ea4c2a5d2..cdb90af66a737 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc @@ -202,6 +202,9 @@ HcalTriggerPrimitiveAlgo::addSignal(const QIE10DataFrame& frame) auto& details = theHFUpgradeDetailMap[id][fid.maskDepth()]; details[fid.depth() - 1].samples = samples; details[fid.depth() - 1].digi = frame; + details[fid.depth() - 1].validity.resize(frame.samples()); + for (int idx = 0; idx < frame.samples(); ++idx) + details[fid.depth() - 1].validity[idx] = validChannel(frame, idx); } } @@ -565,21 +568,17 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2017( bool saturated = false; for (auto i: {0, 2}) { - if (idx < details[i].samples.size()) { - if (validChannel(details[i].digi, idx)) { - long_fiber_val += details[i].samples[idx]; - saturated = saturated || (details[i].samples[idx] == QIE10_LINEARIZATION_ET); - ++long_fiber_count; - } + if (idx < details[i].samples.size() and details[i].validity[idx]) { + long_fiber_val += details[i].samples[idx]; + saturated = saturated || (details[i].samples[idx] == QIE10_LINEARIZATION_ET); + ++long_fiber_count; } } for (auto i: {1, 3}) { - if (idx < details[i].samples.size()) { - if (validChannel(details[i].digi, idx)) { - short_fiber_val += details[i].samples[idx]; - saturated = saturated || (details[i].samples[idx] == QIE10_LINEARIZATION_ET); - ++short_fiber_count; - } + if (idx < details[i].samples.size() and details[i].validity[idx]) { + short_fiber_val += details[i].samples[idx]; + saturated = saturated || (details[i].samples[idx] == QIE10_LINEARIZATION_ET); + ++short_fiber_count; } } From 521394e50cd82bd526e5caa84991487c78c984f4 Mon Sep 17 00:00:00 2001 From: Matthias Wolf Date: Sat, 1 Oct 2016 00:00:10 +0200 Subject: [PATCH 07/11] Add MinBias Fine-Grain bit for 2017. --- .../src/HcalTriggerPrimitiveAlgo.cc | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc index cdb90af66a737..95ae3e53652a9 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc @@ -549,7 +549,7 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2017( return; } - std::vector finegrain(numberOfSamples_, false); + std::vector> finegrain(numberOfSamples_, false); // Set up out output of IntergerCaloSamples IntegerCaloSamples output(samples.id(), numberOfSamples_); @@ -599,11 +599,19 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2017( output[ibin] += sum; } - // int ADCLong = details.LongDigi[ibin].adc(); - // int ADCShort = details.ShortDigi[ibin].adc(); - // if(hcalfem != 0) - // { - // finegrain[ibin] = (finegrain[ibin] || hcalfem->fineGrainbit(ADCShort, details.ShortDigi.id(), details.ShortDigi[ibin].capid(), ADCLong, details.LongDigi.id(), details.LongDigi[ibin].capid())); + for (const auto& detail: details) { + if (detail.validity[idx] and HcalDetId(detail.digi.id()).ietaAbs() != 29) { + finegrain[ibin][1] = finegrain[ibin][1] or (detail.digi[idx].adc() > (int) FG_HF_threshold_); + } + } + + // if (HCALFEM != 0) { + // finegrain[ibin][0] = HCALFEM->fineGrainbit( + // ADCShort, details.ShortDigi.id(), + // details.ShortDigi[ibin].capid(), + // ADCLong, details.LongDigi.id(), + // details.LongDigi[ibin].capid() + // ); // } } } @@ -611,7 +619,10 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2017( for (int bin = 0; bin < numberOfSamples_; ++bin) { output[bin] = min({(unsigned int) QIE10_MAX_LINEARIZATION_ET, output[bin]}); } - outcoder_->compress(output, finegrain, result); + std::vector finegrain_converted; + for (const auto& fg: finegrain) + finegrain_converted.push_back(fg.to_ulong()); + outcoder_->compress(output, finegrain_converted, result); } void HcalTriggerPrimitiveAlgo::runZS(HcalTrigPrimDigiCollection & result){ From 0a3d7c0e2ea447715a21418a58fb1962db5ca691 Mon Sep 17 00:00:00 2001 From: Matthias Wolf Date: Mon, 3 Oct 2016 15:36:43 +0200 Subject: [PATCH 08/11] Refactor the HCAL HF EM bit. Simplify code; Don't de- and then re-construct a dataframe, just pass it through. Unify the energy reconstruction in preparation for dual-anode readout. --- .../interface/HcalFeatureHFEMBit.h | 20 ++++--- .../src/HcalFeatureHFEMBit.cc | 58 ++++++++----------- .../src/HcalTriggerPrimitiveAlgo.cc | 6 +- 3 files changed, 35 insertions(+), 49 deletions(-) diff --git a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureHFEMBit.h b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureHFEMBit.h index 60e0b33ffd0ec..aa3924f64c7ff 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureHFEMBit.h +++ b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureHFEMBit.h @@ -1,18 +1,20 @@ #ifndef SimCalorimetry_HcalTPGAlgos_interface_HcalFeatureHFEMBit_h_included #define SimCalorimetry_HcalTPGAlgos_interface_HcalFeatureHFEMBit_h_included 1 - #include "SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureBit.h" #include "CalibFormats/HcalObjects/interface/HcalDbService.h" class HcalFeatureHFEMBit : public HcalFeatureBit { -public: - HcalFeatureHFEMBit(double ShortMinE, double LongMinE, double ShortLongCutSlope, double ShortLongCutOffset, const HcalDbService& conditions); - ~HcalFeatureHFEMBit(); - virtual bool fineGrainbit(int ADCShort, HcalDetId Sid, int CapIdS, int ADCLong, HcalDetId Lid, int CapIdL) const;//cuts based on energy - //depoisted in the long and short fibers -private: - double ShortMinE_, LongMinE_, ShortLongCutSlope_, ShortLongCutOffset_; - const HcalDbService& conditions_; + public: + HcalFeatureHFEMBit(double ShortMinE, double LongMinE, double ShortLongCutSlope, double ShortLongCutOffset, const HcalDbService& conditions); + ~HcalFeatureHFEMBit(); + + // Provides FG bit based on energy cuts in long & short fibers. + virtual bool fineGrainbit(const HFDataFrame& shortDigi, const HFDataFrame& longDigi, int idx) const; + private: + float getE(const HFDataFrame& f, int idx) const; + + double ShortMinE_, LongMinE_, ShortLongCutSlope_, ShortLongCutOffset_; + const HcalDbService& conditions_; }; #endif diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalFeatureHFEMBit.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalFeatureHFEMBit.cc index 5418c1b83a036..b806cbb58704e 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalFeatureHFEMBit.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalFeatureHFEMBit.cc @@ -21,48 +21,36 @@ HcalFeatureHFEMBit::HcalFeatureHFEMBit(double ShortMinE, double LongMinE, HcalFeatureHFEMBit::~HcalFeatureHFEMBit() { } -bool HcalFeatureHFEMBit::fineGrainbit(int ADCShort, HcalDetId Sid, int CapIdS, int ADCLong, HcalDetId Lid, int CapIdL) const//pass det id +float +HcalFeatureHFEMBit::getE(const HFDataFrame& f, int idx) const { + const HcalDetId id(f.id()); + const HcalCalibrations& calibrations = conditions_.getHcalCalibrations(id); + const auto* coder = conditions_.getHcalCoder(id); + const auto* shape = conditions_.getHcalShape(coder); - float ShortE = 0; //holds deposited energy - float LongE = 0; + HcalCoderDb db(*coder, *shape); + CaloSamples samples; + db.adc2fC(f, samples); + auto ped = calibrations.pedestal(f[idx].capid()); + auto corr = calibrations.respcorrgain(f[idx].capid()); - HcalQIESample sQIESample(ADCShort, CapIdS, 1, 1); - //makes a QIE sample for the short fiber. - HFDataFrame shortf(Sid); - shortf.setSize(1); //not planning on there being anything else here at this point in time so setting the size to 1 shouldn't matter - shortf.setSample(0, sQIESample); //inputs data into digi. - const HcalCalibrations& calibrations = conditions_.getHcalCalibrations(Sid); - const HcalQIECoder* channelCoderS = conditions_.getHcalCoder(Sid); - const HcalQIEShape* shapeS = conditions_.getHcalShape(channelCoderS); - - HcalCoderDb coders(*channelCoderS, *shapeS); - - CaloSamples tools; - coders.adc2fC(shortf, tools); - ShortE = (tools[0] - calibrations.pedestal(CapIdS)) * calibrations.respcorrgain(CapIdS); - - HcalQIESample lQIESample(ADCLong, CapIdL, 1, 1); - HFDataFrame longf(Lid); - longf.setSize(1); - longf.setSample(0, lQIESample); - const HcalCalibrations& calibrationL = conditions_.getHcalCalibrations(Lid); - - CaloSamples tool_l; - - const HcalQIECoder* channelCoderL = conditions_.getHcalCoder(Lid); - const HcalQIEShape* shapeL = conditions_.getHcalShape(channelCoderL); + return (samples[idx] - ped) * corr; +} - HcalCoderDb coderL(*channelCoderL, *shapeL); +bool +HcalFeatureHFEMBit::fineGrainbit(const HFDataFrame& shortDigi, const HFDataFrame& longDigi, int idx) const +{ + float shortE = getE(shortDigi, idx); + float longE = getE(longDigi, idx); - coderL.adc2fC(longf, tool_l); // this fills tool_l[0] with linearized adc - LongE = (tool_l[0] - calibrationL.pedestal(CapIdL)) * calibrationL.respcorrgain(CapIdL); + if (shortE < ShortMinE_) + return false; + if (longE < LongMinE_) + return false; - - // this actually does the cut - if((ShortE < ((LongE)-(ShortLongCutOffset_)) * ShortLongCutSlope_) && LongE > LongMinE_ && ShortE > ShortMinE_) return true; - else return false; + return (shortE < (longE - ShortLongCutOffset_) * ShortLongCutSlope_); } diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc index 95ae3e53652a9..a9e2b1960ea77 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc @@ -487,11 +487,7 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2016( finegrain[ibin][1] = (ADCLong > FG_HF_threshold_ || ADCShort > FG_HF_threshold_); if (HCALFEM != 0) { - finegrain[ibin][0] = HCALFEM->fineGrainbit( - ADCShort, details.ShortDigi.id(), - details.ShortDigi[ibin].capid(), - ADCLong, details.LongDigi.id(), - details.LongDigi[ibin].capid() + finegrain[ibin][0] = HCALFEM->fineGrainbit(details.ShortDigi, details.LongDigi, ibin) ); } } From 0976b9032d65350a4da1107a005615ab5ee8f9fc Mon Sep 17 00:00:00 2001 From: Matthias Wolf Date: Tue, 4 Oct 2016 02:09:10 +0200 Subject: [PATCH 09/11] Adjust EM bit to work with 2017 TP. --- .../interface/HcalFeatureBit.h | 18 +++++- .../interface/HcalFeatureHFEMBit.h | 39 ++++++++++++- .../src/HcalFeatureHFEMBit.cc | 57 ++++++++++++------- .../src/HcalTriggerPrimitiveAlgo.cc | 25 ++++---- 4 files changed, 102 insertions(+), 37 deletions(-) diff --git a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureBit.h b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureBit.h index b26d8dca217b5..0066b27f3cef8 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureBit.h +++ b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureBit.h @@ -2,14 +2,28 @@ #define SimCalorimetry_HcalTPGAlgos_interface_HcalFeatureBit_h_included 1 #include "DataFormats/HcalDetId/interface/HcalDetId.h" +#include "DataFormats/HcalDigi/interface/HFDataFrame.h" +#include "DataFormats/HcalDigi/interface/QIE10DataFrame.h" class HcalFeatureBit { public: HcalFeatureBit(){} virtual ~HcalFeatureBit(){} //the virutal function is responcible for applying a cut based on a linear relationship of the energy //deposited in the short vers long fibers. - virtual bool fineGrainbit(int ADCShort, HcalDetId Sid, int CapIdS, int ADCLong, HcalDetId Lid, int CapIdL) const {return false;} - + virtual bool fineGrainbit( + const QIE10DataFrame& short1, + const QIE10DataFrame& short2, + const QIE10DataFrame& long1, + const QIE10DataFrame& long2, + bool validShort1, + bool validShort2, + bool validLong1, + bool validLong2, + int idx) const = 0; + virtual bool fineGrainbit( + const HFDataFrame& shortDigi, + const HFDataFrame& longDigi, + int idx) const = 0; }; #endif diff --git a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureHFEMBit.h b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureHFEMBit.h index aa3924f64c7ff..2df3d5db73682 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureHFEMBit.h +++ b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureHFEMBit.h @@ -3,6 +3,7 @@ #include "SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureBit.h" #include "CalibFormats/HcalObjects/interface/HcalDbService.h" +#include "CalibFormats/HcalObjects/interface/HcalCoderDb.h" class HcalFeatureHFEMBit : public HcalFeatureBit { public: @@ -10,11 +11,45 @@ class HcalFeatureHFEMBit : public HcalFeatureBit { ~HcalFeatureHFEMBit(); // Provides FG bit based on energy cuts in long & short fibers. - virtual bool fineGrainbit(const HFDataFrame& shortDigi, const HFDataFrame& longDigi, int idx) const; + virtual bool fineGrainbit( + const QIE10DataFrame& short1, + const QIE10DataFrame& short2, + const QIE10DataFrame& long1, + const QIE10DataFrame& long2, + bool validShort1, + bool validShort2, + bool validLong1, + bool validLong2, + int idx) const override; + virtual bool fineGrainbit( + const HFDataFrame& shortDigi, + const HFDataFrame& longDigi, + int idx) const override; private: - float getE(const HFDataFrame& f, int idx) const; + template + float getE(const T& f, int idx) const; double ShortMinE_, LongMinE_, ShortLongCutSlope_, ShortLongCutOffset_; const HcalDbService& conditions_; }; + +template +float +HcalFeatureHFEMBit::getE(const T& f, int idx) const +{ + const HcalDetId id(f.id()); + const HcalCalibrations& calibrations = conditions_.getHcalCalibrations(id); + const auto* coder = conditions_.getHcalCoder(id); + const auto* shape = conditions_.getHcalShape(coder); + + HcalCoderDb db(*coder, *shape); + CaloSamples samples; + db.adc2fC(f, samples); + + auto ped = calibrations.pedestal(f[idx].capid()); + auto corr = calibrations.respcorrgain(f[idx].capid()); + + return (samples[idx] - ped) * corr; +} + #endif diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalFeatureHFEMBit.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalFeatureHFEMBit.cc index b806cbb58704e..4e8e9c0ac495b 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalFeatureHFEMBit.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalFeatureHFEMBit.cc @@ -4,7 +4,6 @@ #include "SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureHFEMBit.h" #include "CondFormats/HcalObjects/interface/HcalQIECoder.h" -#include "CalibFormats/HcalObjects/interface/HcalCoderDb.h" HcalFeatureHFEMBit::HcalFeatureHFEMBit(double ShortMinE, double LongMinE, @@ -21,26 +20,11 @@ HcalFeatureHFEMBit::HcalFeatureHFEMBit(double ShortMinE, double LongMinE, HcalFeatureHFEMBit::~HcalFeatureHFEMBit() { } -float -HcalFeatureHFEMBit::getE(const HFDataFrame& f, int idx) const -{ - const HcalDetId id(f.id()); - const HcalCalibrations& calibrations = conditions_.getHcalCalibrations(id); - const auto* coder = conditions_.getHcalCoder(id); - const auto* shape = conditions_.getHcalShape(coder); - - HcalCoderDb db(*coder, *shape); - CaloSamples samples; - db.adc2fC(f, samples); - - auto ped = calibrations.pedestal(f[idx].capid()); - auto corr = calibrations.respcorrgain(f[idx].capid()); - - return (samples[idx] - ped) * corr; -} - bool -HcalFeatureHFEMBit::fineGrainbit(const HFDataFrame& shortDigi, const HFDataFrame& longDigi, int idx) const +HcalFeatureHFEMBit::fineGrainbit( + const HFDataFrame& shortDigi, + const HFDataFrame& longDigi, + int idx) const { float shortE = getE(shortDigi, idx); float longE = getE(longDigi, idx); @@ -53,4 +37,37 @@ HcalFeatureHFEMBit::fineGrainbit(const HFDataFrame& shortDigi, const HFDataFrame return (shortE < (longE - ShortLongCutOffset_) * ShortLongCutSlope_); } +bool HcalFeatureHFEMBit::fineGrainbit( + const QIE10DataFrame& short1, + const QIE10DataFrame& short2, + const QIE10DataFrame& long1, + const QIE10DataFrame& long2, + bool validShort1, + bool validShort2, + bool validLong1, + bool validLong2, + int idx) const +{ + float shortE = 0; + if (validShort1) + shortE += getE(short1, idx); + if (validShort2) + shortE += getE(short2, idx); + if (validShort1 and validShort2) + shortE *= .5; + + float longE = 0; + if (validLong1) + longE += getE(long1, idx); + if (validLong2) + longE += getE(long2, idx); + if (validLong1 and validLong2) + longE *= .5; + + if (shortE < ShortMinE_) + return false; + if (longE < LongMinE_) + return false; + return (shortE < (longE - ShortLongCutOffset_) * ShortLongCutSlope_); +} diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc index a9e2b1960ea77..4ac85a8f400ad 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc @@ -486,10 +486,8 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2016( if (details.LongDigi.id().ietaAbs() != 29) { finegrain[ibin][1] = (ADCLong > FG_HF_threshold_ || ADCShort > FG_HF_threshold_); - if (HCALFEM != 0) { - finegrain[ibin][0] = HCALFEM->fineGrainbit(details.ShortDigi, details.LongDigi, ibin) - ); - } + if (HCALFEM != 0) + finegrain[ibin][0] = HCALFEM->fineGrainbit(details.ShortDigi, details.LongDigi, ibin); } } } @@ -530,7 +528,7 @@ HcalTriggerPrimitiveAlgo::validChannel(const QIE10DataFrame& digi, int ts) const void HcalTriggerPrimitiveAlgo::analyzeHF2017( const IntegerCaloSamples& samples, HcalTriggerPrimitiveDigi& result, - const int hf_lumi_shift, const HcalFeatureBit* hcalfem) + const int hf_lumi_shift, const HcalFeatureBit* embit) { // Align digis and TP const int shift = samples.presamples() - numberOfPresamples_; @@ -601,14 +599,15 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2017( } } - // if (HCALFEM != 0) { - // finegrain[ibin][0] = HCALFEM->fineGrainbit( - // ADCShort, details.ShortDigi.id(), - // details.ShortDigi[ibin].capid(), - // ADCLong, details.LongDigi.id(), - // details.LongDigi[ibin].capid() - // ); - // } + if (embit != 0) { + finegrain[ibin][0] = embit->fineGrainbit( + details[1].digi, details[3].digi, + details[0].digi, details[2].digi, + details[1].validity[idx], details[3].validity[idx], + details[0].validity[idx], details[2].validity[idx], + idx + ); + } } } From 25198a6ee73e07160ed35ad7e393a899cc4ff42a Mon Sep 17 00:00:00 2001 From: Matthias Wolf Date: Mon, 17 Oct 2016 15:22:30 +0200 Subject: [PATCH 10/11] Replace magic number with constant. --- .../HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h | 4 ++++ .../HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h index 0e2402036a549..6639dff0ab135 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h +++ b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h @@ -189,10 +189,14 @@ class HcalTriggerPrimitiveAlgo { edm::ParameterSet override_parameters_; + // HE constants static const int HBHE_OVERLAP_TOWER = 16; static const int LAST_FINEGRAIN_DEPTH = 6; static const int LAST_FINEGRAIN_TOWER = 28; + // Fine-grain in HF ignores tower 29, and starts with 30 + static const int FIRST_FINEGRAIN_TOWER = 30; + static const int QIE8_LINEARIZATION_ET = HcaluLUTTPGCoder::QIE8_LUT_BITMASK; static const int QIE10_LINEARIZATION_ET = HcaluLUTTPGCoder::QIE10_LUT_BITMASK; static const int QIE11_LINEARIZATION_ET = HcaluLUTTPGCoder::QIE11_LUT_BITMASK; diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc index 4ac85a8f400ad..7cb3ae0106e91 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc @@ -483,7 +483,7 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2016( uint32_t ADCLong = details.LongDigi[ibin].adc(); uint32_t ADCShort = details.ShortDigi[ibin].adc(); - if (details.LongDigi.id().ietaAbs() != 29) { + if (details.LongDigi.id().ietaAbs() >= FIRST_FINEGRAIN_TOWER) { finegrain[ibin][1] = (ADCLong > FG_HF_threshold_ || ADCShort > FG_HF_threshold_); if (HCALFEM != 0) @@ -594,7 +594,7 @@ void HcalTriggerPrimitiveAlgo::analyzeHF2017( } for (const auto& detail: details) { - if (detail.validity[idx] and HcalDetId(detail.digi.id()).ietaAbs() != 29) { + if (detail.validity[idx] and HcalDetId(detail.digi.id()).ietaAbs() >= FIRST_FINEGRAIN_TOWER) { finegrain[ibin][1] = finegrain[ibin][1] or (detail.digi[idx].adc() > (int) FG_HF_threshold_); } } From 0aa4ed822cbba3b3962dd35fbdcc359c555eb424 Mon Sep 17 00:00:00 2001 From: Matthias Wolf Date: Mon, 17 Oct 2016 15:35:53 +0200 Subject: [PATCH 11/11] Don't query PSet in a loop over digis. --- .../interface/HcalTriggerPrimitiveAlgo.h | 7 +++++- .../src/HcalTriggerPrimitiveAlgo.cc | 24 +++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h index 6639dff0ab135..3c83a63db1758 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h +++ b/SimCalorimetry/HcalTrigPrimAlgos/interface/HcalTriggerPrimitiveAlgo.h @@ -70,7 +70,7 @@ class HcalTriggerPrimitiveAlgo { void setRCTScaleShift(int); void setUpgradeFlags(bool hb, bool he, bool hf); - void overrideParameters(const edm::ParameterSet& ps) { override_parameters_ = ps; }; + void overrideParameters(const edm::ParameterSet& ps); private: @@ -189,6 +189,11 @@ class HcalTriggerPrimitiveAlgo { edm::ParameterSet override_parameters_; + bool override_adc_hf_ = false; + uint32_t override_adc_hf_value_; + bool override_tdc_hf_ = false; + unsigned long long override_tdc_hf_value_; + // HE constants static const int HBHE_OVERLAP_TOWER = 16; static const int LAST_FINEGRAIN_DEPTH = 6; diff --git a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc index 7cb3ae0106e91..f1a04c71031b3 100644 --- a/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc +++ b/SimCalorimetry/HcalTrigPrimAlgos/src/HcalTriggerPrimitiveAlgo.cc @@ -64,6 +64,22 @@ HcalTriggerPrimitiveAlgo::setUpgradeFlags(bool hb, bool he, bool hf) } +void +HcalTriggerPrimitiveAlgo::overrideParameters(const edm::ParameterSet& ps) +{ + override_parameters_ = ps; + + if (override_parameters_.exists("ADCThresholdHF")) { + override_adc_hf_ = true; + override_adc_hf_value_ = override_parameters_.getParameter("ADCThresholdHF"); + } + if (override_parameters_.exists("TDCMaskHF")) { + override_tdc_hf_ = true; + override_tdc_hf_value_ = override_parameters_.getParameter("TDCMaskHF"); + } +} + + void HcalTriggerPrimitiveAlgo::addSignal(const HBHEDataFrame & frame) { // TODO: Need to add support for seperate 28, 29 in HE //Hack for 300_pre10, should be removed. @@ -515,10 +531,10 @@ HcalTriggerPrimitiveAlgo::validChannel(const QIE10DataFrame& digi, int ts) const auto adc_threshold = parameters->getADCThresholdHF(); auto tdc_mask = parameters->getTDCMaskHF(); - if (override_parameters_.exists("ADCThresholdHF")) - adc_threshold = override_parameters_.getParameter("ADCThresholdHF"); - if (override_parameters_.exists("TDCMaskHF")) - tdc_mask = override_parameters_.getParameter("TDCMaskHF"); + if (override_adc_hf_) + adc_threshold = override_adc_hf_value_; + if (override_tdc_hf_) + tdc_mask = override_tdc_hf_value_; if (digi[ts].adc() < adc_threshold) return true;