CMS 3D CMS Logo

HBHEPhase1Reconstructor.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: RecoLocalCalo/HcalRecProducers
4 // Class: HBHEPhase1Reconstructor
5 //
13 //
14 // Original Author: Igor Volobouev
15 // Created: Tue, 21 Jun 2016 00:56:40 GMT
16 //
17 //
18 
19 // system include files
20 #include <cmath>
21 #include <utility>
22 #include <algorithm>
23 
24 // user include files
31 
34 
39 
43 
45 
47 
52 
55 
56 // Parser for Phase 1 HB/HE reco algorithms
58 
59 // Fetcher for reco algorithm data
61 
62 // Some helper functions
63 namespace {
64  // Class for making SiPM/QIE11 look like HPD/QIE8. HPD/QIE8
65  // needs only pedestal and gain to convert charge into energy.
66  // Due to nonlinearities, response of SiPM/QIE11 is substantially
67  // more complicated. It is possible to calculate all necessary
68  // quantities from the charge and the info stored in the DB every
69  // time the raw charge is needed. However, it does not make sense
70  // to retrieve DB contents stored by channel for every time slice.
71  // Because of this, we look things up only once, in the constructor.
72  template <class DFrame>
73  class RawChargeFromSample {
74  public:
75  inline RawChargeFromSample(const int sipmQTSShift,
76  const int sipmQNTStoSum,
77  const HcalDbService& cond,
78  const HcalDetId id,
79  const CaloSamples& cs,
80  const int soi,
81  const DFrame& frame,
82  const int maxTS) {}
83 
84  inline double getRawCharge(const double decodedCharge, const double pedestal) const { return decodedCharge; }
85  };
86 
87  template <>
88  class RawChargeFromSample<QIE11DataFrame> {
89  public:
90  inline RawChargeFromSample(const int sipmQTSShift,
91  const int sipmQNTStoSum,
92  const HcalDbService& cond,
93  const HcalDetId id,
94  const CaloSamples& cs,
95  const int soi,
96  const QIE11DataFrame& frame,
97  const int maxTS)
98  : siPMParameter_(*cond.getHcalSiPMParameter(id)),
99  fcByPE_(siPMParameter_.getFCByPE()),
100  corr_(cond.getHcalSiPMCharacteristics()->getNonLinearities(siPMParameter_.getType())) {
101  if (fcByPE_ <= 0.0)
102  throw cms::Exception("HBHEPhase1BadDB") << "Invalid fC/PE conversion factor for SiPM " << id << std::endl;
103 
104  const HcalCalibrations& calib = cond.getHcalCalibrations(id);
105  const int firstTS = std::max(soi + sipmQTSShift, 0);
106  const int lastTS = std::min(firstTS + sipmQNTStoSum, maxTS);
107  double sipmQ = 0.0;
108 
109  for (int ts = firstTS; ts < lastTS; ++ts) {
110  const double pedestal = calib.pedestal(frame[ts].capid());
111  sipmQ += (cs[ts] - pedestal);
112  }
113 
114  const double effectivePixelsFired = sipmQ / fcByPE_;
115  factor_ = corr_.getRecoCorrectionFactor(effectivePixelsFired);
116  }
117 
118  inline double getRawCharge(const double decodedCharge, const double pedestal) const {
119  return (decodedCharge - pedestal) * factor_ + pedestal;
120 
121  // Old version of TS-by-TS corrections looked as follows:
122  // const double sipmQ = decodedCharge - pedestal;
123  // const double nPixelsFired = sipmQ/fcByPE_;
124  // return sipmQ*corr_.getRecoCorrectionFactor(nPixelsFired) + pedestal;
125  }
126 
127  private:
128  const HcalSiPMParameter& siPMParameter_;
129  double fcByPE_;
130  HcalSiPMnonlinearity corr_;
131  double factor_;
132  };
133 
134  float getTDCTimeFromSample(const QIE11DataFrame::Sample& s) { return HcalSpecialTimes::getTDCTime(s.tdc()); }
135 
136  float getTDCTimeFromSample(const HcalQIESample&) { return HcalSpecialTimes::UNKNOWN_T_NOTDC; }
137 
138  float getDifferentialChargeGain(const HcalQIECoder& coder,
139  const HcalQIEShape& shape,
140  const unsigned adc,
141  const unsigned capid,
142  const bool isQIE11) {
143  // We have 5-bit ADC mantissa in QIE8 and 6-bit in QIE11
144  static const unsigned mantissaMaskQIE8 = 0x1f;
145  static const unsigned mantissaMaskQIE11 = 0x3f;
146 
147  const float q = coder.charge(shape, adc, capid);
148  const unsigned mantissaMask = isQIE11 ? mantissaMaskQIE11 : mantissaMaskQIE8;
149  const unsigned mantissa = adc & mantissaMask;
150 
151  // First, check if we are in the two lowest or two highest ADC
152  // values for this range. Assume that they have the lowest and
153  // the highest gain in the range, respectively.
154  if (mantissa == 0U || mantissa == mantissaMask - 1U)
155  return coder.charge(shape, adc + 1U, capid) - q;
156  else if (mantissa == 1U || mantissa == mantissaMask)
157  return q - coder.charge(shape, adc - 1U, capid);
158  else {
159  const float qup = coder.charge(shape, adc + 1U, capid);
160  const float qdown = coder.charge(shape, adc - 1U, capid);
161  const float upGain = qup - q;
162  const float downGain = q - qdown;
163  const float averageGain = (qup - qdown) / 2.f;
164  if (std::abs(upGain - downGain) < 0.01f * averageGain)
165  return averageGain;
166  else {
167  // We are in the gain transition region.
168  // Need to determine if we are in the lower
169  // gain ADC count or in the higher one.
170  // This can be done by figuring out if the
171  // "up" gain is more consistent then the
172  // "down" gain.
173  const float q2up = coder.charge(shape, adc + 2U, capid);
174  const float q2down = coder.charge(shape, adc - 2U, capid);
175  const float upGain2 = q2up - qup;
176  const float downGain2 = qdown - q2down;
177  if (std::abs(upGain2 - upGain) < std::abs(downGain2 - downGain))
178  return upGain;
179  else
180  return downGain;
181  }
182  }
183  }
184 
185  // The first element of the pair indicates presence of optical
186  // link errors. The second indicated presence of capid errors.
187  std::pair<bool, bool> findHWErrors(const HBHEDataFrame& df, const unsigned len) {
188  bool linkErr = false;
189  bool capidErr = false;
190  if (len) {
191  int expectedCapid = df[0].capid();
192  for (unsigned i = 0; i < len; ++i) {
193  if (df[i].er())
194  linkErr = true;
195  if (df[i].capid() != expectedCapid)
196  capidErr = true;
197  expectedCapid = (expectedCapid + 1) % 4;
198  }
199  }
200  return std::pair<bool, bool>(linkErr, capidErr);
201  }
202 
203  std::pair<bool, bool> findHWErrors(const QIE11DataFrame& df, const unsigned /* len */) {
204  return std::pair<bool, bool>(df.linkError(), df.capidError());
205  }
206 
207  std::unique_ptr<HBHEStatusBitSetter> parse_HBHEStatusBitSetter(const edm::ParameterSet& psdigi) {
208  return std::make_unique<HBHEStatusBitSetter>(
209  psdigi.getParameter<double>("nominalPedestal"),
210  psdigi.getParameter<double>("hitEnergyMinimum"),
211  psdigi.getParameter<int>("hitMultiplicityThreshold"),
212  psdigi.getParameter<std::vector<edm::ParameterSet> >("pulseShapeParameterSets"));
213  }
214 
215  std::unique_ptr<HBHEPulseShapeFlagSetter> parse_HBHEPulseShapeFlagSetter(const edm::ParameterSet& psPulseShape,
216  const bool setLegacyFlags) {
217  return std::make_unique<HBHEPulseShapeFlagSetter>(
218  psPulseShape.getParameter<double>("MinimumChargeThreshold"),
219  psPulseShape.getParameter<double>("TS4TS5ChargeThreshold"),
220  psPulseShape.getParameter<double>("TS3TS4ChargeThreshold"),
221  psPulseShape.getParameter<double>("TS3TS4UpperChargeThreshold"),
222  psPulseShape.getParameter<double>("TS5TS6ChargeThreshold"),
223  psPulseShape.getParameter<double>("TS5TS6UpperChargeThreshold"),
224  psPulseShape.getParameter<double>("R45PlusOneRange"),
225  psPulseShape.getParameter<double>("R45MinusOneRange"),
226  psPulseShape.getParameter<unsigned int>("TrianglePeakTS"),
227  psPulseShape.getParameter<std::vector<double> >("LinearThreshold"),
228  psPulseShape.getParameter<std::vector<double> >("LinearCut"),
229  psPulseShape.getParameter<std::vector<double> >("RMS8MaxThreshold"),
230  psPulseShape.getParameter<std::vector<double> >("RMS8MaxCut"),
231  psPulseShape.getParameter<std::vector<double> >("LeftSlopeThreshold"),
232  psPulseShape.getParameter<std::vector<double> >("LeftSlopeCut"),
233  psPulseShape.getParameter<std::vector<double> >("RightSlopeThreshold"),
234  psPulseShape.getParameter<std::vector<double> >("RightSlopeCut"),
235  psPulseShape.getParameter<std::vector<double> >("RightSlopeSmallThreshold"),
236  psPulseShape.getParameter<std::vector<double> >("RightSlopeSmallCut"),
237  psPulseShape.getParameter<std::vector<double> >("TS4TS5LowerThreshold"),
238  psPulseShape.getParameter<std::vector<double> >("TS4TS5LowerCut"),
239  psPulseShape.getParameter<std::vector<double> >("TS4TS5UpperThreshold"),
240  psPulseShape.getParameter<std::vector<double> >("TS4TS5UpperCut"),
241  psPulseShape.getParameter<bool>("UseDualFit"),
242  psPulseShape.getParameter<bool>("TriangleIgnoreSlow"),
243  setLegacyFlags);
244  }
245 } // namespace
246 
247 //
248 // class declaration
249 //
251 public:
253  ~HBHEPhase1Reconstructor() override;
254 
255  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
256 
257 private:
258  void beginRun(edm::Run const&, edm::EventSetup const&) override;
259  void endRun(edm::Run const&, edm::EventSetup const&) override;
260  void produce(edm::Event&, const edm::EventSetup&) override;
261 
262  // Configuration parameters
270  bool tsFromDB_;
273  bool use8ts_;
276 
277  // Parameters for turning status bit setters on/off
284 
285  // Other members
288  std::unique_ptr<AbsHBHEPhase1Algo> reco_;
289  std::unique_ptr<AbsHcalAlgoData> recoConfig_;
290  std::unique_ptr<HcalRecoParams> paramTS_;
291 
292  // Status bit setters
293  const HBHENegativeEFilter* negEFilter_; // We don't manage this pointer
294  std::unique_ptr<HBHEStatusBitSetter> hbheFlagSetterQIE8_;
295  std::unique_ptr<HBHEStatusBitSetter> hbheFlagSetterQIE11_;
296  std::unique_ptr<HBHEPulseShapeFlagSetter> hbhePulseShapeFlagSetterQIE8_;
297  std::unique_ptr<HBHEPulseShapeFlagSetter> hbhePulseShapeFlagSetterQIE11_;
298 
299  // For the function below, arguments "infoColl" and/or "rechits"
300  // are allowed to be null.
301  template <class DataFrame, class Collection>
302  void processData(const Collection& coll,
303  const HcalDbService& cond,
304  const HcalChannelQuality& qual,
306  const bool isRealData,
308  HBHEChannelInfoCollection* infoColl,
310  const bool use8ts);
311 
312  // Methods for setting rechit status bits
314  const HcalCoder& coder,
315  const HBHEChannelInfo& info,
316  const HcalCalibrations& calib,
317  HBHERecHit* rh);
319  const HcalCoder& coder,
320  const HBHEChannelInfo& info,
321  const HcalCalibrations& calib,
322  HBHERecHit* rh);
324 
326 };
327 
328 //
329 // constructors and destructor
330 //
332  : algoConfigClass_(conf.getParameter<std::string>("algoConfigClass")),
333  processQIE8_(conf.getParameter<bool>("processQIE8")),
334  processQIE11_(conf.getParameter<bool>("processQIE11")),
335  saveInfos_(conf.getParameter<bool>("saveInfos")),
336  saveDroppedInfos_(conf.getParameter<bool>("saveDroppedInfos")),
337  makeRecHits_(conf.getParameter<bool>("makeRecHits")),
338  dropZSmarkedPassed_(conf.getParameter<bool>("dropZSmarkedPassed")),
339  tsFromDB_(conf.getParameter<bool>("tsFromDB")),
340  recoParamsFromDB_(conf.getParameter<bool>("recoParamsFromDB")),
341  saveEffectivePedestal_(conf.getParameter<bool>("saveEffectivePedestal")),
342  use8ts_(conf.getParameter<bool>("use8ts")),
343  sipmQTSShift_(conf.getParameter<int>("sipmQTSShift")),
344  sipmQNTStoSum_(conf.getParameter<int>("sipmQNTStoSum")),
345  setNegativeFlagsQIE8_(conf.getParameter<bool>("setNegativeFlagsQIE8")),
346  setNegativeFlagsQIE11_(conf.getParameter<bool>("setNegativeFlagsQIE11")),
347  setNoiseFlagsQIE8_(conf.getParameter<bool>("setNoiseFlagsQIE8")),
348  setNoiseFlagsQIE11_(conf.getParameter<bool>("setNoiseFlagsQIE11")),
349  setPulseShapeFlagsQIE8_(conf.getParameter<bool>("setPulseShapeFlagsQIE8")),
350  setPulseShapeFlagsQIE11_(conf.getParameter<bool>("setPulseShapeFlagsQIE11")),
351  reco_(parseHBHEPhase1AlgoDescription(conf.getParameter<edm::ParameterSet>("algorithm"))),
352  negEFilter_(nullptr) {
353  // Check that the reco algorithm has been successfully configured
354  if (!reco_.get())
355  throw cms::Exception("HBHEPhase1BadConfig") << "Invalid HBHEPhase1Algo algorithm configuration" << std::endl;
356 
357  // Configure the status bit setters that have been turned on
358  if (setNoiseFlagsQIE8_)
359  hbheFlagSetterQIE8_ = parse_HBHEStatusBitSetter(conf.getParameter<edm::ParameterSet>("flagParametersQIE8"));
360 
362  hbheFlagSetterQIE11_ = parse_HBHEStatusBitSetter(conf.getParameter<edm::ParameterSet>("flagParametersQIE11"));
363 
366  parse_HBHEPulseShapeFlagSetter(conf.getParameter<edm::ParameterSet>("pulseShapeParametersQIE8"),
367  conf.getParameter<bool>("setLegacyFlagsQIE8"));
368 
371  parse_HBHEPulseShapeFlagSetter(conf.getParameter<edm::ParameterSet>("pulseShapeParametersQIE11"),
372  conf.getParameter<bool>("setLegacyFlagsQIE11"));
373 
374  // Consumes and produces statements
375  if (processQIE8_)
376  tok_qie8_ = consumes<HBHEDigiCollection>(conf.getParameter<edm::InputTag>("digiLabelQIE8"));
377 
378  if (processQIE11_)
379  tok_qie11_ = consumes<QIE11DigiCollection>(conf.getParameter<edm::InputTag>("digiLabelQIE11"));
380 
381  if (saveInfos_)
382  produces<HBHEChannelInfoCollection>();
383 
384  if (makeRecHits_)
385  produces<HBHERecHitCollection>();
386 }
387 
389  // do anything here that needs to be done at destruction time
390  // (e.g. close files, deallocate resources etc.)
391 }
392 
393 //
394 // member functions
395 //
396 template <class DFrame, class Collection>
397 void HBHEPhase1Reconstructor::processData(const Collection& coll,
398  const HcalDbService& cond,
399  const HcalChannelQuality& qual,
401  const bool isRealData,
402  HBHEChannelInfo* channelInfo,
405  const bool use8ts_) {
406  // If "saveDroppedInfos_" flag is set, fill the info with something
407  // meaningful even if the database tells us to drop this channel.
408  // Note that this flag affects only "infos", the rechits are still
409  // not going to be constructed from such channels.
410  const bool skipDroppedChannels = !(infos && saveDroppedInfos_);
411 
412  // Iterate over the input collection
413  for (typename Collection::const_iterator it = coll.begin(); it != coll.end(); ++it) {
414  const DFrame& frame(*it);
415  const HcalDetId cell(frame.id());
416 
417  // Protection against calibration channels which are not
418  // in the database but can still come in the QIE11DataFrame
419  // in the laser calibs, etc.
420  const HcalSubdetector subdet = cell.subdet();
421  if (!(subdet == HcalSubdetector::HcalBarrel || subdet == HcalSubdetector::HcalEndcap))
422  continue;
423 
424  // Check if the database tells us to drop this channel
425  const HcalChannelStatus* mydigistatus = qual.getValues(cell.rawId());
426  const bool taggedBadByDb = severity.dropChannel(mydigistatus->getValue());
427  if (taggedBadByDb && skipDroppedChannels)
428  continue;
429 
430  // Check if the channel is zero suppressed
431  bool dropByZS = false;
433  if (frame.zsMarkAndPass())
434  dropByZS = true;
435  if (dropByZS && skipDroppedChannels)
436  continue;
437 
438  // Basic ADC decoding tools
439  const HcalRecoParam* param_ts = paramTS_->getValues(cell.rawId());
440  const HcalCalibrations& calib = cond.getHcalCalibrations(cell);
441  const HcalCalibrationWidths& calibWidth = cond.getHcalCalibrationWidths(cell);
442  const HcalQIECoder* channelCoder = cond.getHcalCoder(cell);
443  const HcalQIEShape* shape = cond.getHcalShape(channelCoder);
444  const HcalCoderDb coder(*channelCoder, *shape);
445 
446  const bool saveEffectivePeds = channelInfo->hasEffectivePedestals();
447  const HcalSiPMParameter& siPMParameter(*cond.getHcalSiPMParameter(cell));
448  const double fcByPE = siPMParameter.getFCByPE();
449  double darkCurrent = 0.;
450  double lambda = 0.;
451  if (!saveEffectivePeds || saveInfos_) {
452  // needed for the dark current in the M2 in alternative of the effectivePed
453  darkCurrent = siPMParameter.getDarkCurrent();
454  lambda = cond.getHcalSiPMCharacteristics()->getCrossTalk(siPMParameter.getType());
455  }
456 
457  // ADC to fC conversion
458  CaloSamples cs;
459  coder.adc2fC(frame, cs);
460 
461  // Prepare to iterate over time slices
462  const int nRead = cs.size();
463  const int maxTS = std::min(nRead, static_cast<int>(HBHEChannelInfo::MAXSAMPLES));
464  const int soi = tsFromDB_ ? param_ts->firstSample() : frame.presamples();
465  const RawChargeFromSample<DFrame> rcfs(sipmQTSShift_, sipmQNTStoSum_, cond, cell, cs, soi, frame, maxTS);
466  int soiCapid = 4;
467 
468  // Typical expected cases:
469  // maxTS = 10, SOI = 4 (typical 10-TS situation, in data or MC)
470  // maxTS = 10, SOI = 5 (new, for better modeling of SiPM noise in MC)
471  // maxTS = 8, SOI = 3 (typical 8-TS situation in data)
472  //
473  // We want to fill the HBHEChannelInfo object with either
474  // 8 or 10 time slices, depending on the maxTS value and
475  // on the "use8ts_" parameter setting. If we want 8 time
476  // slices in the HBHEChannelInfo, we want the SOI to fall
477  // on the time slice number 3. For now, this number is not
478  // expected to change and will be hardwired.
479  //
480  int nTSToCopy = maxTS;
481  int tsShift = 0;
482  if (maxTS > 8 && use8ts_) {
483  const int soiWanted = 3;
484 
485  // We need to chop off the excess time slices
486  // and configure the TS shift for filling
487  // HBHEChannelInfo from the data frame.
488  nTSToCopy = 8;
489  tsShift = soi - soiWanted;
490 
491  // Check that the shift will not result in
492  // accessing time slices out of bounds
493  if (tsShift < 0)
494  tsShift = 0;
495  else {
496  const int nExcessTS = nRead - nTSToCopy;
497  if (tsShift > nExcessTS)
498  tsShift = nExcessTS;
499  }
500  }
501 
502  // Go over time slices and fill the samples
503  for (int copyTS = 0; copyTS < nTSToCopy; ++copyTS) {
504  const int inputTS = copyTS + tsShift;
505  auto s(frame[inputTS]);
506  const uint8_t adc = s.adc();
507  const int capid = s.capid();
508  //optionally store "effective" pedestal (measured with bias voltage on)
509  // = QIE contribution + SiPM contribution (from dark current + crosstalk)
510  const double pedestal = saveEffectivePeds ? calib.effpedestal(capid) : calib.pedestal(capid);
511  const double pedestalWidth = saveEffectivePeds ? calibWidth.effpedestal(capid) : calibWidth.pedestal(capid);
512  const double gain = calib.respcorrgain(capid);
513  const double gainWidth = calibWidth.gain(capid);
514  //always use QIE-only pedestal for this computation
515  const double rawCharge = rcfs.getRawCharge(cs[inputTS], calib.pedestal(capid));
516  const float t = getTDCTimeFromSample(s);
517  const float dfc = getDifferentialChargeGain(*channelCoder, *shape, adc, capid, channelInfo->hasTimeInfo());
518  channelInfo->setSample(copyTS, adc, dfc, rawCharge, pedestal, pedestalWidth, gain, gainWidth, t);
519  if (inputTS == soi)
520  soiCapid = capid;
521  }
522 
523  // Fill the overall channel info items
524  const int fitSoi = soi - tsShift;
525  const int pulseShapeID = param_ts->pulseShapeID();
526  const std::pair<bool, bool> hwerr = findHWErrors(frame, maxTS);
527  channelInfo->setChannelInfo(cell,
528  pulseShapeID,
529  nTSToCopy,
530  fitSoi,
531  soiCapid,
532  darkCurrent,
533  fcByPE,
534  lambda,
535  hwerr.first,
536  hwerr.second,
537  taggedBadByDb || dropByZS);
538 
539  // If needed, add the channel info to the output collection
540  const bool makeThisRechit = !channelInfo->isDropped();
541  if (infos && (saveDroppedInfos_ || makeThisRechit))
542  infos->push_back(*channelInfo);
543 
544  // Reconstruct the rechit
545  if (rechits && makeThisRechit) {
546  const HcalRecoParam* pptr = nullptr;
547  if (recoParamsFromDB_)
548  pptr = param_ts;
549  HBHERecHit rh = reco_->reconstruct(*channelInfo, pptr, calib, isRealData);
550  if (rh.id().rawId()) {
551  setAsicSpecificBits(frame, coder, *channelInfo, calib, &rh);
552  setCommonStatusBits(*channelInfo, calib, &rh);
553  rechits->push_back(rh);
554  }
555  }
556  }
557 }
558 
560  const HcalCalibrations& /* calib */,
561  HBHERecHit* /* rh */) {}
562 
564  const HcalCoder& coder,
565  const HBHEChannelInfo& info,
566  const HcalCalibrations& calib,
567  HBHERecHit* rh) {
568  if (setNoiseFlagsQIE8_)
569  hbheFlagSetterQIE8_->rememberHit(*rh);
570 
572  hbhePulseShapeFlagSetterQIE8_->SetPulseShapeFlags(*rh, frame, coder, calib);
573 
576 }
577 
579  const HcalCoder& coder,
580  const HBHEChannelInfo& info,
581  const HcalCalibrations& calib,
582  HBHERecHit* rh) {
584  hbheFlagSetterQIE11_->rememberHit(*rh);
585 
587  hbhePulseShapeFlagSetterQIE11_->SetPulseShapeFlags(*rh, frame, coder, calib);
588 
591 }
592 
594  double ts[HBHEChannelInfo::MAXSAMPLES];
595  const unsigned nRead = info.nSamples();
596  for (unsigned i = 0; i < nRead; ++i)
597  ts[i] = info.tsCharge(i);
598  const bool passes = negEFilter_->checkPassFilter(info.id(), &ts[0], nRead);
599  if (!passes)
601 }
602 
603 // ------------ method called to produce the data ------------
605  using namespace edm;
606 
607  // Get the Hcal topology
609  eventSetup.get<HcalRecNumberingRecord>().get(htopo);
610  paramTS_->setTopo(htopo.product());
611 
612  // Fetch the calibrations
613  ESHandle<HcalDbService> conditions;
614  eventSetup.get<HcalDbRecord>().get(conditions);
615 
617  eventSetup.get<HcalChannelQualityRcd>().get("withTopo", p);
618 
620  eventSetup.get<HcalSeverityLevelComputerRcd>().get(mycomputer);
621 
622  // Configure the negative energy filter
625  eventSetup.get<HBHENegativeEFilterRcd>().get(negEHandle);
626  negEFilter_ = negEHandle.product();
627  }
628 
629  // Find the input data
630  unsigned maxOutputSize = 0;
632  if (processQIE8_) {
633  e.getByToken(tok_qie8_, hbDigis);
634  maxOutputSize += hbDigis->size();
635  }
636 
638  if (processQIE11_) {
639  e.getByToken(tok_qie11_, heDigis);
640  maxOutputSize += heDigis->size();
641  }
642 
643  // Create new output collections
644  std::unique_ptr<HBHEChannelInfoCollection> infos;
645  if (saveInfos_) {
646  infos = std::make_unique<HBHEChannelInfoCollection>();
647  infos->reserve(maxOutputSize);
648  }
649 
650  std::unique_ptr<HBHERecHitCollection> out;
651  if (makeRecHits_) {
652  out = std::make_unique<HBHERecHitCollection>();
653  out->reserve(maxOutputSize);
654  }
655 
656  // Process the input collections, filling the output ones
657  const bool isData = e.isRealData();
658  if (processQIE8_) {
659  if (setNoiseFlagsQIE8_)
660  hbheFlagSetterQIE8_->Clear();
661 
662  HBHEChannelInfo channelInfo(false, false);
663  processData<HBHEDataFrame>(
664  *hbDigis, *conditions, *p, *mycomputer, isData, &channelInfo, infos.get(), out.get(), use8ts_);
665  if (setNoiseFlagsQIE8_)
666  hbheFlagSetterQIE8_->SetFlagsFromRecHits(*out);
667  }
668 
669  if (processQIE11_) {
671  hbheFlagSetterQIE11_->Clear();
672 
673  HBHEChannelInfo channelInfo(true, saveEffectivePedestal_);
674  processData<QIE11DataFrame>(
675  *heDigis, *conditions, *p, *mycomputer, isData, &channelInfo, infos.get(), out.get(), use8ts_);
677  hbheFlagSetterQIE11_->SetFlagsFromRecHits(*out);
678  }
679 
680  // Add the output collections to the event record
681  if (saveInfos_)
682  e.put(std::move(infos));
683  if (makeRecHits_)
684  e.put(std::move(out));
685 }
686 
687 // ------------ method called when starting to processes a run ------------
690  es.get<HcalRecoParamsRcd>().get(p);
691  paramTS_ = std::make_unique<HcalRecoParams>(*p.product());
692 
693  if (reco_->isConfigurable()) {
695  if (!recoConfig_.get())
696  throw cms::Exception("HBHEPhase1BadConfig")
697  << "Invalid HBHEPhase1Reconstructor \"algoConfigClass\" parameter value \"" << algoConfigClass_ << '"'
698  << std::endl;
699  if (!reco_->configure(recoConfig_.get()))
700  throw cms::Exception("HBHEPhase1BadConfig")
701  << "Failed to configure HBHEPhase1Algo algorithm from EventSetup" << std::endl;
702  }
703 
706  es.get<HcalFrontEndMapRcd>().get(hfemap);
707  if (hfemap.isValid()) {
708  if (setNoiseFlagsQIE8_)
709  hbheFlagSetterQIE8_->SetFrontEndMap(hfemap.product());
711  hbheFlagSetterQIE11_->SetFrontEndMap(hfemap.product());
712  } else
713  edm::LogWarning("EventSetup") << "HBHEPhase1Reconstructor failed to get HcalFrontEndMap!" << std::endl;
714  }
715 
716  reco_->beginRun(r, es);
717 }
718 
720 
721 #define add_param_set(name) \
722  edm::ParameterSetDescription name; \
723  name.setAllowAnything(); \
724  desc.add<edm::ParameterSetDescription>(#name, name)
725 
726 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
729 
730  desc.add<edm::InputTag>("digiLabelQIE8");
731  desc.add<edm::InputTag>("digiLabelQIE11");
732  desc.add<std::string>("algoConfigClass");
733  desc.add<bool>("processQIE8");
734  desc.add<bool>("processQIE11");
735  desc.add<bool>("saveInfos");
736  desc.add<bool>("saveDroppedInfos");
737  desc.add<bool>("makeRecHits");
738  desc.add<bool>("dropZSmarkedPassed");
739  desc.add<bool>("tsFromDB");
740  desc.add<bool>("recoParamsFromDB");
741  desc.add<bool>("saveEffectivePedestal", false);
742  desc.add<bool>("use8ts", false);
743  desc.add<int>("sipmQTSShift", 0);
744  desc.add<int>("sipmQNTStoSum", 3);
745  desc.add<bool>("setNegativeFlagsQIE8");
746  desc.add<bool>("setNegativeFlagsQIE11");
747  desc.add<bool>("setNoiseFlagsQIE8");
748  desc.add<bool>("setNoiseFlagsQIE11");
749  desc.add<bool>("setPulseShapeFlagsQIE8");
750  desc.add<bool>("setPulseShapeFlagsQIE11");
751  desc.add<bool>("setLegacyFlagsQIE8");
752  desc.add<bool>("setLegacyFlagsQIE11");
753 
759 
760  descriptions.addDefault(desc);
761 }
762 
763 //define this as a plug-in
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
HBHEPhase1Reconstructor::recoConfig_
std::unique_ptr< AbsHcalAlgoData > recoConfig_
Definition: HBHEPhase1Reconstructor.cc:289
ecalMGPA::adc
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
Definition: EcalMGPASample.h:11
HBHEPhase1Reconstructor
Definition: HBHEPhase1Reconstructor.cc:250
HcalPhase1FlagLabels::HBHENegativeNoise
Definition: HcalPhase1FlagLabels.h:13
electrons_cff.bool
bool
Definition: electrons_cff.py:372
mps_fire.i
i
Definition: mps_fire.py:355
HBHEChannelInfo::hasTimeInfo
constexpr bool hasTimeInfo() const
Definition: HBHEChannelInfo.h:134
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
HBHEPhase1Reconstructor::HBHEPhase1Reconstructor
HBHEPhase1Reconstructor(const edm::ParameterSet &)
Definition: HBHEPhase1Reconstructor.cc:331
HBHEPhase1Reconstructor::hbheFlagSetterQIE11_
std::unique_ptr< HBHEStatusBitSetter > hbheFlagSetterQIE11_
Definition: HBHEPhase1Reconstructor.cc:295
HBHENegativeEFilter::checkPassFilter
bool checkPassFilter(const HcalDetId &id, const double *ts, unsigned lenTS) const
Definition: HBHENegativeEFilter.cc:76
HBHEPhase1Reconstructor::saveDroppedInfos_
bool saveDroppedInfos_
Definition: HBHEPhase1Reconstructor.cc:267
ESHandle.h
parseHBHEPhase1AlgoDescription.h
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
fwrapper::cs
unique_ptr< ClusterSequence > cs
Definition: fastjetfortran_madfks.cc:45
HcalChannelQualityRcd
Definition: HcalChannelQualityRcd.h:8
HcalQIECoder::charge
float charge(const HcalQIEShape &fShape, unsigned fAdc, unsigned fCapId) const
ADC [0..127] + capid [0..3] -> fC conversion.
Definition: HcalQIECoder.cc:20
edm::Run
Definition: Run.h:45
min
T min(T a, T b)
Definition: MathUtil.h:58
HBHEPulseShapeFlag.h
edm::EDGetTokenT
Definition: EDGetToken.h:33
CaloSamples.h
edm
HLT enums.
Definition: AlignableModifier.h:19
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
HBHERecHit
Definition: HBHERecHit.h:13
HcalCalibrationWidths::effpedestal
double effpedestal(int fCapId) const
get effective pedestal width for capid=0..3
Definition: HcalCalibrationWidths.h:18
HBHEPhase1Reconstructor::setCommonStatusBits
void setCommonStatusBits(const HBHEChannelInfo &info, const HcalCalibrations &calib, HBHERecHit *rh)
Definition: HBHEPhase1Reconstructor.cc:559
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
HcalSiPMParameter::getFCByPE
float getFCByPE() const
get fcByPE
Definition: HcalSiPMParameter.h:12
HLT_2018_cff.flagParametersQIE11
flagParametersQIE11
Definition: HLT_2018_cff.py:7031
data-class-funcs.q
q
Definition: data-class-funcs.py:169
EDProducer.h
edm::SortedCollection
Definition: SortedCollection.h:49
HcalGenericDetId.h
HcalPhase1FlagLabels.h
edm::SortedCollection::size
size_type size() const
Definition: SortedCollection.h:215
info
static const TGPicture * info(bool iBackgroundIsBlack)
Definition: FWCollectionSummaryWidget.cc:152
HBHEPhase1Reconstructor::beginRun
void beginRun(edm::Run const &, edm::EventSetup const &) override
Definition: HBHEPhase1Reconstructor.cc:688
HcalCoderDb::adc2fC
void adc2fC(const HBHEDataFrame &df, CaloSamples &lf) const override
Definition: HcalCoderDb.cc:73
HcalChannelQuality
Definition: HcalChannelQuality.h:17
HBHEPhase1Reconstructor::dropZSmarkedPassed_
bool dropZSmarkedPassed_
Definition: HBHEPhase1Reconstructor.cc:269
hcaldqm::utilities::maxTS
int maxTS(DIGI const &digi, double ped=0)
Definition: Utilities.h:102
HcalBarrel
Definition: HcalAssistant.h:33
HBHEPhase1Reconstructor::algoConfigClass_
std::string algoConfigClass_
Definition: HBHEPhase1Reconstructor.cc:263
edm::Handle
Definition: AssociativeIterator.h:50
HBHEPhase1Reconstructor::setNegativeFlagsQIE11_
bool setNegativeFlagsQIE11_
Definition: HBHEPhase1Reconstructor.cc:279
HcalCondObjectContainer::getValues
const Item * getValues(DetId fId, bool throwOnFail=true) const
Definition: HcalCondObjectContainer.h:159
HBHEChannelInfo::setSample
constexpr void setSample(const unsigned ts, const uint8_t rawADC, const float differentialChargeGain, const double q, const double ped, const double pedWidth, const double g, const double gainWidth, const float t)
Definition: HBHEChannelInfo.h:106
HcalQIESample
Definition: HcalQIESample.h:32
HBHEPhase1Reconstructor::sipmQTSShift_
int sipmQTSShift_
Definition: HBHEPhase1Reconstructor.cc:274
HcalCoderDb.h
HBHEPhase1Reconstructor::setPulseShapeFlagsQIE11_
bool setPulseShapeFlagsQIE11_
Definition: HBHEPhase1Reconstructor.cc:283
HLT_2018_cff.flagParametersQIE8
flagParametersQIE8
Definition: HLT_2018_cff.py:7061
MakerMacros.h
add_param_set
#define add_param_set(name)
Definition: HBHEPhase1Reconstructor.cc:721
HBHEChannelInfo::isDropped
constexpr bool isDropped() const
Definition: HBHEChannelInfo.h:139
alignCSCRings.s
s
Definition: alignCSCRings.py:92
HBHEPhase1Reconstructor::tok_qie8_
edm::EDGetTokenT< HBHEDigiCollection > tok_qie8_
Definition: HBHEPhase1Reconstructor.cc:286
QIE11DataFrame::Sample
Definition: QIE11DataFrame.h:25
HBHEPhase1Reconstructor::makeRecHits_
bool makeRecHits_
Definition: HBHEPhase1Reconstructor.cc:268
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
HcalRecoParam
Definition: HcalRecoParam.h:16
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
HBHENegativeEFilterRcd
Definition: HBHENegativeEFilterRcd.h:23
HBHENegativeEFilter
Definition: HBHENegativeEFilter.h:16
HBHEPhase1Reconstructor::~HBHEPhase1Reconstructor
~HBHEPhase1Reconstructor() override
Definition: HBHEPhase1Reconstructor.cc:388
HcalDigiCollections.h
HcalSpecialTimes::getTDCTime
constexpr float getTDCTime(const int tdc)
Definition: HcalSpecialTimes.h:55
HcalChannelStatus
Definition: HcalChannelStatus.h:13
HcalSpecialTimes::UNKNOWN_T_NOTDC
constexpr float UNKNOWN_T_NOTDC
Definition: HcalSpecialTimes.h:42
HBHEPhase1Reconstructor::runHBHENegativeEFilter
void runHBHENegativeEFilter(const HBHEChannelInfo &info, HBHERecHit *rh)
Definition: HBHEPhase1Reconstructor.cc:593
HLTBitAnalyser_cfi.isData
isData
Definition: HLTBitAnalyser_cfi.py:29
HcalSeverityLevelComputer
Definition: HcalSeverityLevelComputer.h:24
edm::ESHandle< HcalTopology >
HBHEPhase1Reconstructor::tok_qie11_
edm::EDGetTokenT< QIE11DigiCollection > tok_qie11_
Definition: HBHEPhase1Reconstructor.cc:287
HBHEPhase1Reconstructor::paramTS_
std::unique_ptr< HcalRecoParams > paramTS_
Definition: HBHEPhase1Reconstructor.cc:290
HBHEPhase1Reconstructor::setNoiseFlagsQIE8_
bool setNoiseFlagsQIE8_
Definition: HBHEPhase1Reconstructor.cc:280
HcalDbRecord.h
HcalCalibrations
Definition: HcalCalibrations.h:9
HBHEChannelInfo::hasEffectivePedestals
constexpr bool hasEffectivePedestals() const
Definition: HBHEChannelInfo.h:135
OrderedSet.t
t
Definition: OrderedSet.py:90
HcalRecNumberingRecord
Definition: HcalRecNumberingRecord.h:23
HBHEPhase1Reconstructor::reco_
std::unique_ptr< AbsHBHEPhase1Algo > reco_
Definition: HBHEPhase1Reconstructor.cc:288
HBHEPhase1Reconstructor::setPulseShapeFlagsQIE8_
bool setPulseShapeFlagsQIE8_
Definition: HBHEPhase1Reconstructor.cc:282
mitigatedMETSequence_cff.U
U
Definition: mitigatedMETSequence_cff.py:36
HBHEPhase1Reconstructor::hbhePulseShapeFlagSetterQIE11_
std::unique_ptr< HBHEPulseShapeFlagSetter > hbhePulseShapeFlagSetterQIE11_
Definition: HBHEPhase1Reconstructor.cc:297
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
calib
Definition: CalibElectron.h:12
HBHEPhase1Reconstructor::saveEffectivePedestal_
bool saveEffectivePedestal_
Definition: HBHEPhase1Reconstructor.cc:272
HcalSeverityLevelComputerRcd.h
edm::LogWarning
Definition: MessageLogger.h:141
HBHEDataFrame
Definition: HBHEDataFrame.h:14
cond
Definition: plugin.cc:23
HBHEPhase1Reconstructor::tsFromDB_
bool tsFromDB_
Definition: HBHEPhase1Reconstructor.cc:270
HcalChannelStatus::getValue
uint32_t getValue() const
Definition: HcalChannelStatus.h:60
HBHEPhase1Reconstructor::processQIE11_
bool processQIE11_
Definition: HBHEPhase1Reconstructor.cc:265
edm::ParameterSet
Definition: ParameterSet.h:36
Event.h
ParameterSet
Definition: Functions.h:16
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
HcalRecoParam::pulseShapeID
constexpr unsigned int pulseShapeID() const
Definition: HcalRecoParam.h:33
fetchHcalAlgoData
std::unique_ptr< AbsHcalAlgoData > fetchHcalAlgoData(const std::string &className, const edm::EventSetup &es)
Definition: fetchHcalAlgoData.cc:21
HBHEPhase1Reconstructor::endRun
void endRun(edm::Run const &, edm::EventSetup const &) override
Definition: HBHEPhase1Reconstructor.cc:719
MessageLogger_cfi.infos
infos
Definition: MessageLogger_cfi.py:67
HBHEPhase1Reconstructor::setNoiseFlagsQIE11_
bool setNoiseFlagsQIE11_
Definition: HBHEPhase1Reconstructor.cc:281
es_hardcode_cfi.gainWidth
gainWidth
Definition: es_hardcode_cfi.py:89
TrackInfoProducer_cfi.rechits
rechits
Definition: TrackInfoProducer_cfi.py:9
HcalDetId::subdet
constexpr HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:138
HBHEPhase1Reconstructor::processData
void processData(const Collection &coll, const HcalDbService &cond, const HcalChannelQuality &qual, const HcalSeverityLevelComputer &severity, const bool isRealData, HBHEChannelInfo *info, HBHEChannelInfoCollection *infoColl, HBHERecHitCollection *rechits, const bool use8ts)
Definition: HBHEPhase1Reconstructor.cc:397
HcalDetId
Definition: HcalDetId.h:12
createfilelist.int
int
Definition: createfilelist.py:10
HLT_2018_cff.severity
severity
Definition: HLT_2018_cff.py:48631
HcalFrontEndMapRcd
Definition: HcalFrontEndMapRcd.h:7
fillDescriptionForParseHBHEPhase1Algo
edm::ParameterSetDescription fillDescriptionForParseHBHEPhase1Algo()
Definition: parseHBHEPhase1AlgoDescription.cc:144
edm::stream::EDProducer
Definition: EDProducer.h:38
HLT_2018_cff.sipmQNTStoSum
sipmQNTStoSum
Definition: HLT_2018_cff.py:7114
EcalCondDBWriter_cfi.pedestal
pedestal
Definition: EcalCondDBWriter_cfi.py:49
edm::EventSetup
Definition: EventSetup.h:57
QIE11DataFrame::capidError
constexpr bool capidError() const
Definition: QIE11DataFrame.h:92
CaloSamples
Definition: CaloSamples.h:14
HBHEPhase1Reconstructor::sipmQNTStoSum_
int sipmQNTStoSum_
Definition: HBHEPhase1Reconstructor.cc:275
get
#define get
HBHEChannelInfo::setChannelInfo
constexpr void setChannelInfo(const HcalDetId &detId, const int recoShape, const unsigned nSamp, const unsigned iSoi, const int iCapid, const double darkCurrent, const double fcByPE, const double lambda, const bool linkError, const bool capidError, const bool dropThisChannel)
Definition: HBHEChannelInfo.h:80
edm::ESHandleBase::isValid
bool isValid() const
Definition: ESHandle.h:44
es_hardcode_cfi.pedestalWidth
pedestalWidth
Definition: es_hardcode_cfi.py:92
HcalQIECoder
Definition: HcalQIECoder.h:20
alignCSCRings.r
r
Definition: alignCSCRings.py:93
PedestalClient_cfi.gain
gain
Definition: PedestalClient_cfi.py:37
HcalSubdetector
HcalSubdetector
Definition: HcalAssistant.h:31
HLT_2018_cff.pulseShapeParametersQIE8
pulseShapeParametersQIE8
Definition: HLT_2018_cff.py:7033
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
HcalRecoParam::firstSample
constexpr unsigned int firstSample() const
Definition: HcalRecoParam.h:31
HBHEChannelInfo::MAXSAMPLES
static const unsigned MAXSAMPLES
Definition: HBHEChannelInfo.h:19
HcalDbService
Definition: HcalDbService.h:26
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
HLT_2018_cff.use8ts
use8ts
Definition: HLT_2018_cff.py:7020
HcalCalibrationWidths::pedestal
double pedestal(int fCapId) const
get pedestal width for capid=0..3
Definition: HcalCalibrationWidths.h:16
HcalEndcap
Definition: HcalAssistant.h:34
Frameworkfwd.h
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
HBHENegativeEFilterRcd.h
HcalCalibrationWidths::gain
double gain(int fCapId) const
get gain width for capid=0..3
Definition: HcalCalibrationWidths.h:14
amptDefault_cfi.frame
frame
Definition: amptDefault_cfi.py:12
QIE11DataFrame
Definition: QIE11DataFrame.h:11
Exception
Definition: hltDiff.cc:246
HBHEPhase1Reconstructor::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: HBHEPhase1Reconstructor.cc:604
options_cfi.eventSetup
eventSetup
Definition: options_cfi.py:12
HcalCoder
Definition: HcalCoder.h:19
HBHEPhase1Reconstructor::processQIE8_
bool processQIE8_
Definition: HBHEPhase1Reconstructor.cc:264
HBHENegativeEFilter.h
HBHEPhase1Reconstructor::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: HBHEPhase1Reconstructor.cc:727
es_hardcode_cfi.darkCurrent
darkCurrent
Definition: es_hardcode_cfi.py:86
HcalRecoParamsRcd
Definition: HcalRecoParamsRcd.h:6
HLT_2018_cff.pulseShapeParametersQIE11
pulseShapeParametersQIE11
Definition: HLT_2018_cff.py:7028
HcalRecHitCollections.h
HcalSeverityLevelComputer.h
QIE11DataFrame::linkError
constexpr bool linkError() const
was there a link error?
Definition: QIE11DataFrame.h:89
Exception.h
HcalQIEShape
Definition: HcalQIEShape.h:17
HcalCoderDb
Definition: HcalCoderDb.h:15
HcalDbService.h
MillePedeFileConverter_cfg.out
out
Definition: MillePedeFileConverter_cfg.py:31
HBHEPhase1Reconstructor::use8ts_
bool use8ts_
Definition: HBHEPhase1Reconstructor.cc:273
CaloRecHit::setFlagField
constexpr void setFlagField(uint32_t value, int base, int width=1)
Definition: CaloRecHit.h:36
parseHBHEPhase1AlgoDescription
std::unique_ptr< AbsHBHEPhase1Algo > parseHBHEPhase1AlgoDescription(const edm::ParameterSet &ps)
Definition: parseHBHEPhase1AlgoDescription.cc:107
cms::Exception
Definition: Exception.h:70
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
HBHEPhase1Reconstructor::setAsicSpecificBits
void setAsicSpecificBits(const HBHEDataFrame &frame, const HcalCoder &coder, const HBHEChannelInfo &info, const HcalCalibrations &calib, HBHERecHit *rh)
Definition: HBHEPhase1Reconstructor.cc:563
HBHEPhase1Reconstructor::setNegativeFlagsQIE8_
bool setNegativeFlagsQIE8_
Definition: HBHEPhase1Reconstructor.cc:278
HcalDbRecord
Definition: HcalDbRecord.h:30
ParameterSet.h
fetchHcalAlgoData.h
HBHERecHit::id
constexpr HcalDetId id() const
get the id
Definition: HBHERecHit.h:39
HcalSiPMnonlinearity
Definition: HcalSiPMnonlinearity.h:7
HcalCalibrationWidths
Definition: HcalCalibrationWidths.h:9
edm::Event
Definition: Event.h:73
edm::ConfigurationDescriptions::addDefault
void addDefault(ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:99
HBHEPhase1Reconstructor::recoParamsFromDB_
bool recoParamsFromDB_
Definition: HBHEPhase1Reconstructor.cc:271
StreamID.h
HBHEPhase1Reconstructor::saveInfos_
bool saveInfos_
Definition: HBHEPhase1Reconstructor.cc:266
HcalSiPMnonlinearity.h
HcalSiPMParameter
Definition: HcalSiPMParameter.h:7
edm::InputTag
Definition: InputTag.h:15
HcalSeverityLevelComputerRcd
Definition: HcalSeverityLevelComputerRcd.h:23
HBHEPhase1Reconstructor::hbhePulseShapeFlagSetterQIE8_
std::unique_ptr< HBHEPulseShapeFlagSetter > hbhePulseShapeFlagSetterQIE8_
Definition: HBHEPhase1Reconstructor.cc:296
HBHEStatusBitSetter.h
HBHEChannelInfo
Definition: HBHEChannelInfo.h:15
HBHEPhase1Reconstructor::negEFilter_
const HBHENegativeEFilter * negEFilter_
Definition: HBHEPhase1Reconstructor.cc:293
HLT_2018_cff.sipmQTSShift
sipmQTSShift
Definition: HLT_2018_cff.py:7026
edm::DataFrameContainer::size
size_type size() const
Definition: DataFrameContainer.h:162
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
HBHEPhase1Reconstructor::hbheFlagSetterQIE8_
std::unique_ptr< HBHEStatusBitSetter > hbheFlagSetterQIE8_
Definition: HBHEPhase1Reconstructor.cc:294