CMS 3D CMS Logo

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 ()=default
 

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_
 
const double bxTime_
 
std::vector< float > cce_
 
const std::string digiCollection_
 
const int digitizationType_
 
double ev_per_eh_pair_
 
const edm::ESGetToken< CaloGeometry, CaloGeometryRecordgeomToken_
 
edm::ESWatcher< CaloGeometryRecordgeomWatcher_
 
const HGCalGeometrygHGCal_ = nullptr
 
const std::string hitCollection_
 
std::unordered_map< uint32_t, bool > hitOrder_monitor
 
std::unordered_map< uint32_t, std::vector< std::pair< float, float > > > hitRefs_bx0
 
const std::string hitsProducer_
 
const edm::EDGetTokenT< std::vector< PCaloHit > > hitToken_
 
const int maxSimHitsAccTime_
 
uint32_t nEvents_
 
std::unordered_map< uint32_t, std::vector< std::tuple< float, float, float > > > PhitRefs_bx0
 
const bool premixStage1_
 
const double premixStage1MaxCharge_
 
const double premixStage1MinCharge_
 
std::unique_ptr< hgc::HGCPUSimHitDataAccumulatorpusimHitAccumulator_
 
const float refSpeed_
 
std::unique_ptr< hgc::HGCSimHitDataAccumulatorsimHitAccumulator_
 
std::unique_ptr< HGCDigitizerBasetheDigitizer_
 
const float tofDelay_
 
std::unordered_set< DetIdvalidIds_
 
const 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

◆ HGCCaloHitTuple_t

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

Definition at line 35 of file HGCDigitizer.h.

Constructor & Destructor Documentation

◆ HGCDigitizer()

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

Definition at line 231 of file HGCDigitizer.cc.

References cce_, get, edm::ParameterSet::getParameter(), crab_NZS2018C_1::pluginName, AlCaHLTBitMon_QueryRunRegistry::string, edm::swap(), groupFilesInBlocks::temp, and theDigitizer_.

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

◆ ~HGCDigitizer()

HGCDigitizer::~HGCDigitizer ( )
default

Member Function Documentation

◆ accumulate() [1/3]

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 MillePedeFileConverter_cfg::e, Exception, gHGCal_, hitCollection_, hfClusterShapes_cfi::hits, hitsProducer_, and hitToken_.

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

365  {
366  //get inputs
368  if (!hits.isValid()) {
369  edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of "
370  << hitsProducer_;
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 }
const std::string hitsProducer_
Definition: HGCDigitizer.h:101
Log< level::Error, false > LogError
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:116
const edm::EDGetTokenT< std::vector< PCaloHit > > hitToken_
Definition: HGCDigitizer.h:103
void accumulate(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
handle SimHit accumulation
const std::string hitCollection_
Definition: HGCDigitizer.h:102

◆ accumulate() [2/3]

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

Definition at line 404 of file HGCDigitizer.cc.

References accumulate(), MillePedeFileConverter_cfg::e, Exception, gHGCal_, hitCollection_, hfClusterShapes_cfi::hits, and hitsProducer_.

406  {
407  //get inputs
410  e.getByLabel(hitTag, hits);
411 
412  if (!hits.isValid()) {
413  edm::LogError("HGCDigitizer") << " @ accumulate : can't find " << hitCollection_ << " collection of "
414  << hitsProducer_;
415  return;
416  }
417 
418  //accumulate for the simulated bunch crossing
419  if (nullptr != gHGCal_) {
420  accumulate(hits, e.bunchCrossing(), gHGCal_, hre);
421  } else {
422  throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!";
423  }
424 }
const std::string hitsProducer_
Definition: HGCDigitizer.h:101
Log< level::Error, false > LogError
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:116
void accumulate(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
handle SimHit accumulation
const std::string hitCollection_
Definition: HGCDigitizer.h:102

◆ accumulate() [3/3]

void HGCDigitizer::accumulate ( edm::Handle< edm::PCaloHitContainer > const &  hits,
int  bxCrossing,
const HGCalGeometry geom,
CLHEP::HepRandomEngine *  hre 
)

Definition at line 549 of file HGCDigitizer.cc.

References bxTime_, ALCARECOTkAlJpsiMuMu_cff::charge, TauDecayModes::dec, relativeConstraints::empty, mps_fire::end, f, first, relativeConstraints::geom, hitRefs_bx0, hfClusterShapes_cfi::hits, mps_fire::i, l1ctLayer2EG_cff::id, createfilelist::int, dqmiolumiharvest::j, hgceeDigitizer_cfi::keV2fC, maxBx_, orderByDetIdThenTime(), refSpeed_, edm::second(), simHitAccumulator_, findQualityFiles::size, jetUpdater_cfi::sort, theDigitizer_, thisBx_, tofDelay_, pfDeepBoostedJetPreprocessParams_cfi::upper_bound, validIds_, trackerHitRTTI::vector, and verbosity_.

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

◆ accumulate_forPreMix() [1/4]

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

Definition at line 344 of file HGCDigitizer.cc.

References MillePedeFileConverter_cfg::e, Exception, gHGCal_, hitCollection_, hfClusterShapes_cfi::hits, hitsProducer_, and hitToken_.

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

346  {
347  //get inputs
348 
350  if (!hits.isValid()) {
351  edm::LogError("HGCDigitizer") << " @ accumulate_minbias : can't find " << hitCollection_ << " collection of "
352  << hitsProducer_;
353  return;
354  }
355 
356  //accumulate in-time the main event
357  if (nullptr != gHGCal_) {
359  } else {
360  throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!";
361  }
362 }
const std::string hitsProducer_
Definition: HGCDigitizer.h:101
Log< level::Error, false > LogError
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:116
const edm::EDGetTokenT< std::vector< PCaloHit > > hitToken_
Definition: HGCDigitizer.h:103
void accumulate_forPreMix(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre)
const std::string hitCollection_
Definition: HGCDigitizer.h:102

◆ accumulate_forPreMix() [2/4]

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(), MillePedeFileConverter_cfg::e, Exception, gHGCal_, hitCollection_, hfClusterShapes_cfi::hits, and hitsProducer_.

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

◆ accumulate_forPreMix() [3/4]

void HGCDigitizer::accumulate_forPreMix ( edm::Handle< edm::PCaloHitContainer > const &  hits,
int  bxCrossing,
const HGCalGeometry geom,
CLHEP::HepRandomEngine *  hre 
)

Definition at line 427 of file HGCDigitizer.cc.

References bxTime_, ALCARECOTkAlJpsiMuMu_cff::charge, relativeConstraints::empty, mps_fire::end, f, relativeConstraints::geom, hgceeDigitizer_cfi::hitCollection, hfClusterShapes_cfi::hits, mps_fire::i, l1ctLayer2EG_cff::id, createfilelist::int, dqmiolumiharvest::j, hgceeDigitizer_cfi::keV2fC, maxBx_, orderByDetIdThenTime(), PhitRefs_bx0, push_back(), pusimHitAccumulator_, refSpeed_, jetUpdater_cfi::sort, theDigitizer_, thisBx_, tofDelay_, pfDeepBoostedJetPreprocessParams_cfi::upper_bound, and validIds_.

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

◆ accumulate_forPreMix() [4/4]

void HGCDigitizer::accumulate_forPreMix ( const PHGCSimAccumulator simAccumulator,
const bool  minbiasFlag 
)

Definition at line 696 of file HGCDigitizer.cc.

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

696  {
697  //configuration to apply for the computation of time-of-flight
698  auto weightToAbyEnergy = theDigitizer_->toaModeByEnergy();
699  auto tdcForToAOnset = theDigitizer_->tdcForToAOnset();
700 
701  if (nullptr != gHGCal_) {
702  loadSimHitAccumulator_forPreMix(*simHitAccumulator_,
704  gHGCal_,
705  hitRefs_bx0,
706  simAccumulator,
709  !weightToAbyEnergy,
710  tdcForToAOnset,
711  minbiasFlag,
713  thisBx_);
714  }
715 }
std::unique_ptr< HGCDigitizerBase > theDigitizer_
Definition: HGCDigitizer.h:110
const double premixStage1MaxCharge_
Definition: HGCDigitizer.h:95
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:116
const double premixStage1MinCharge_
Definition: HGCDigitizer.h:93
std::unordered_map< uint32_t, bool > hitOrder_monitor
Definition: HGCDigitizer.h:137
static const unsigned int thisBx_
Definition: HGCDigitizer.h:133
std::unordered_map< uint32_t, std::vector< std::pair< float, float > > > hitRefs_bx0
Definition: HGCDigitizer.h:135
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:81
std::unique_ptr< hgc::HGCPUSimHitDataAccumulator > pusimHitAccumulator_
Definition: HGCDigitizer.h:82

◆ checkPosition()

void HGCDigitizer::checkPosition ( const HGCalDigiCollection digis) const
private

Definition at line 746 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(), heppy_batch::val, HGCalTopology::valid(), z, PV3DBase< T, PVType, FrameType >::z(), and TkClusParameters_cff::zrange.

Referenced by finalizeEvent().

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

◆ digiCollection()

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_; }
const std::string digiCollection_
Definition: HGCDigitizer.h:84

◆ finalizeEvent()

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

Definition at line 300 of file HGCDigitizer.cc.

References averageOccupancies_, checkPosition(), digiCollection(), digitizationType_, MillePedeFileConverter_cfg::e, getType(), gHGCal_, hitOrder_monitor, hitRefs_bx0, heavyIonCSV_trainingSettings::idx, eostools::move(), nEvents_, PhitRefs_bx0, premixStage1_, premixStage1MaxCharge_, premixStage1MinCharge_, pusimHitAccumulator_, simHitAccumulator_, theDigitizer_, and validIds_.

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

300  {
301  hitRefs_bx0.clear();
302  PhitRefs_bx0.clear();
303  hitOrder_monitor.clear();
304 
305  const CaloSubdetectorGeometry* theGeom = static_cast<const CaloSubdetectorGeometry*>(gHGCal_);
306 
307  ++nEvents_;
308 
309  unsigned idx = getType();
310  // release memory for unfilled parts of hash table
311  if (validIds_.size() * averageOccupancies_[idx] > simHitAccumulator_->size()) {
312  simHitAccumulator_->reserve(simHitAccumulator_->size());
313  pusimHitAccumulator_->reserve(simHitAccumulator_->size());
314  }
315  //update occupancy guess
316  const double thisOcc = simHitAccumulator_->size() / ((double)validIds_.size());
318 
319  if (premixStage1_) {
320  auto simRecord = std::make_unique<PHGCSimAccumulator>();
321 
322  if (!pusimHitAccumulator_->empty()) {
323  saveSimHitAccumulator_forPreMix(
325  }
326 
327  e.put(std::move(simRecord), digiCollection());
328 
329  } else {
330  auto digiResult = std::make_unique<HGCalDigiCollection>();
331  theDigitizer_->run(digiResult, *simHitAccumulator_, theGeom, validIds_, digitizationType_, hre);
332  edm::LogVerbatim("HGCDigitizer") << "HGCDigitizer:: finalize event - produced " << digiResult->size()
333  << " hits in det/subdet " << theDigitizer_->det() << "/"
334  << theDigitizer_->subdet();
335 #ifdef EDM_ML_DEBUG
336  checkPosition(&(*digiResult));
337 #endif
338  e.put(std::move(digiResult), digiCollection());
339  }
340 
343 }
Log< level::Info, true > LogVerbatim
uint32_t nEvents_
Definition: HGCDigitizer.h:129
void checkPosition(const HGCalDigiCollection *digis) const
std::unique_ptr< HGCDigitizerBase > theDigitizer_
Definition: HGCDigitizer.h:110
std::unordered_map< uint32_t, HGCCellInfo > HGCSimHitDataAccumulator
const double premixStage1MaxCharge_
Definition: HGCDigitizer.h:95
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:116
uint32_t getType() const
const double premixStage1MinCharge_
Definition: HGCDigitizer.h:93
std::unordered_map< uint32_t, std::vector< std::tuple< float, float, float > > > PhitRefs_bx0
Definition: HGCDigitizer.h:136
std::unordered_map< uint32_t, bool > hitOrder_monitor
Definition: HGCDigitizer.h:137
std::unordered_set< DetId > validIds_
Definition: HGCDigitizer.h:115
const bool premixStage1_
Definition: HGCDigitizer.h:90
std::array< double, 4 > averageOccupancies_
Definition: HGCDigitizer.h:128
std::unordered_map< uint32_t, std::vector< std::pair< float, float > > > hitRefs_bx0
Definition: HGCDigitizer.h:135
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:81
std::unique_ptr< hgc::HGCPUSimHitDataAccumulator > pusimHitAccumulator_
Definition: HGCDigitizer.h:82
std::string digiCollection()
Definition: HGCDigitizer.h:76
def move(src, dest)
Definition: eostools.py:511
const int digitizationType_
Definition: HGCDigitizer.h:87
std::unordered_map< uint32_t, HGCCellHitInfo > HGCPUSimHitDataAccumulator

◆ getType()

uint32_t HGCDigitizer::getType ( void  ) const
private

Definition at line 725 of file HGCDigitizer.cc.

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

Referenced by finalizeEvent(), and initializeEvent().

725  {
727  switch (theDigitizer_->det()) {
728  case DetId::HGCalEE:
729  idx = 0;
730  break;
731  case DetId::HGCalHSi:
732  idx = 1;
733  break;
734  case DetId::HGCalHSc:
735  idx = 2;
736  break;
737  case DetId::Forward:
738  idx = 3;
739  break;
740  default:
741  break;
742  }
743  return idx;
744 }
std::unique_ptr< HGCDigitizerBase > theDigitizer_
Definition: HGCDigitizer.h:110

◆ initializeEvent()

void HGCDigitizer::initializeEvent ( edm::Event const &  e,
edm::EventSetup const &  c 
)

actions at the start/end of event

Definition at line 270 of file HGCDigitizer.cc.

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

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

270  {
271  if (geomWatcher_.check(es)) {
272  std::unordered_set<DetId>().swap(validIds_);
273 
274  //get geometry
275  CaloGeometry const& geom = es.getData(geomToken_);
276 
277  gHGCal_ =
278  dynamic_cast<const HGCalGeometry*>(geom.getSubdetectorGeometry(theDigitizer_->det(), theDigitizer_->subdet()));
279 
280  int nadded(0);
281  //valid ID lists
282  if (nullptr != gHGCal_) {
283  getValidDetIds(gHGCal_, validIds_);
284  } else {
285  throw cms::Exception("BadConfiguration") << "HGCDigitizer is not producing EE, FH, or BH digis!";
286  }
287 
288  if (verbosity_ > 0)
289  edm::LogInfo("HGCDigitizer") << "Added " << nadded << ":" << validIds_.size() << " detIds without "
290  << hitCollection_ << " in first event processed" << std::endl;
291  }
292 
293  // reserve memory for a full detector
294  unsigned idx = getType();
297 }
std::unique_ptr< HGCDigitizerBase > theDigitizer_
Definition: HGCDigitizer.h:110
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geomToken_
Definition: HGCDigitizer.h:113
const HGCalGeometry * gHGCal_
Definition: HGCDigitizer.h:116
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:117
uint32_t getType() const
edm::ESWatcher< CaloGeometryRecord > geomWatcher_
Definition: HGCDigitizer.h:114
const uint32_t verbosity_
Definition: HGCDigitizer.h:119
std::unordered_set< DetId > validIds_
Definition: HGCDigitizer.h:115
Log< level::Info, false > LogInfo
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
std::array< double, 4 > averageOccupancies_
Definition: HGCDigitizer.h:128
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:81
std::unique_ptr< hgc::HGCPUSimHitDataAccumulator > pusimHitAccumulator_
Definition: HGCDigitizer.h:82
const std::string hitCollection_
Definition: HGCDigitizer.h:102

◆ orderByDetIdThenTime()

static bool HGCDigitizer::orderByDetIdThenTime ( const HGCCaloHitTuple_t a,
const HGCCaloHitTuple_t b 
)
inlinestatic

Definition at line 36 of file HGCDigitizer.h.

References a, and b.

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

◆ resetPUSimHitDataAccumulator()

void HGCDigitizer::resetPUSimHitDataAccumulator ( )
private

◆ resetSimHitDataAccumulator()

void HGCDigitizer::resetSimHitDataAccumulator ( )
private

Definition at line 718 of file HGCDigitizer.cc.

References simHitAccumulator_.

718  {
719  for (HGCSimHitDataAccumulator::iterator it = simHitAccumulator_->begin(); it != simHitAccumulator_->end(); it++) {
720  it->second.hit_info[0].fill(0.);
721  it->second.hit_info[1].fill(0.);
722  }
723 }
std::unique_ptr< hgc::HGCSimHitDataAccumulator > simHitAccumulator_
Definition: HGCDigitizer.h:81

Member Data Documentation

◆ averageOccupancies_

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

Definition at line 128 of file HGCDigitizer.h.

Referenced by finalizeEvent(), and initializeEvent().

◆ bxTime_

const double HGCDigitizer::bxTime_
private

Definition at line 99 of file HGCDigitizer.h.

Referenced by accumulate(), and accumulate_forPreMix().

◆ cce_

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

Definition at line 134 of file HGCDigitizer.h.

Referenced by HGCDigitizer().

◆ digiCollection_

const std::string HGCDigitizer::digiCollection_
private

Definition at line 84 of file HGCDigitizer.h.

Referenced by digiCollection().

◆ digitizationType_

const int HGCDigitizer::digitizationType_
private

Definition at line 87 of file HGCDigitizer.h.

Referenced by finalizeEvent().

◆ ev_per_eh_pair_

double HGCDigitizer::ev_per_eh_pair_
private

Definition at line 100 of file HGCDigitizer.h.

◆ geomToken_

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

Definition at line 113 of file HGCDigitizer.h.

Referenced by initializeEvent().

◆ geomWatcher_

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

Definition at line 114 of file HGCDigitizer.h.

Referenced by initializeEvent().

◆ gHGCal_

const HGCalGeometry* HGCDigitizer::gHGCal_ = nullptr
private

◆ hitCollection_

const std::string HGCDigitizer::hitCollection_
private

Definition at line 102 of file HGCDigitizer.h.

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

◆ hitOrder_monitor

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

Definition at line 137 of file HGCDigitizer.h.

Referenced by accumulate_forPreMix(), and finalizeEvent().

◆ hitRefs_bx0

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

Definition at line 135 of file HGCDigitizer.h.

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

◆ hitsProducer_

const std::string HGCDigitizer::hitsProducer_
private

Definition at line 101 of file HGCDigitizer.h.

Referenced by accumulate(), and accumulate_forPreMix().

◆ hitToken_

const edm::EDGetTokenT<std::vector<PCaloHit> > HGCDigitizer::hitToken_
private

Definition at line 103 of file HGCDigitizer.h.

Referenced by accumulate(), and accumulate_forPreMix().

◆ maxBx_

const unsigned int HGCDigitizer::maxBx_ = 14
staticprivate

Definition at line 132 of file HGCDigitizer.h.

Referenced by accumulate(), and accumulate_forPreMix().

◆ maxSimHitsAccTime_

const int HGCDigitizer::maxSimHitsAccTime_
private

Definition at line 98 of file HGCDigitizer.h.

◆ nEvents_

uint32_t HGCDigitizer::nEvents_
private

Definition at line 129 of file HGCDigitizer.h.

Referenced by finalizeEvent().

◆ PhitRefs_bx0

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

Definition at line 136 of file HGCDigitizer.h.

Referenced by accumulate_forPreMix(), and finalizeEvent().

◆ premixStage1_

const bool HGCDigitizer::premixStage1_
private

Definition at line 90 of file HGCDigitizer.h.

Referenced by finalizeEvent().

◆ premixStage1MaxCharge_

const double HGCDigitizer::premixStage1MaxCharge_
private

Definition at line 95 of file HGCDigitizer.h.

Referenced by accumulate_forPreMix(), and finalizeEvent().

◆ premixStage1MinCharge_

const double HGCDigitizer::premixStage1MinCharge_
private

Definition at line 93 of file HGCDigitizer.h.

Referenced by accumulate_forPreMix(), and finalizeEvent().

◆ pusimHitAccumulator_

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

Definition at line 82 of file HGCDigitizer.h.

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

◆ refSpeed_

const float HGCDigitizer::refSpeed_
private

Definition at line 122 of file HGCDigitizer.h.

Referenced by accumulate(), and accumulate_forPreMix().

◆ simHitAccumulator_

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

◆ theDigitizer_

std::unique_ptr<HGCDigitizerBase> HGCDigitizer::theDigitizer_
private

◆ thisBx_

const unsigned int HGCDigitizer::thisBx_ = 9
staticprivate

Definition at line 133 of file HGCDigitizer.h.

Referenced by accumulate(), and accumulate_forPreMix().

◆ tofDelay_

const float HGCDigitizer::tofDelay_
private

Definition at line 125 of file HGCDigitizer.h.

Referenced by accumulate(), and accumulate_forPreMix().

◆ validIds_

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

Definition at line 115 of file HGCDigitizer.h.

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

◆ verbosity_

const uint32_t HGCDigitizer::verbosity_
private

Definition at line 119 of file HGCDigitizer.h.

Referenced by accumulate(), and initializeEvent().