CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static 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)
 
void accumulate (edm::Handle< edm::PCaloHitContainer > const &hits, int bxCrossing, const HGCalGeometry *geom, CLHEP::HepRandomEngine *hre)
 
void accumulate_forPreMix (edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
 
void accumulate_forPreMix (PileUpEventPrincipal const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
 
void accumulate_forPreMix (edm::Handle< edm::PCaloHitContainer > const &hits, int bxCrossing, const HGCalGeometry *geom, CLHEP::HepRandomEngine *hre)
 
void accumulate_forPreMix (const PHGCSimAccumulator &simAccumulator, const bool minbiasFlag)
 
std::string digiCollection ()
 
void finalizeEvent (edm::Event &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
 
 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...
 
 ~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
 
void resetPUSimHitDataAccumulator ()
 
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_
 
const edm::ESGetToken
< CaloGeometry,
CaloGeometryRecord
geomToken_
 
edm::ESWatcher
< CaloGeometryRecord
geomWatcher_
 
const HGCalGeometrygHGCal_ = nullptr
 
std::string hitCollection_
 
std::unordered_map< uint32_t,
bool > 
hitOrder_monitor
 
std::unordered_map< uint32_t,
std::vector< std::pair< float,
float > > > 
hitRefs_bx0
 
int maxSimHitsAccTime_
 
uint32_t nEvents_
 
std::unordered_map< uint32_t,
std::vector< std::tuple< float,
float, float > > > 
PhitRefs_bx0
 
bool premixStage1_
 
double premixStage1MaxCharge_
 
double premixStage1MinCharge_
 
std::unique_ptr
< hgc::HGCPUSimHitDataAccumulator
pusimHitAccumulator_
 
float refSpeed_
 
std::unique_ptr
< hgc::HGCSimHitDataAccumulator
simHitAccumulator_
 
std::unique_ptr< HGCDigitizerBasetheDigitizer_
 
float tofDelay_
 
std::unordered_set< DetIdvalidIds_
 
uint32_t verbosity_
 

Static Private Attributes

static const unsigned int maxBx_ = 14
 
static const unsigned int thisBx_ = 9
 

Detailed Description

Definition at line 29 of file HGCDigitizer.h.

Member Typedef Documentation

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

Definition at line 35 of file HGCDigitizer.h.

Constructor & Destructor Documentation

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

Definition at line 231 of file HGCDigitizer.cc.

References bxTime_, cce_, edm::ConsumesCollector::consumes(), digiCollection_, digitizationType_, get, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), hitCollection_, HLT_FULL_cff::InputTag, maxSimHitsAccTime_, premixStage1_, premixStage1MaxCharge_, premixStage1MinCharge_, AlCaHLTBitMon_QueryRunRegistry::string, edm::swap(), groupFilesInBlocks::temp, theDigitizer_, tofDelay_, and verbosity_.

234  geomToken_(iC.esConsumes()),
235  refSpeed_(0.1 * CLHEP::c_light), //[CLHEP::c_light]=mm/ns convert to cm/ns
236  averageOccupancies_(occupancyGuesses),
237  nEvents_(1) {
238  //configure from cfg
239 
240  hitCollection_ = ps.getParameter<std::string>("hitCollection");
241  digiCollection_ = ps.getParameter<std::string>("digiCollection");
242  maxSimHitsAccTime_ = ps.getParameter<uint32_t>("maxSimHitsAccTime");
243  bxTime_ = ps.getParameter<double>("bxTime");
244  digitizationType_ = ps.getParameter<uint32_t>("digitizationType");
245  verbosity_ = ps.getUntrackedParameter<uint32_t>("verbosity", 0);
246  tofDelay_ = ps.getParameter<double>("tofDelay");
247  premixStage1_ = ps.getParameter<bool>("premixStage1");
248  premixStage1MinCharge_ = ps.getParameter<double>("premixStage1MinCharge");
249  premixStage1MaxCharge_ = ps.getParameter<double>("premixStage1MaxCharge");
250  iC.consumes<std::vector<PCaloHit>>(edm::InputTag("g4SimHits", hitCollection_));
251  const auto& myCfg_ = ps.getParameter<edm::ParameterSet>("digiCfg");
252 
253  if (myCfg_.existsAs<edm::ParameterSet>("chargeCollectionEfficiencies")) {
254  cce_.clear();
255  const auto& temp = myCfg_.getParameter<edm::ParameterSet>("chargeCollectionEfficiencies")
256  .getParameter<std::vector<double>>("values");
257  for (double cce : temp) {
258  cce_.emplace_back(cce);
259  }
260  } else {
261  std::vector<float>().swap(cce_);
262  }
263 
264  auto const& pluginName = ps.getParameter<std::string>("digitizer");
265  theDigitizer_ = HGCDigitizerPluginFactory::get()->create(pluginName, ps);
266 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
uint32_t nEvents_
Definition: HGCDigitizer.h:123
T getUntrackedParameter(std::string const &, T const &) const
bool premixStage1_
Definition: HGCDigitizer.h:86
std::vector< float > cce_
Definition: HGCDigitizer.h:128
int digitizationType_
Definition: HGCDigitizer.h:83
std::string hitCollection_
Definition: HGCDigitizer.h:80
std::unique_ptr< HGCDigitizerBase > theDigitizer_
Definition: HGCDigitizer.h:104
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geomToken_
Definition: HGCDigitizer.h:107
std::unordered_map< uint32_t, HGCCellInfo > HGCSimHitDataAccumulator
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:117
std::string digiCollection_
Definition: HGCDigitizer.h:80
double premixStage1MinCharge_
Definition: HGCDigitizer.h:89
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
int maxSimHitsAccTime_
Definition: HGCDigitizer.h:94
std::array< double, 4 > averageOccupancies_
Definition: HGCDigitizer.h:122
#define get
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:96
double bxTime_
Definition: HGCDigitizer.h:95
double premixStage1MaxCharge_
Definition: HGCDigitizer.h:91
std::unique_ptr< hgc::HGCPUSimHitDataAccumulator > pusimHitAccumulator_
Definition: HGCDigitizer.h:97
uint32_t verbosity_
Definition: HGCDigitizer.h:113
std::unordered_map< uint32_t, HGCCellHitInfo > HGCPUSimHitDataAccumulator
HGCDigitizer::~HGCDigitizer ( )
inline

Definition at line 32 of file HGCDigitizer.h.

32 {}

Member Function Documentation

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

handle SimHit accumulation

Definition at line 365 of file HGCDigitizer.cc.

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

Referenced by HGCDigiProducer::accumulate(), and accumulate().

365  {
366  //get inputs
368  e.getByLabel(edm::InputTag("g4SimHits", hitCollection_), hits);
369  if (!hits.isValid()) {
370  edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of g4SimHits";
371  return;
372  }
373 
374  //accumulate in-time the main event
375  if (nullptr != gHGCal_) {
376  accumulate(hits, 0, gHGCal_, hre);
377  } else {
378  throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!";
379  }
380 }
std::string hitCollection_
Definition: HGCDigitizer.h:80
Log< level::Error, false > LogError
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:110
bool isValid() const
Definition: HandleBase.h:70
void accumulate(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
handle SimHit accumulation
void HGCDigitizer::accumulate ( PileUpEventPrincipal const &  e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  hre 
)

Definition at line 402 of file HGCDigitizer.cc.

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

404  {
405  //get inputs
407  e.getByLabel(edm::InputTag("g4SimHits", hitCollection_), hits);
408 
409  if (!hits.isValid()) {
410  edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of g4SimHits";
411  return;
412  }
413 
414  //accumulate for the simulated bunch crossing
415  if (nullptr != gHGCal_) {
416  accumulate(hits, e.bunchCrossing(), gHGCal_, hre);
417  } else {
418  throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!";
419  }
420 }
std::string hitCollection_
Definition: HGCDigitizer.h:80
Log< level::Error, false > LogError
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:110
bool isValid() const
Definition: HandleBase.h:70
void accumulate(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
handle SimHit accumulation
void HGCDigitizer::accumulate ( edm::Handle< edm::PCaloHitContainer > const &  hits,
int  bxCrossing,
const HGCalGeometry geom,
CLHEP::HepRandomEngine *  hre 
)

Definition at line 545 of file HGCDigitizer.cc.

References SplitLinear::begin, bxTime_, RecoTauCleanerPlugins::charge, TauDecayModes::dec, relativeConstraints::empty, dataset::end, validate-o2o-wbm::f, first, hitRefs_bx0, mps_fire::i, gpuClustering::id, dqmiolumiharvest::j, hgcalTriggerNtuples_cfi::keV2fC, maxBx_, orderByDetIdThenTime(), refSpeed_, edm::second(), simHitAccumulator_, findQualityFiles::size, theDigitizer_, thisBx_, tofDelay_, cuda_std::upper_bound(), validIds_, trackerHitRTTI::vector, and verbosity_.

548  {
549  if (nullptr == geom)
550  return;
551 
552  //configuration to apply for the computation of time-of-flight
553  auto weightToAbyEnergy = theDigitizer_->toaModeByEnergy();
554  auto tdcForToAOnset = theDigitizer_->tdcForToAOnset();
555  auto keV2fC = theDigitizer_->keV2fC();
556 
557  //create list of tuples (pos in container, RECO DetId, time) to be sorted first
558  int nchits = (int)hits->size();
559 
560  std::vector<HGCCaloHitTuple_t> hitRefs;
561  hitRefs.reserve(nchits);
562  for (int i = 0; i < nchits; ++i) {
563  const auto& the_hit = hits->at(i);
564  DetId id = simToReco(geom, the_hit.id());
565 
566  if (verbosity_ > 0) {
567  edm::LogVerbatim("HGCDigitizer") << "HGCDigitizer::i/p " << std::hex << the_hit.id() << " o/p " << id.rawId()
568  << std::dec;
569  }
570 
571  if (0 != id.rawId()) {
572  hitRefs.emplace_back(i, id.rawId(), (float)the_hit.time());
573  }
574  }
575 
576  std::sort(hitRefs.begin(), hitRefs.end(), this->orderByDetIdThenTime);
577  //loop over sorted hits
578  nchits = hitRefs.size();
579  for (int i = 0; i < nchits; ++i) {
580  const int hitidx = std::get<0>(hitRefs[i]);
581  const uint32_t id = std::get<1>(hitRefs[i]);
582 
583  //get the data for this cell, if not available then we skip it
584 
585  if (!validIds_.count(id))
586  continue;
587  HGCSimHitDataAccumulator::iterator simHitIt = simHitAccumulator_->emplace(id, HGCCellInfo()).first;
588 
589  if (id == 0)
590  continue; // to be ignored at RECO level
591 
592  const float toa = std::get<2>(hitRefs[i]);
593  const PCaloHit& hit = hits->at(hitidx);
594  const float charge = hit.energy() * 1e6 * keV2fC;
595 
596  //distance to the center of the detector
597  const float dist2center(getPositionDistance(geom, id));
598 
599  //hit time: [time()]=ns [centerDist]=cm [refSpeed_]=cm/ns + delay by 1ns
600  //accumulate in 15 buckets of 25ns (9 pre-samples, 1 in-time, 5 post-samples)
601  const float tof = toa - dist2center / refSpeed_ + tofDelay_;
602  const int itime = std::floor(tof / bxTime_) + 9;
603 
604  //no need to add bx crossing - tof comes already corrected from the mixing module
605  //itime += bxCrossing;
606  //itime += 9;
607 
608  if (itime < 0 || itime > (int)maxBx_)
609  continue;
610 
611  //check if time index is ok and store energy
612  if (itime >= (int)simHitIt->second.hit_info[0].size())
613  continue;
614 
615  (simHitIt->second).hit_info[0][itime] += charge;
616 
617  //for time-of-arrival: save the time-sorted list of timestamps with cumulative charge just above threshold
618  //working version with pileup only for in-time hits
619  int waferThickness = getCellThickness(geom, id);
620  bool orderChanged = false;
621  if (itime == (int)thisBx_) {
622  //if start empty => just add charge and time
623  if (hitRefs_bx0[id].empty()) {
624  hitRefs_bx0[id].emplace_back(charge, tof);
625 
626  } else if (tof <= hitRefs_bx0[id].back().second) {
627  //find position to insert new entry preserving time sorting
628  std::vector<std::pair<float, float>>::iterator findPos =
630  hitRefs_bx0[id].end(),
631  std::pair<float, float>(0.f, tof),
632  [](const auto& i, const auto& j) { return i.second <= j.second; });
633 
634  std::vector<std::pair<float, float>>::iterator insertedPos = findPos;
635  if (findPos->second == tof) {
636  //just merge timestamps with exact timing
637  findPos->first += charge;
638  } else {
639  //insert new element cumulating the charge
640  insertedPos = hitRefs_bx0[id].insert(findPos,
641  (findPos == hitRefs_bx0[id].begin())
642  ? std::pair<float, float>(charge, tof)
643  : std::pair<float, float>((findPos - 1)->first + charge, tof));
644  }
645 
646  //cumulate the charge of new entry for all elements that follow in the sorted list
647  //and resize list accounting for cases when the inserted element itself crosses the threshold
648  for (std::vector<std::pair<float, float>>::iterator step = insertedPos; step != hitRefs_bx0[id].end(); ++step) {
649  if (step != insertedPos)
650  step->first += charge;
651  // resize the list stopping with the first timeStamp with cumulative charge above threshold
652  if (step->first > tdcForToAOnset[waferThickness - 1] && step->second != hitRefs_bx0[id].back().second) {
654  hitRefs_bx0[id].end(),
655  std::pair<float, float>(0.f, step->second),
656  [](const auto& i, const auto& j) { return i.second < j.second; }) -
657  hitRefs_bx0[id].begin());
658  for (auto stepEnd = step + 1; stepEnd != hitRefs_bx0[id].end(); ++stepEnd)
659  stepEnd->first += charge;
660  break;
661  }
662  }
663 
664  orderChanged = true;
665  } else {
666  //add new entry at the end of the list
667  if (hitRefs_bx0[id].back().first <= tdcForToAOnset[waferThickness - 1]) {
668  hitRefs_bx0[id].emplace_back(hitRefs_bx0[id].back().first + charge, tof);
669  }
670  }
671  }
672  float accChargeForToA = hitRefs_bx0[id].empty() ? 0.f : hitRefs_bx0[id].back().first;
673  //now compute the firing ToA through the interpolation of the consecutive time-stamps at threshold
674  if (weightToAbyEnergy)
675  (simHitIt->second).hit_info[1][itime] += charge * tof;
676  else if (accChargeForToA > tdcForToAOnset[waferThickness - 1] &&
677  ((simHitIt->second).hit_info[1][itime] == 0 || orderChanged == true)) {
678  float fireTDC = hitRefs_bx0[id].back().second;
679  if (hitRefs_bx0[id].size() > 1) {
680  float chargeBeforeThr = (hitRefs_bx0[id].end() - 2)->first;
681  float tofchargeBeforeThr = (hitRefs_bx0[id].end() - 2)->second;
682 
683  float deltaQ = accChargeForToA - chargeBeforeThr;
684  float deltaTOF = fireTDC - tofchargeBeforeThr;
685  fireTDC = (tdcForToAOnset[waferThickness - 1] - chargeBeforeThr) * deltaTOF / deltaQ + tofchargeBeforeThr;
686  }
687  (simHitIt->second).hit_info[1][itime] = fireTDC;
688  }
689  }
690  hitRefs.clear();
691 }
Log< level::Info, true > LogVerbatim
std::unique_ptr< HGCDigitizerBase > theDigitizer_
Definition: HGCDigitizer.h:104
uint16_t *__restrict__ id
__host__ __device__ constexpr RandomIt upper_bound(RandomIt first, RandomIt last, const T &value, Compare comp={})
U second(std::pair< T, U > const &p)
static const unsigned int maxBx_
Definition: HGCDigitizer.h:126
std::unordered_set< DetId > validIds_
Definition: HGCDigitizer.h:109
static const unsigned int thisBx_
Definition: HGCDigitizer.h:127
Definition: DetId.h:17
std::unordered_map< uint32_t, std::vector< std::pair< float, float > > > hitRefs_bx0
Definition: HGCDigitizer.h:129
string end
Definition: dataset.py:937
step
Definition: StallMonitor.cc:98
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:96
static bool orderByDetIdThenTime(const HGCCaloHitTuple_t &a, const HGCCaloHitTuple_t &b)
Definition: HGCDigitizer.h:36
double bxTime_
Definition: HGCDigitizer.h:95
tuple size
Write out results.
uint32_t verbosity_
Definition: HGCDigitizer.h:113
void HGCDigitizer::accumulate_forPreMix ( edm::Event const &  e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  hre 
)

Definition at line 343 of file HGCDigitizer.cc.

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

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

345  {
346  //get inputs
347 
349  e.getByLabel(edm::InputTag("g4SimHits", hitCollection_), hits);
350  if (!hits.isValid()) {
351  edm::LogError("HGCDigitizer") << " @ accumulate_minbias : can't find " << hitCollection_
352  << " collection of g4SimHits";
353  return;
354  }
355 
356  //accumulate in-time the main event
357  if (nullptr != gHGCal_) {
358  accumulate_forPreMix(hits, 0, gHGCal_, hre);
359  } else {
360  throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!";
361  }
362 }
std::string hitCollection_
Definition: HGCDigitizer.h:80
Log< level::Error, false > LogError
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:110
bool isValid() const
Definition: HandleBase.h:70
void accumulate_forPreMix(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
void HGCDigitizer::accumulate_forPreMix ( PileUpEventPrincipal const &  e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  hre 
)

Definition at line 383 of file HGCDigitizer.cc.

References accumulate_forPreMix(), PileUpEventPrincipal::bunchCrossing(), Exception, PileUpEventPrincipal::getByLabel(), gHGCal_, hitCollection_, and edm::HandleBase::isValid().

385  {
387  e.getByLabel(edm::InputTag("g4SimHits", hitCollection_), hits);
388 
389  if (!hits.isValid()) {
390  edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of g4SimHits";
391  return;
392  }
393 
394  if (nullptr != gHGCal_) {
395  accumulate_forPreMix(hits, e.bunchCrossing(), gHGCal_, hre);
396  } else {
397  throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!";
398  }
399 }
std::string hitCollection_
Definition: HGCDigitizer.h:80
Log< level::Error, false > LogError
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:110
bool isValid() const
Definition: HandleBase.h:70
void accumulate_forPreMix(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
void HGCDigitizer::accumulate_forPreMix ( edm::Handle< edm::PCaloHitContainer > const &  hits,
int  bxCrossing,
const HGCalGeometry geom,
CLHEP::HepRandomEngine *  hre 
)

Definition at line 423 of file HGCDigitizer.cc.

References SplitLinear::begin, bxTime_, RecoTauCleanerPlugins::charge, relativeConstraints::empty, dataset::end, validate-o2o-wbm::f, reco_application_2006_simpleTBanalysis_cfg::hitCollection, mps_fire::i, gpuClustering::id, dqmiolumiharvest::j, hgcalTriggerNtuples_cfi::keV2fC, maxBx_, orderByDetIdThenTime(), PhitRefs_bx0, push_back(), pusimHitAccumulator_, refSpeed_, theDigitizer_, thisBx_, tofDelay_, cuda_std::upper_bound(), and validIds_.

426  {
427  if (nullptr == geom)
428  return;
429 
430  auto keV2fC = theDigitizer_->keV2fC();
431  auto tdcForToAOnset = theDigitizer_->tdcForToAOnset();
432 
433  int nchits = (int)hits->size();
434  int count_thisbx = 0;
435  std::vector<HGCCaloHitTuple_t> hitRefs;
436  hitRefs.reserve(nchits);
437  for (int i = 0; i < nchits; ++i) {
438  const auto& the_hit = hits->at(i);
439  DetId id = simToReco(geom, the_hit.id());
440  // to be written the verbosity block
441  if (id.rawId() != 0) {
442  hitRefs.emplace_back(i, id.rawId(), (float)the_hit.time());
443  }
444  }
445  std::sort(hitRefs.begin(), hitRefs.end(), this->orderByDetIdThenTime);
446 
447  nchits = hitRefs.size();
448  for (int i = 0; i < nchits; ++i) {
449  const int hitidx = std::get<0>(hitRefs[i]);
450  const uint32_t id = std::get<1>(hitRefs[i]);
451  if (!validIds_.count(id))
452  continue;
453 
454  if (id == 0)
455  continue;
456 
457  const float toa = std::get<2>(hitRefs[i]);
458  const PCaloHit& hit = hits->at(hitidx);
459  const float charge = hit.energy() * 1e6 * keV2fC; // * getCCE(geom, id, cce_);
460 
461  const float dist2center(getPositionDistance(geom, id));
462  const float tof = toa - dist2center / refSpeed_ + tofDelay_;
463  const int itime = std::floor(tof / bxTime_) + 9;
464 
465  if (itime < 0 || itime > (int)maxBx_)
466  continue;
467 
468  if (itime >= (int)(maxBx_ + 1))
469  continue;
470 
471  int waferThickness = getCellThickness(geom, id);
472  if (itime == (int)thisBx_) {
473  ++count_thisbx;
474  if (PhitRefs_bx0[id].empty()) {
475  PhitRefs_bx0[id].emplace_back(charge, charge, tof);
476  } else if (tof > std::get<2>(PhitRefs_bx0[id].back())) {
477  PhitRefs_bx0[id].emplace_back(charge, charge + std::get<1>(PhitRefs_bx0[id].back()), tof);
478  } else if (tof == std::get<2>(PhitRefs_bx0[id].back())) {
479  std::get<0>(PhitRefs_bx0[id].back()) += charge;
480  std::get<1>(PhitRefs_bx0[id].back()) += charge;
481  } else {
482  //find position to insert new entry preserving time sorting
483  auto findPos = std::upper_bound(PhitRefs_bx0[id].begin(),
484  PhitRefs_bx0[id].end(),
485  hit_timeStamp(charge, 0.f, tof),
486  [](const auto& i, const auto& j) { return std::get<2>(i) <= std::get<2>(j); });
487 
488  auto insertedPos = findPos;
489 
490  if (tof == std::get<2>(*(findPos - 1))) {
491  std::get<0>(*(findPos - 1)) += charge;
492  std::get<1>(*(findPos - 1)) += charge;
493 
494  } else {
495  insertedPos = PhitRefs_bx0[id].insert(findPos,
496  (findPos == PhitRefs_bx0[id].begin())
497  ? hit_timeStamp(charge, charge, tof)
498  : hit_timeStamp(charge, charge + std::get<1>(*(findPos - 1)), tof));
499  }
500  //cumulate the charge of new entry for all elements that follow in the sorted list
501  //and resize list accounting for cases when the inserted element itself crosses the threshold
502 
503  for (auto step = insertedPos; step != PhitRefs_bx0[id].end(); ++step) {
504  if (step != insertedPos)
505  std::get<1>(*(step)) += charge;
506 
507  // resize the list stopping with the first timeStamp with cumulative charge above threshold
508  if (std::get<1>(*step) > tdcForToAOnset[waferThickness - 1] &&
509  std::get<2>(*step) != std::get<2>(PhitRefs_bx0[id].back())) {
510  PhitRefs_bx0[id].resize(
512  PhitRefs_bx0[id].end(),
513  hit_timeStamp(charge, 0.f, std::get<2>(*step)),
514  [](const auto& i, const auto& j) { return std::get<2>(i) < std::get<2>(j); }) -
515  PhitRefs_bx0[id].begin());
516  for (auto stepEnd = step + 1; stepEnd != PhitRefs_bx0[id].end(); ++stepEnd)
517  std::get<1>(*stepEnd) += charge;
518  break;
519  }
520  }
521  }
522  }
523  }
524 
525  for (const auto& hitCollection : PhitRefs_bx0) {
526  const uint32_t detectorId = hitCollection.first;
527  auto simHitIt = pusimHitAccumulator_->emplace(detectorId, HGCCellHitInfo()).first;
528 
529  for (const auto& hit_timestamp : PhitRefs_bx0[detectorId]) {
530  (simHitIt->second).PUhit_info[1][thisBx_].push_back(std::get<2>(hit_timestamp));
531  (simHitIt->second).PUhit_info[0][thisBx_].push_back(std::get<0>(hit_timestamp));
532  }
533  }
534 
535  if (nchits == 0) {
536  HGCPUSimHitDataAccumulator::iterator simHitIt = pusimHitAccumulator_->emplace(0, HGCCellHitInfo()).first;
537  (simHitIt->second).PUhit_info[1][9].push_back(0.0);
538  (simHitIt->second).PUhit_info[0][9].push_back(0.0);
539  }
540  hitRefs.clear();
541  PhitRefs_bx0.clear();
542 }
std::unique_ptr< HGCDigitizerBase > theDigitizer_
Definition: HGCDigitizer.h:104
uint16_t *__restrict__ id
__host__ __device__ constexpr RandomIt upper_bound(RandomIt first, RandomIt last, const T &value, Compare comp={})
static const unsigned int maxBx_
Definition: HGCDigitizer.h:126
std::unordered_map< uint32_t, std::vector< std::tuple< float, float, float > > > PhitRefs_bx0
Definition: HGCDigitizer.h:130
std::unordered_set< DetId > validIds_
Definition: HGCDigitizer.h:109
static const unsigned int thisBx_
Definition: HGCDigitizer.h:127
Definition: DetId.h:17
deadvectors[0] push_back({0.0175431, 0.538005, 6.80997, 13.29})
string end
Definition: dataset.py:937
std::tuple< float, float, float > hit_timeStamp
Definition: HGCDigitizer.cc:28
step
Definition: StallMonitor.cc:98
static bool orderByDetIdThenTime(const HGCCaloHitTuple_t &a, const HGCCaloHitTuple_t &b)
Definition: HGCDigitizer.h:36
double bxTime_
Definition: HGCDigitizer.h:95
std::unique_ptr< hgc::HGCPUSimHitDataAccumulator > pusimHitAccumulator_
Definition: HGCDigitizer.h:97
void HGCDigitizer::accumulate_forPreMix ( const PHGCSimAccumulator simAccumulator,
const bool  minbiasFlag 
)

Definition at line 692 of file HGCDigitizer.cc.

References gHGCal_, hitOrder_monitor, hitRefs_bx0, premixStage1MaxCharge_, premixStage1MinCharge_, pusimHitAccumulator_, simHitAccumulator_, theDigitizer_, and thisBx_.

692  {
693  //configuration to apply for the computation of time-of-flight
694  auto weightToAbyEnergy = theDigitizer_->toaModeByEnergy();
695  auto tdcForToAOnset = theDigitizer_->tdcForToAOnset();
696 
697  if (nullptr != gHGCal_) {
698  loadSimHitAccumulator_forPreMix(*simHitAccumulator_,
700  gHGCal_,
701  hitRefs_bx0,
702  simAccumulator,
705  !weightToAbyEnergy,
706  tdcForToAOnset,
707  minbiasFlag,
709  thisBx_);
710  }
711 }
std::unique_ptr< HGCDigitizerBase > theDigitizer_
Definition: HGCDigitizer.h:104
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:110
std::unordered_map< uint32_t, bool > hitOrder_monitor
Definition: HGCDigitizer.h:131
static const unsigned int thisBx_
Definition: HGCDigitizer.h:127
double premixStage1MinCharge_
Definition: HGCDigitizer.h:89
std::unordered_map< uint32_t, std::vector< std::pair< float, float > > > hitRefs_bx0
Definition: HGCDigitizer.h:129
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:96
double premixStage1MaxCharge_
Definition: HGCDigitizer.h:91
std::unique_ptr< hgc::HGCPUSimHitDataAccumulator > pusimHitAccumulator_
Definition: HGCDigitizer.h:97
void HGCDigitizer::checkPosition ( const HGCalDigiCollection digis) const
private

Definition at line 742 of file HGCDigitizer.cc.

References funct::abs(), HGCalTopology::dddConstants(), TauDecayModes::dec, DetId::Forward, HGCalGeometry::getPosition(), gHGCal_, HFNose, DetId::HGCalEE, DetId::HGCalHSc, DetId::HGCalHSi, convertSQLiteXML::ok, PV3DBase< T, PVType, FrameType >::perp(), alignCSCRings::r, HGCalDDDConstants::rangeR(), HGCalDDDConstants::rangeZ(), AlCaHLTBitMon_QueryRunRegistry::string, HGCalGeometry::topology(), hgcalPerformanceValidation::val, HGCalTopology::valid(), z, and PV3DBase< T, PVType, FrameType >::z().

Referenced by finalizeEvent().

742  {
743  const double tol(0.5);
744  if (nullptr != gHGCal_) {
745  for (const auto& digi : *(digis)) {
746  const DetId& id = digi.id();
747  const GlobalPoint& global = gHGCal_->getPosition(id);
748  double r = global.perp();
749  double z = std::abs(global.z());
750  std::pair<double, double> zrange = gHGCal_->topology().dddConstants().rangeZ(true);
751  std::pair<double, double> rrange = gHGCal_->topology().dddConstants().rangeR(z, true);
752  bool ok = ((r >= rrange.first) && (r <= rrange.second) && (z >= zrange.first) && (z <= zrange.second));
753  std::string ck = (((r < rrange.first - tol) || (r > rrange.second + tol) || (z < zrange.first - tol) ||
754  (z > zrange.second + tol))
755  ? "***** ERROR *****"
756  : "");
757  bool val = gHGCal_->topology().valid(id);
758  if ((!ok) || (!val)) {
759  if (id.det() == DetId::HGCalEE || id.det() == DetId::HGCalHSi) {
760  edm::LogVerbatim("HGCDigitizer") << "Check " << HGCSiliconDetId(id) << " " << global << " R " << r << ":"
761  << rrange.first << ":" << rrange.second << " Z " << z << ":" << zrange.first
762  << ":" << zrange.second << " Flag " << ok << ":" << val << " " << ck;
763  } else if (id.det() == DetId::HGCalHSc) {
764  edm::LogVerbatim("HGCDigitizer") << "Check " << HGCScintillatorDetId(id) << " " << global << " R " << r << ":"
765  << rrange.first << ":" << rrange.second << " Z " << z << ":" << zrange.first
766  << ":" << zrange.second << " Flag " << ok << ":" << val << " " << ck;
767  } else if ((id.det() == DetId::Forward) && (id.subdetId() == static_cast<int>(HFNose))) {
768  edm::LogVerbatim("HGCDigitizer") << "Check " << HFNoseDetId(id) << " " << global << " R " << r << ":"
769  << rrange.first << ":" << rrange.second << " Z " << z << ":" << zrange.first
770  << ":" << zrange.second << " Flag " << ok << ":" << val << " " << ck;
771  } else {
772  edm::LogVerbatim("HGCDigitizer")
773  << "Check " << std::hex << id.rawId() << std::dec << " " << id.det() << ":" << id.subdetId() << " "
774  << global << " R " << r << ":" << rrange.first << ":" << rrange.second << " Z " << z << ":"
775  << zrange.first << ":" << zrange.second << " Flag " << ok << ":" << val << " " << ck;
776  }
777  }
778  }
779  }
780 }
Log< level::Info, true > LogVerbatim
T perp() const
Definition: PV3DBase.h:69
bool valid(const DetId &id) const override
Is this a valid cell id.
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:110
std::pair< double, double > rangeR(double z, bool reco) const
std::pair< double, double > rangeZ(bool reco) const
T z() const
Definition: PV3DBase.h:61
const HGCalTopology & topology() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Definition: DetId.h:17
const HGCalDDDConstants & dddConstants() const
Definition: HGCalTopology.h:98
GlobalPoint getPosition(const DetId &id, bool debug=false) const
std::string HGCDigitizer::digiCollection ( )
inline

Definition at line 76 of file HGCDigitizer.h.

References digiCollection_.

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

76 { return digiCollection_; }
std::string digiCollection_
Definition: HGCDigitizer.h:80
void HGCDigitizer::finalizeEvent ( edm::Event e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  hre 
)

Definition at line 299 of file HGCDigitizer.cc.

References averageOccupancies_, checkPosition(), digiCollection(), digitizationType_, getType(), gHGCal_, hitOrder_monitor, hitRefs_bx0, eostools::move(), nEvents_, PhitRefs_bx0, premixStage1_, premixStage1MaxCharge_, premixStage1MinCharge_, pusimHitAccumulator_, edm::Event::put(), simHitAccumulator_, theDigitizer_, and validIds_.

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

299  {
300  hitRefs_bx0.clear();
301  PhitRefs_bx0.clear();
302  hitOrder_monitor.clear();
303 
304  const CaloSubdetectorGeometry* theGeom = static_cast<const CaloSubdetectorGeometry*>(gHGCal_);
305 
306  ++nEvents_;
307 
308  unsigned idx = getType();
309  // release memory for unfilled parts of hash table
310  if (validIds_.size() * averageOccupancies_[idx] > simHitAccumulator_->size()) {
311  simHitAccumulator_->reserve(simHitAccumulator_->size());
312  pusimHitAccumulator_->reserve(simHitAccumulator_->size());
313  }
314  //update occupancy guess
315  const double thisOcc = simHitAccumulator_->size() / ((double)validIds_.size());
316  averageOccupancies_[idx] = (averageOccupancies_[idx] * (nEvents_ - 1) + thisOcc) / nEvents_;
317 
318  if (premixStage1_) {
319  auto simRecord = std::make_unique<PHGCSimAccumulator>();
320 
321  if (!pusimHitAccumulator_->empty()) {
322  saveSimHitAccumulator_forPreMix(
324  }
325 
326  e.put(std::move(simRecord), digiCollection());
327 
328  } else {
329  auto digiResult = std::make_unique<HGCalDigiCollection>();
330  theDigitizer_->run(digiResult, *simHitAccumulator_, theGeom, validIds_, digitizationType_, hre);
331  edm::LogVerbatim("HGCDigitizer") << "HGCDigitizer:: finalize event - produced " << digiResult->size()
332  << " hits in det/subdet " << theDigitizer_->det() << "/"
333  << theDigitizer_->subdet();
334 #ifdef EDM_ML_DEBUG
335  checkPosition(&(*digiResult));
336 #endif
337  e.put(std::move(digiResult), digiCollection());
338  }
339 
342 }
Log< level::Info, true > LogVerbatim
uint32_t nEvents_
Definition: HGCDigitizer.h:123
bool premixStage1_
Definition: HGCDigitizer.h:86
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
int digitizationType_
Definition: HGCDigitizer.h:83
std::unique_ptr< HGCDigitizerBase > theDigitizer_
Definition: HGCDigitizer.h:104
std::unordered_map< uint32_t, HGCCellInfo > HGCSimHitDataAccumulator
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:110
std::unordered_map< uint32_t, std::vector< std::tuple< float, float, float > > > PhitRefs_bx0
Definition: HGCDigitizer.h:130
std::unordered_map< uint32_t, bool > hitOrder_monitor
Definition: HGCDigitizer.h:131
def move
Definition: eostools.py:511
std::unordered_set< DetId > validIds_
Definition: HGCDigitizer.h:109
uint32_t getType() const
double premixStage1MinCharge_
Definition: HGCDigitizer.h:89
void checkPosition(const HGCalDigiCollection *digis) const
std::array< double, 4 > averageOccupancies_
Definition: HGCDigitizer.h:122
std::unordered_map< uint32_t, std::vector< std::pair< float, float > > > hitRefs_bx0
Definition: HGCDigitizer.h:129
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:96
double premixStage1MaxCharge_
Definition: HGCDigitizer.h:91
std::unique_ptr< hgc::HGCPUSimHitDataAccumulator > pusimHitAccumulator_
Definition: HGCDigitizer.h:97
std::string digiCollection()
Definition: HGCDigitizer.h:76
std::unordered_map< uint32_t, HGCCellHitInfo > HGCPUSimHitDataAccumulator
uint32_t HGCDigitizer::getType ( void  ) const
private

Definition at line 721 of file HGCDigitizer.cc.

References DetId::Forward, DetId::HGCalEE, DetId::HGCalHSc, DetId::HGCalHSi, SiStripPI::max, and theDigitizer_.

Referenced by finalizeEvent(), and initializeEvent().

721  {
722  uint32_t idx = std::numeric_limits<unsigned>::max();
723  switch (theDigitizer_->det()) {
724  case DetId::HGCalEE:
725  idx = 0;
726  break;
727  case DetId::HGCalHSi:
728  idx = 1;
729  break;
730  case DetId::HGCalHSc:
731  idx = 2;
732  break;
733  case DetId::Forward:
734  idx = 3;
735  break;
736  default:
737  break;
738  }
739  return idx;
740 }
std::unique_ptr< HGCDigitizerBase > theDigitizer_
Definition: HGCDigitizer.h:104
void HGCDigitizer::initializeEvent ( edm::Event const &  e,
edm::EventSetup const &  c 
)

actions at the start/end of event

Definition at line 269 of file HGCDigitizer.cc.

References averageOccupancies_, edm::ESWatcher< T >::check(), Exception, relativeConstraints::geom, geomToken_, geomWatcher_, edm::EventSetup::getData(), CaloGeometry::getSubdetectorGeometry(), getType(), gHGCal_, hitCollection_, pusimHitAccumulator_, simHitAccumulator_, edm::swap(), theDigitizer_, validIds_, and verbosity_.

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

269  {
270  if (geomWatcher_.check(es)) {
271  std::unordered_set<DetId>().swap(validIds_);
272 
273  //get geometry
274  CaloGeometry const& geom = es.getData(geomToken_);
275 
276  gHGCal_ =
277  dynamic_cast<const HGCalGeometry*>(geom.getSubdetectorGeometry(theDigitizer_->det(), theDigitizer_->subdet()));
278 
279  int nadded(0);
280  //valid ID lists
281  if (nullptr != gHGCal_) {
282  getValidDetIds(gHGCal_, validIds_);
283  } else {
284  throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!";
285  }
286 
287  if (verbosity_ > 0)
288  edm::LogInfo("HGCDigitizer") << "Added " << nadded << ":" << validIds_.size() << " detIds without "
289  << hitCollection_ << " in first event processed" << std::endl;
290  }
291 
292  // reserve memory for a full detector
293  unsigned idx = getType();
294  simHitAccumulator_->reserve(averageOccupancies_[idx] * validIds_.size());
295  pusimHitAccumulator_->reserve(averageOccupancies_[idx] * validIds_.size());
296 }
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:34
std::string hitCollection_
Definition: HGCDigitizer.h:80
std::unique_ptr< HGCDigitizerBase > theDigitizer_
Definition: HGCDigitizer.h:104
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geomToken_
Definition: HGCDigitizer.h:107
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:110
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:117
edm::ESWatcher< CaloGeometryRecord > geomWatcher_
Definition: HGCDigitizer.h:108
std::unordered_set< DetId > validIds_
Definition: HGCDigitizer.h:109
Log< level::Info, false > LogInfo
uint32_t getType() const
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
std::array< double, 4 > averageOccupancies_
Definition: HGCDigitizer.h:122
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:96
std::unique_ptr< hgc::HGCPUSimHitDataAccumulator > pusimHitAccumulator_
Definition: HGCDigitizer.h:97
uint32_t verbosity_
Definition: HGCDigitizer.h:113
static bool HGCDigitizer::orderByDetIdThenTime ( const HGCCaloHitTuple_t a,
const HGCCaloHitTuple_t b 
)
inlinestatic

Definition at line 36 of file HGCDigitizer.h.

Referenced by accumulate(), and accumulate_forPreMix().

36  {
37  unsigned int detId_a(std::get<1>(a)), detId_b(std::get<1>(b));
38 
39  if (detId_a < detId_b)
40  return true;
41  if (detId_a > detId_b)
42  return false;
43 
44  double time_a(std::get<2>(a)), time_b(std::get<2>(b));
45  if (time_a < time_b)
46  return true;
47 
48  return false;
49  }
double b
Definition: hdecay.h:118
double a
Definition: hdecay.h:119
void HGCDigitizer::resetPUSimHitDataAccumulator ( )
private
void HGCDigitizer::resetSimHitDataAccumulator ( )
private

Definition at line 714 of file HGCDigitizer.cc.

References simHitAccumulator_.

714  {
715  for (HGCSimHitDataAccumulator::iterator it = simHitAccumulator_->begin(); it != simHitAccumulator_->end(); it++) {
716  it->second.hit_info[0].fill(0.);
717  it->second.hit_info[1].fill(0.);
718  }
719 }
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:96

Member Data Documentation

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

Definition at line 122 of file HGCDigitizer.h.

Referenced by finalizeEvent(), and initializeEvent().

double HGCDigitizer::bxTime_
private

Definition at line 95 of file HGCDigitizer.h.

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

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

Definition at line 128 of file HGCDigitizer.h.

Referenced by HGCDigitizer().

std::string HGCDigitizer::digiCollection_
private

Definition at line 80 of file HGCDigitizer.h.

Referenced by digiCollection(), and HGCDigitizer().

int HGCDigitizer::digitizationType_
private

Definition at line 83 of file HGCDigitizer.h.

Referenced by finalizeEvent(), and HGCDigitizer().

double HGCDigitizer::ev_per_eh_pair_
private

Definition at line 95 of file HGCDigitizer.h.

const edm::ESGetToken<CaloGeometry, CaloGeometryRecord> HGCDigitizer::geomToken_
private

Definition at line 107 of file HGCDigitizer.h.

Referenced by initializeEvent().

edm::ESWatcher<CaloGeometryRecord> HGCDigitizer::geomWatcher_
private

Definition at line 108 of file HGCDigitizer.h.

Referenced by initializeEvent().

const HGCalGeometry* HGCDigitizer::gHGCal_ = nullptr
private
std::string HGCDigitizer::hitCollection_
private

Definition at line 80 of file HGCDigitizer.h.

Referenced by accumulate(), accumulate_forPreMix(), HGCDigitizer(), and initializeEvent().

std::unordered_map<uint32_t, bool> HGCDigitizer::hitOrder_monitor
private

Definition at line 131 of file HGCDigitizer.h.

Referenced by accumulate_forPreMix(), and finalizeEvent().

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

Definition at line 129 of file HGCDigitizer.h.

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

const unsigned int HGCDigitizer::maxBx_ = 14
staticprivate

Definition at line 126 of file HGCDigitizer.h.

Referenced by accumulate(), and accumulate_forPreMix().

int HGCDigitizer::maxSimHitsAccTime_
private

Definition at line 94 of file HGCDigitizer.h.

Referenced by HGCDigitizer().

uint32_t HGCDigitizer::nEvents_
private

Definition at line 123 of file HGCDigitizer.h.

Referenced by finalizeEvent().

std::unordered_map<uint32_t, std::vector<std::tuple<float, float, float> > > HGCDigitizer::PhitRefs_bx0
private

Definition at line 130 of file HGCDigitizer.h.

Referenced by accumulate_forPreMix(), and finalizeEvent().

bool HGCDigitizer::premixStage1_
private

Definition at line 86 of file HGCDigitizer.h.

Referenced by finalizeEvent(), and HGCDigitizer().

double HGCDigitizer::premixStage1MaxCharge_
private

Definition at line 91 of file HGCDigitizer.h.

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

double HGCDigitizer::premixStage1MinCharge_
private

Definition at line 89 of file HGCDigitizer.h.

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

std::unique_ptr<hgc::HGCPUSimHitDataAccumulator> HGCDigitizer::pusimHitAccumulator_
private

Definition at line 97 of file HGCDigitizer.h.

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

float HGCDigitizer::refSpeed_
private

Definition at line 116 of file HGCDigitizer.h.

Referenced by accumulate(), and accumulate_forPreMix().

std::unique_ptr<hgc::HGCSimHitDataAccumulator> HGCDigitizer::simHitAccumulator_
private
std::unique_ptr<HGCDigitizerBase> HGCDigitizer::theDigitizer_
private
const unsigned int HGCDigitizer::thisBx_ = 9
staticprivate

Definition at line 127 of file HGCDigitizer.h.

Referenced by accumulate(), and accumulate_forPreMix().

float HGCDigitizer::tofDelay_
private

Definition at line 119 of file HGCDigitizer.h.

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

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

Definition at line 109 of file HGCDigitizer.h.

Referenced by accumulate(), accumulate_forPreMix(), finalizeEvent(), and initializeEvent().

uint32_t HGCDigitizer::verbosity_
private

Definition at line 113 of file HGCDigitizer.h.

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