CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim > Class Template Reference

#include <FTLDigitizer.h>

Inheritance diagram for ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >:
FTLDigitizerBase

Public Member Functions

void accumulate (edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre) override
 handle SimHit accumulation More...
 
void accumulate (PileUpEventPrincipal const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre) override
 
void accumulate (edm::Handle< edm::PSimHitContainer > const &hits, int bxCrossing, CLHEP::HepRandomEngine *hre) override
 
void beginRun (const edm::EventSetup &es) override
 actions at the start/end of run More...
 
void endRun () override
 
void finalizeEvent (edm::Event &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre) override
 
 FTLDigitizer (const edm::ParameterSet &config, edm::ProducesCollector producesCollector, edm::ConsumesCollector &iC)
 
void initializeEvent (edm::Event const &e, edm::EventSetup const &c) override
 actions at the start/end of event More...
 
 ~FTLDigitizer () override
 
- Public Member Functions inherited from FTLDigitizerBase
 FTLDigitizerBase (const edm::ParameterSet &config, edm::ProducesCollector producesCollector, edm::ConsumesCollector &iC)
 
const std::string & name () const
 
virtual ~FTLDigitizerBase ()
 

Private Member Functions

void resetSimHitDataAccumulator ()
 

Private Attributes

const double bxTime_
 
edm::ESHandle< FastTimeDDDConstantsdddFTL_
 
SensorPhysics deviceSim_
 
ElectronicsSim electronicsSim_
 
edm::ESWatcher< IdealGeometryRecordidealGeomWatcher_
 
const int maxSimHitsAccTime_
 
FTLSimHitDataAccumulator simHitAccumulator_
 
const float tofDelay_
 
std::unordered_set< DetIdvalidIds_
 

Additional Inherited Members

- Protected Attributes inherited from FTLDigitizerBase
const std::string digiCollection_
 
const edm::InputTag inputSimHits_
 
const ForwardSubdetector mySubDet_
 
const float refSpeed_
 
const uint32_t verbosity_
 

Detailed Description

template<class SensorPhysics, class ElectronicsSim>
class ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >

Definition at line 50 of file FTLDigitizer.h.

Constructor & Destructor Documentation

template<class SensorPhysics , class ElectronicsSim >
ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::FTLDigitizer ( const edm::ParameterSet config,
edm::ProducesCollector  producesCollector,
edm::ConsumesCollector iC 
)
inline

Definition at line 52 of file FTLDigitizer.h.

53  : FTLDigitizerBase(config, producesCollector, iC),
54  deviceSim_(config.getParameterSet("DeviceSimulation")),
55  electronicsSim_(config.getParameterSet("ElectronicsSimulation")),
56  maxSimHitsAccTime_(config.getParameter<uint32_t>("maxSimHitsAccTime")),
57  bxTime_(config.getParameter<double>("bxTime")),
58  tofDelay_(config.getParameter<double>("tofDelay")) {}
FTLDigitizerBase(const edm::ParameterSet &config, edm::ProducesCollector producesCollector, edm::ConsumesCollector &iC)
T getParameter(std::string const &) const
ElectronicsSim electronicsSim_
Definition: FTLDigitizer.h:88
ParameterSet const & getParameterSet(std::string const &) const
template<class SensorPhysics , class ElectronicsSim >
ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::~FTLDigitizer ( )
inlineoverride

Member Function Documentation

template<class SensorPhysics , class ElectronicsSim >
void ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::accumulate ( edm::Event const &  e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  hre 
)
overridevirtual

handle SimHit accumulation

Implements FTLDigitizerBase.

Definition at line 105 of file FTLDigitizer.h.

References edm::Event::getByLabel(), and FastTrackerRecHitCombiner_cfi::simHits.

107  {
109  e.getByLabel(inputSimHits_, simHits);
110  accumulate(simHits, 0, hre);
111  }
const edm::InputTag inputSimHits_
void accumulate(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre) override
handle SimHit accumulation
Definition: FTLDigitizer.h:105
template<class SensorPhysics , class ElectronicsSim >
void ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::accumulate ( PileUpEventPrincipal const &  e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  hre 
)
overridevirtual

Implements FTLDigitizerBase.

Definition at line 114 of file FTLDigitizer.h.

References PileUpEventPrincipal::bunchCrossing(), PileUpEventPrincipal::getByLabel(), and FastTrackerRecHitCombiner_cfi::simHits.

116  {
118  e.getByLabel(inputSimHits_, simHits);
119  accumulate(simHits, e.bunchCrossing(), hre);
120  }
const edm::InputTag inputSimHits_
void accumulate(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *hre) override
handle SimHit accumulation
Definition: FTLDigitizer.h:105
template<class SensorPhysics , class ElectronicsSim >
void ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::accumulate ( edm::Handle< edm::PSimHitContainer > const &  hits,
int  bxCrossing,
CLHEP::HepRandomEngine *  hre 
)
overridevirtual

Implements FTLDigitizerBase.

Definition at line 123 of file FTLDigitizer.h.

References ALCARECOTkAlJpsiMuMu_cff::charge, TauDecayModes::dec, f, mps_fire::i, createfilelist::int, ftl_digitizer::FTLHelpers::orderByDetIdThenTime(), and HGCalUncalibRecHit_cfi::tdcOnset.

125  {
126  using namespace FTLHelpers;
127  //configuration to apply for the computation of time-of-flight
128  bool weightToAbyEnergy(false);
129  float tdcOnset(0.f);
130 
131  //create list of tuples (pos in container, RECO DetId, time) to be sorted first
132  int nchits = (int)hits->size();
133  std::vector<FTLCaloHitTuple_t> hitRefs;
134  hitRefs.reserve(nchits);
135  for (int i = 0; i < nchits; ++i) {
136  const auto& the_hit = hits->at(i);
137 
138  DetId id = (validIds_.count(the_hit.detUnitId()) ? the_hit.detUnitId() : 0);
139 
140  if (verbosity_ > 0) {
141  edm::LogInfo("HGCDigitizer") << " i/p " << std::hex << the_hit.detUnitId() << std::dec << " o/p " << id.rawId()
142  << std::endl;
143  }
144 
145  if (0 != id.rawId()) {
146  hitRefs.emplace_back(i, id.rawId(), the_hit.tof());
147  }
148  }
149  std::sort(hitRefs.begin(), hitRefs.end(), FTLHelpers::orderByDetIdThenTime);
150 
151  //loop over sorted hits
152  nchits = hitRefs.size();
153  for (int i = 0; i < nchits; ++i) {
154  const int hitidx = std::get<0>(hitRefs[i]);
155  const uint32_t id = std::get<1>(hitRefs[i]);
156 
157  //get the data for this cell, if not available then we skip it
158 
159  if (!validIds_.count(id))
160  continue;
161  auto simHitIt = simHitAccumulator_.emplace(id, FTLCellInfo()).first;
162 
163  if (id == 0)
164  continue; // to be ignored at RECO level
165 
166  const float toa = std::get<2>(hitRefs[i]);
167  const PSimHit& hit = hits->at(hitidx);
168  const float charge = deviceSim_.getChargeForHit(hit);
169 
170  //distance to the center of the detector
171  const float dist2center(0.1f * hit.entryPoint().mag());
172 
173  //hit time: [time()]=ns [centerDist]=cm [refSpeed_]=cm/ns + delay by 1ns
174  //accumulate in 15 buckets of 25ns (9 pre-samples, 1 in-time, 5 post-samples)
175  const float tof = toa - dist2center / refSpeed_ + tofDelay_;
176  const int itime = std::floor(tof / bxTime_) + 9;
177 
178  if (itime < 0 || itime > 14)
179  continue;
180 
181  //check if time index is ok and store energy
182  if (itime >= (int)simHitIt->second.hit_info[0].size())
183  continue;
184 
185  (simHitIt->second).hit_info[0][itime] += charge;
186  float accCharge = (simHitIt->second).hit_info[0][itime];
187 
188  //time-of-arrival (check how to be used)
189  if (weightToAbyEnergy)
190  (simHitIt->second).hit_info[1][itime] += charge * tof;
191  else if ((simHitIt->second).hit_info[1][itime] == 0) {
192  if (accCharge > tdcOnset) {
193  //extrapolate linear using previous simhit if it concerns to the same DetId
194  float fireTDC = tof;
195  if (i > 0) {
196  uint32_t prev_id = std::get<1>(hitRefs[i - 1]);
197  if (prev_id == id) {
198  float prev_toa = std::get<2>(hitRefs[i - 1]);
199  float prev_tof(prev_toa - dist2center / refSpeed_ + tofDelay_);
200  float deltaQ2TDCOnset = tdcOnset - ((simHitIt->second).hit_info[0][itime] - charge);
201  float deltaQ = charge;
202  float deltaT = (tof - prev_tof);
203  fireTDC = deltaT * (deltaQ2TDCOnset / deltaQ) + prev_tof;
204  }
205  }
206 
207  (simHitIt->second).hit_info[1][itime] = fireTDC;
208  }
209  }
210  }
211  hitRefs.clear();
212  }
std::unordered_set< DetId > validIds_
Definition: FTLDigitizer.h:99
const float refSpeed_
double f[11][100]
const uint32_t verbosity_
FTLSimHitDataAccumulator simHitAccumulator_
Definition: FTLDigitizer.h:93
Definition: DetId.h:17
bool orderByDetIdThenTime(const FTLCaloHitTuple_t &a, const FTLCaloHitTuple_t &b)
Definition: FTLDigitizer.h:33
template<class SensorPhysics , class ElectronicsSim >
void ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::beginRun ( const edm::EventSetup es)
overridevirtual

actions at the start/end of run

Get DDD constants

Implements FTLDigitizerBase.

Definition at line 235 of file FTLDigitizer.h.

References edm::EventSetup::get(), LEDCalibrationChannels::iphi, edm::swap(), and ecaldqm::zside().

235  {
236  if (idealGeomWatcher_.check(es)) {
238  es.get<IdealGeometryRecord>().get(dddFTL_);
239  { // force scope for the temporary nameless unordered_set
240  std::unordered_set<DetId>().swap(validIds_);
241  }
242  // recalculate valid detids
243  for (int zside = -1; zside <= 1; zside += 2) {
244  for (unsigned type = 1; type <= 2; ++type) {
245  for (unsigned izeta = 0; izeta < 1 << 10; ++izeta) {
246  for (unsigned iphi = 0; iphi < 1 << 10; ++iphi) {
247  if (dddFTL_->isValidXY(type, izeta, iphi)) {
248  validIds_.emplace(FastTimeDetId(type, izeta, iphi, zside));
249  }
250  }
251  }
252  }
253  }
254  validIds_.reserve(validIds_.size());
255  }
256  deviceSim_.getEventSetup(es);
257  electronicsSim_.getEventSetup(es);
258  }
type
Definition: HCALResponse.h:21
edm::ESHandle< FastTimeDDDConstants > dddFTL_
Definition: FTLDigitizer.h:101
ElectronicsSim electronicsSim_
Definition: FTLDigitizer.h:88
bool isValidXY(int type, int izeta, int iphi) const
edm::ESWatcher< IdealGeometryRecord > idealGeomWatcher_
Definition: FTLDigitizer.h:100
int zside(DetId const &)
std::unordered_set< DetId > validIds_
Definition: FTLDigitizer.h:99
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:117
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:52
T get() const
Definition: EventSetup.h:73
template<class SensorPhysics , class ElectronicsSim >
void ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::endRun ( )
inlineoverridevirtual

Implements FTLDigitizerBase.

Definition at line 81 of file FTLDigitizer.h.

81 {}
template<class SensorPhysics , class ElectronicsSim >
void ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::finalizeEvent ( edm::Event e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  hre 
)
overridevirtual

Implements FTLDigitizerBase.

Definition at line 221 of file FTLDigitizer.h.

References apvshotsanalyzer_cfi::digiCollection, eostools::move(), and edm::Event::put().

223  {
224  auto digiCollection = std::make_unique<FTLDigiCollection>();
225 
227 
229 
230  //release memory for next event
232  }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
ElectronicsSim electronicsSim_
Definition: FTLDigitizer.h:88
FTLSimHitDataAccumulator simHitAccumulator_
Definition: FTLDigitizer.h:93
const std::string digiCollection_
def move(src, dest)
Definition: eostools.py:511
template<class SensorPhysics , class ElectronicsSim >
void ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::initializeEvent ( edm::Event const &  e,
edm::EventSetup const &  c 
)
overridevirtual

actions at the start/end of event

Implements FTLDigitizerBase.

Definition at line 215 of file FTLDigitizer.h.

215  {
216  deviceSim_.getEvent(e);
217  electronicsSim_.getEvent(e);
218  }
ElectronicsSim electronicsSim_
Definition: FTLDigitizer.h:88
template<class SensorPhysics , class ElectronicsSim >
void ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::resetSimHitDataAccumulator ( )
inlineprivate

Definition at line 84 of file FTLDigitizer.h.

std::unordered_map< uint32_t, FTLCellInfo > FTLSimHitDataAccumulator
FTLSimHitDataAccumulator simHitAccumulator_
Definition: FTLDigitizer.h:93

Member Data Documentation

template<class SensorPhysics , class ElectronicsSim >
const double ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::bxTime_
private

Definition at line 92 of file FTLDigitizer.h.

template<class SensorPhysics , class ElectronicsSim >
edm::ESHandle<FastTimeDDDConstants> ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::dddFTL_
private

Definition at line 101 of file FTLDigitizer.h.

template<class SensorPhysics , class ElectronicsSim >
SensorPhysics ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::deviceSim_
private

Definition at line 87 of file FTLDigitizer.h.

template<class SensorPhysics , class ElectronicsSim >
ElectronicsSim ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::electronicsSim_
private

Definition at line 88 of file FTLDigitizer.h.

template<class SensorPhysics , class ElectronicsSim >
edm::ESWatcher<IdealGeometryRecord> ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::idealGeomWatcher_
private

Definition at line 100 of file FTLDigitizer.h.

template<class SensorPhysics , class ElectronicsSim >
const int ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::maxSimHitsAccTime_
private

Definition at line 91 of file FTLDigitizer.h.

template<class SensorPhysics , class ElectronicsSim >
FTLSimHitDataAccumulator ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::simHitAccumulator_
private

Definition at line 93 of file FTLDigitizer.h.

template<class SensorPhysics , class ElectronicsSim >
const float ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::tofDelay_
private

Definition at line 96 of file FTLDigitizer.h.

template<class SensorPhysics , class ElectronicsSim >
std::unordered_set<DetId> ftl_digitizer::FTLDigitizer< SensorPhysics, ElectronicsSim >::validIds_
private

Definition at line 99 of file FTLDigitizer.h.