CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
HGCDigitizer Class Reference

#include <HGCDigitizer.h>

Public Types

typedef std::tuple< int, uint32_t, float > HGCCaloHitTuple_t
 

Public Member Functions

void accumulate (edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
 handle SimHit accumulation More...
 
void accumulate (PileUpEventPrincipal const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
 
template<typename GEOM >
void accumulate (edm::Handle< edm::PCaloHitContainer > const &hits, int bxCrossing, const GEOM *geom, CLHEP::HepRandomEngine *hre)
 
void accumulate (const PHGCSimAccumulator &simAccumulator)
 
void beginRun (const edm::EventSetup &es)
 actions at the start/end of run More...
 
std::string digiCollection ()
 
void endRun ()
 
void finalizeEvent (edm::Event &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
 
int geometryType ()
 
 HGCDigitizer (const edm::ParameterSet &ps, edm::ConsumesCollector &iC)
 
void initializeEvent (edm::Event const &e, edm::EventSetup const &c)
 actions at the start/end of event More...
 
bool producesEEDigis ()
 
bool producesHEbackDigis ()
 
bool producesHEfrontDigis ()
 
bool producesHFNoseDigis ()
 
 ~HGCDigitizer ()
 

Static Public Member Functions

static bool orderByDetIdThenTime (const HGCCaloHitTuple_t &a, const HGCCaloHitTuple_t &b)
 

Private Member Functions

void checkPosition (const HGCalDigiCollection *digis) const
 
uint32_t getType () const
 
bool getWeight (std::array< float, 3 > &tdcForToAOnset, float &keV2fC) const
 
void resetSimHitDataAccumulator ()
 

Private Attributes

std::array< double, 4 > averageOccupancies_
 
double bxTime_
 
std::vector< float > cce_
 
std::string digiCollection_
 
int digitizationType_
 
double ev_per_eh_pair_
 
int geometryType_
 
const HcalGeometrygHcal_
 
const HGCalGeometrygHGCal_
 
std::string hitCollection_
 
std::map< uint32_t, std::vector< std::pair< float, float > > > hitRefs_bx0
 
int maxSimHitsAccTime_
 
DetId::Detector myDet_
 
ForwardSubdetector mySubDet_
 
uint32_t nEvents_
 
bool premixStage1_
 
double premixStage1MaxCharge_
 
double premixStage1MinCharge_
 
float refSpeed_
 
std::unique_ptr< hgc::HGCSimHitDataAccumulatorsimHitAccumulator_
 
std::unique_ptr< HFNoseDigitizertheHFNoseDigitizer_
 
std::unique_ptr< HGCEEDigitizertheHGCEEDigitizer_
 
std::unique_ptr< HGCHEbackDigitizertheHGCHEbackDigitizer_
 
std::unique_ptr< HGCHEfrontDigitizertheHGCHEfrontDigitizer_
 
float tofDelay_
 
std::unordered_set< DetIdvalidIds_
 
uint32_t verbosity_
 

Detailed Description

Definition at line 30 of file HGCDigitizer.h.

Member Typedef Documentation

typedef std::tuple<int,uint32_t,float> HGCDigitizer::HGCCaloHitTuple_t

Definition at line 38 of file HGCDigitizer.h.

Constructor & Destructor Documentation

HGCDigitizer::HGCDigitizer ( const edm::ParameterSet ps,
edm::ConsumesCollector iC 
)

Definition at line 182 of file HGCDigitizer.cc.

References bxTime_, cce_, edm::ConsumesCollector::consumes(), digiCollection_, digitizationType_, DetId::Forward, geometryType_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), HFNose, DetId::HGCalEE, DetId::HGCalHSc, DetId::HGCalHSi, HGCEE, HGCHEB, HGCHEF, hitCollection_, maxSimHitsAccTime_, myDet_, mySubDet_, premixStage1_, premixStage1MaxCharge_, premixStage1MinCharge_, AlCaHLTBitMon_QueryRunRegistry::string, edm::swap(), groupFilesInBlocks::temp, theHFNoseDigitizer_, theHGCEEDigitizer_, theHGCHEbackDigitizer_, theHGCHEfrontDigitizer_, tofDelay_, validIds_, and verbosity_.

183  :
187  refSpeed_(0.1*CLHEP::c_light), //[CLHEP::c_light]=mm/ns convert to cm/ns
188  averageOccupancies_(occupancyGuesses),
189  nEvents_(1)
190 {
191  //configure from cfg
192  hitCollection_ = ps.getParameter< std::string >("hitCollection");
193  digiCollection_ = ps.getParameter< std::string >("digiCollection");
194  maxSimHitsAccTime_ = ps.getParameter< uint32_t >("maxSimHitsAccTime");
195  bxTime_ = ps.getParameter< double >("bxTime");
196  geometryType_ = ps.getParameter< uint32_t >("geometryType");
197  digitizationType_ = ps.getParameter< uint32_t >("digitizationType");
198  verbosity_ = ps.getUntrackedParameter< uint32_t >("verbosity",0);
199  tofDelay_ = ps.getParameter< double >("tofDelay");
200  premixStage1_ = ps.getParameter<bool>("premixStage1");
201  premixStage1MinCharge_ = ps.getParameter<double>("premixStage1MinCharge");
202  premixStage1MaxCharge_ = ps.getParameter<double>("premixStage1MaxCharge");
203 
204  std::unordered_set<DetId>().swap(validIds_);
205 
206  iC.consumes<std::vector<PCaloHit> >(edm::InputTag("g4SimHits",hitCollection_));
207  const auto& myCfg_ = ps.getParameter<edm::ParameterSet>("digiCfg");
208 
209  if( myCfg_.existsAs<edm::ParameterSet>("chargeCollectionEfficiencies")) {
210  cce_.clear();
211  const auto& temp = myCfg_.getParameter<edm::ParameterSet>("chargeCollectionEfficiencies").getParameter<std::vector<double>>("values");
212  for( double cce : temp ) {
213  cce_.emplace_back(cce);
214  }
215  } else {
216  std::vector<float>().swap(cce_);
217  }
218 
219  if(hitCollection_.find("HitsEE")!=std::string::npos) {
220  if (geometryType_ == 0) {
222  } else {
224  }
225  theHGCEEDigitizer_=std::make_unique<HGCEEDigitizer>(ps);
226  }
227  if(hitCollection_.find("HitsHEfront")!=std::string::npos) {
228  if (geometryType_ == 0) {
230  } else {
232  }
233  theHGCHEfrontDigitizer_=std::make_unique<HGCHEfrontDigitizer>(ps);
234  }
235  if(hitCollection_.find("HcalHits")!=std::string::npos and geometryType_ == 0) {
237  theHGCHEbackDigitizer_=std::make_unique<HGCHEbackDigitizer>(ps);
238  }
239  if(hitCollection_.find("HitsHEback")!=std::string::npos and geometryType_ == 1) {
241  theHGCHEbackDigitizer_=std::make_unique<HGCHEbackDigitizer>(ps);
242  }
243  if(hitCollection_.find("HFNoseHits")!=std::string::npos) {
246  theHFNoseDigitizer_=std::make_unique<HFNoseDigitizer>(ps);
247  }
248 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
uint32_t nEvents_
Definition: HGCDigitizer.h:145
T getUntrackedParameter(std::string const &, T const &) const
bool premixStage1_
Definition: HGCDigitizer.h:103
std::vector< float > cce_
Definition: HGCDigitizer.h:147
ForwardSubdetector mySubDet_
Definition: HGCDigitizer.h:132
int digitizationType_
Definition: HGCDigitizer.h:100
std::string hitCollection_
Definition: HGCDigitizer.h:94
DetId::Detector myDet_
Definition: HGCDigitizer.h:131
std::unique_ptr< HFNoseDigitizer > theHFNoseDigitizer_
Definition: HGCDigitizer.h:123
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:116
std::string digiCollection_
Definition: HGCDigitizer.h:94
std::unordered_map< uint32_t, HGCCellInfo > HGCSimHitDataAccumulator
std::unordered_set< DetId > validIds_
Definition: HGCDigitizer.h:126
std::array< double, 4 > averageOccupancies_
Definition: HGCDigitizer.h:144
std::unique_ptr< HGCHEbackDigitizer > theHGCHEbackDigitizer_
Definition: HGCDigitizer.h:121
double premixStage1MinCharge_
Definition: HGCDigitizer.h:106
int maxSimHitsAccTime_
Definition: HGCDigitizer.h:111
std::unique_ptr< HGCHEfrontDigitizer > theHGCHEfrontDigitizer_
Definition: HGCDigitizer.h:122
std::unique_ptr< HGCEEDigitizer > theHGCEEDigitizer_
Definition: HGCDigitizer.h:120
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:113
double bxTime_
Definition: HGCDigitizer.h:112
double premixStage1MaxCharge_
Definition: HGCDigitizer.h:108
uint32_t verbosity_
Definition: HGCDigitizer.h:135
HGCDigitizer::~HGCDigitizer ( )
inline

Definition at line 35 of file HGCDigitizer.h.

35 { }

Member Function Documentation

void HGCDigitizer::accumulate ( edm::Event const &  e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  hre 
)

handle SimHit accumulation

Definition at line 332 of file HGCDigitizer.cc.

References Exception, edm::Event::getByLabel(), gHcal_, gHGCal_, hitCollection_, hfClusterShapes_cfi::hits, and edm::HandleBase::isValid().

Referenced by HGCDigiProducer::accumulate(), accumulate(), PreMixingHGCalWorker::addPileups(), PreMixingHGCalWorker::addSignals(), and orderByDetIdThenTime().

332  {
333 
334  //get inputs
336  e.getByLabel(edm::InputTag("g4SimHits",hitCollection_),hits);
337  if( !hits.isValid() ){
338  edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of g4SimHits";
339  return;
340  }
341 
342  //accumulate in-time the main event
343  if( nullptr != gHGCal_ ) {
344  accumulate(hits, 0, gHGCal_, hre);
345  } else if( nullptr != gHcal_ ) {
346  accumulate(hits, 0, gHcal_, hre);
347  } else {
348  throw cms::Exception("BadConfiguration")
349  << "HGCDigitizer is not producing EE, FH, or BH digis!";
350  }
351 }
std::string hitCollection_
Definition: HGCDigitizer.h:94
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:127
bool isValid() const
Definition: HandleBase.h:74
void accumulate(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
handle SimHit accumulation
const HcalGeometry * gHcal_
Definition: HGCDigitizer.h:128
void HGCDigitizer::accumulate ( PileUpEventPrincipal const &  e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  hre 
)

Definition at line 354 of file HGCDigitizer.cc.

References accumulate(), PileUpEventPrincipal::bunchCrossing(), Exception, PileUpEventPrincipal::getByLabel(), gHcal_, gHGCal_, hitCollection_, hfClusterShapes_cfi::hits, and edm::HandleBase::isValid().

354  {
355 
356  //get inputs
358  e.getByLabel(edm::InputTag("g4SimHits",hitCollection_),hits);
359  if( !hits.isValid() ){
360  edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of g4SimHits";
361  return;
362  }
363 
364  //accumulate for the simulated bunch crossing
365  if( nullptr != gHGCal_ ) {
366  accumulate(hits, e.bunchCrossing(), gHGCal_, hre);
367  } else if ( nullptr != gHcal_ ) {
368  accumulate(hits, e.bunchCrossing(), gHcal_, hre);
369  } else {
370  throw cms::Exception("BadConfiguration")
371  << "HGCDigitizer is not producing EE, FH, or BH digis!";
372  }
373 }
std::string hitCollection_
Definition: HGCDigitizer.h:94
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:127
bool isValid() const
Definition: HandleBase.h:74
void accumulate(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
handle SimHit accumulation
const HcalGeometry * gHcal_
Definition: HGCDigitizer.h:128
template<typename GEOM >
void HGCDigitizer::accumulate ( edm::Handle< edm::PCaloHitContainer > const &  hits,
int  bxCrossing,
const GEOM *  geom,
CLHEP::HepRandomEngine *  hre 
)

Definition at line 377 of file HGCDigitizer.cc.

References begin, bxTime_, cce_, ALCARECOTkAlJpsiMuMu_cff::charge, TauDecayModes::dec, relativeConstraints::empty, end, f, plotBeamSpotDB::first, getWeight(), hitRefs_bx0, mps_fire::i, triggerObjects_cff::id, createfilelist::int, hgcalDigitizer_cfi::keV2fC, orderByDetIdThenTime(), producesEEDigis(), refSpeed_, edm::second(), simHitAccumulator_, findQualityFiles::size, tofDelay_, validIds_, and verbosity_.

380  {
381  if( nullptr == geom ) return;
382 
383 
384 
385  //configuration to apply for the computation of time-of-flight
386  std::array<float, 3> tdcForToAOnset{ {0.f, 0.f, 0.f} };
387  float keV2fC(0.f);
388  bool weightToAbyEnergy= getWeight(tdcForToAOnset, keV2fC);
389 
390  //create list of tuples (pos in container, RECO DetId, time) to be sorted first
391  int nchits=(int)hits->size();
392  std::vector< HGCCaloHitTuple_t > hitRefs;
393  hitRefs.reserve(nchits);
394  for(int i=0; i<nchits; ++i) {
395  const auto& the_hit = hits->at(i);
396 
397  DetId id = simToReco(geom,the_hit.id());
398 
399  if (verbosity_>0) {
400  if (producesEEDigis())
401  edm::LogInfo("HGCDigitizer") << " i/p " << std::hex << the_hit.id() << " o/p " << id.rawId() << std::dec << std::endl;
402  else
403  edm::LogInfo("HGCDigitizer") << " i/p " << std::hex << the_hit.id() << " o/p " << id.rawId() << std::dec << std::endl;
404  }
405 
406  if( 0 != id.rawId() ) {
407  hitRefs.emplace_back( i, id.rawId(), (float)the_hit.time() );
408  }
409  }
410  std::sort(hitRefs.begin(),hitRefs.end(),this->orderByDetIdThenTime);
411 
412  //loop over sorted hits
413  nchits = hitRefs.size();
414  for(int i=0; i<nchits; ++i) {
415  const int hitidx = std::get<0>(hitRefs[i]);
416  const uint32_t id = std::get<1>(hitRefs[i]);
417 
418  //get the data for this cell, if not available then we skip it
419 
420  if( !validIds_.count(id) ) continue;
421  HGCSimHitDataAccumulator::iterator simHitIt = simHitAccumulator_->emplace(id,HGCCellInfo()).first;
422 
423  if(id==0) continue; // to be ignored at RECO level
424 
425  const float toa = std::get<2>(hitRefs[i]);
426  const PCaloHit &hit=hits->at( hitidx );
427  const float charge = hit.energy()*1e6*keV2fC*getCCE(geom,id,cce_);
428 
429  //distance to the center of the detector
430  const float dist2center( getPositionDistance(geom,id) );
431 
432  //hit time: [time()]=ns [centerDist]=cm [refSpeed_]=cm/ns + delay by 1ns
433  //accumulate in 15 buckets of 25ns (9 pre-samples, 1 in-time, 5 post-samples)
434  const float tof = toa-dist2center/refSpeed_+tofDelay_ ;
435  const int itime= std::floor( tof/bxTime_ ) + 9;
436 
437  //no need to add bx crossing - tof comes already corrected from the mixing module
438  //itime += bxCrossing;
439  //itime += 9;
440 
441  if(itime<0 || itime>14) continue;
442 
443  //check if time index is ok and store energy
444  if(itime >= (int)simHitIt->second.hit_info[0].size() ) continue;
445 
446  (simHitIt->second).hit_info[0][itime] += charge;
447 
448 
449  //working version with pileup only for in-time hits
450  int waferThickness = getCellThickness(geom,id);
451  bool orderChanged = false;
452  if(itime == 9){
453  if(hitRefs_bx0[id].empty()){
454  hitRefs_bx0[id].emplace_back(charge, tof);
455  }
456  else if(tof <= hitRefs_bx0[id].back().second){
457  std::vector<std::pair<float, float> >::iterator findPos =
458  std::upper_bound(hitRefs_bx0[id].begin(), hitRefs_bx0[id].end(), std::pair<float, float>(0.f,tof),
459  [](const auto& i, const auto& j){return i.second < j.second;});
460 
461  std::vector<std::pair<float, float> >::iterator insertedPos =
462  hitRefs_bx0[id].insert(findPos, (findPos == hitRefs_bx0[id].begin()) ?
463  std::pair<float, float>(charge,tof) : std::pair<float, float>((findPos-1)->first+charge,tof));
464 
465  for(std::vector<std::pair<float, float> >::iterator step = insertedPos+1; step != hitRefs_bx0[id].end(); ++step){
466  step->first += charge;
467  if(step->first > tdcForToAOnset[waferThickness-1] && step->second != hitRefs_bx0[id].back().second){
468  hitRefs_bx0[id].resize(std::upper_bound(hitRefs_bx0[id].begin(), hitRefs_bx0[id].end(), std::pair<float, float>(0.f,step->second),
469  [](const auto& i, const auto& j){return i.second < j.second;}) - hitRefs_bx0[id].begin());
470  for(auto stepEnd = step+1; stepEnd != hitRefs_bx0[id].end(); ++stepEnd) stepEnd->first += charge;
471  break;
472  }
473  }
474  orderChanged = true;
475  }
476  else{
477  if(hitRefs_bx0[id].back().first <= tdcForToAOnset[waferThickness-1]){
478  hitRefs_bx0[id].emplace_back(hitRefs_bx0[id].back().first+charge, tof);
479  }
480  }
481  }
482 
483  float accChargeForToA = hitRefs_bx0[id].empty() ? 0.f : hitRefs_bx0[id].back().first;
484 
485  //time-of-arrival (check how to be used)
486  if(weightToAbyEnergy) (simHitIt->second).hit_info[1][itime] += charge*tof;
487  else if(accChargeForToA > tdcForToAOnset[waferThickness-1] &&
488  ((simHitIt->second).hit_info[1][itime] == 0 || orderChanged == true) ){
489  float fireTDC = hitRefs_bx0[id].back().second;
490  if (hitRefs_bx0[id].size() > 1){
491  float chargeBeforeThr = 0.f;
492  float tofchargeBeforeThr = 0.f;
493  for(const auto& step : hitRefs_bx0[id]){
494  if(step.first + chargeBeforeThr <= tdcForToAOnset[waferThickness-1]){
495  chargeBeforeThr += step.first;
496  tofchargeBeforeThr = step.second;
497  }
498  else break;
499  }
500  float deltaQ = accChargeForToA - chargeBeforeThr;
501  float deltaTOF = fireTDC - tofchargeBeforeThr;
502  fireTDC = (tdcForToAOnset[waferThickness-1] - chargeBeforeThr) * deltaTOF / deltaQ + tofchargeBeforeThr;
503  }
504  (simHitIt->second).hit_info[1][itime] = fireTDC;
505  }
506 
507  }
508  hitRefs.clear();
509 }
size
Write out results.
std::vector< float > cce_
Definition: HGCDigitizer.h:147
bool producesEEDigis()
Definition: HGCDigitizer.h:71
bool getWeight(std::array< float, 3 > &tdcForToAOnset, float &keV2fC) const
U second(std::pair< T, U > const &p)
double f[11][100]
std::unordered_set< DetId > validIds_
Definition: HGCDigitizer.h:126
#define end
Definition: vmac.h:39
Definition: DetId.h:18
#define begin
Definition: vmac.h:32
std::map< uint32_t, std::vector< std::pair< float, float > > > hitRefs_bx0
Definition: HGCDigitizer.h:149
step
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:113
static bool orderByDetIdThenTime(const HGCCaloHitTuple_t &a, const HGCCaloHitTuple_t &b)
Definition: HGCDigitizer.h:39
double bxTime_
Definition: HGCDigitizer.h:112
uint32_t verbosity_
Definition: HGCDigitizer.h:135
void HGCDigitizer::accumulate ( const PHGCSimAccumulator simAccumulator)

Definition at line 511 of file HGCDigitizer.cc.

References f, getWeight(), hgcalDigitizer_cfi::keV2fC, premixStage1MaxCharge_, premixStage1MinCharge_, and simHitAccumulator_.

511  {
512  //configuration to apply for the computation of time-of-flight
513  std::array<float, 3> tdcForToAOnset{ {0.f, 0.f, 0.f} };
514  float keV2fC(0.f);
515  bool weightToAbyEnergy= getWeight(tdcForToAOnset, keV2fC);
516  loadSimHitAccumulator(*simHitAccumulator_, simAccumulator, premixStage1MinCharge_, premixStage1MaxCharge_, !weightToAbyEnergy);
517 }
bool getWeight(std::array< float, 3 > &tdcForToAOnset, float &keV2fC) const
double f[11][100]
double premixStage1MinCharge_
Definition: HGCDigitizer.h:106
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:113
double premixStage1MaxCharge_
Definition: HGCDigitizer.h:108
void HGCDigitizer::beginRun ( const edm::EventSetup es)

actions at the start/end of run

Definition at line 520 of file HGCDigitizer.cc.

References Exception, relativeConstraints::geom, geometryType_, edm::EventSetup::get(), CaloGeometry::getSubdetectorGeometry(), gHcal_, gHGCal_, DetId::Hcal, HcalEndcap, hitCollection_, myDet_, mySubDet_, producesEEDigis(), producesHEbackDigis(), producesHEfrontDigis(), producesHFNoseDigis(), validIds_, and verbosity_.

Referenced by PreMixingHGCalWorker::beginRun(), HGCDigiProducer::beginRun(), and geometryType().

520  {
521  //get geometry
523  es.get<CaloGeometryRecord>().get(geom);
524 
525  gHGCal_ = nullptr;
526  gHcal_ = nullptr;
527 
528  if( producesEEDigis() ) gHGCal_ = dynamic_cast<const HGCalGeometry*>(geom->getSubdetectorGeometry(myDet_,mySubDet_));
529  if( producesHEfrontDigis() ) gHGCal_ = dynamic_cast<const HGCalGeometry*>(geom->getSubdetectorGeometry(myDet_,mySubDet_));
530  if( producesHFNoseDigis() ) gHGCal_ = dynamic_cast<const HGCalGeometry*>(geom->getSubdetectorGeometry(myDet_,mySubDet_));
531 
532  if( producesHEbackDigis() ) {
533  if (geometryType_ == 0) {
534  gHcal_ = dynamic_cast<const HcalGeometry*>(geom->getSubdetectorGeometry(DetId::Hcal, HcalEndcap));
535  } else {
536  gHGCal_ = dynamic_cast<const HGCalGeometry*>(geom->getSubdetectorGeometry(myDet_,mySubDet_));
537  }
538  }
539 
540  int nadded(0);
541  //valid ID lists
542  if( nullptr != gHGCal_ ) {
543  getValidDetIds( gHGCal_, validIds_ );
544  } else if( nullptr != gHcal_ ) {
545  getValidDetIds( gHcal_, validIds_ );
546  } else {
547  throw cms::Exception("BadConfiguration")
548  << "HGCDigitizer is not producing EE, FH, or BH digis!";
549  }
550 
551  if (verbosity_ > 0)
552  edm::LogInfo("HGCDigitizer")
553  << "Added " << nadded << ":" << validIds_.size()
554  << " detIds without " << hitCollection_
555  << " in first event processed" << std::endl;
556 }
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:49
ForwardSubdetector mySubDet_
Definition: HGCDigitizer.h:132
std::string hitCollection_
Definition: HGCDigitizer.h:94
DetId::Detector myDet_
Definition: HGCDigitizer.h:131
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:127
bool producesEEDigis()
Definition: HGCDigitizer.h:71
std::unordered_set< DetId > validIds_
Definition: HGCDigitizer.h:126
bool producesHFNoseDigis()
Definition: HGCDigitizer.h:77
bool producesHEfrontDigis()
Definition: HGCDigitizer.h:73
bool producesHEbackDigis()
Definition: HGCDigitizer.h:75
T get() const
Definition: EventSetup.h:68
const HcalGeometry * gHcal_
Definition: HGCDigitizer.h:128
uint32_t verbosity_
Definition: HGCDigitizer.h:135
void HGCDigitizer::checkPosition ( const HGCalDigiCollection digis) const
private

Definition at line 673 of file HGCDigitizer.cc.

References funct::abs(), HGCalTopology::dddConstants(), relativeConstraints::geom, geometryType_, HGCalGeometry::getPosition(), gHGCal_, DetId::HGCalHSc, DetId::HGCalHSi, hfClusterShapes_cfi::hits, convertSQLiteXML::ok, PV3DBase< T, PVType, FrameType >::perp(), alignCSCRings::r, HGCalDDDConstants::rangeR(), HGCalDDDConstants::rangeZ(), AlCaHLTBitMon_QueryRunRegistry::string, HGCalGeometry::topology(), z, and PV3DBase< T, PVType, FrameType >::z().

Referenced by finalizeEvent().

673  {
674 
675  const double tol(0.5);
676  if (geometryType_ != 0 && nullptr != gHGCal_) {
677  for (const auto & digi : *(digis)) {
678  const DetId& id = digi.id();
679  const GlobalPoint& global = gHGCal_->getPosition(id);
680  double r = global.perp();
681  double z = std::abs(global.z());
682  std::pair<double,double> zrange = gHGCal_->topology().dddConstants().rangeZ(true);
683  std::pair<double,double> rrange = gHGCal_->topology().dddConstants().rangeR(z,true);
684  bool ok = ((r >= rrange.first) && (r <= rrange.second) &&
685  (z >= zrange.first) && (z <= zrange.second));
686  std::string ck = (((r < rrange.first-tol) || (r > rrange.second+tol) ||
687  (z < zrange.first-tol) || (z > zrange.second+tol)) ?
688  "***** ERROR *****" : "");
689  if (!ok) {
690  if (id.det() == DetId::HGCalHSi) {
691  edm::LogVerbatim("HGCDigitizer") << "Check " << HGCSiliconDetId(id)
692  << " " << global << " R " << r
693  << ":" << rrange.first << ":"
694  << rrange.second << " Z " << z
695  << ":" << zrange.first << ":"
696  << zrange.second << " Flag "
697  << ok << " " << ck;
698  } else if (id.det() == DetId::HGCalHSc) {
699  edm::LogVerbatim("HGCDigitizer") << "Check " << HGCScintillatorDetId(id)
700  << " " << global << " R " << r
701  << ":" << rrange.first << ":"
702  << rrange.second << " Z " << z
703  << ":" << zrange.first << ":"
704  << zrange.second << " Flag "
705  << ok << " " << ck;
706  } else {
707  edm::LogVerbatim("HGCDigitizer") << "Check " << HFNoseDetId(id)
708  << " " << global << " R " << r
709  << ":" << rrange.first << ":"
710  << rrange.second << " Z " << z
711  << ":" << zrange.first << ":"
712  << zrange.second << " Flag "
713  << ok << " " << ck;
714  }
715  }
716  }
717  }
718 }
T perp() const
Definition: PV3DBase.h:72
GlobalPoint getPosition(const DetId &id) const
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:127
std::pair< double, double > rangeR(double z, bool reco) const
std::pair< double, double > rangeZ(bool reco) const
T z() const
Definition: PV3DBase.h:64
const HGCalTopology & topology() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Definition: DetId.h:18
const HGCalDDDConstants & dddConstants() const
std::string HGCDigitizer::digiCollection ( )
inline

Definition at line 79 of file HGCDigitizer.h.

References digiCollection_.

Referenced by finalizeEvent(), HGCDigiProducer::HGCDigiProducer(), and PreMixingHGCalWorker::PreMixingHGCalWorker().

79 { return digiCollection_; }
std::string digiCollection_
Definition: HGCDigitizer.h:94
void HGCDigitizer::endRun ( )

Definition at line 559 of file HGCDigitizer.cc.

References edm::swap(), and validIds_.

Referenced by PreMixingHGCalWorker::endRun(), HGCDigiProducer::endRun(), and geometryType().

560 {
561  std::unordered_set<DetId>().swap(validIds_);
562 }
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:116
std::unordered_set< DetId > validIds_
Definition: HGCDigitizer.h:126
void HGCDigitizer::finalizeEvent ( edm::Event e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  hre 
)

Definition at line 259 of file HGCDigitizer.cc.

References averageOccupancies_, checkPosition(), digiCollection(), digitizationType_, getType(), gHcal_, gHGCal_, hitRefs_bx0, training_settings::idx, eostools::move(), nEvents_, premixStage1_, premixStage1MaxCharge_, premixStage1MinCharge_, producesEEDigis(), producesHEbackDigis(), producesHEfrontDigis(), producesHFNoseDigis(), edm::Event::put(), simHitAccumulator_, theHFNoseDigitizer_, theHGCEEDigitizer_, theHGCHEbackDigitizer_, theHGCHEfrontDigitizer_, and validIds_.

Referenced by HGCDigiProducer::finalizeEvent(), orderByDetIdThenTime(), and PreMixingHGCalWorker::put().

260 {
261  hitRefs_bx0.clear();
262 
263  const CaloSubdetectorGeometry* theGeom = ( nullptr == gHGCal_ ?
264  static_cast<const CaloSubdetectorGeometry*>(gHcal_) :
265  static_cast<const CaloSubdetectorGeometry*>(gHGCal_) );
266 
267  ++nEvents_;
268  unsigned idx = getType();
269  // release memory for unfilled parts of hash table
270  if( validIds_.size()*averageOccupancies_[idx] > simHitAccumulator_->size() ) {
271  simHitAccumulator_->reserve(simHitAccumulator_->size());
272  }
273  //update occupancy guess
274  const double thisOcc = simHitAccumulator_->size()/((double)validIds_.size());
276 
277  if(premixStage1_) {
278  std::unique_ptr<PHGCSimAccumulator> simResult;
279  if(!simHitAccumulator_->empty()) {
280  simResult = std::make_unique<PHGCSimAccumulator>();
281  saveSimHitAccumulator(*simResult, *simHitAccumulator_, validIds_, premixStage1MinCharge_, premixStage1MaxCharge_);
282  }
283  e.put(std::move(simResult), digiCollection());
284  } else {
285  if( producesEEDigis() ) {
286  auto digiResult = std::make_unique<HGCalDigiCollection>();
287  theHGCEEDigitizer_->run(digiResult,*simHitAccumulator_,theGeom,validIds_,digitizationType_, hre);
288  edm::LogInfo("HGCDigitizer") << " @ finalize event - produced "
289  << digiResult->size() << " EE hits";
290 #ifdef EDM_ML_DEBUG
291  checkPosition(&(*digiResult));
292 #endif
293  e.put(std::move(digiResult),digiCollection());
294  }
295  if( producesHEfrontDigis()) {
296  auto digiResult = std::make_unique<HGCalDigiCollection>();
298  edm::LogInfo("HGCDigitizer") << " @ finalize event - produced "
299  << digiResult->size() << " HE front hits";
300 #ifdef EDM_ML_DEBUG
301  checkPosition(&(*digiResult));
302 #endif
303  e.put(std::move(digiResult),digiCollection());
304  }
305  if( producesHEbackDigis() ) {
306  auto digiResult = std::make_unique<HGCalDigiCollection>();
308  edm::LogInfo("HGCDigitizer") << " @ finalize event - produced "
309  << digiResult->size() << " HE back hits";
310 #ifdef EDM_ML_DEBUG
311  checkPosition(&(*digiResult));
312 #endif
313  e.put(std::move(digiResult),digiCollection());
314  }
315  if( producesHFNoseDigis() ) {
316  auto digiResult = std::make_unique<HGCalDigiCollection>();
317  theHFNoseDigitizer_->run(digiResult,*simHitAccumulator_,theGeom,
319  edm::LogInfo("HGCDigitizer") << " @ finalize event - produced "
320  << digiResult->size() << " HFNose hits";
321 #ifdef EDM_ML_DEBUG
322  checkPosition(&(*digiResult));
323 #endif
324  e.put(std::move(digiResult),digiCollection());
325  }
326  }
327 
329 }
uint32_t nEvents_
Definition: HGCDigitizer.h:145
bool premixStage1_
Definition: HGCDigitizer.h:103
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:137
int digitizationType_
Definition: HGCDigitizer.h:100
std::unique_ptr< HFNoseDigitizer > theHFNoseDigitizer_
Definition: HGCDigitizer.h:123
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:127
bool producesEEDigis()
Definition: HGCDigitizer.h:71
std::unordered_map< uint32_t, HGCCellInfo > HGCSimHitDataAccumulator
std::unordered_set< DetId > validIds_
Definition: HGCDigitizer.h:126
std::array< double, 4 > averageOccupancies_
Definition: HGCDigitizer.h:144
bool producesHFNoseDigis()
Definition: HGCDigitizer.h:77
bool producesHEfrontDigis()
Definition: HGCDigitizer.h:73
uint32_t getType() const
std::unique_ptr< HGCHEbackDigitizer > theHGCHEbackDigitizer_
Definition: HGCDigitizer.h:121
double premixStage1MinCharge_
Definition: HGCDigitizer.h:106
void checkPosition(const HGCalDigiCollection *digis) const
bool producesHEbackDigis()
Definition: HGCDigitizer.h:75
std::unique_ptr< HGCHEfrontDigitizer > theHGCHEfrontDigitizer_
Definition: HGCDigitizer.h:122
std::unique_ptr< HGCEEDigitizer > theHGCEEDigitizer_
Definition: HGCDigitizer.h:120
std::map< uint32_t, std::vector< std::pair< float, float > > > hitRefs_bx0
Definition: HGCDigitizer.h:149
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:113
double premixStage1MaxCharge_
Definition: HGCDigitizer.h:108
std::string digiCollection()
Definition: HGCDigitizer.h:79
const HcalGeometry * gHcal_
Definition: HGCDigitizer.h:128
def move(src, dest)
Definition: eostools.py:511
int HGCDigitizer::geometryType ( )
inline

Definition at line 80 of file HGCDigitizer.h.

References beginRun(), endRun(), geometryType_, getType(), getWeight(), and hgcalDigitizer_cfi::keV2fC.

80 { return geometryType_; }
uint32_t HGCDigitizer::getType ( void  ) const
private

Definition at line 574 of file HGCDigitizer.cc.

References DetId::Forward, geometryType_, HFNose, DetId::HGCalEE, DetId::HGCalHSc, DetId::HGCalHSi, HGCEE, HGCHEB, HGCHEF, training_settings::idx, SiStripPI::max, myDet_, and mySubDet_.

Referenced by finalizeEvent(), geometryType(), and initializeEvent().

574  {
575 
577  if (geometryType_ == 0) {
578  switch(mySubDet_) {
580  idx = 0;
581  break;
583  idx = 1;
584  break;
586  idx = 2;
587  break;
589  idx = 3;
590  break;
591  default:
592  break;
593  }
594  } else {
595  switch(myDet_) {
596  case DetId::HGCalEE:
597  idx = 0;
598  break;
599  case DetId::HGCalHSi:
600  idx = 1;
601  break;
602  case DetId::HGCalHSc:
603  idx = 2;
604  break;
605  case DetId::Forward:
606  idx = 3;
607  break;
608  default:
609  break;
610  }
611  }
612  return idx;
613 }
ForwardSubdetector mySubDet_
Definition: HGCDigitizer.h:132
DetId::Detector myDet_
Definition: HGCDigitizer.h:131
bool HGCDigitizer::getWeight ( std::array< float, 3 > &  tdcForToAOnset,
float &  keV2fC 
) const
private

Definition at line 615 of file HGCDigitizer.cc.

References DetId::Forward, geometryType_, HFNose, DetId::HGCalEE, DetId::HGCalHSc, DetId::HGCalHSi, HGCEE, HGCHEB, HGCHEF, myDet_, mySubDet_, theHFNoseDigitizer_, theHGCEEDigitizer_, theHGCHEbackDigitizer_, and theHGCHEfrontDigitizer_.

Referenced by accumulate(), and geometryType().

616  {
617 
618  bool weightToAbyEnergy(false);
619  if (geometryType_ == 0) {
620  switch( mySubDet_ ) {
622  weightToAbyEnergy = theHGCEEDigitizer_->toaModeByEnergy();
623  tdcForToAOnset = theHGCEEDigitizer_->tdcForToAOnset();
624  keV2fC = theHGCEEDigitizer_->keV2fC();
625  break;
627  weightToAbyEnergy = theHGCHEfrontDigitizer_->toaModeByEnergy();
628  tdcForToAOnset = theHGCHEfrontDigitizer_->tdcForToAOnset();
629  keV2fC = theHGCHEfrontDigitizer_->keV2fC();
630  break;
632  weightToAbyEnergy = theHGCHEbackDigitizer_->toaModeByEnergy();
633  tdcForToAOnset = theHGCHEbackDigitizer_->tdcForToAOnset();
634  keV2fC = theHGCHEbackDigitizer_->keV2fC();
635  break;
637  weightToAbyEnergy = theHFNoseDigitizer_->toaModeByEnergy();
638  tdcForToAOnset = theHFNoseDigitizer_->tdcForToAOnset();
639  keV2fC = theHFNoseDigitizer_->keV2fC();
640  break;
641  default:
642  break;
643  }
644  } else {
645  switch(myDet_) {
646  case DetId::HGCalEE:
647  weightToAbyEnergy = theHGCEEDigitizer_->toaModeByEnergy();
648  tdcForToAOnset = theHGCEEDigitizer_->tdcForToAOnset();
649  keV2fC = theHGCEEDigitizer_->keV2fC();
650  break;
651  case DetId::HGCalHSi:
652  weightToAbyEnergy = theHGCHEfrontDigitizer_->toaModeByEnergy();
653  tdcForToAOnset = theHGCHEfrontDigitizer_->tdcForToAOnset();
654  keV2fC = theHGCHEfrontDigitizer_->keV2fC();
655  break;
656  case DetId::HGCalHSc:
657  weightToAbyEnergy = theHGCHEbackDigitizer_->toaModeByEnergy();
658  tdcForToAOnset = theHGCHEbackDigitizer_->tdcForToAOnset();
659  keV2fC = theHGCHEbackDigitizer_->keV2fC();
660  break;
661  case DetId::Forward:
662  weightToAbyEnergy = theHFNoseDigitizer_->toaModeByEnergy();
663  tdcForToAOnset = theHFNoseDigitizer_->tdcForToAOnset();
664  keV2fC = theHFNoseDigitizer_->keV2fC();
665  break;
666  default:
667  break;
668  }
669  }
670 return weightToAbyEnergy;
671 }
ForwardSubdetector mySubDet_
Definition: HGCDigitizer.h:132
DetId::Detector myDet_
Definition: HGCDigitizer.h:131
std::unique_ptr< HFNoseDigitizer > theHFNoseDigitizer_
Definition: HGCDigitizer.h:123
std::unique_ptr< HGCHEbackDigitizer > theHGCHEbackDigitizer_
Definition: HGCDigitizer.h:121
std::unique_ptr< HGCHEfrontDigitizer > theHGCHEfrontDigitizer_
Definition: HGCDigitizer.h:122
std::unique_ptr< HGCEEDigitizer > theHGCEEDigitizer_
Definition: HGCDigitizer.h:120
void HGCDigitizer::initializeEvent ( edm::Event const &  e,
edm::EventSetup const &  c 
)

actions at the start/end of event

Definition at line 251 of file HGCDigitizer.cc.

References averageOccupancies_, getType(), training_settings::idx, simHitAccumulator_, and validIds_.

Referenced by HGCDigiProducer::initializeEvent(), and orderByDetIdThenTime().

252 {
253  // reserve memory for a full detector
254  unsigned idx = getType();
255  simHitAccumulator_->reserve( averageOccupancies_[idx]*validIds_.size() );
256 }
std::unordered_set< DetId > validIds_
Definition: HGCDigitizer.h:126
std::array< double, 4 > averageOccupancies_
Definition: HGCDigitizer.h:144
uint32_t getType() const
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:113
static bool HGCDigitizer::orderByDetIdThenTime ( const HGCCaloHitTuple_t a,
const HGCCaloHitTuple_t b 
)
inlinestatic

Definition at line 39 of file HGCDigitizer.h.

References accumulate(), EnergyCorrector::c, MillePedeFileConverter_cfg::e, finalizeEvent(), relativeConstraints::geom, hfClusterShapes_cfi::hits, and initializeEvent().

Referenced by accumulate().

40  {
41  unsigned int detId_a(std::get<1>(a)), detId_b(std::get<1>(b));
42 
43  if(detId_a<detId_b) return true;
44  if(detId_a>detId_b) return false;
45 
46  double time_a(std::get<2>(a)), time_b(std::get<2>(b));
47  if(time_a<time_b) return true;
48 
49  return false;
50  }
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
bool HGCDigitizer::producesEEDigis ( )
inline

Definition at line 71 of file HGCDigitizer.h.

References DetId::HGCalEE, HGCEE, myDet_, and mySubDet_.

Referenced by accumulate(), beginRun(), and finalizeEvent().

71  {
ForwardSubdetector mySubDet_
Definition: HGCDigitizer.h:132
DetId::Detector myDet_
Definition: HGCDigitizer.h:131
bool HGCDigitizer::producesHEbackDigis ( )
inline

Definition at line 75 of file HGCDigitizer.h.

References DetId::HGCalHSc, HGCHEB, myDet_, and mySubDet_.

Referenced by beginRun(), and finalizeEvent().

75  {
ForwardSubdetector mySubDet_
Definition: HGCDigitizer.h:132
DetId::Detector myDet_
Definition: HGCDigitizer.h:131
bool HGCDigitizer::producesHEfrontDigis ( )
inline

Definition at line 73 of file HGCDigitizer.h.

References DetId::HGCalHSi, HGCHEF, myDet_, and mySubDet_.

Referenced by beginRun(), and finalizeEvent().

73  {
ForwardSubdetector mySubDet_
Definition: HGCDigitizer.h:132
DetId::Detector myDet_
Definition: HGCDigitizer.h:131
bool HGCDigitizer::producesHFNoseDigis ( )
inline

Definition at line 77 of file HGCDigitizer.h.

References DetId::Forward, HFNose, myDet_, and mySubDet_.

Referenced by beginRun(), and finalizeEvent().

77  {
ForwardSubdetector mySubDet_
Definition: HGCDigitizer.h:132
DetId::Detector myDet_
Definition: HGCDigitizer.h:131
void HGCDigitizer::resetSimHitDataAccumulator ( )
private

Definition at line 565 of file HGCDigitizer.cc.

References simHitAccumulator_.

566 {
567  for( HGCSimHitDataAccumulator::iterator it = simHitAccumulator_->begin(); it!=simHitAccumulator_->end(); it++)
568  {
569  it->second.hit_info[0].fill(0.);
570  it->second.hit_info[1].fill(0.);
571  }
572 }
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:113

Member Data Documentation

std::array<double,4> HGCDigitizer::averageOccupancies_
private

Definition at line 144 of file HGCDigitizer.h.

Referenced by finalizeEvent(), and initializeEvent().

double HGCDigitizer::bxTime_
private

Definition at line 112 of file HGCDigitizer.h.

Referenced by accumulate(), and HGCDigitizer().

std::vector<float> HGCDigitizer::cce_
private

Definition at line 147 of file HGCDigitizer.h.

Referenced by accumulate(), and HGCDigitizer().

std::string HGCDigitizer::digiCollection_
private

Definition at line 94 of file HGCDigitizer.h.

Referenced by digiCollection(), and HGCDigitizer().

int HGCDigitizer::digitizationType_
private

Definition at line 100 of file HGCDigitizer.h.

Referenced by finalizeEvent(), and HGCDigitizer().

double HGCDigitizer::ev_per_eh_pair_
private

Definition at line 112 of file HGCDigitizer.h.

int HGCDigitizer::geometryType_
private

Definition at line 97 of file HGCDigitizer.h.

Referenced by beginRun(), checkPosition(), geometryType(), getType(), getWeight(), and HGCDigitizer().

const HcalGeometry* HGCDigitizer::gHcal_
private

Definition at line 128 of file HGCDigitizer.h.

Referenced by accumulate(), beginRun(), and finalizeEvent().

const HGCalGeometry* HGCDigitizer::gHGCal_
private

Definition at line 127 of file HGCDigitizer.h.

Referenced by accumulate(), beginRun(), checkPosition(), and finalizeEvent().

std::string HGCDigitizer::hitCollection_
private

Definition at line 94 of file HGCDigitizer.h.

Referenced by accumulate(), beginRun(), and HGCDigitizer().

std::map< uint32_t, std::vector< std::pair<float, float> > > HGCDigitizer::hitRefs_bx0
private

Definition at line 149 of file HGCDigitizer.h.

Referenced by accumulate(), and finalizeEvent().

int HGCDigitizer::maxSimHitsAccTime_
private

Definition at line 111 of file HGCDigitizer.h.

Referenced by HGCDigitizer().

DetId::Detector HGCDigitizer::myDet_
private
ForwardSubdetector HGCDigitizer::mySubDet_
private
uint32_t HGCDigitizer::nEvents_
private

Definition at line 145 of file HGCDigitizer.h.

Referenced by finalizeEvent().

bool HGCDigitizer::premixStage1_
private

Definition at line 103 of file HGCDigitizer.h.

Referenced by finalizeEvent(), and HGCDigitizer().

double HGCDigitizer::premixStage1MaxCharge_
private

Definition at line 108 of file HGCDigitizer.h.

Referenced by accumulate(), finalizeEvent(), and HGCDigitizer().

double HGCDigitizer::premixStage1MinCharge_
private

Definition at line 106 of file HGCDigitizer.h.

Referenced by accumulate(), finalizeEvent(), and HGCDigitizer().

float HGCDigitizer::refSpeed_
private

Definition at line 138 of file HGCDigitizer.h.

Referenced by accumulate().

std::unique_ptr<hgc::HGCSimHitDataAccumulator> HGCDigitizer::simHitAccumulator_
private
std::unique_ptr<HFNoseDigitizer> HGCDigitizer::theHFNoseDigitizer_
private

Definition at line 123 of file HGCDigitizer.h.

Referenced by finalizeEvent(), getWeight(), and HGCDigitizer().

std::unique_ptr<HGCEEDigitizer> HGCDigitizer::theHGCEEDigitizer_
private

Definition at line 120 of file HGCDigitizer.h.

Referenced by finalizeEvent(), getWeight(), and HGCDigitizer().

std::unique_ptr<HGCHEbackDigitizer> HGCDigitizer::theHGCHEbackDigitizer_
private

Definition at line 121 of file HGCDigitizer.h.

Referenced by finalizeEvent(), getWeight(), and HGCDigitizer().

std::unique_ptr<HGCHEfrontDigitizer> HGCDigitizer::theHGCHEfrontDigitizer_
private

Definition at line 122 of file HGCDigitizer.h.

Referenced by finalizeEvent(), getWeight(), and HGCDigitizer().

float HGCDigitizer::tofDelay_
private

Definition at line 141 of file HGCDigitizer.h.

Referenced by accumulate(), and HGCDigitizer().

std::unordered_set<DetId> HGCDigitizer::validIds_
private
uint32_t HGCDigitizer::verbosity_
private

Definition at line 135 of file HGCDigitizer.h.

Referenced by accumulate(), beginRun(), and HGCDigitizer().