CMS 3D CMS Logo

DataMixingHcalDigiWorker.cc
Go to the documentation of this file.
1 // File: DataMixingHcalDigiWorker.cc
2 // Description: see DataMixingHcalDigiWorker.h
3 // Author: Mike Hildreth, University of Notre Dame
4 //
5 //--------------------------------------------
6 
11 #include <map>
12 #include <memory>
13 // calibration headers, for future reference
18 //
19 //
21 
22 using namespace std;
23 
24 namespace {
25 
26  typedef std::multimap<DetId, CaloSamples> HcalDigiMap;
27 
28  template <class DIGI>
29  void convertFc2adc(const CaloSamples &fC, const HcalDbService &conditions, DIGI &digi, int capIdOffset = 0) {
30  HcalDetId id = fC.id();
31  const HcalQIECoder *channelCoder = conditions.getHcalCoder(id);
32  const HcalQIEShape *shape = conditions.getHcalShape(channelCoder);
33  HcalCoderDb coder(*channelCoder, *shape);
34  coder.fC2adc(fC, digi, capIdOffset);
35  }
36 
37  template <class DIGI>
38  void convertAdc2fChelper(const DIGI &digi, const HcalDbService &conditions, CaloSamples &fC, const HcalDetId &id) {
39  const HcalCalibrations &calib = conditions.getHcalCalibrations(id);
40  for (int i = 0; i < digi.size(); ++i) {
41  int capId(digi.sample(i).capid());
42  fC[i] -= calib.pedestal(capId);
43  }
44  }
45 
46  template <>
47  void convertAdc2fChelper<QIE10DataFrame>(const QIE10DataFrame &digi,
48  const HcalDbService &conditions,
49  CaloSamples &fC,
50  const HcalDetId &id) {
51  const HcalCalibrations &calib = conditions.getHcalCalibrations(id);
52  for (int i = 0; i < digi.samples(); ++i) {
53  int capId(digi[i].capid());
54  fC[i] -= calib.pedestal(capId);
55  }
56  }
57 
58  template <>
59  void convertAdc2fChelper<QIE11DataFrame>(const QIE11DataFrame &digi,
60  const HcalDbService &conditions,
61  CaloSamples &fC,
62  const HcalDetId &id) {
63  const HcalCalibrations &calib = conditions.getHcalCalibrations(id);
64  for (int i = 0; i < digi.samples(); ++i) {
65  int capId(digi[i].capid());
66  fC[i] -= calib.pedestal(capId);
67  }
68  }
69 
70  template <class DIGI>
71  void convertAdc2fC(const DIGI &digi, const HcalDbService &conditions, bool keepPedestals, CaloSamples &fC) {
72  HcalDetId id(digi.id());
73  const HcalQIECoder *channelCoder = conditions.getHcalCoder(id);
74  const HcalQIEShape *shape = conditions.getHcalShape(channelCoder);
75  HcalCoderDb coder(*channelCoder, *shape);
76  coder.adc2fC(digi, fC);
77  if (!keepPedestals) { // subtract pedestals
78  convertAdc2fChelper(digi, conditions, fC, id);
79  }
80  }
81 
82  template <class DIGIS>
83  void convertHcalDigis(const DIGIS &digis, const HcalDbService &conditions, bool keepPedestals, HcalDigiMap &map) {
84  for (auto digi = digis.begin(); digi != digis.end(); ++digi) {
85  CaloSamples fC;
86  convertAdc2fC(*digi, conditions, keepPedestals, fC);
87  if (!keepPedestals && map.find(digi->id()) == map.end()) {
88  edm::LogWarning("DataMixingHcalDigiWorker")
89  << "No signal hits found for HCAL cell " << digi->id() << " Pedestals may be lost for mixed hit";
90  }
91  map.insert(HcalDigiMap::value_type(digi->id(), fC));
92  }
93  }
94 
95  template <>
96  void convertHcalDigis<QIE10DigiCollection>(const QIE10DigiCollection &digis,
97  const HcalDbService &conditions,
98  bool keepPedestals,
99  HcalDigiMap &map) {
100  for (auto digiItr = digis.begin(); digiItr != digis.end(); ++digiItr) {
101  QIE10DataFrame digi(*digiItr);
102  CaloSamples fC;
103  convertAdc2fC(digi, conditions, keepPedestals, fC);
104  if (!keepPedestals && map.find(digi.id()) == map.end()) {
105  edm::LogWarning("DataMixingHcalDigiWorker")
106  << "No signal hits found for HCAL cell " << digi.id() << " Pedestals may be lost for mixed hit";
107  }
108  map.insert(HcalDigiMap::value_type(digi.id(), fC));
109  }
110  }
111 
112  template <>
113  void convertHcalDigis<QIE11DigiCollection>(const QIE11DigiCollection &digis,
114  const HcalDbService &conditions,
115  bool keepPedestals,
116  HcalDigiMap &map) {
117  for (auto digiItr = digis.begin(); digiItr != digis.end(); ++digiItr) {
118  QIE11DataFrame digi(*digiItr);
119  CaloSamples fC;
120  convertAdc2fC(digi, conditions, keepPedestals, fC);
121  if (!keepPedestals && map.find(digi.id()) == map.end()) {
122  edm::LogWarning("DataMixingHcalDigiWorker")
123  << "No signal hits found for HCAL cell " << digi.id() << " Pedestals may be lost for mixed hit";
124  }
125  map.insert(HcalDigiMap::value_type(digi.id(), fC));
126  }
127  }
128 
129  template <class DIGIS>
130  bool convertSignalHcalDigis(const edm::Event &e,
131  const edm::EDGetTokenT<DIGIS> &token,
132  const HcalDbService &conditions,
133  HcalDigiMap &map) {
134  edm::Handle<DIGIS> digis;
135  if (!e.getByToken(token, digis))
136  return false;
137  convertHcalDigis(*digis, conditions, true, map); // keep pedestals
138  return true;
139  }
140 
141  template <class DIGIS>
142  bool convertPileupHcalDigis(const edm::EventPrincipal &ep,
143  const edm::InputTag &tag,
144  const edm::ModuleCallingContext *mcc,
145  const HcalDbService &conditions,
146  HcalDigiMap &map) {
147  auto digis = edm::getProductByTag<DIGIS>(ep, tag, mcc);
148  if (!digis)
149  return false;
150  convertHcalDigis(*(digis->product()), conditions, false,
151  map); // subtract pedestals
152  return true;
153  }
154 
155  template <class DIGIS>
156  void buildHcalDigisHelper(DIGIS &digis,
157  const DetId &formerID,
158  CaloSamples &resultSample,
159  const HcalDbService &conditions) {
160  // make new digi
161  digis.push_back(typename DIGIS::value_type(formerID));
162  convertFc2adc(resultSample, conditions, digis.back(),
163  0); // FR guess: simulation starts with 0
164  }
165 
166  template <>
167  void buildHcalDigisHelper<QIE10DigiCollection>(QIE10DigiCollection &digis,
168  const DetId &formerID,
169  CaloSamples &resultSample,
170  const HcalDbService &conditions) {
171  // make new digi
172  digis.push_back(formerID.rawId());
173  QIE10DataFrame digi(digis.back());
174  convertFc2adc(resultSample, conditions, digi,
175  0); // FR guess: simulation starts with 0
176  }
177 
178  template <>
179  void buildHcalDigisHelper<QIE11DigiCollection>(QIE11DigiCollection &digis,
180  const DetId &formerID,
181  CaloSamples &resultSample,
182  const HcalDbService &conditions) {
183  // make new digi
184  digis.push_back(formerID.rawId());
185  QIE11DataFrame digi(digis.back());
186  convertFc2adc(resultSample, conditions, digi,
187  0); // FR guess: simulation starts with 0
188  }
189 
190  template <class DIGIS>
191  std::unique_ptr<DIGIS> buildHcalDigis(const HcalDigiMap &map, const HcalDbService &conditions) {
192  std::unique_ptr<DIGIS> digis(new DIGIS);
193  // loop over the maps we have, re-making individual hits or digis if
194  // necessary.
195  DetId formerID = 0;
196  CaloSamples resultSample;
197 
198  for (auto hit = map.begin(); hit != map.end(); ++hit) {
199  DetId currentID = hit->first;
200  const CaloSamples &hitSample = hit->second;
201 
202  if (currentID == formerID) { // accumulating hits
203  // loop over digi samples in each CaloSample
204  unsigned int sizenew = (hitSample).size();
205  unsigned int sizeold = resultSample.size();
206  if (sizenew > sizeold) { // extend sample
207  resultSample.setSize(sizenew);
208  }
209  for (unsigned int isamp = 0; isamp < sizenew; isamp++) { // add new values
210  resultSample[isamp] += hitSample[isamp]; // for debugging below
211  }
212  }
213  auto hit1 = hit;
214  bool lastEntry = (++hit1 == map.end());
215  if (currentID != formerID || lastEntry) { // store current digi
216  if (formerID > 0 || lastEntry) {
217  // make new digi
218  buildHcalDigisHelper(*digis, formerID, resultSample, conditions);
219  }
220  // reset pointers for next iteration
221  formerID = currentID;
222  resultSample = hitSample;
223  }
224  }
225  return digis;
226  }
227 
228 } // namespace
229 
230 namespace edm {
231 
232  // Virtual constructor
233 
234  DataMixingHcalDigiWorker::DataMixingHcalDigiWorker() {}
235 
236  // Constructor
237  DataMixingHcalDigiWorker::DataMixingHcalDigiWorker(const edm::ParameterSet &ps, edm::ConsumesCollector &&iC)
238  : label_(ps.getParameter<std::string>("Label")) {
239  // get the subdetector names
240  // this->getSubdetectorNames(); //something like this may be useful to
241  // check what we are supposed to do...
242 
243  // declare the products to produce
244 
245  // Hcal
246 
247  HBHEdigiCollectionSig_ = ps.getParameter<edm::InputTag>("HBHEdigiCollectionSig");
248  HOdigiCollectionSig_ = ps.getParameter<edm::InputTag>("HOdigiCollectionSig");
249  HFdigiCollectionSig_ = ps.getParameter<edm::InputTag>("HFdigiCollectionSig");
250  ZDCdigiCollectionSig_ = ps.getParameter<edm::InputTag>("ZDCdigiCollectionSig");
251  QIE10digiCollectionSig_ = ps.getParameter<edm::InputTag>("QIE10digiCollectionSig");
252  QIE11digiCollectionSig_ = ps.getParameter<edm::InputTag>("QIE11digiCollectionSig");
253 
254  HBHEPileInputTag_ = ps.getParameter<edm::InputTag>("HBHEPileInputTag");
255  HOPileInputTag_ = ps.getParameter<edm::InputTag>("HOPileInputTag");
256  HFPileInputTag_ = ps.getParameter<edm::InputTag>("HFPileInputTag");
257  ZDCPileInputTag_ = ps.getParameter<edm::InputTag>("ZDCPileInputTag");
258  QIE10PileInputTag_ = ps.getParameter<edm::InputTag>("QIE10PileInputTag");
259  QIE11PileInputTag_ = ps.getParameter<edm::InputTag>("QIE11PileInputTag");
260 
266 
272 
273  DoZDC_ = false;
274  if (!ZDCPileInputTag_.label().empty())
275  DoZDC_ = true;
276 
277  if (DoZDC_) {
280  }
281 
282  HBHEDigiCollectionDM_ = ps.getParameter<std::string>("HBHEDigiCollectionDM");
283  HODigiCollectionDM_ = ps.getParameter<std::string>("HODigiCollectionDM");
284  HFDigiCollectionDM_ = ps.getParameter<std::string>("HFDigiCollectionDM");
285  ZDCDigiCollectionDM_ = ps.getParameter<std::string>("ZDCDigiCollectionDM");
286  QIE10DigiCollectionDM_ = ps.getParameter<std::string>("QIE10DigiCollectionDM");
287  QIE11DigiCollectionDM_ = ps.getParameter<std::string>("QIE11DigiCollectionDM");
288  }
289 
290  // Virtual destructor needed.
292 
294  // Calibration stuff will look like this:
295  // get conditions
296  edm::ESHandle<HcalDbService> conditions;
297  ES.get<HcalDbRecord>().get(conditions);
298 
299  // fill in maps of hits
300 
301  LogInfo("DataMixingHcalDigiWorker") << "===============> adding MC signals for " << e.id();
302  convertSignalHcalDigis<HBHEDigiCollection>(e, HBHEDigiToken_, *conditions, HBHEDigiStorage_);
303  convertSignalHcalDigis<HODigiCollection>(e, HODigiToken_, *conditions, HODigiStorage_);
304  convertSignalHcalDigis<HFDigiCollection>(e, HFDigiToken_, *conditions, HFDigiStorage_);
305  convertSignalHcalDigis<QIE10DigiCollection>(e, QIE10DigiToken_, *conditions, QIE10DigiStorage_);
306  convertSignalHcalDigis<QIE11DigiCollection>(e, QIE11DigiToken_, *conditions, QIE11DigiStorage_);
307 
308  // ZDC next
309 
310  if (DoZDC_) {
311  Handle<ZDCDigiCollection> pZDCDigis;
312 
313  const ZDCDigiCollection *ZDCDigis = nullptr;
314 
315  if (e.getByToken(ZDCDigiToken_, pZDCDigis)) {
316  ZDCDigis = pZDCDigis.product(); // get a ptr to the product
317 #ifdef DEBUG
318  LogDebug("DataMixingHcalDigiWorker") << "total # ZDC digis: " << ZDCDigis->size();
319 #endif
320  }
321 
322  if (ZDCDigis) {
323  // loop over digis, storing them in a map so we can add pileup later
324  for (ZDCDigiCollection::const_iterator it = ZDCDigis->begin(); it != ZDCDigis->end(); ++it) {
325  // calibration, for future reference: (same block for all Hcal types)
326  // ZDC is different
327  HcalZDCDetId cell = it->id();
328  // const HcalCalibrations&
329  // calibrations=conditions->getHcalCalibrations(cell);
330  const HcalQIECoder *channelCoder = conditions->getHcalCoder(cell);
331  const HcalQIEShape *shape = conditions->getHcalShape(channelCoder); // this one is generic
332  HcalCoderDb coder(*channelCoder, *shape);
333 
334  CaloSamples tool;
335  coder.adc2fC((*it), tool);
336 
337  ZDCDigiStorage_.insert(ZDCDigiMap::value_type((it->id()), tool));
338 
339 #ifdef DEBUG
340  // Commented out because this does not compile anymore
341  // LogDebug("DataMixingHcalDigiWorker") << "processed ZDCDigi with
342  // rawId: "
343  // << it->id() << "\n"
344  // << " digi energy: " <<
345  // it->energy();
346 #endif
347  }
348  }
349  }
350 
351  } // end of addHCalSignals
352 
354  const EventPrincipal *ep,
355  unsigned int eventNr,
356  const edm::EventSetup &ES,
357  ModuleCallingContext const *mcc) {
358  LogDebug("DataMixingHcalDigiWorker") << "\n===============> adding pileups from event " << ep->id()
359  << " for bunchcrossing " << bcr;
360 
361  // get conditions
362  edm::ESHandle<HcalDbService> conditions;
363  ES.get<HcalDbRecord>().get(conditions);
364 
365  convertPileupHcalDigis<HBHEDigiCollection>(*ep, HBHEPileInputTag_, mcc, *conditions, HBHEDigiStorage_);
366  convertPileupHcalDigis<HODigiCollection>(*ep, HOPileInputTag_, mcc, *conditions, HODigiStorage_);
367  convertPileupHcalDigis<HFDigiCollection>(*ep, HFPileInputTag_, mcc, *conditions, HFDigiStorage_);
368  convertPileupHcalDigis<QIE10DigiCollection>(*ep, QIE10PileInputTag_, mcc, *conditions, QIE10DigiStorage_);
369  convertPileupHcalDigis<QIE11DigiCollection>(*ep, QIE11PileInputTag_, mcc, *conditions, QIE11DigiStorage_);
370 
371  // ZDC Next
372 
373  if (DoZDC_) {
374  std::shared_ptr<Wrapper<ZDCDigiCollection> const> ZDCDigisPTR =
375  getProductByTag<ZDCDigiCollection>(*ep, ZDCPileInputTag_, mcc);
376 
377  if (ZDCDigisPTR) {
378  const ZDCDigiCollection *ZDCDigis = const_cast<ZDCDigiCollection *>(ZDCDigisPTR->product());
379 
380  LogDebug("DataMixingHcalDigiWorker") << "total # ZDC digis: " << ZDCDigis->size();
381 
382  // loop over digis, adding these to the existing maps
383  for (ZDCDigiCollection::const_iterator it = ZDCDigis->begin(); it != ZDCDigis->end(); ++it) {
384  // calibration, for future reference: (same block for all Hcal types)
385  // ZDC is different
386  HcalZDCDetId cell = it->id();
387  const HcalQIECoder *channelCoder = conditions->getHcalCoder(cell);
388  const HcalQIEShape *shape = conditions->getHcalShape(channelCoder); // this one is generic
389  HcalCoderDb coder(*channelCoder, *shape);
390 
391  CaloSamples tool;
392  coder.adc2fC((*it), tool);
393 
394  ZDCDigiStorage_.insert(ZDCDigiMap::value_type((it->id()), tool));
395 
396 #ifdef DEBUG
397  // Commented out because this does not compile anymore
398  // LogDebug("DataMixingHcalDigiWorker") << "processed ZDCDigi with
399  // rawId: "
400  // << it->id() << "\n"
401  // << " digi energy: " <<
402  // it->energy();
403 #endif
404  }
405  }
406  }
407  }
408 
410  edm::ESHandle<HcalDbService> conditions;
411  ES.get<HcalDbRecord>().get(conditions);
412 
413  // collection of digis to put in the event
414  std::unique_ptr<HBHEDigiCollection> HBHEdigis = buildHcalDigis<HBHEDigiCollection>(HBHEDigiStorage_, *conditions);
415  std::unique_ptr<HODigiCollection> HOdigis = buildHcalDigis<HODigiCollection>(HODigiStorage_, *conditions);
416  std::unique_ptr<HFDigiCollection> HFdigis = buildHcalDigis<HFDigiCollection>(HFDigiStorage_, *conditions);
417  std::unique_ptr<QIE10DigiCollection> QIE10digis =
418  buildHcalDigis<QIE10DigiCollection>(QIE10DigiStorage_, *conditions);
419  std::unique_ptr<QIE11DigiCollection> QIE11digis =
420  buildHcalDigis<QIE11DigiCollection>(QIE11DigiStorage_, *conditions);
421  std::unique_ptr<ZDCDigiCollection> ZDCdigis(new ZDCDigiCollection);
422 
423  // loop over the maps we have, re-making individual hits or digis if
424  // necessary.
425  DetId formerID = 0;
426  DetId currentID;
427 
428  double fC_new;
429  double fC_old;
430  double fC_sum;
431 
432  // ZDC next...
433 
434  // loop over the maps we have, re-making individual hits or digis if
435  // necessary.
436  formerID = 0;
437  CaloSamples ZDC_old;
438 
439  ZDCDigiMap::const_iterator iZDCchk;
440 
441  for (ZDCDigiMap::const_iterator iZDC = ZDCDigiStorage_.begin(); iZDC != ZDCDigiStorage_.end(); ++iZDC) {
442  currentID = iZDC->first;
443 
444  if (currentID == formerID) { // we have to add these digis together
445 
446  // loop over digi samples in each CaloSample
447  unsigned int sizenew = (iZDC->second).size();
448  unsigned int sizeold = ZDC_old.size();
449 
450  unsigned int max_samp = std::max(sizenew, sizeold);
451 
452  CaloSamples ZDC_bigger(currentID, max_samp);
453 
454  bool usenew = false;
455 
456  if (sizenew > sizeold)
457  usenew = true;
458 
459  // samples from different events can be of different lengths - sum all
460  // that overlap.
461 
462  for (unsigned int isamp = 0; isamp < max_samp; isamp++) {
463  if (isamp < sizenew) {
464  fC_new = (iZDC->second)[isamp];
465  } else {
466  fC_new = 0;
467  }
468 
469  if (isamp < sizeold) {
470  fC_old = ZDC_old[isamp];
471  } else {
472  fC_old = 0;
473  }
474 
475  // add values
476  fC_sum = fC_new + fC_old;
477 
478  if (usenew) {
479  ZDC_bigger[isamp] = fC_sum;
480  } else {
481  ZDC_old[isamp] = fC_sum;
482  } // overwrite old sample, adding new info
483  }
484  if (usenew)
485  ZDC_old = ZDC_bigger; // save new, larger sized sample in "old" slot
486 
487  } else {
488  if (formerID > 0) {
489  // make new digi
490  ZDCdigis->push_back(ZDCDataFrame(formerID));
491 
492  // set up information to convert back
493 
494  HcalZDCDetId cell = ZDC_old.id();
495  const HcalQIECoder *channelCoder = conditions->getHcalCoder(cell);
496  const HcalQIEShape *shape = conditions->getHcalShape(channelCoder); // this one is generic
497  HcalCoderDb coder(*channelCoder, *shape);
498 
499  unsigned int sizeold = ZDC_old.size();
500  for (unsigned int isamp = 0; isamp < sizeold; isamp++) {
501  coder.fC2adc(ZDC_old, (ZDCdigis->back()),
502  1); // as per simulation, capid=1
503  }
504  }
505  // save pointers for next iteration
506  formerID = currentID;
507  ZDC_old = iZDC->second;
508  }
509 
510  iZDCchk = iZDC;
511  if ((++iZDCchk) == ZDCDigiStorage_.end()) { // make sure not to lose the last one
512  // make new digi
513  ZDCdigis->push_back(ZDCDataFrame(currentID));
514 
515  // set up information to convert back
516 
517  HcalZDCDetId cell = (iZDC->second).id();
518  const HcalQIECoder *channelCoder = conditions->getHcalCoder(cell);
519  const HcalQIEShape *shape = conditions->getHcalShape(channelCoder); // this one is generic
520  HcalCoderDb coder(*channelCoder, *shape);
521 
522  unsigned int sizeold = (iZDC->second).size();
523  for (unsigned int isamp = 0; isamp < sizeold; isamp++) {
524  coder.fC2adc(ZDC_old, (ZDCdigis->back()),
525  1); // as per simulation, capid=1
526  }
527  }
528  }
529 
530  // done merging
531 
532  // put the collection of recunstructed hits in the event
533  LogInfo("DataMixingHcalDigiWorker") << "total # HBHE Merged digis: " << HBHEdigis->size();
534  LogInfo("DataMixingHcalDigiWorker") << "total # HO Merged digis: " << HOdigis->size();
535  LogInfo("DataMixingHcalDigiWorker") << "total # HF Merged digis: " << HFdigis->size();
536  LogInfo("DataMixingHcalDigiWorker") << "total # QIE10 Merged digis: " << QIE10digis->size();
537  LogInfo("DataMixingHcalDigiWorker") << "total # QIE11 Merged digis: " << QIE11digis->size();
538  LogInfo("DataMixingHcalDigiWorker") << "total # ZDC Merged digis: " << ZDCdigis->size();
539 
540  e.put(std::move(HBHEdigis), HBHEDigiCollectionDM_);
541  e.put(std::move(HOdigis), HODigiCollectionDM_);
542  e.put(std::move(HFdigis), HFDigiCollectionDM_);
543  e.put(std::move(QIE10digis), QIE10DigiCollectionDM_);
544  e.put(std::move(QIE11digis), QIE11DigiCollectionDM_);
545  e.put(std::move(ZDCdigis), ZDCDigiCollectionDM_);
546 
547  // clear local storage after this event
548  HBHEDigiStorage_.clear();
549  HODigiStorage_.clear();
550  HFDigiStorage_.clear();
551  QIE10DigiStorage_.clear();
552  QIE11DigiStorage_.clear();
553  ZDCDigiStorage_.clear();
554  }
555 
556 } // namespace edm
#define LogDebug(id)
size
Write out results.
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
edm::EDGetTokenT< HBHEDigiCollection > HBHEDigiPToken_
edm::EDGetTokenT< HODigiCollection > HODigiToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
edm::EDGetTokenT< ZDCDigiCollection > ZDCDigiToken_
void setSize(unsigned int size)
Definition: CaloSamples.h:55
edm::EDGetTokenT< HODigiCollection > HODigiPToken_
EventID const & id() const
std::vector< T >::const_iterator const_iterator
void fC2adc(const CaloSamples &clf, HBHEDataFrame &df, int fCapIdOffset) const override
Definition: HcalCoderDb.cc:76
void addHcalPileups(const int bcr, const edm::EventPrincipal *, unsigned int EventId, const edm::EventSetup &ES, ModuleCallingContext const *)
edm::EDGetTokenT< ZDCDigiCollection > ZDCDigiPToken_
void adc2fC(const HBHEDataFrame &df, CaloSamples &lf) const override
Definition: HcalCoderDb.cc:68
edm::EDGetTokenT< HFDigiCollection > HFDigiPToken_
void putHcal(edm::Event &e, const edm::EventSetup &ES)
const_iterator end() const
Definition: DetId.h:18
constexpr double pedestal(int fCapId) const
get pedestal for capid=0..3
T const * product() const
Definition: Handle.h:74
int size() const
get the size
Definition: CaloSamples.h:24
const HcalQIECoder * getHcalCoder(const HcalGenericDetId &fId) const
edm::EDGetTokenT< HFDigiCollection > HFDigiToken_
const HcalQIEShape * getHcalShape(const HcalGenericDetId &fId) const
std::string const & label() const
Definition: InputTag.h:36
edm::EDGetTokenT< QIE11DigiCollection > QIE11DigiToken_
edm::EventID id() const
Definition: EventBase.h:59
HLT enums.
size_type size() const
T get() const
Definition: EventSetup.h:71
DetId id() const
get the (generic) id
Definition: CaloSamples.h:21
edm::EDGetTokenT< QIE11DigiCollection > QIE11DigiPToken_
const HcalCalibrations & getHcalCalibrations(const HcalGenericDetId &fId) const
void addHcalSignals(const edm::Event &e, const edm::EventSetup &ES)
edm::EDGetTokenT< QIE10DigiCollection > QIE10DigiToken_
edm::EDGetTokenT< QIE10DigiCollection > QIE10DigiPToken_
def move(src, dest)
Definition: eostools.py:511
const_iterator begin() const
edm::EDGetTokenT< HBHEDigiCollection > HBHEDigiToken_