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