CMS 3D CMS Logo

CosmicRateAnalyzer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: CosmicTrackTool/CosmicRateAnalyzer
4 // Class: CosmicRateAnalyzer
5 //
17 // Originally created: Justyna Magdalena Tomaszewska,,,
18 // Revisited by: Ashutosh Bhardwaj and Kirti Ranjan
19 // Further Developed by: Sumit Keshri (sumit.keshri@cern.ch) & Saumya (saumya.saumya@cern.ch)
20 //
21 // Created: Sat, 30 May 2015 20:14:35 GMT
22 //
23 
24 // system include files
25 #include <memory>
26 
27 // user include files
38 
42 
46 
51 
53 
57 
64 
65 #include <vector>
66 #include <string>
67 #include <iostream>
68 #include <fstream>
69 #include <iomanip>
70 #include <TTree.h>
71 
72 //
73 // class declaration
74 //
75 class CosmicRateAnalyzer : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::SharedResources> {
76 public:
77  explicit CosmicRateAnalyzer(const edm::ParameterSet&);
78  ~CosmicRateAnalyzer() override;
79 
80  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
81 
82 private:
83  void beginJob() override;
84  void analyze(const edm::Event&, const edm::EventSetup&) override;
85  void endJob() override;
86 
87  void beginRun(edm::Run const&, edm::EventSetup const&) override;
88  void endRun(edm::Run const&, edm::EventSetup const&) override;
89 
90  static double stampToReal(edm::Timestamp time) { return time.unixTime() + time.microsecondOffset() * 1e-6; }
91  void ClearInEventLoop();
92  void ClearInEndRun();
93  // ----------member data ---------------------------
103 
104  unsigned int DetectorID;
105  TTree* treeEvent;
106  TTree* treeRun;
107  TTree* treeCluster;
108 
109  //--------- Temporary varibles to store the values till the Run tree is filled ------//
110  // a) For track rates
111  int events;
123 
124  // b) For PIXEL Hit Rates by layers
126  int hit_PIX;
127  int hit_BPIX;
132  int hit_FPIX;
142 
143  std::vector<int> v_ntrk;
144  int ntrk;
146 
147  //---------- Branch Variables in tree Run ----------//
148  // a) Track Rate
163  double run_time;
164 
165  // b) For Hit Rate per PIXEL layer
183 
184  //---------- Branch Variables in tree Event: Track parameters ----------//
185  std::vector<double> pt;
186  std::vector<double> charge;
187  std::vector<double> chi2;
188  std::vector<double> chi2_ndof;
189  std::vector<double> eta;
190  std::vector<double> theta;
191  std::vector<double> phi;
192  std::vector<double> p;
193  std::vector<double> d0;
194  std::vector<double> dz;
195  std::vector<double> nvh;
196  std::vector<double> DTtime;
197  std::vector<int> nh_PIXEL;
198  std::vector<int> nh_BPIX;
199  std::vector<int> nh_FPIX;
200  std::vector<int> nh_TIB;
201  std::vector<int> nh_TOB;
202  std::vector<int> nh_TID;
203  std::vector<int> nh_TEC;
204 
205  //------ Temporary variables to store Hits per track till the Event tree is filled -------//
206  //FPIX+/-, BPIX+/-,TEC+/-, TID+/- can also be added similar way in case required
208 
209  //------ Variables to keep track of total events and tracks ------//
211 };
212 
213 //
214 // constants, enums and typedefs
215 //
216 
217 //
218 // static data member definitions
219 //
220 
221 //
222 // constructors and destructor
223 //
225  : magFieldToken_(esConsumes()),
226  topoToken_(esConsumes()),
227  latencyToken_(esConsumes()),
228  trackTags_(consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("tracksInputTag"))),
229  clustercollectionToken_(
230  consumes<edmNew::DetSetVector<SiStripCluster> >(iConfig.getParameter<edm::InputTag>("tracksInputTag"))),
231  muonTags_(consumes<reco::MuonCollection>(iConfig.getParameter<edm::InputTag>("muonsInputTag"))) {
232  //now do what ever initialization is needed
233  //
234  usesResource(TFileService::kSharedResource);
235  treeEvent = fs->make<TTree>("Event", "");
236  treeRun = fs->make<TTree>("Run", "");
237  treeCluster = fs->make<TTree>("Cluster", "");
238 
239  nTotalTracks = 0;
240  nTotalEvents = 0;
241 }
242 
244  // do anything here that needs to be done at desctruction time
245  // (e.g. close files, deallocate resources etc.)
246 }
247 
248 //
249 // member functions
250 //
252  pt.clear();
253  charge.clear();
254  chi2.clear();
255  chi2_ndof.clear();
256  eta.clear();
257  theta.clear();
258  phi.clear();
259  p.clear();
260  d0.clear();
261  dz.clear();
262  nvh.clear();
263  DTtime.clear();
264  nh_PIXEL.clear();
265  nh_BPIX.clear();
266  nh_FPIX.clear();
267  nh_TIB.clear();
268  nh_TOB.clear();
269  nh_TID.clear();
270  nh_TEC.clear();
271 }
272 
273 // ------------ method called for each event ------------
275  using namespace edm;
276 
277  using reco::TrackCollection;
279  iEvent.getByToken(trackTags_, tracks);
280 
281  const TrackerTopology* const tTopo = &iSetup.getData(topoToken_);
283  magField = magneticField->inTesla(GlobalPoint(0, 0, 0)).mag();
284  //const SiStripLatency* apvlat = &iSetup.getData(latencyToken_); // unused (for the moment)
285 
286  edm::Timestamp ts_begin = iEvent.getRun().beginTime();
287  double t_begin = stampToReal(ts_begin);
288  edm::Timestamp ts_end = iEvent.getRun().endTime();
289  double t_end = stampToReal(ts_end);
290 
291  lastruntime = t_end - t_begin;
292  lastrunnum = iEvent.getRun().run();
293 
294  if (!tracks->empty())
295  v_ntrk.push_back(tracks->size());
296 
297  ntrk = 0;
298  for (TrackCollection::const_iterator itTrack1 = tracks->begin(); itTrack1 != tracks->end(); ++itTrack1) {
299  pt.push_back(itTrack1->pt());
300  charge.push_back(itTrack1->charge());
301  chi2.push_back(itTrack1->chi2());
302  chi2_ndof.push_back(itTrack1->normalizedChi2());
303  eta.push_back(itTrack1->eta());
304  theta.push_back(itTrack1->theta());
305  phi.push_back(itTrack1->phi());
306  p.push_back(itTrack1->p());
307  d0.push_back(itTrack1->d0());
308  dz.push_back(itTrack1->dz());
309  nvh.push_back(itTrack1->numberOfValidHits());
310  nh_BPIX.push_back(itTrack1->hitPattern().numberOfValidPixelBarrelHits());
311  nh_FPIX.push_back(itTrack1->hitPattern().numberOfValidPixelEndcapHits());
312  nh_TIB.push_back(itTrack1->hitPattern().numberOfValidStripTIBHits());
313  nh_TOB.push_back(itTrack1->hitPattern().numberOfValidStripTOBHits());
314  nh_TID.push_back(itTrack1->hitPattern().numberOfValidStripTIDHits());
315  nh_TEC.push_back(itTrack1->hitPattern().numberOfValidStripTECHits());
316 
317  nHits_PIXEL = 0;
318 
319  int nhitinBPIX = 0;
320  int nhitinFPIX = 0;
321  int nhitinPIXEL = 0;
322  int nhitinTEC = 0;
323  int nhitinTOB = 0;
324  int nhitinTIB = 0;
325  int nhitinTID = 0;
326  int nhitinTECminus = 0;
327  int nhitinTECplus = 0;
328  int nhitinTIDminus = 0;
329  int nhitinTIDplus = 0;
330 
331  for (auto const& hit1 : itTrack1->recHits()) {
332  const DetId detId1(hit1->geographicalId());
333  const int subdetId1 = detId1.subdetId();
334  uint32_t detid_db = detId1.rawId();
335  if (!hit1->isValid())
336  continue; // only real hits count as in itTrack1->numberOfValidHits()
337  hit_Total++;
338 
340  // Hit information in PixelBarrel //
342  if (PixelSubdetector::PixelBarrel == subdetId1) {
343  ++nhitinBPIX; //for cosmic track rate evaluation
344  ++nhitinPIXEL; //for cosmic track rate evaluation
345  ++nHits_PIXEL; // for PIXEL hits per track in Event Tree
346  ++hit_PIX; // for cosmic PIXEL hit rates per layer
347  ++hit_BPIX; // for cosmic PIXEL hit rates per layer
348 
349  int BPIX_layer = (tTopo->pxbLayer(detid_db));
350  if (BPIX_layer == 1) {
351  ++hit_BPIX_layer1; // for cosmic PIXEL hit rates per layer
352  } else if (BPIX_layer == 2) {
353  ++hit_BPIX_layer2; // for cosmic PIXEL hit rates per layer
354  } else if (BPIX_layer == 3) {
355  ++hit_BPIX_layer3; // for cosmic PIXEL hit rates per layer
356  } else if (BPIX_layer == 4) {
357  ++hit_BPIX_layer4; // for cosmic PIXEL hit rates per layer
358  } else {
359  std::cout << "CAUTION : Check Phase! BPIX layer not in {1,2,3}!" << std::endl;
360  std::cout << "Layer is : " << BPIX_layer << std::endl;
361  }
362 
363  }
365  // Hit information in PixelEndcap //
367  else if (PixelSubdetector::PixelEndcap == subdetId1) {
368  ++nhitinFPIX;
369  ++nhitinPIXEL;
370 
371  ++nHits_PIXEL;
372  ++hit_PIX; // for cosmic PIXEL hit rates per layer
373  ++hit_FPIX; // for cosmic PIXEL hit rates per layer
374 
375  int FPIX_side = (tTopo->pxfSide(detid_db));
376  int FPIX_disk = (tTopo->pxfDisk(detid_db));
377 
378  if (FPIX_disk == 1) {
379  ++hit_FPIX_disk1; // for cosmic PIXEL hit rates per layer
380  } else if (FPIX_disk == 2) {
381  ++hit_FPIX_disk2; // for cosmic PIXEL hit rates per layer
382  } else if (FPIX_disk == 3) {
383  ++hit_FPIX_disk3; // for cosmic PIXEL hit rates per layer
384  } else {
385  std::cout << "CAUTION : Check Phase! FPIX disk not in {1,2}!" << std::endl;
386  std::cout << "Disk is : " << FPIX_disk << std::endl;
387  }
388 
389  if (FPIX_disk == 1 && FPIX_side == 1) {
390  ++hit_FPIX_disk1_minus; // for cosmic PIXEL hit rates per layer
391  } else if (FPIX_disk == 1 && FPIX_side == 2) {
392  ++hit_FPIX_disk1_plus; // for cosmic PIXEL hit rates per layer
393  } else if (FPIX_disk == 2 && FPIX_side == 1) {
394  ++hit_FPIX_disk2_minus; // for cosmic PIXEL hit rates per layer
395  } else if (FPIX_disk == 2 && FPIX_side == 2) {
396  ++hit_FPIX_disk2_plus; // for cosmic PIXEL hit rates per layer
397  } else if (FPIX_disk == 3 && FPIX_side == 1) {
398  ++hit_FPIX_disk3_minus; // for cosmic PIXEL hit rates per layer
399  } else if (FPIX_disk == 3 && FPIX_side == 2) {
400  ++hit_FPIX_disk3_plus; // for cosmic PIXEL hit rates per layer
401  } else {
402  std::cout << "CAUTION : FPIX side not in {1,2}!" << std::endl;
403  }
404 
405  }
407  // Hit information in TEC //
409  else if (SiStripDetId::TEC == subdetId1) {
410  ++nhitinTEC;
411 
412  if (tTopo->tecIsZMinusSide(detId1)) {
413  ++nhitinTECminus;
414  } else {
415  ++nhitinTECplus;
416  }
417  }
419  // Hit information in TOB //
421  else if (SiStripDetId::TOB == subdetId1) {
422  ++nhitinTOB;
423  }
425  // Hit information in TIB //
427  else if (SiStripDetId::TIB == subdetId1) {
428  ++nhitinTIB;
429  }
431  // Hit information in TID //
433  else if (SiStripDetId::TID == subdetId1) {
434  ++nhitinTID;
435 
436  if (tTopo->tidIsZMinusSide(detId1)) {
437  ++nhitinTIDminus;
438  } else {
439  ++nhitinTIDplus;
440  }
441  }
442 
443  } // for Loop over Hits
444 
445  nh_PIXEL.push_back(nHits_PIXEL);
446 
447  if (nhitinBPIX > 0) {
448  track_BPIX++;
449  }
450  if (nhitinFPIX > 0) {
451  track_FPIX++;
452  }
453  if (nhitinPIXEL > 0) {
454  track_PIXEL++;
455  }
456  if (nhitinTEC > 0) {
457  track_TEC++;
458  }
459  if (nhitinTECminus > 0) {
460  track_TECM++;
461  }
462  if (nhitinTECplus > 0) {
463  track_TECP++;
464  }
465  if (nhitinTOB > 0) {
466  track_TOB++;
467  }
468  if (nhitinTIB > 0) {
469  track_TIB++;
470  }
471  if (nhitinTID > 0) {
472  track_TID++;
473  }
474  if (nhitinTIDminus > 0) {
475  track_TIDM++;
476  }
477  if (nhitinTIDplus > 0) {
478  track_TIDP++;
479  }
480 
481  ntrk++;
482  ntrk_runnum++;
483  nTotalTracks++;
484  } // for Loop over TrackCollection
485  events++;
486 
488  iEvent.getByToken(clustercollectionToken_, cluster);
489 
490  for (edmNew::DetSetVector<SiStripCluster>::const_iterator det = cluster->begin(); det != cluster->end(); ++det) {
491  DetectorID = (det->detId());
492  treeCluster->Fill();
493  }
494 
496  iEvent.getByToken(muonTags_, muH);
497  const reco::MuonCollection& muonsT0 = *(muH.product());
498  float time = -9999.;
499  for (unsigned int i = 0; i < muonsT0.size(); i++) {
500  //DT time
501  reco::MuonTime mt0 = muonsT0[i].time();
502  time = mt0.timeAtIpInOut;
503  DTtime.push_back(time);
504  }
505 
506  treeEvent->Fill();
508  nTotalEvents++;
509 
510 } //Event Loop
511 
512 // ------------ method called once each job just before starting event loop ------------
514  //--- Event tree ---//
515  treeEvent->Branch("pt", &pt);
516  treeEvent->Branch("charge", &charge);
517  treeEvent->Branch("chi2", &chi2);
518  treeEvent->Branch("chi2_ndof", &chi2_ndof);
519  treeEvent->Branch("eta", &eta);
520  treeEvent->Branch("theta", &theta);
521  treeEvent->Branch("phi", &phi);
522  treeEvent->Branch("p", &p);
523  treeEvent->Branch("d0", &d0);
524  treeEvent->Branch("dz", &dz);
525  treeEvent->Branch("nvh", &nvh);
526  treeEvent->Branch("ntrk", &ntrk);
527  treeEvent->Branch("nHitsPIXEL", &nh_PIXEL);
528  treeEvent->Branch("nHitsBPIX", &nh_BPIX);
529  treeEvent->Branch("nHitsFPIX", &nh_FPIX);
530  treeEvent->Branch("nHitsTIB", &nh_TIB);
531  treeEvent->Branch("nHitsTOB", &nh_TOB);
532  treeEvent->Branch("nHitsTID", &nh_TID);
533  treeEvent->Branch("nHitsTEC", &nh_TEC);
534  treeEvent->Branch("DTtime", &DTtime);
535  treeEvent->Branch("magField", &magField);
536 
537  //--- Run tree ---//
538  treeRun->Branch("run_time", &run_time);
539  treeRun->Branch("runnum", &runnum);
540  // a) For track Rate Calculation
541  treeRun->Branch("number_of_events", &number_of_events);
542  treeRun->Branch("number_of_tracks", &number_of_tracks);
543  treeRun->Branch("number_of_tracks_PIX", &number_of_tracks_PIX);
544  treeRun->Branch("number_of_tracks_FPIX", &number_of_tracks_FPIX);
545  treeRun->Branch("number_of_tracks_BPIX", &number_of_tracks_BPIX);
546  treeRun->Branch("number_of_tracks_TID", &number_of_tracks_TID);
547  treeRun->Branch("number_of_tracks_TIDM", &number_of_tracks_TIDM);
548  treeRun->Branch("number_of_tracks_TIDP", &number_of_tracks_TIDP);
549  treeRun->Branch("number_of_tracks_TIB", &number_of_tracks_TIB);
550  treeRun->Branch("number_of_tracks_TEC", &number_of_tracks_TEC);
551  treeRun->Branch("number_of_tracks_TECP", &number_of_tracks_TECP);
552  treeRun->Branch("number_of_tracks_TECM", &number_of_tracks_TECM);
553  treeRun->Branch("number_of_tracks_TOB", &number_of_tracks_TOB);
554  // a) For PIXEL Hit Rate Calculation
555  treeRun->Branch("number_of_hits_Total", &number_of_hits_Total);
556  treeRun->Branch("number_of_hits_PIX", &number_of_hits_PIX);
557  treeRun->Branch("number_of_hits_BPIX", &number_of_hits_BPIX);
558  treeRun->Branch("number_of_hits_BPIX_layer1", &number_of_hits_BPIX_layer1);
559  treeRun->Branch("number_of_hits_BPIX_layer2", &number_of_hits_BPIX_layer2);
560  treeRun->Branch("number_of_hits_BPIX_layer3", &number_of_hits_BPIX_layer3);
561  treeRun->Branch("number_of_hits_BPIX_layer4", &number_of_hits_BPIX_layer4);
562  treeRun->Branch("number_of_hits_FPIX", &number_of_hits_FPIX);
563  treeRun->Branch("number_of_hits_FPIX_disk1", &number_of_hits_FPIX_disk1);
564  treeRun->Branch("number_of_hits_FPIX_disk2", &number_of_hits_FPIX_disk2);
565  treeRun->Branch("number_of_hits_FPIX_disk3", &number_of_hits_FPIX_disk3);
566  treeRun->Branch("number_of_hits_FPIX_disk1_plus", &number_of_hits_FPIX_disk1_plus);
567  treeRun->Branch("number_of_hits_FPIX_disk1_minus", &number_of_hits_FPIX_disk1_minus);
568  treeRun->Branch("number_of_hits_FPIX_disk2_plus", &number_of_hits_FPIX_disk2_plus);
569  treeRun->Branch("number_of_hits_FPIX_disk2_minus", &number_of_hits_FPIX_disk2_minus);
570  treeRun->Branch("number_of_hits_FPIX_disk3_plus", &number_of_hits_FPIX_disk3_plus);
571  treeRun->Branch("number_of_hits_FPIX_disk3_minus", &number_of_hits_FPIX_disk3_minus);
572 
573  //--- Cluster tree ---//
574  treeCluster->Branch("DetID", &DetectorID);
575 }
576 
577 // ------------ method called once each job just after ending the event loop ------------
579  std::cout << "Total Events: " << nTotalEvents << std::endl;
580  std::cout << "TotalTracks: " << nTotalTracks << std::endl;
581 }
582 
583 // ------------ method called when starting to processes a run ------------
585  lastruntime = 0.0;
586  lastrunnum = 0.0;
587  ntrk_runnum = 0.0;
588  events = 0.0;
589  // a) for Track rate
590  track_BPIX = 0.0;
591  track_FPIX = 0.0;
592  track_PIXEL = 0.0;
593  track_TEC = 0.0;
594  track_TECM = 0.0;
595  track_TECP = 0.0;
596  track_TOB = 0.0;
597  track_TIB = 0.0;
598  track_TID = 0.0;
599  track_TIDM = 0.0;
600  track_TIDP = 0.0;
601 
602  // b) for PIXEL hit rate
603  hit_Total = 0.0;
604  hit_PIX = 0.0;
605  hit_BPIX = 0.0;
606  hit_BPIX_layer1 = 0.0;
607  hit_BPIX_layer2 = 0.0;
608  hit_BPIX_layer3 = 0.0;
609  hit_BPIX_layer4 = 0.0;
610  hit_FPIX = 0.0;
611  hit_FPIX_disk1 = 0.0;
612  hit_FPIX_disk2 = 0.0;
613  hit_FPIX_disk3 = 0.0;
614  hit_FPIX_disk1_plus = 0.0;
615  hit_FPIX_disk1_minus = 0.0;
616  hit_FPIX_disk2_plus = 0.0;
617  hit_FPIX_disk2_minus = 0.0;
618  hit_FPIX_disk3_plus = 0.0;
619  hit_FPIX_disk3_minus = 0.0;
620 }
621 
622 // ------------ method called when ending the processing of a run ------------
623 
627  runnum = lastrunnum;
628  // a) for Track Rate
641  // b) for PIXEL Hit Rate
659 
660  treeRun->Fill();
661 }
662 
663 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
666  desc.setComment("Create tuple with all variables required to calculate cosmic event and track rates.");
667  desc.add<edm::InputTag>("tracksInputTag", edm::InputTag("ALCARECOTkAlCosmicsCTF0T"));
668  desc.add<edm::InputTag>("muonsInputTag", edm::InputTag("muons1Leg"));
669  descriptions.add("cosmicRateAnalyzer", desc);
670 }
671 
672 //define this as a plug-in
static const std::string kSharedResource
Definition: TFileService.h:76
std::vector< double > theta
std::vector< double > dz
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
unsigned int pxbLayer(const DetId &id) const
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
edm::EDGetTokenT< reco::TrackCollection > trackTags_
std::vector< double > pt
std::vector< double > d0
std::vector< double > eta
void endJob() override
static constexpr auto TID
Definition: SiStripDetId.h:39
std::vector< int > nh_BPIX
std::vector< double > charge
T const * product() const
Definition: Handle.h:70
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
edm::RunNumber_t lastrunnum
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoToken_
bool tecIsZMinusSide(const DetId &id) const
std::vector< int > nh_TEC
void analyze(const edm::Event &, const edm::EventSetup &) override
CosmicRateAnalyzer(const edm::ParameterSet &)
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
void beginRun(edm::Run const &, edm::EventSetup const &) override
bool tidIsZMinusSide(const DetId &id) const
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_
int iEvent
Definition: GenABIO.cc:224
std::vector< double > DTtime
std::vector< double > nvh
edm::EDGetTokenT< reco::MuonCollection > muonTags_
std::vector< int > nh_PIXEL
unsigned int pxfDisk(const DetId &id) const
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
std::vector< double > phi
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
static constexpr auto TOB
Definition: SiStripDetId.h:40
std::vector< double > chi2
std::vector< int > v_ntrk
std::vector< double > p
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
Definition: DetId.h:17
unsigned int pxfSide(const DetId &id) const
edm::RunNumber_t runnum
const edm::ESGetToken< SiStripLatency, SiStripLatencyRcd > latencyToken_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::vector< int > nh_FPIX
std::vector< int > nh_TOB
static constexpr auto TIB
Definition: SiStripDetId.h:38
edm::Service< TFileService > fs
void beginJob() override
fixed size matrix
HLT enums.
void endRun(edm::Run const &, edm::EventSetup const &) override
std::vector< double > chi2_ndof
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
unsigned int RunNumber_t
static double stampToReal(edm::Timestamp time)
float timeAtIpInOut
Definition: MuonTime.h:13
edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > clustercollectionToken_
static constexpr auto TEC
Definition: SiStripDetId.h:41
Definition: Run.h:45
std::vector< int > nh_TIB
std::vector< int > nh_TID