CMS 3D CMS Logo

ETLDeviceSim.cc
Go to the documentation of this file.
1 #include "CLHEP/Units/GlobalPhysicalConstants.h"
5 
7  MIPPerMeV_( 1.0/pset.getParameter<double>("meVPerMIP") ),
8  bxTime_(pset.getParameter<double>("bxTime") ),
9  tofDelay_(pset.getParameter<double>("tofDelay") ) {}
10 
11 
12 void ETLDeviceSim::getHitsResponse(const std::vector<std::tuple<int,uint32_t,float> > &hitRefs,
14  mtd_digitizer::MTDSimHitDataAccumulator *simHitAccumulator,
15  CLHEP::HepRandomEngine *hre){
16 
17  //loop over sorted hits
18  const int nchits = hitRefs.size();
19  for(int i=0; i<nchits; ++i) {
20  const int hitidx = std::get<0>(hitRefs[i]);
21  const uint32_t id = std::get<1>(hitRefs[i]);
22  const MTDDetId detId(id);
23 
24  // Safety check
25  if ( detId.det()!=DetId::Forward || detId.mtdSubDetector()!=2 ) continue;
26 
27  auto simHitIt = simHitAccumulator->emplace(id,mtd_digitizer::MTDCellInfo()).first;
28 
29  if(id==0) continue; // to be ignored at RECO level
30 
31  const float toa = std::get<2>(hitRefs[i]) + tofDelay_;
32  const PSimHit &hit = hits->at( hitidx );
33  const float charge = 1000.f*hit.energyLoss()*MIPPerMeV_;
34 
35  // Accumulate in 15 buckets of 25ns (9 pre-samples, 1 in-time, 5 post-samples)
36  const int itime = std::floor( toa/bxTime_ ) + 9;
37  if(itime<0 || itime>14) continue;
38 
39  // Check if time index is ok and store energy
40  if(itime >= (int)simHitIt->second.hit_info[0].size() ) continue;
41 
42  (simHitIt->second).hit_info[0][itime] += charge;
43 
44  // Store the time of the first SimHit in the right DataFrame bucket
45  const float tof = toa - (itime-9)*bxTime_;
46 
47  if( (simHitIt->second).hit_info[1][itime] == 0. ||
48  tof < (simHitIt->second).hit_info[1][itime] ) {
49  (simHitIt->second).hit_info[1][itime] = tof;
50 
51  }
52 
53  }
54 
55 }
Detector identifier base class for the MIP Timing Layer.
Definition: MTDDetId.h:21
void getHitsResponse(const std::vector< std::tuple< int, uint32_t, float > > &hitRefs, const edm::Handle< edm::PSimHitContainer > &hits, mtd_digitizer::MTDSimHitDataAccumulator *simHitAccumulator, CLHEP::HepRandomEngine *hre)
Definition: ETLDeviceSim.cc:12
float tofDelay_
Definition: ETLDeviceSim.h:37
std::unordered_map< uint32_t, MTDCellInfo > MTDSimHitDataAccumulator
float MIPPerMeV_
Definition: ETLDeviceSim.h:35
ETLDeviceSim(const edm::ParameterSet &pset)
Definition: ETLDeviceSim.cc:6