test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EcalDigisValidation.cc
Go to the documentation of this file.
1 /*
2  * \file EcalDigisValidation.cc
3  *
4  * \author F. Cossutti
5  *
6 */
7 
13 
15  HepMCToken_( consumes<edm::HepMCProduct>( edm::InputTag( ps.getParameter<std::string>( "moduleLabelMC" ) ) ) ),
16  g4TkInfoToken_( consumes<edm::SimTrackContainer>( edm::InputTag( ps.getParameter<std::string>( "moduleLabelG4" ) ) ) ),
17  g4VtxInfoToken_( consumes<edm::SimVertexContainer>( edm::InputTag( ps.getParameter<std::string>( "moduleLabelG4" ) ) ) ),
18  EBdigiCollectionToken_( consumes<EBDigiCollection>( ps.getParameter<edm::InputTag>( "EBdigiCollection" ) ) ),
19  EEdigiCollectionToken_( consumes<EEDigiCollection>( ps.getParameter<edm::InputTag>( "EEdigiCollection" ) ) ),
20  ESdigiCollectionToken_( consumes<ESDigiCollection>( ps.getParameter<edm::InputTag>( "ESdigiCollection" ) ) ),
21  crossingFramePCaloHitEBToken_( consumes< CrossingFrame<PCaloHit> >( edm::InputTag( std::string( "mix" )
22  , ps.getParameter<std::string>( "moduleLabelG4" ) + std::string( "EcalHitsEB" )
23  )
24  )
25  ),
26  crossingFramePCaloHitEEToken_( consumes< CrossingFrame<PCaloHit> >( edm::InputTag( std::string( "mix" )
27  , ps.getParameter<std::string>( "moduleLabelG4" ) + std::string( "EcalHitsEE" )
28  )
29  )
30  ),
31  crossingFramePCaloHitESToken_( consumes< CrossingFrame<PCaloHit> >( edm::InputTag( std::string( "mix" )
32  , ps.getParameter<std::string>( "moduleLabelG4" ) + std::string( "EcalHitsES" )
33  )
34  )
35  ) {
36 
37 
38  // DQM ROOT output
39  outputFile_ = ps.getUntrackedParameter<std::string>("outputFile", "");
40 
41  if ( outputFile_.size() != 0 ) {
42  edm::LogInfo("OutputInfo") << " Ecal Digi Task histograms will be saved to '" << outputFile_.c_str() << "'";
43  } else {
44  edm::LogInfo("OutputInfo") << " Ecal Digi Task histograms will NOT be saved";
45  }
46 
47  // verbosity switch
48  verbose_ = ps.getUntrackedParameter<bool>("verbose", false);
49 
50  gainConv_[1] = 1.;
51  gainConv_[2] = 2.;
52  gainConv_[3] = 12.;
53  gainConv_[0] = 12.; // saturated channels
54  barrelADCtoGeV_ = 0.035;
55  endcapADCtoGeV_ = 0.06;
56 
57  meGunEnergy_ = 0;
58  meGunEta_ = 0;
59  meGunPhi_ = 0;
60 
63 
66 
69 
70 }
71 
73 
74 }
75 
77 
79 
80 }
81 
83 
84  Char_t histo[200];
85 
86  ibooker.setCurrentFolder("EcalDigisV/EcalDigiTask");
87 
88  sprintf (histo, "EcalDigiTask Gun Momentum" ) ;
89  meGunEnergy_ = ibooker.book1D(histo, histo, 100, 0., 1000.);
90 
91  sprintf (histo, "EcalDigiTask Gun Eta" ) ;
92  meGunEta_ = ibooker.book1D(histo, histo, 700, -3.5, 3.5);
93 
94  sprintf (histo, "EcalDigiTask Gun Phi" ) ;
95  meGunPhi_ = ibooker.book1D(histo, histo, 360, 0., 360.);
96 
97  sprintf (histo, "EcalDigiTask Barrel maximum Digi over Sim ratio" ) ;
98  meEBDigiSimRatio_ = ibooker.book1D(histo, histo, 100, 0., 2.) ;
99 
100  sprintf (histo, "EcalDigiTask Endcap maximum Digi over Sim ratio" ) ;
101  meEEDigiSimRatio_ = ibooker.book1D(histo, histo, 100, 0., 2.) ;
102 
103  sprintf (histo, "EcalDigiTask Barrel maximum Digi over Sim ratio gt 10 ADC" ) ;
104  meEBDigiSimRatiogt10ADC_ = ibooker.book1D(histo, histo, 100, 0., 2.) ;
105 
106  sprintf (histo, "EcalDigiTask Endcap maximum Digi over Sim ratio gt 20 ADC" ) ;
107  meEEDigiSimRatiogt20ADC_ = ibooker.book1D(histo, histo, 100, 0., 2.) ;
108 
109  sprintf (histo, "EcalDigiTask Barrel maximum Digi over Sim ratio gt 100 ADC" ) ;
110  meEBDigiSimRatiogt100ADC_ = ibooker.book1D(histo, histo, 100, 0., 2.) ;
111 
112  sprintf (histo, "EcalDigiTask Endcap maximum Digi over Sim ratio gt 100 ADC" ) ;
113  meEEDigiSimRatiogt100ADC_ = ibooker.book1D(histo, histo, 100, 0., 2.) ;
114 
115 }
116 
118 
119  edm::LogInfo("EventInfo") << " Run = " << e.id().run() << " Event = " << e.id().event();
120 
121  std::vector<SimTrack> theSimTracks;
122  std::vector<SimVertex> theSimVertexes;
123 
127  edm::Handle<CrossingFrame<PCaloHit> > crossingFrame;
131 
132  bool skipMC = false;
133  e.getByToken( HepMCToken_, MCEvt );
134  if (!MCEvt.isValid()) { skipMC = true; }
135  e.getByToken( g4TkInfoToken_, SimTk );
136  e.getByToken( g4VtxInfoToken_, SimVtx );
137 
138  const EBDigiCollection* EBdigis =0;
139  const EEDigiCollection* EEdigis =0;
140  const ESDigiCollection* ESdigis =0;
141 
142  bool isBarrel = true;
143  e.getByToken( EBdigiCollectionToken_, EcalDigiEB );
144  if (EcalDigiEB.isValid()) {
145  EBdigis = EcalDigiEB.product();
146  LogDebug("DigiInfo") << "total # EBdigis: " << EBdigis->size() ;
147  if ( EBdigis->size() == 0 ) isBarrel = false;
148  } else {
149  isBarrel = false;
150  }
151 
152  bool isEndcap = true;
153  e.getByToken( EEdigiCollectionToken_, EcalDigiEE );
154  if (EcalDigiEE.isValid()) {
155  EEdigis = EcalDigiEE.product();
156  LogDebug("DigiInfo") << "total # EEdigis: " << EEdigis->size() ;
157  if ( EEdigis->size() == 0 ) isEndcap = false;
158  } else {
159  isEndcap = false;
160  }
161 
162  bool isPreshower = true;
163  e.getByToken( ESdigiCollectionToken_, EcalDigiES );
164  if (EcalDigiES.isValid()) {
165  ESdigis = EcalDigiES.product();
166  LogDebug("DigiInfo") << "total # ESdigis: " << ESdigis->size() ;
167  if ( ESdigis->size() == 0 ) isPreshower = false;
168  } else {
169  isPreshower = false;
170  }
171 
172  theSimTracks.insert(theSimTracks.end(),SimTk->begin(),SimTk->end());
173  theSimVertexes.insert(theSimVertexes.end(),SimVtx->begin(),SimVtx->end());
174 
175  if ( ! skipMC ) {
176  double theGunEnergy = 0.;
177  for ( HepMC::GenEvent::particle_const_iterator p = MCEvt->GetEvent()->particles_begin();
178  p != MCEvt->GetEvent()->particles_end(); ++p ) {
179 
180  theGunEnergy = (*p)->momentum().e();
181  double htheta = (*p)->momentum().theta();
182  double heta = -log(tan(htheta * 0.5));
183  double hphi = (*p)->momentum().phi();
184  hphi = (hphi>=0) ? hphi : hphi+2*M_PI;
185  hphi = hphi / M_PI * 180.;
186  LogDebug("EventInfo") << "Particle gun type form MC = " << abs((*p)->pdg_id()) << "\n" << "Energy = "<< (*p)->momentum().e() << " Eta = " << heta << " Phi = " << hphi;
187 
188  if (meGunEnergy_) meGunEnergy_->Fill(theGunEnergy);
189  if (meGunEta_) meGunEta_->Fill(heta);
190  if (meGunPhi_) meGunPhi_->Fill(hphi);
191 
192  }
193  }
194 
195  int nvtx = 0;
196  for (std::vector<SimVertex>::iterator isimvtx = theSimVertexes.begin();
197  isimvtx != theSimVertexes.end(); ++isimvtx){
198  LogDebug("EventInfo") <<" Vertex index = " << nvtx << " event Id = " << isimvtx->eventId().rawId() << "\n" << " vertex dump: " << *isimvtx ;
199  ++nvtx;
200  }
201 
202  int ntrk = 0;
203  for (std::vector<SimTrack>::iterator isimtrk = theSimTracks.begin();
204  isimtrk != theSimTracks.end(); ++isimtrk){
205  LogDebug("EventInfo") <<" Track index = " << ntrk << " track Id = " << isimtrk->trackId() << " event Id = " << isimtrk->eventId().rawId() << "\n" << " track dump: " << *isimtrk ;
206  ++ntrk;
207  }
208 
209  // BARREL
210 
211  // loop over simHits
212 
213  if ( isBarrel ) {
214 
215  e.getByToken( crossingFramePCaloHitEBToken_, crossingFrame );
216  std::auto_ptr<MixCollection<PCaloHit> >
217  barrelHits( new MixCollection<PCaloHit>( crossingFrame.product() ) );
218 
219  MapType ebSimMap;
220 
221  for (MixCollection<PCaloHit>::MixItr hitItr = barrelHits->begin () ;
222  hitItr != barrelHits->end () ;
223  ++hitItr) {
224 
225  EBDetId ebid = EBDetId(hitItr->id()) ;
226 
227  LogDebug("HitInfo")
228  << " CaloHit " << hitItr->getName() << "\n"
229  << " DetID = " << hitItr->id()<< " EBDetId = " << ebid.ieta() << " " << ebid.iphi() << "\n"
230  << " Time = " << hitItr->time() << " Event id. = " << hitItr->eventId().rawId() << "\n"
231  << " Track Id = " << hitItr->geantTrackId() << "\n"
232  << " Energy = " << hitItr->energy();
233 
234  uint32_t crystid = ebid.rawId();
235  ebSimMap[crystid] += hitItr->energy();
236 
237  }
238 
239  // loop over Digis
240 
241  const EBDigiCollection * barrelDigi = EcalDigiEB.product () ;
242 
243  std::vector<double> ebAnalogSignal ;
244  std::vector<double> ebADCCounts ;
245  std::vector<double> ebADCGains ;
246  ebAnalogSignal.reserve(EBDataFrame::MAXSAMPLES);
247  ebADCCounts.reserve(EBDataFrame::MAXSAMPLES);
248  ebADCGains.reserve(EBDataFrame::MAXSAMPLES);
249 
250  for (unsigned int digis=0; digis<EcalDigiEB->size(); ++digis) {
251 
252  EBDataFrame ebdf=(*barrelDigi)[digis];
253  int nrSamples=ebdf.size();
254 
255  EBDetId ebid = ebdf.id () ;
256 
257  double Emax = 0. ;
258  int Pmax = 0 ;
259  double pedestalPreSample = 0.;
260  double pedestalPreSampleAnalog = 0.;
261 
262  for (int sample = 0 ; sample < nrSamples; ++sample) {
263  ebAnalogSignal[sample] = 0.;
264  ebADCCounts[sample] = 0.;
265  ebADCGains[sample] = -1.;
266  }
267 
268  for (int sample = 0 ; sample < nrSamples; ++sample) {
269 
271 
272  ebADCCounts[sample] = (mySample.adc()) ;
273  ebADCGains[sample] = (mySample.gainId()) ;
274  ebAnalogSignal[sample] = (ebADCCounts[sample]*gainConv_[(int)ebADCGains[sample]]*barrelADCtoGeV_);
275  if (Emax < ebAnalogSignal[sample] ) {
276  Emax = ebAnalogSignal[sample] ;
277  Pmax = sample ;
278  }
279  if ( sample < 3 ) {
280  pedestalPreSample += ebADCCounts[sample] ;
281  pedestalPreSampleAnalog += ebADCCounts[sample]*gainConv_[(int)ebADCGains[sample]]*barrelADCtoGeV_ ;
282  }
283  LogDebug("DigiInfo") << "EB sample " << sample << " ADC counts = " << ebADCCounts[sample] << " Gain Id = " << ebADCGains[sample] << " Analog eq = " << ebAnalogSignal[sample];
284  }
285 
286  pedestalPreSample /= 3. ;
287  pedestalPreSampleAnalog /= 3. ;
288  double Erec = Emax - pedestalPreSampleAnalog*gainConv_[(int)ebADCGains[Pmax]];
289 
290  if ( ebSimMap[ebid.rawId()] != 0. ) {
291  LogDebug("DigiInfo") << " Digi / Hit = " << Erec << " / " << ebSimMap[ebid.rawId()] << " gainConv " << gainConv_[(int)ebADCGains[Pmax]];
292  if ( meEBDigiSimRatio_ ) meEBDigiSimRatio_->Fill( Erec/ebSimMap[ebid.rawId()] ) ;
293  if ( Erec > 10.*barrelADCtoGeV_ && meEBDigiSimRatiogt10ADC_ ) meEBDigiSimRatiogt10ADC_->Fill( Erec/ebSimMap[ebid.rawId()] );
294  if ( Erec > 100.*barrelADCtoGeV_ && meEBDigiSimRatiogt100ADC_ ) meEBDigiSimRatiogt100ADC_->Fill( Erec/ebSimMap[ebid.rawId()] );
295 
296  }
297 
298  }
299 
300  }
301 
302  // ENDCAP
303 
304  // loop over simHits
305 
306  if ( isEndcap ) {
307 
308  e.getByToken( crossingFramePCaloHitEEToken_, crossingFrame );
309  std::auto_ptr<MixCollection<PCaloHit> >
310  endcapHits( new MixCollection<PCaloHit>( crossingFrame.product() ) );
311 
312  MapType eeSimMap;
313 
314  for (MixCollection<PCaloHit>::MixItr hitItr = endcapHits->begin () ;
315  hitItr != endcapHits->end () ;
316  ++hitItr) {
317 
318  EEDetId eeid = EEDetId(hitItr->id()) ;
319 
320  LogDebug("HitInfo")
321  << " CaloHit " << hitItr->getName() << "\n"
322  << " DetID = "<<hitItr->id()<< " EEDetId side = " << eeid.zside() << " = " << eeid.ix() << " " << eeid.iy() << "\n"
323  << " Time = " << hitItr->time() << " Event id. = " << hitItr->eventId().rawId() << "\n"
324  << " Track Id = " << hitItr->geantTrackId() << "\n"
325  << " Energy = " << hitItr->energy();
326 
327  uint32_t crystid = eeid.rawId();
328  eeSimMap[crystid] += hitItr->energy();
329 
330  }
331 
332  // loop over Digis
333 
334  const EEDigiCollection * endcapDigi = EcalDigiEE.product () ;
335 
336  std::vector<double> eeAnalogSignal ;
337  std::vector<double> eeADCCounts ;
338  std::vector<double> eeADCGains ;
339  eeAnalogSignal.reserve(EEDataFrame::MAXSAMPLES);
340  eeADCCounts.reserve(EEDataFrame::MAXSAMPLES);
341  eeADCGains.reserve(EEDataFrame::MAXSAMPLES);
342 
343  for (unsigned int digis=0; digis<EcalDigiEE->size(); ++digis) {
344 
345  EEDataFrame eedf=(*endcapDigi)[digis];
346  int nrSamples=eedf.size();
347 
348  EEDetId eeid = eedf.id () ;
349 
350  double Emax = 0. ;
351  int Pmax = 0 ;
352  double pedestalPreSample = 0.;
353  double pedestalPreSampleAnalog = 0.;
354 
355  for (int sample = 0 ; sample < nrSamples; ++sample) {
356  eeAnalogSignal[sample] = 0.;
357  eeADCCounts[sample] = 0.;
358  eeADCGains[sample] = -1.;
359  }
360 
361  for (int sample = 0 ; sample < nrSamples; ++sample) {
362 
364 
365  eeADCCounts[sample] = (mySample.adc()) ;
366  eeADCGains[sample] = (mySample.gainId()) ;
367  eeAnalogSignal[sample] = (eeADCCounts[sample]*gainConv_[(int)eeADCGains[sample]]*endcapADCtoGeV_);
368  if (Emax < eeAnalogSignal[sample] ) {
369  Emax = eeAnalogSignal[sample] ;
370  Pmax = sample ;
371  }
372  if ( sample < 3 ) {
373  pedestalPreSample += eeADCCounts[sample] ;
374  pedestalPreSampleAnalog += eeADCCounts[sample]*gainConv_[(int)eeADCGains[sample]]*endcapADCtoGeV_ ;
375  }
376  LogDebug("DigiInfo") << "EE sample " << sample << " ADC counts = " << eeADCCounts[sample] << " Gain Id = " << eeADCGains[sample] << " Analog eq = " << eeAnalogSignal[sample];
377  }
378  pedestalPreSample /= 3. ;
379  pedestalPreSampleAnalog /= 3. ;
380  double Erec = Emax - pedestalPreSampleAnalog*gainConv_[(int)eeADCGains[Pmax]];
381 
382  if (eeSimMap[eeid.rawId()] != 0. ) {
383  LogDebug("DigiInfo") << " Digi / Hit = " << Erec << " / " << eeSimMap[eeid.rawId()] << " gainConv " << gainConv_[(int)eeADCGains[Pmax]];
384  if ( meEEDigiSimRatio_) meEEDigiSimRatio_->Fill( Erec/eeSimMap[eeid.rawId()] ) ;
385  if ( Erec > 20.*endcapADCtoGeV_ && meEEDigiSimRatiogt20ADC_ ) meEEDigiSimRatiogt20ADC_->Fill( Erec/eeSimMap[eeid.rawId()] );
386  if ( Erec > 100.*endcapADCtoGeV_ && meEEDigiSimRatiogt100ADC_ ) meEEDigiSimRatiogt100ADC_->Fill( Erec/eeSimMap[eeid.rawId()] );
387  }
388 
389  }
390 
391  }
392 
393  if ( isPreshower) {
394 
395  e.getByToken( crossingFramePCaloHitESToken_, crossingFrame );
396  std::auto_ptr<MixCollection<PCaloHit> >
397  preshowerHits (new MixCollection<PCaloHit>(crossingFrame.product ()));
398 
399  for (MixCollection<PCaloHit>::MixItr hitItr = preshowerHits->begin () ;
400  hitItr != preshowerHits->end () ;
401  ++hitItr) {
402 
403  ESDetId esid = ESDetId(hitItr->id()) ;
404 
405  LogDebug("HitInfo")
406  << " CaloHit " << hitItr->getName() << "\n"
407  << " DetID = " << hitItr->id()<< "ESDetId: z side " << esid.zside() << " plane " << esid.plane() << esid.six() << ',' << esid.siy() << ':' << esid.strip() << "\n"
408  << " Time = " << hitItr->time() << " Event id. = " << hitItr->eventId().rawId() << "\n"
409  << " Track Id = " << hitItr->geantTrackId() << "\n"
410  << " Energy = " << hitItr->energy();
411 
412  }
413 
414  }
415 
416 }
417 
419 {
420 
421  // ADC -> GeV Scale
423  eventSetup.get<EcalADCToGeVConstantRcd>().get(pAgc);
424  const EcalADCToGeVConstant* agc = pAgc.product();
425 
426  EcalMGPAGainRatio * defaultRatios = new EcalMGPAGainRatio();
427 
428  gainConv_[1] = 1.;
429  gainConv_[2] = defaultRatios->gain12Over6() ;
430  gainConv_[3] = gainConv_[2]*(defaultRatios->gain6Over1()) ;
431  gainConv_[0] = gainConv_[2]*(defaultRatios->gain6Over1()) ; // saturated channels
432 
433  LogDebug("EcalDigi") << " Gains conversions: " << "\n" << " g1 = " << gainConv_[1] << "\n" << " g2 = " << gainConv_[2] << "\n" << " g3 = " << gainConv_[3];
434  LogDebug("EcalDigi") << " Gains conversions: " << "\n" << " saturation = " << gainConv_[0];
435 
436  delete defaultRatios;
437 
438  const double barrelADCtoGeV_ = agc->getEBValue();
439  LogDebug("EcalDigi") << " Barrel GeV/ADC = " << barrelADCtoGeV_;
440  const double endcapADCtoGeV_ = agc->getEEValue();
441  LogDebug("EcalDigi") << " Endcap GeV/ADC = " << endcapADCtoGeV_;
442 
443 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:39
edm::EDGetTokenT< EEDigiCollection > EEdigiCollectionToken_
EventNumber_t event() const
Definition: EventID.h:41
T getUntrackedParameter(std::string const &, T const &) const
int strip() const
Definition: ESDetId.h:52
int ix() const
Definition: EEDetId.h:76
key_type id() const
Definition: EBDataFrame.h:31
edm::EDGetTokenT< EBDigiCollection > EBdigiCollectionToken_
std::map< uint32_t, float, std::less< uint32_t > > MapType
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
bool isBarrel(GeomDetEnumerators::SubDetector m)
~EcalDigisValidation()
Destructor.
edm::EDGetTokenT< edm::SimVertexContainer > g4VtxInfoToken_
int six() const
Definition: ESDetId.h:48
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
MonitorElement * meEEDigiSimRatiogt100ADC_
std::map< int, double, std::less< int > > gainConv_
int gainId() const
get the gainId (2 bits)
int size() const
Definition: EcalDataFrame.h:26
MonitorElement * meGunEnergy_
void Fill(long long x)
int iphi() const
get the crystal iphi
Definition: EBDetId.h:53
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
MonitorElement * meEBDigiSimRatiogt10ADC_
MonitorElement * meEBDigiSimRatio_
int siy() const
Definition: ESDetId.h:50
void analyze(edm::Event const &e, edm::EventSetup const &c)
Analyze.
int zside() const
Definition: EEDetId.h:70
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::EDGetTokenT< CrossingFrame< PCaloHit > > crossingFramePCaloHitESToken_
int iy() const
Definition: EEDetId.h:82
float gain6Over1() const
int ieta() const
get the crystal ieta
Definition: EBDetId.h:51
int zside() const
Definition: ESDetId.h:44
bool isValid() const
Definition: HandleBase.h:75
MonitorElement * meGunEta_
bool isEndcap(GeomDetEnumerators::SubDetector m)
#define M_PI
key_type id() const
Definition: EEDataFrame.h:28
edm::EDGetTokenT< CrossingFrame< PCaloHit > > crossingFramePCaloHitEBToken_
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
T const * product() const
Definition: Handle.h:81
const T & get() const
Definition: EventSetup.h:56
std::vector< SimVertex > SimVertexContainer
T const * product() const
Definition: ESHandle.h:86
float gain12Over6() const
EcalDigisValidation(const edm::ParameterSet &ps)
Constructor.
MonitorElement * meEEDigiSimRatio_
edm::EventID id() const
Definition: EventBase.h:60
MonitorElement * meGunPhi_
int plane() const
Definition: ESDetId.h:46
edm::EDGetTokenT< ESDigiCollection > ESdigiCollectionToken_
MonitorElement * meEEDigiSimRatiogt20ADC_
edm::EDGetTokenT< edm::HepMCProduct > HepMCToken_
void checkCalibrations(edm::EventSetup const &c)
edm::EDGetTokenT< CrossingFrame< PCaloHit > > crossingFramePCaloHitEEToken_
void bookHistograms(DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &) override
std::vector< SimTrack > SimTrackContainer
MonitorElement * meEBDigiSimRatiogt100ADC_
static const int MAXSAMPLES
Definition: EcalDataFrame.h:48
edm::EDGetTokenT< edm::SimTrackContainer > g4TkInfoToken_
Definition: Run.h:43
int adc() const
get the ADC sample (12 bits)
tuple log
Definition: cmsBatch.py:341