CMS 3D CMS Logo

HcalTrigPrimDigiProducer.cc
Go to the documentation of this file.
14 
15 #include <algorithm>
16 
18  : theAlgo_(ps.getParameter<bool>("peakFilter"),
19  ps.getParameter<std::vector<double> >("weights"),
20  ps.getParameter<int>("latency"),
21  ps.getParameter<uint32_t>("FG_threshold"),
22  ps.getParameter<std::vector<uint32_t> >("FG_HF_thresholds"),
23  ps.getParameter<uint32_t>("ZS_threshold"),
24  ps.getParameter<int>("numberOfSamples"),
25  ps.getParameter<int>("numberOfPresamples"),
26  ps.getParameter<int>("numberOfFilterPresamplesHBQIE11"),
27  ps.getParameter<int>("numberOfFilterPresamplesHEQIE11"),
28  ps.getParameter<int>("numberOfSamplesHF"),
29  ps.getParameter<int>("numberOfPresamplesHF"),
30  ps.getParameter<bool>("useTDCInMinBiasBits"),
31  ps.getParameter<uint32_t>("MinSignalThreshold"),
32  ps.getParameter<uint32_t>("PMTNoiseThreshold")),
33  inputLabel_(ps.getParameter<std::vector<edm::InputTag> >("inputLabel")),
34  inputUpgradeLabel_(ps.getParameter<std::vector<edm::InputTag> >("inputUpgradeLabel")),
35  inputTagFEDRaw_(ps.getParameter<edm::InputTag>("InputTagFEDRaw")),
36  runZS_(ps.getParameter<bool>("RunZS")),
37  runFrontEndFormatError_(ps.getParameter<bool>("FrontEndFormatError")) {
38  std::vector<bool> upgrades = {
39  ps.getParameter<bool>("upgradeHB"), ps.getParameter<bool>("upgradeHE"), ps.getParameter<bool>("upgradeHF")};
40  upgrade_ = std::any_of(std::begin(upgrades), std::end(upgrades), [](bool a) { return a; });
41  legacy_ = std::any_of(std::begin(upgrades), std::end(upgrades), [](bool a) { return !a; });
42 
43  if (ps.exists("parameters")) {
44  auto pset = ps.getUntrackedParameter<edm::ParameterSet>("parameters");
46  }
47  theAlgo_.setUpgradeFlags(upgrades[0], upgrades[1], upgrades[2]);
49 
50  HFEMB_ = false;
51  if (ps.exists("LSConfig")) {
53  HFEMB_ = LongShortCut_.getParameter<bool>("HcalFeatureHFEMBit");
54  MinLongEnergy_ = LongShortCut_.getParameter<double>("Min_Long_Energy"); //minimum long energy
55  MinShortEnergy_ = LongShortCut_.getParameter<double>("Min_Short_Energy"); //minimum short energy
57  LongShortCut_.getParameter<double>("Long_vrs_Short_Slope"); //slope of the line that cuts are based on
58  LongShortOffset_ = LongShortCut_.getParameter<double>("Long_Short_Offset"); //offset of line
59  }
60  tok_tpgCoder_ = esConsumes<HcalTPGCoder, HcalTPGRecord>();
61  tok_tpgTranscoder_ = esConsumes<CaloTPGTranscoder, CaloTPGRecord>();
62  tok_lutMetadata_ = esConsumes<HcalLutMetadata, HcalLutMetadataRcd>();
63  tok_trigTowerGeom_ = esConsumes<HcalTrigTowerGeometry, CaloGeometryRecord>();
64  // register for data access
66  tok_raw_ = consumes<FEDRawDataCollection>(inputTagFEDRaw_);
67  }
68 
69  if (legacy_) {
70  tok_hbhe_ = consumes<HBHEDigiCollection>(inputLabel_[0]);
71  tok_hf_ = consumes<HFDigiCollection>(inputLabel_[1]);
72  }
73 
74  if (upgrade_) {
75  tok_hbhe_up_ = consumes<QIE11DigiCollection>(inputUpgradeLabel_[0]);
76  tok_hf_up_ = consumes<QIE10DigiCollection>(inputUpgradeLabel_[1]);
77  }
78  tok_dbService_ = esConsumes<HcalDbService, HcalDbRecord>();
79  produces<HcalTrigPrimDigiCollection>();
80  theAlgo_.setPeakFinderAlgorithm(ps.getParameter<int>("PeakFinderAlgorithm"));
81 
82  edm::ParameterSet hfSS = ps.getParameter<edm::ParameterSet>("tpScales").getParameter<edm::ParameterSet>("HF");
83 
84  theAlgo_.setNCTScaleShift(hfSS.getParameter<int>("NCTShift"));
85  theAlgo_.setRCTScaleShift(hfSS.getParameter<int>("RCTShift"));
86 }
87 
89  // Step A: get the conditions, for the decoding
90  edm::ESHandle<HcalTPGCoder> inputCoder = eventSetup.getHandle(tok_tpgCoder_);
91 
93 
95  float rctlsb = lutMetadata->getRctLsb();
96 
98 
99  // Step B: Create empty output
100  std::unique_ptr<HcalTrigPrimDigiCollection> result(new HcalTrigPrimDigiCollection());
101 
104 
107 
108  if (legacy_) {
109  iEvent.getByToken(tok_hbhe_, hbheDigis);
110  iEvent.getByToken(tok_hf_, hfDigis);
111 
112  // protect here against missing input collections
113  // there is no protection in HcalTriggerPrimitiveAlgo
114 
115  if (!hbheDigis.isValid() and legacy_) {
116  edm::LogInfo("HcalTrigPrimDigiProducer") << "\nWarning: HBHEDigiCollection with input tag " << inputLabel_[0]
117  << "\nrequested in configuration, but not found in the event."
118  << "\nQuit returning empty product." << std::endl;
119 
120  // put empty HcalTrigPrimDigiCollection in the event
121  iEvent.put(std::move(result));
122 
123  return;
124  }
125 
126  if (!hfDigis.isValid() and legacy_) {
127  edm::LogInfo("HcalTrigPrimDigiProducer") << "\nWarning: HFDigiCollection with input tag " << inputLabel_[1]
128  << "\nrequested in configuration, but not found in the event."
129  << "\nQuit returning empty product." << std::endl;
130 
131  // put empty HcalTrigPrimDigiCollection in the event
132  iEvent.put(std::move(result));
133 
134  return;
135  }
136  }
137 
138  if (upgrade_) {
139  iEvent.getByToken(tok_hbhe_up_, hbheUpDigis);
140  iEvent.getByToken(tok_hf_up_, hfUpDigis);
141 
142  if (!hbheUpDigis.isValid() and upgrade_) {
143  edm::LogInfo("HcalTrigPrimDigiProducer")
144  << "\nWarning: Upgrade HBHEDigiCollection with input tag " << inputUpgradeLabel_[0]
145  << "\nrequested in configuration, but not found in the event."
146  << "\nQuit returning empty product." << std::endl;
147 
148  // put empty HcalTrigPrimDigiCollection in the event
149  iEvent.put(std::move(result));
150 
151  return;
152  }
153 
154  if (!hfUpDigis.isValid() and upgrade_) {
155  edm::LogInfo("HcalTrigPrimDigiProducer") << "\nWarning: HFDigiCollection with input tag " << inputUpgradeLabel_[1]
156  << "\nrequested in configuration, but not found in the event."
157  << "\nQuit returning empty product." << std::endl;
158 
159  // put empty HcalTrigPrimDigiCollection in the event
160  iEvent.put(std::move(result));
161 
162  return;
163  }
164  }
165 
167 
168  HcalFeatureBit* hfembit = nullptr;
169 
170  if (HFEMB_) {
171  hfembit = new HcalFeatureHFEMBit(MinShortEnergy_,
175  *pSetup); //inputs values that cut will be based on
176  }
177 
178  // Step C: Invoke the algorithm, passing in inputs and getting back outputs.
179  if (legacy_ and not upgrade_) {
180  theAlgo_.run(inputCoder.product(),
181  outTranscoder->getHcalCompressor().get(),
182  pSetup.product(),
183  *result,
184  &(*pG),
185  rctlsb,
186  hfembit,
187  *hbheDigis,
188  *hfDigis);
189  } else if (legacy_ and upgrade_) {
190  theAlgo_.run(inputCoder.product(),
191  outTranscoder->getHcalCompressor().get(),
192  pSetup.product(),
193  *result,
194  &(*pG),
195  rctlsb,
196  hfembit,
197  *hbheDigis,
198  *hfDigis,
199  *hbheUpDigis,
200  *hfUpDigis);
201  } else {
202  theAlgo_.run(inputCoder.product(),
203  outTranscoder->getHcalCompressor().get(),
204  pSetup.product(),
205  *result,
206  &(*pG),
207  rctlsb,
208  hfembit,
209  *hbheUpDigis,
210  *hfUpDigis);
211  }
212 
213  // Step C.1: Run FE Format Error / ZS for real data.
215  const HcalElectronicsMap* emap = pSetup->getHcalMapping();
216 
218  iEvent.getByToken(tok_raw_, fedHandle);
219 
220  if (fedHandle.isValid() && emap != nullptr) {
221  theAlgo_.runFEFormatError(fedHandle.product(), emap, *result);
222  } else {
223  edm::LogInfo("HcalTrigPrimDigiProducer") << "\nWarning: FEDRawDataCollection with input tag " << inputTagFEDRaw_
224  << "\nrequested in configuration, but not found in the event."
225  << "\nQuit returning empty product." << std::endl;
226 
227  // produce empty HcalTrigPrimDigiCollection and put it in the event
228  std::unique_ptr<HcalTrigPrimDigiCollection> emptyResult(new HcalTrigPrimDigiCollection());
229 
230  iEvent.put(std::move(emptyResult));
231 
232  return;
233  }
234  }
235 
236  if (runZS_)
238 
239  // edm::LogInfo("HcalTrigPrimDigiProducer") << "HcalTrigPrims: " << result->size();
240 
241  // Step D: Put outputs into event
242  iEvent.put(std::move(result));
243 }
HcalTrigPrimDigiProducer::runZS_
bool runZS_
Definition: HcalTrigPrimDigiProducer.h:49
HcalElectronicsMap.h
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
HFDataFrame.h
Handle.h
electrons_cff.bool
bool
Definition: electrons_cff.py:393
MessageLogger.h
HcalTrigPrimDigiProducer::theAlgo_
HcalTriggerPrimitiveAlgo theAlgo_
Definition: HcalTrigPrimDigiProducer.h:32
edm::Handle::product
T const * product() const
Definition: Handle.h:70
ESHandle.h
HcalTriggerPrimitiveAlgo::overrideParameters
void overrideParameters(const edm::ParameterSet &ps)
Definition: HcalTriggerPrimitiveAlgo.cc:79
HcalTrigPrimDigiProducer::tok_hf_up_
edm::EDGetTokenT< QIE10DigiCollection > tok_hf_up_
Definition: HcalTrigPrimDigiProducer.h:39
hcaltpdigi_cfi.HcalFeatureHFEMBit
HcalFeatureHFEMBit
Definition: hcaltpdigi_cfi.py:9
HcalTriggerPrimitiveAlgo::run
void run(const HcalTPGCoder *incoder, const HcalTPGCompressor *outcoder, const HcalDbService *conditions, HcalTrigPrimDigiCollection &result, const HcalTrigTowerGeometry *trigTowerGeometry, float rctlsb, const HcalFeatureBit *LongvrsShortCut, const Digis &... digis)
Definition: HcalTriggerPrimitiveAlgo.h:231
edm
HLT enums.
Definition: AlignableModifier.h:19
HcalTriggerPrimitiveAlgo::setUpgradeFlags
void setUpgradeFlags(bool hb, bool he, bool hf)
Definition: HcalTriggerPrimitiveAlgo.cc:73
HcalTriggerPrimitiveAlgo::setWeightsQIE11
void setWeightsQIE11(const edm::ParameterSet &weightsQIE11)
Definition: HcalTriggerPrimitiveAlgo.cc:859
HcalTrigPrimDigiProducer::tok_hbhe_up_
edm::EDGetTokenT< QIE11DigiCollection > tok_hbhe_up_
Definition: HcalTrigPrimDigiProducer.h:38
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89287
HcalTrigPrimDigiProducer::MinLongEnergy_
double MinLongEnergy_
Definition: HcalTrigPrimDigiProducer.h:47
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
HcalTriggerPrimitiveAlgo::setNCTScaleShift
void setNCTScaleShift(int)
Definition: HcalTriggerPrimitiveAlgo.cc:875
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
HcalTPGCompressor.h
HcalTrigPrimDigiProducer::LongShortSlope_
double LongShortSlope_
Definition: HcalTrigPrimDigiProducer.h:47
edm::Handle
Definition: AssociativeIterator.h:50
HcalDbService::getHcalMapping
const HcalElectronicsMap * getHcalMapping() const
Definition: HcalDbService.cc:343
HcalTriggerPrimitiveDigi.h
CaloTPGTranscoder::getHcalCompressor
std::shared_ptr< const HcalTPGCompressor > getHcalCompressor() const
Definition: CaloTPGTranscoder.h:55
HcalTrigPrimDigiProducer.h
HcalTriggerPrimitiveAlgo::setRCTScaleShift
void setRCTScaleShift(int)
Definition: HcalTriggerPrimitiveAlgo.cc:877
MakerMacros.h
HcalLutMetadata::getRctLsb
float getRctLsb() const
Definition: HcalLutMetadata.h:25
HcalTrigPrimDigiProducer::tok_hbhe_
edm::EDGetTokenT< HBHEDigiCollection > tok_hbhe_
Definition: HcalTrigPrimDigiProducer.h:41
mps_fire.end
end
Definition: mps_fire.py:242
HcalTrigPrimDigiProducer::tok_raw_
edm::EDGetTokenT< FEDRawDataCollection > tok_raw_
Definition: HcalTrigPrimDigiProducer.h:46
edm::ESHandle
Definition: DTSurvey.h:22
HcalTrigPrimDigiProducer::MinShortEnergy_
double MinShortEnergy_
Definition: HcalTrigPrimDigiProducer.h:47
HcalTriggerPrimitiveAlgo::runZS
void runZS(HcalTrigPrimDigiCollection &tp)
Definition: HcalTriggerPrimitiveAlgo.cc:714
HcalTrigPrimDigiProducer::runFrontEndFormatError_
bool runFrontEndFormatError_
Definition: HcalTrigPrimDigiProducer.h:51
HcalTrigPrimDigiProducer::inputTagFEDRaw_
edm::InputTag inputTagFEDRaw_
input tag for FEDRawDataCollection
Definition: HcalTrigPrimDigiProducer.h:45
edm::ParameterSet::exists
bool exists(std::string const &parameterName) const
checks if a parameter exists
Definition: ParameterSet.cc:681
HcalTrigPrimDigiProducer::tok_dbService_
edm::ESGetToken< HcalDbService, HcalDbRecord > tok_dbService_
Definition: HcalTrigPrimDigiProducer.h:62
edm::ParameterSet
Definition: ParameterSet.h:47
a
double a
Definition: hdecay.h:119
HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer
HcalTrigPrimDigiProducer(const edm::ParameterSet &ps)
Definition: HcalTrigPrimDigiProducer.cc:17
Event.h
HcalTrigPrimDigiProducer::LongShortCut_
edm::ParameterSet LongShortCut_
Definition: HcalTrigPrimDigiProducer.h:57
HcalTrigPrimDigiProducer::tok_trigTowerGeom_
edm::ESGetToken< HcalTrigTowerGeometry, CaloGeometryRecord > tok_trigTowerGeom_
Definition: HcalTrigPrimDigiProducer.h:61
createfilelist.int
int
Definition: createfilelist.py:10
HcalTrigPrimDigiProducer::inputUpgradeLabel_
std::vector< edm::InputTag > inputUpgradeLabel_
Definition: HcalTrigPrimDigiProducer.h:36
iEvent
int iEvent
Definition: GenABIO.cc:224
HcalTrigPrimDigiProducer::produce
void produce(edm::Event &e, const edm::EventSetup &c) override
Definition: HcalTrigPrimDigiProducer.cc:88
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:148
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
HcalFeatureBit
Definition: HcalFeatureBit.h:8
edm::EventSetup
Definition: EventSetup.h:57
HcalTrigPrimDigiProducer::legacy_
bool legacy_
Definition: HcalTrigPrimDigiProducer.h:54
HcalTrigPrimDigiProducer::inputLabel_
std::vector< edm::InputTag > inputLabel_
input tags for HCAL digis
Definition: HcalTrigPrimDigiProducer.h:35
HcalTrigPrimDigiProducer::LongShortOffset_
double LongShortOffset_
Definition: HcalTrigPrimDigiProducer.h:47
HcalTrigPrimDigiProducer::HFEMB_
bool HFEMB_
Definition: HcalTrigPrimDigiProducer.h:56
HcalElectronicsMap
Definition: HcalElectronicsMap.h:31
HcalTrigPrimDigiProducer::tok_tpgTranscoder_
edm::ESGetToken< CaloTPGTranscoder, CaloTPGRecord > tok_tpgTranscoder_
Definition: HcalTrigPrimDigiProducer.h:59
HcalTrigPrimDigiProducer::upgrade_
bool upgrade_
Definition: HcalTrigPrimDigiProducer.h:53
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
HcalTriggerPrimitiveAlgo::setPeakFinderAlgorithm
void setPeakFinderAlgorithm(int algo)
Definition: HcalTriggerPrimitiveAlgo.cc:869
HcalTrigPrimDigiProducer::tok_tpgCoder_
edm::ESGetToken< HcalTPGCoder, HcalTPGRecord > tok_tpgCoder_
Definition: HcalTrigPrimDigiProducer.h:58
HcalTrigPrimDigiProducer::tok_hf_
edm::EDGetTokenT< HFDigiCollection > tok_hf_
Definition: HcalTrigPrimDigiProducer.h:42
HcalTrigPrimDigiProducer::tok_lutMetadata_
edm::ESGetToken< HcalLutMetadata, HcalLutMetadataRcd > tok_lutMetadata_
Definition: HcalTrigPrimDigiProducer.h:60
EventSetup.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
HcalTriggerPrimitiveAlgo::runFEFormatError
void runFEFormatError(const FEDRawDataCollection *rawraw, const HcalElectronicsMap *emap, HcalTrigPrimDigiCollection &result)
Definition: HcalTriggerPrimitiveAlgo.cc:730
mps_fire.result
result
Definition: mps_fire.py:311
ParameterSet.h
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
HcalTrigPrimDigiCollection
edm::SortedCollection< HcalTriggerPrimitiveDigi > HcalTrigPrimDigiCollection
Definition: HcalDigiCollections.h:24
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
HBHEDataFrame.h