CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalDigitizer.cc
Go to the documentation of this file.
35 #include <boost/foreach.hpp>
36 using namespace std;
37 
38 namespace HcalDigitizerImpl {
39 
40  template<typename SIPMDIGITIZER>
41  void fillSiPMCells(const vector<int> & siPMCells, SIPMDIGITIZER * siPMDigitizer)
42  {
43  std::vector<DetId> siPMDetIds;
44  siPMDetIds.reserve(siPMCells.size());
45  for(std::vector<int>::const_iterator idItr = siPMCells.begin();
46  idItr != siPMCells.end(); ++idItr)
47  {
48  siPMDetIds.push_back(DetId(*idItr));
49  }
50  siPMDigitizer->setDetIds(siPMDetIds);
51  }
52 
53  // if both exist, assume the SiPM one has cells filled, and
54  // assign the rest to the HPD
55  template<typename HPDDIGITIZER, typename SIPMDIGITIZER>
56  void fillCells(const vector<DetId>& allCells,
57  HPDDIGITIZER * hpdDigitizer,
58  SIPMDIGITIZER * siPMDigitizer)
59  {
60  // if both digitizers exist, split up the cells
61  if(siPMDigitizer && hpdDigitizer)
62  {
63  std::vector<DetId> siPMDetIds = siPMDigitizer->detIds();
64  std::sort(siPMDetIds.begin(), siPMDetIds.end());
65  std::vector<DetId> sortedCells = allCells;
66  std::sort(sortedCells.begin(), sortedCells.end());
67  std::vector<DetId> hpdCells;
68  std::set_difference(sortedCells.begin(), sortedCells.end(),
69  siPMDetIds.begin(), siPMDetIds.end(),
70  std::back_inserter(hpdCells) );
71  hpdDigitizer->setDetIds(hpdCells);
72  }
73  else
74  {
75  if(siPMDigitizer) siPMDigitizer->setDetIds(allCells);
76  if(hpdDigitizer) hpdDigitizer->setDetIds(allCells);
77  }
78  }
79 } // namespace HcaiDigitizerImpl
80 
81 
83 : theGeometry(0),
84  theParameterMap(new HcalSimParameterMap(ps)),
85  theHcalShape(0),
86  theSiPMShape(0),
87  theHFShape(new HFShape()),
88  theZDCShape(new ZDCShape()),
89  theHcalIntegratedShape(0),
90  theSiPMIntegratedShape(0),
91  theHFIntegratedShape(new CaloShapeIntegrator(theHFShape)),
92  theZDCIntegratedShape(new CaloShapeIntegrator(theZDCShape)),
93  theHBHEResponse(0),
94  theHBHESiPMResponse(0),
95  theHOResponse(0),
96  theHOSiPMResponse(0),
97  theHFResponse(new CaloHitResponse(theParameterMap, theHFIntegratedShape)),
98  theZDCResponse(new CaloHitResponse(theParameterMap, theZDCIntegratedShape)),
99  theHBHEAmplifier(0),
100  theHFAmplifier(0),
101  theHOAmplifier(0),
102  theZDCAmplifier(0),
103  theIonFeedback(0),
104  theCoderFactory(0),
105  theHBHEElectronicsSim(0),
106  theHFElectronicsSim(0),
107  theHOElectronicsSim(0),
108  theZDCElectronicsSim(0),
109  theHBHEHitFilter(),
110  theHFHitFilter(ps.getParameter<bool>("doHFWindow")),
111  theHOHitFilter(),
112  theHOSiPMHitFilter(HcalOuter),
113  theZDCHitFilter(),
114  theHitCorrection(0),
115  theNoiseGenerator(0),
116  theNoiseHitGenerator(0),
117  theHBHEDigitizer(0),
118  theHBHESiPMDigitizer(0),
119  theHODigitizer(0),
120  theHOSiPMDigitizer(0),
121  theHFDigitizer(0),
122  theZDCDigitizer(0),
123  theHBHEDetIds(),
124  theHOHPDDetIds(),
125  theHOSiPMDetIds(),
126  isZDC(true),
127  isHCAL(true),
128  zdcgeo(true),
129  hbhegeo(true),
130  hogeo(true),
131  hfgeo(true),
132  theHOSiPMCode(ps.getParameter<edm::ParameterSet>("ho").getParameter<int>("siPMCode"))
133 {
134  bool doNoise = ps.getParameter<bool>("doNoise");
135  bool useOldNoiseHB = ps.getParameter<bool>("useOldHB");
136  bool useOldNoiseHE = ps.getParameter<bool>("useOldHE");
137  bool useOldNoiseHF = ps.getParameter<bool>("useOldHF");
138  bool useOldNoiseHO = ps.getParameter<bool>("useOldHO");
139  bool doEmpty = ps.getParameter<bool>("doEmpty");
140  double HBtp = ps.getParameter<double>("HBTuningParameter");
141  double HEtp = ps.getParameter<double>("HETuningParameter");
142  double HFtp = ps.getParameter<double>("HFTuningParameter");
143  double HOtp = ps.getParameter<double>("HOTuningParameter");
144 
145  // need to make copies, because they might get different noise generators
150  theHBHEAmplifier->setHBtuningParameter(HBtp);
151  theHBHEAmplifier->setHEtuningParameter(HEtp);
154  theHBHEAmplifier->setUseOldHB(useOldNoiseHB);
155  theHBHEAmplifier->setUseOldHE(useOldNoiseHE);
156  theHFAmplifier->setUseOldHF(useOldNoiseHF);
157  theHOAmplifier->setUseOldHO(useOldNoiseHO);
158 
164 
165  // a code of 1 means make all cells SiPM
166  std::vector<int> hbSiPMCells(ps.getParameter<edm::ParameterSet>("hb").getParameter<std::vector<int> >("siPMCells"));
167  //std::vector<int> hoSiPMCells(ps.getParameter<edm::ParameterSet>("ho").getParameter<std::vector<int> >("siPMCells"));
168  // 0 means none, 1 means all, and 2 means use hardcoded
169 
170  bool doHBHEHPD = hbSiPMCells.empty() || (hbSiPMCells[0] != 1);
171  bool doHOHPD = (theHOSiPMCode != 1);
172  bool doHBHESiPM = !hbSiPMCells.empty();
173  bool doHOSiPM = (theHOSiPMCode != 0);
174 
175  if(doHBHEHPD || doHOHPD )
176  {
177  theHcalShape = new HcalShape();
179  }
180  if(doHBHESiPM || doHOSiPM )
181  {
182  theSiPMShape = new HcalSiPMShape();
184  }
185 
186  if(doHBHEHPD)
187  {
191  }
192  if(doHOHPD)
193  {
197  }
198 
199  if(doHBHESiPM)
200  {
204  }
205  if(doHOSiPM)
206  {
210  }
211 
212  // if both are present, fill the SiPM cells now
213  if(doHBHEHPD && doHBHESiPM)
214  {
216  }
217 
218 
221 
222  bool doTimeSlew = ps.getParameter<bool>("doTimeSlew");
223  if(doTimeSlew) {
224  // no time slewing for HF
231  }
232 
235 
236  bool doHPDNoise = ps.getParameter<bool>("doHPDNoise");
237  if(doHPDNoise) {
238  //edm::ParameterSet hpdNoisePset = ps.getParameter<edm::ParameterSet>("HPDNoiseLibrary");
242  }
243 
244  if(ps.getParameter<bool>("doIonFeedback") && theHBHEResponse)
245  {
248  if(ps.getParameter<bool>("doThermalNoise"))
249  {
250  theHBHEAmplifier->setIonFeedbackSim(theIonFeedback);
252  }
253  }
254 
255  if(ps.getParameter<bool>("injectTestHits") ){
263  }
264 
266  if ( ! rng.isAvailable()) {
267  throw cms::Exception("Configuration")
268  << "HcalDigitizer requires the RandomNumberGeneratorService\n"
269  "which is not present in the configuration file. You must add the service\n"
270  "in the configuration file or remove the modules that require it.";
271  }
272 
273  CLHEP::HepRandomEngine& engine = rng->getEngine();
281 
283 
284  hitsProducer_ = ps.getParameter<std::string>("hitsProducer");
285 
286 }
287 
288 
290  delete theHBHEDigitizer;
291  delete theHBHESiPMDigitizer;
292  delete theHODigitizer;
293  delete theHOSiPMDigitizer;
294  delete theHFDigitizer;
295  delete theZDCDigitizer;
296  delete theParameterMap;
297  delete theHcalShape;
298  delete theSiPMShape;
299  delete theHFShape;
300  delete theZDCShape;
301  delete theHcalIntegratedShape;
302  delete theSiPMIntegratedShape;
303  delete theHFIntegratedShape;
304  delete theZDCIntegratedShape;
305  delete theHBHEResponse;
306  delete theHBHESiPMResponse;
307  delete theHOResponse;
308  delete theHOSiPMResponse;
309  delete theHFResponse;
310  delete theZDCResponse;
311  delete theHBHEElectronicsSim;
312  delete theHFElectronicsSim;
313  delete theHOElectronicsSim;
314  delete theZDCElectronicsSim;
315  delete theHBHEAmplifier;
316  delete theHFAmplifier;
317  delete theHOAmplifier;
318  delete theZDCAmplifier;
319  delete theCoderFactory;
320  delete theHitCorrection;
321  delete theNoiseGenerator;
322 }
323 
324 
326 {
327  noiseGenerator->setParameterMap(theParameterMap);
328  noiseGenerator->setElectronicsSim(theHBHEElectronicsSim);
329  theHBHEDigitizer->setNoiseSignalGenerator(noiseGenerator);
330  theHBHEAmplifier->setNoiseSignalGenerator(noiseGenerator);
331 }
332 
334 {
335  noiseGenerator->setParameterMap(theParameterMap);
336  noiseGenerator->setElectronicsSim(theHFElectronicsSim);
337  theHFDigitizer->setNoiseSignalGenerator(noiseGenerator);
338  theHFAmplifier->setNoiseSignalGenerator(noiseGenerator);
339 }
340 
342 {
343  noiseGenerator->setParameterMap(theParameterMap);
344  noiseGenerator->setElectronicsSim(theHOElectronicsSim);
345  theHODigitizer->setNoiseSignalGenerator(noiseGenerator);
346  theHOAmplifier->setNoiseSignalGenerator(noiseGenerator);
347 }
348 
350 {
351  noiseGenerator->setParameterMap(theParameterMap);
352  noiseGenerator->setElectronicsSim(theZDCElectronicsSim);
353  theZDCDigitizer->setNoiseSignalGenerator(noiseGenerator);
354  theZDCAmplifier->setNoiseSignalGenerator(noiseGenerator);
355 }
356 
357 
358 void HcalDigitizer::produce(edm::Event& e, const edm::EventSetup& eventSetup) {
359  // get the appropriate gains, noises, & widths for this event
360  edm::ESHandle<HcalDbService> conditions;
361  eventSetup.get<HcalDbRecord>().get(conditions);
362  theHBHEAmplifier->setDbService(conditions.product());
363  theHFAmplifier->setDbService(conditions.product());
364  theHOAmplifier->setDbService(conditions.product());
365  theZDCAmplifier->setDbService(conditions.product());
366 
367  theCoderFactory->setDbService(conditions.product());
368  theParameterMap->setDbService(conditions.product());
369 
371  eventSetup.get<HcalCholeskyMatricesRcd>().get(refCholesky);
372  const HcalCholeskyMatrices * myCholesky = refCholesky.product();
373 
374  edm::ESHandle<HcalPedestals> pedshandle;
375  eventSetup.get<HcalPedestalsRcd>().get(pedshandle);
376  const HcalPedestals * myADCPedestals = pedshandle.product();
377 
378  theHBHEAmplifier->setCholesky(myCholesky);
379  theHFAmplifier->setCholesky(myCholesky);
380  theHOAmplifier->setCholesky(myCholesky);
381 
382  theHBHEAmplifier->setADCPeds(myADCPedestals);
383  theHFAmplifier->setADCPeds(myADCPedestals);
384  theHOAmplifier->setADCPeds(myADCPedestals);
385 
386 
387  // get the correct geometry
388  checkGeometry(eventSetup);
389 
390  // Step A: Get Inputs
392 
393  // test access to SimHits for HcalHits and ZDC hits
394  const std::string zdcHitsName(hitsProducer_+"ZDCHITS");
395  e.getByLabel("mix", zdcHitsName , zdccf);
396  MixCollection<PCaloHit> * colzdc = 0 ;
397  if(zdccf.isValid()){
398  colzdc = new MixCollection<PCaloHit>(zdccf.product());
399  }else{
400  edm::LogInfo("HcalDigitizer") << "We don't have ZDC hit collection available ";
401  isZDC = false;
402  }
403 
404  const std::string hcalHitsName(hitsProducer_+"HcalHits");
405  e.getByLabel("mix", hcalHitsName ,cf);
406  MixCollection<PCaloHit> * col = 0 ;
407  if(cf.isValid()){
408  col = new MixCollection<PCaloHit>(cf.product());
409  }else{
410  edm::LogInfo("HcalDigitizer") << "We don't have HCAL hit collection available ";
411  isHCAL = false;
412  }
413 
414  if(theHitCorrection != 0)
415  {
417  if(isHCAL)
419  }
420  // Step B: Create empty output
421 
422  std::auto_ptr<HBHEDigiCollection> hbheResult(new HBHEDigiCollection());
423  std::auto_ptr<HODigiCollection> hoResult(new HODigiCollection());
424  std::auto_ptr<HFDigiCollection> hfResult(new HFDigiCollection());
425  std::auto_ptr<ZDCDigiCollection> zdcResult(new ZDCDigiCollection());
426 
427  // Step C: Invoke the algorithm, passing in inputs and getting back outputs.
428  if(isHCAL&&hbhegeo)
429  {
430  if(theHBHEDigitizer) theHBHEDigitizer->run(*col, *hbheResult);
431  if(theHBHESiPMDigitizer) theHBHESiPMDigitizer->run(*col, *hbheResult);
432  }
433  if(isHCAL&&hogeo)
434  {
435  if(theHODigitizer) theHODigitizer->run(*col, *hoResult);
436  if(theHOSiPMDigitizer) theHOSiPMDigitizer->run(*col, *hoResult);
437  }
438  if(isHCAL&&hfgeo)
439  theHFDigitizer->run(*col, *hfResult);
440  if(isZDC&&zdcgeo)
441  theZDCDigitizer->run(*colzdc, *zdcResult);
442 
443  edm::LogInfo("HcalDigitizer") << "HCAL HBHE digis : " << hbheResult->size();
444  edm::LogInfo("HcalDigitizer") << "HCAL HO digis : " << hoResult->size();
445  edm::LogInfo("HcalDigitizer") << "HCAL HF digis : " << hfResult->size();
446  edm::LogInfo("HcalDigitizer") << "HCAL ZDC digis : " << zdcResult->size();
447 
448  // Step D: Put outputs into event
449  e.put(hbheResult);
450  e.put(hoResult);
451  e.put(hfResult);
452  e.put(zdcResult);
453 }
454 
455 
457  // TODO find a way to avoid doing this every event
459  eventSetup.get<CaloGeometryRecord>().get(geometry);
460  // See if it's been updated
461  if(&*geometry != theGeometry)
462  {
463  theGeometry = &*geometry;
464  updateGeometry();
465  }
466 }
467 
468 
470 {
477 
478  const vector<DetId>& hbCells = theGeometry->getValidDetIds(DetId::Hcal, HcalBarrel);
479  const vector<DetId>& heCells = theGeometry->getValidDetIds(DetId::Hcal, HcalEndcap);
480  const vector<DetId>& hoCells = theGeometry->getValidDetIds(DetId::Hcal, HcalOuter);
481  const vector<DetId>& hfCells = theGeometry->getValidDetIds(DetId::Hcal, HcalForward);
482  const vector<DetId>& zdcCells = theGeometry->getValidDetIds(DetId::Calo, HcalZDCDetId::SubdetectorId);
483  //const vector<DetId>& hcalTrigCells = geometry->getValidDetIds(DetId::Hcal, HcalTriggerTower);
484  //const vector<DetId>& hcalCalib = geometry->getValidDetIds(DetId::Calo, HcalCastorDetId::SubdetectorId);
485  //std::cout<<"HcalDigitizer::CheckGeometry number of cells: "<<zdcCells.size()<<std::endl;
486  if(zdcCells.empty()) zdcgeo = false;
487  if(hbCells.empty() && heCells.empty()) hbhegeo = false;
488  if(hoCells.empty()) hogeo = false;
489  if(hfCells.empty()) hfgeo = false;
490  // combine HB & HE
491 
492 
493  theHBHEDetIds = hbCells;
494  theHBHEDetIds.insert(theHBHEDetIds.end(), heCells.begin(), heCells.end());
495 
497  //HcalDigitizerImpl::fillCells(hoCells, theHODigitizer, theHOSiPMDigitizer);
498  buildHOSiPMCells(hoCells);
499  theHFDigitizer->setDetIds(hfCells);
500  theZDCDigitizer->setDetIds(zdcCells);
501 }
502 
503 
504 void HcalDigitizer::buildHOSiPMCells(const std::vector<DetId>& allCells)
505 {
506  // all HPD
507  if(theHOSiPMCode == 0)
508  {
509  theHODigitizer->setDetIds(allCells);
510  }
511  else if(theHOSiPMCode == 1)
512  {
513  theHOSiPMDigitizer->setDetIds(allCells);
514  // FIXME pick Zecotek or hamamatsu?
515  }
516  else if(theHOSiPMCode == 2)// hardcode which are SiPM
517  {
518  std::vector<HcalDetId> zecotekDetIds;
519  std::vector<HcalDetId> hamamatsuDetIds;
520  for(std::vector<DetId>::const_iterator detItr = allCells.begin();
521  detItr != allCells.end(); ++detItr)
522  {
523  HcalDetId hcalId(*detItr);
524  int ieta = hcalId.ieta();
525  int iphi = hcalId.iphi();
526  if ((ieta>=5 && ieta <= 10 ) && (iphi >=47 && iphi <=52))
527  {
528  zecotekDetIds.push_back(hcalId);
529  theHOSiPMDetIds.push_back(*detItr);
530  }
531  else if(((ieta>=5 && ieta <= 10 ) && (iphi >=53 && iphi <=58))
532  || ((ieta>=11 && ieta <= 15 ) && (iphi >=59 && iphi <=70))){
533  hamamatsuDetIds.push_back(hcalId);
534  theHOSiPMDetIds.push_back(*detItr);
535  }
536  else {
537  theHOHPDDetIds.push_back(*detItr);
538  }
539  }
540  assert(theHODigitizer);
541  assert(theHOSiPMDigitizer);
545  // FIXME not applying a HitFilter to the HPDs, for now
546  theParameterMap->setHOZecotekDetIds(zecotekDetIds);
547  theParameterMap->setHOHamamatsuDetIds(hamamatsuDetIds);
548 
549  // make sure we don't got through this exercise again
550  theHOSiPMCode = -2;
551  }
552 }
553 
554 
555 
556 
void setNoiseHitGenerator(CaloVNoiseHitGenerator *generator)
void setHOtuningParameter(double tp)
T getParameter(std::string const &) const
void setGeometry(const CaloGeometry *geometry)
geometry needed for time-of-flight
void setDbService(const HcalDbService *service)
the Producer will probably update this every event
HBHEHitFilter theHBHEHitFilter
Definition: HcalDigitizer.h:92
void setParameterMap(HcalSimParameterMap *map)
shaper for ZDC
Definition: ZDCShape.h:16
void setDetIds(const std::vector< DetId > &detIds)
virtual ~HcalDigitizer()
HcalElectronicsSim * theHFElectronicsSim
Definition: HcalDigitizer.h:87
HBHEDigitizer * theHBHEDigitizer
void setShape(const CaloVShape *shape)
need a shaper in order to set thermal noise
HOHitFilter theHOHitFilter
Definition: HcalDigitizer.h:94
void setRandomEngine(CLHEP::HepRandomEngine &engine)
void setUseOldHF(bool useOld)
HFDigitizer * theHFDigitizer
HFHitFilter theHFHitFilter
Definition: HcalDigitizer.h:93
void checkGeometry(const edm::EventSetup &eventSetup)
HcalSimParameterMap * theParameterMap
Definition: HcalDigitizer.h:59
void fillSiPMCells(const vector< int > &siPMCells, SIPMDIGITIZER *siPMDigitizer)
void setHFtuningParameter(double tp)
CaloVShape * theZDCIntegratedShape
Definition: HcalDigitizer.h:67
void setPECorrection(const CaloVPECorrection *peCorrection)
if you want to correct the photoelectrons
void setADCPeds(const HcalPedestals *ADCPeds)
Definition: HcalAmplifier.h:48
CaloVShape * theHcalIntegratedShape
Definition: HcalDigitizer.h:64
HcalAmplifier * theHFAmplifier
Definition: HcalDigitizer.h:79
HcalDigitizer(const edm::ParameterSet &ps)
HcalCoderFactory * theCoderFactory
Definition: HcalDigitizer.h:84
edm::SortedCollection< ZDCDataFrame > ZDCDigiCollection
void updateGeometry()
CaloTDigitizer< HFDigitizerTraits > HFDigitizer
Definition: HcalDigitizer.h:56
void setHOZecotekDetIds(const std::vector< HcalDetId > &ids)
CaloVShape * theSiPMIntegratedShape
Definition: HcalDigitizer.h:65
HcalAmplifier * theHBHEAmplifier
Definition: HcalDigitizer.h:78
void setUseOldHO(bool useOld)
edm::SortedCollection< HODataFrame > HODigiCollection
CaloTDigitizer< ZDCDigitizerTraits > ZDCDigitizer
Definition: HcalDigitizer.h:57
std::string hitsProducer_
HcalElectronicsSim * theHOElectronicsSim
Definition: HcalDigitizer.h:88
void setElectronicsSim(HcalElectronicsSim *electronicsSim)
void setHitFilter(const CaloVHitFilter *filter)
if you want to reject hits, for example, from a certain subdetector, set this
Creates electronics signals from hits.
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:84
void setRandomEngine(CLHEP::HepRandomEngine &engine)
void setHFNoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
std::vector< DetId > theHBHEDetIds
void run(MixCollection< PCaloHit > &input, DigiCollection &output)
turns hits into digis
CaloVShape * theSiPMShape
Definition: HcalDigitizer.h:61
ZDCHitFilter theZDCHitFilter
Definition: HcalDigitizer.h:96
HPDIonFeedbackSim * theIonFeedback
Definition: HcalDigitizer.h:83
void fillChargeSums(MixCollection< PCaloHit > &hits)
int ieta() const
get the cell ieta
Definition: HcalDetId.h:38
shaper for HF
Definition: HFShape.h:16
bool isAvailable() const
Definition: Service.h:47
CaloHitResponse * theHOResponse
Definition: HcalDigitizer.h:71
HcalHitFilter theHOSiPMHitFilter
Definition: HcalDigitizer.h:95
CaloHitResponse * theHOSiPMResponse
Definition: HcalDigitizer.h:72
void setNoiseSignalGenerator(CaloVNoiseSignalGenerator *generator)
shaper for Hcal (not for HF)
Definition: HcalShape.h:15
ZDCDigitizer * theZDCDigitizer
virtual CLHEP::HepRandomEngine & getEngine() const =0
Use this to get the random number engine, this is the only function most users should call...
std::vector< DetId > theHOHPDDetIds
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
HcalHitCorrection * theHitCorrection
Definition: HcalDigitizer.h:98
CaloHitResponse * theZDCResponse
Definition: HcalDigitizer.h:74
CaloVShape * theZDCShape
Definition: HcalDigitizer.h:63
void setNoiseSignalGenerator(const CaloVNoiseSignalGenerator *noiseSignalGenerator)
Definition: HcalAmplifier.h:32
void fillCells(const vector< DetId > &allCells, HPDDIGITIZER *hpdDigitizer, SIPMDIGITIZER *siPMDigitizer)
int iphi() const
get the cell iphi
Definition: HcalDetId.h:40
Definition: DetId.h:20
HcalElectronicsSim * theZDCElectronicsSim
Definition: HcalDigitizer.h:89
static const int SubdetectorId
Definition: HcalZDCDetId.h:22
CaloTDigitizer< HODigitizerTraits > HODigitizer
Definition: HcalDigitizer.h:55
void setHOHamamatsuDetIds(const std::vector< HcalDetId > &ids)
HcalAmplifier * theHOAmplifier
Definition: HcalDigitizer.h:80
void setDbService(const HcalDbService *service)
const T & get() const
Definition: EventSetup.h:55
HcalElectronicsSim * theHBHEElectronicsSim
Definition: HcalDigitizer.h:86
T const * product() const
Definition: ESHandle.h:62
CaloHitResponse * theHBHEResponse
Definition: HcalDigitizer.h:69
HODigitizer * theHODigitizer
T const * product() const
Definition: Handle.h:74
std::vector< DetId > theHOSiPMDetIds
const CaloGeometry * theGeometry
Definition: HcalDigitizer.h:48
CaloVShape * theHFShape
Definition: HcalDigitizer.h:62
std::vector< DetId > getValidDetIds() const
Get the list of all valid detector ids.
Definition: CaloGeometry.cc:90
void setCholesky(const HcalCholeskyMatrices *Cholesky)
Definition: HcalAmplifier.h:47
ESHandle< TrackerGeometry > geometry
CaloHitResponse * theHFResponse
Definition: HcalDigitizer.h:73
void setHitCorrection(const CaloVHitCorrection *hitCorrection)
If you want to correct hits, for attenuation or delay, set this.
HODigitizer * theHOSiPMDigitizer
void setZDCNoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
HBHEDigitizer * theHBHESiPMDigitizer
edm::SortedCollection< HFDataFrame > HFDigiCollection
CaloVShape * theHFIntegratedShape
Definition: HcalDigitizer.h:66
void setDetIds(const std::vector< DetId > &detIds)
void buildHOSiPMCells(const std::vector< DetId > &allCells)
CaloHitResponse * theHBHESiPMResponse
Definition: HcalDigitizer.h:70
void setRandomEngine(CLHEP::HepRandomEngine &engine)
CaloVShape * theHcalShape
Definition: HcalDigitizer.h:60
virtual void produce(edm::Event &e, const edm::EventSetup &c)
void setHBHENoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
CaloVNoiseHitGenerator * theNoiseHitGenerator
HcalAmplifier * theZDCAmplifier
Definition: HcalDigitizer.h:81
void setDbService(const HcalDbService *service)
edm::SortedCollection< HBHEDataFrame > HBHEDigiCollection
void setHONoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
CaloTDigitizer< HBHEDigitizerTraits > HBHEDigitizer
Definition: HcalDigitizer.h:54
CaloVNoiseSignalGenerator * theNoiseGenerator
Definition: HcalDigitizer.h:99