CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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  int countHit = 0;
331 
332  for (auto const& hit1 : itTrack1->recHits()) {
333  const DetId detId1(hit1->geographicalId());
334  const int subdetId1 = detId1.subdetId();
335  uint32_t detid_db = detId1.rawId();
336  if (!hit1->isValid())
337  continue; // only real hits count as in itTrack1->numberOfValidHits()
338  hit_Total++;
339 
341  // Hit information in PixelBarrel //
343  if (PixelSubdetector::PixelBarrel == subdetId1) {
344  ++nhitinBPIX; //for cosmic track rate evaluation
345  ++nhitinPIXEL; //for cosmic track rate evaluation
346  ++nHits_PIXEL; // for PIXEL hits per track in Event Tree
347  ++hit_PIX; // for cosmic PIXEL hit rates per layer
348  ++hit_BPIX; // for cosmic PIXEL hit rates per layer
349 
350  int BPIX_layer = (tTopo->pxbLayer(detid_db));
351  if (BPIX_layer == 1) {
352  ++hit_BPIX_layer1; // for cosmic PIXEL hit rates per layer
353  } else if (BPIX_layer == 2) {
354  ++hit_BPIX_layer2; // for cosmic PIXEL hit rates per layer
355  } else if (BPIX_layer == 3) {
356  ++hit_BPIX_layer3; // for cosmic PIXEL hit rates per layer
357  } else if (BPIX_layer == 4) {
358  ++hit_BPIX_layer4; // for cosmic PIXEL hit rates per layer
359  } else {
360  std::cout << "CAUTION : Check Phase! BPIX layer not in {1,2,3}!" << std::endl;
361  std::cout << "Layer is : " << BPIX_layer << std::endl;
362  }
363 
364  }
366  // Hit information in PixelEndcap //
368  else if (PixelSubdetector::PixelEndcap == subdetId1) {
369  ++nhitinFPIX;
370  ++nhitinPIXEL;
371 
372  ++nHits_PIXEL;
373  ++hit_PIX; // for cosmic PIXEL hit rates per layer
374  ++hit_FPIX; // for cosmic PIXEL hit rates per layer
375 
376  int FPIX_side = (tTopo->pxfSide(detid_db));
377  int FPIX_disk = (tTopo->pxfDisk(detid_db));
378 
379  if (FPIX_disk == 1) {
380  ++hit_FPIX_disk1; // for cosmic PIXEL hit rates per layer
381  } else if (FPIX_disk == 2) {
382  ++hit_FPIX_disk2; // for cosmic PIXEL hit rates per layer
383  } else if (FPIX_disk == 3) {
384  ++hit_FPIX_disk3; // for cosmic PIXEL hit rates per layer
385  } else {
386  std::cout << "CAUTION : Check Phase! FPIX disk not in {1,2}!" << std::endl;
387  std::cout << "Disk is : " << FPIX_disk << std::endl;
388  }
389 
390  if (FPIX_disk == 1 && FPIX_side == 1) {
391  ++hit_FPIX_disk1_minus; // for cosmic PIXEL hit rates per layer
392  } else if (FPIX_disk == 1 && FPIX_side == 2) {
393  ++hit_FPIX_disk1_plus; // for cosmic PIXEL hit rates per layer
394  } else if (FPIX_disk == 2 && FPIX_side == 1) {
395  ++hit_FPIX_disk2_minus; // for cosmic PIXEL hit rates per layer
396  } else if (FPIX_disk == 2 && FPIX_side == 2) {
397  ++hit_FPIX_disk2_plus; // for cosmic PIXEL hit rates per layer
398  } else if (FPIX_disk == 3 && FPIX_side == 1) {
399  ++hit_FPIX_disk3_minus; // for cosmic PIXEL hit rates per layer
400  } else if (FPIX_disk == 3 && FPIX_side == 2) {
401  ++hit_FPIX_disk3_plus; // for cosmic PIXEL hit rates per layer
402  } else {
403  std::cout << "CAUTION : FPIX side not in {1,2}!" << std::endl;
404  }
405 
406  }
408  // Hit information in TEC //
410  else if (SiStripDetId::TEC == subdetId1) {
411  ++nhitinTEC;
412 
413  if (tTopo->tecIsZMinusSide(detId1)) {
414  ++nhitinTECminus;
415  } else {
416  ++nhitinTECplus;
417  }
418  }
420  // Hit information in TOB //
422  else if (SiStripDetId::TOB == subdetId1) {
423  ++nhitinTOB;
424  }
426  // Hit information in TIB //
428  else if (SiStripDetId::TIB == subdetId1) {
429  ++nhitinTIB;
430  }
432  // Hit information in TID //
434  else if (SiStripDetId::TID == subdetId1) {
435  ++nhitinTID;
436 
437  if (tTopo->tidIsZMinusSide(detId1)) {
438  ++nhitinTIDminus;
439  } else {
440  ++nhitinTIDplus;
441  }
442  }
443 
444  countHit++;
445  } // for Loop over Hits
446 
447  nh_PIXEL.push_back(nHits_PIXEL);
448 
449  if (nhitinBPIX > 0) {
450  track_BPIX++;
451  }
452  if (nhitinFPIX > 0) {
453  track_FPIX++;
454  }
455  if (nhitinPIXEL > 0) {
456  track_PIXEL++;
457  }
458  if (nhitinTEC > 0) {
459  track_TEC++;
460  }
461  if (nhitinTECminus > 0) {
462  track_TECM++;
463  }
464  if (nhitinTECplus > 0) {
465  track_TECP++;
466  }
467  if (nhitinTOB > 0) {
468  track_TOB++;
469  }
470  if (nhitinTIB > 0) {
471  track_TIB++;
472  }
473  if (nhitinTID > 0) {
474  track_TID++;
475  }
476  if (nhitinTIDminus > 0) {
477  track_TIDM++;
478  }
479  if (nhitinTIDplus > 0) {
480  track_TIDP++;
481  }
482 
483  ntrk++;
484  ntrk_runnum++;
485  nTotalTracks++;
486  } // for Loop over TrackCollection
487  events++;
488 
490  iEvent.getByToken(clustercollectionToken_, cluster);
491 
492  for (edmNew::DetSetVector<SiStripCluster>::const_iterator det = cluster->begin(); det != cluster->end(); ++det) {
493  DetectorID = (det->detId());
494  treeCluster->Fill();
495  }
496 
498  iEvent.getByToken(muonTags_, muH);
499  const reco::MuonCollection& muonsT0 = *(muH.product());
500  float time = -9999.;
501  for (unsigned int i = 0; i < muonsT0.size(); i++) {
502  //DT time
503  reco::MuonTime mt0 = muonsT0[i].time();
504  time = mt0.timeAtIpInOut;
505  DTtime.push_back(time);
506  }
507 
508  treeEvent->Fill();
510  nTotalEvents++;
511 
512 } //Event Loop
513 
514 // ------------ method called once each job just before starting event loop ------------
516  //--- Event tree ---//
517  treeEvent->Branch("pt", &pt);
518  treeEvent->Branch("charge", &charge);
519  treeEvent->Branch("chi2", &chi2);
520  treeEvent->Branch("chi2_ndof", &chi2_ndof);
521  treeEvent->Branch("eta", &eta);
522  treeEvent->Branch("theta", &theta);
523  treeEvent->Branch("phi", &phi);
524  treeEvent->Branch("p", &p);
525  treeEvent->Branch("d0", &d0);
526  treeEvent->Branch("dz", &dz);
527  treeEvent->Branch("nvh", &nvh);
528  treeEvent->Branch("ntrk", &ntrk);
529  treeEvent->Branch("nHitsPIXEL", &nh_PIXEL);
530  treeEvent->Branch("nHitsBPIX", &nh_BPIX);
531  treeEvent->Branch("nHitsFPIX", &nh_FPIX);
532  treeEvent->Branch("nHitsTIB", &nh_TIB);
533  treeEvent->Branch("nHitsTOB", &nh_TOB);
534  treeEvent->Branch("nHitsTID", &nh_TID);
535  treeEvent->Branch("nHitsTEC", &nh_TEC);
536  treeEvent->Branch("DTtime", &DTtime);
537  treeEvent->Branch("magField", &magField);
538 
539  //--- Run tree ---//
540  treeRun->Branch("run_time", &run_time);
541  treeRun->Branch("runnum", &runnum);
542  // a) For track Rate Calculation
543  treeRun->Branch("number_of_events", &number_of_events);
544  treeRun->Branch("number_of_tracks", &number_of_tracks);
545  treeRun->Branch("number_of_tracks_PIX", &number_of_tracks_PIX);
546  treeRun->Branch("number_of_tracks_FPIX", &number_of_tracks_FPIX);
547  treeRun->Branch("number_of_tracks_BPIX", &number_of_tracks_BPIX);
548  treeRun->Branch("number_of_tracks_TID", &number_of_tracks_TID);
549  treeRun->Branch("number_of_tracks_TIDM", &number_of_tracks_TIDM);
550  treeRun->Branch("number_of_tracks_TIDP", &number_of_tracks_TIDP);
551  treeRun->Branch("number_of_tracks_TIB", &number_of_tracks_TIB);
552  treeRun->Branch("number_of_tracks_TEC", &number_of_tracks_TEC);
553  treeRun->Branch("number_of_tracks_TECP", &number_of_tracks_TECP);
554  treeRun->Branch("number_of_tracks_TECM", &number_of_tracks_TECM);
555  treeRun->Branch("number_of_tracks_TOB", &number_of_tracks_TOB);
556  // a) For PIXEL Hit Rate Calculation
557  treeRun->Branch("number_of_hits_Total", &number_of_hits_Total);
558  treeRun->Branch("number_of_hits_PIX", &number_of_hits_PIX);
559  treeRun->Branch("number_of_hits_BPIX", &number_of_hits_BPIX);
560  treeRun->Branch("number_of_hits_BPIX_layer1", &number_of_hits_BPIX_layer1);
561  treeRun->Branch("number_of_hits_BPIX_layer2", &number_of_hits_BPIX_layer2);
562  treeRun->Branch("number_of_hits_BPIX_layer3", &number_of_hits_BPIX_layer3);
563  treeRun->Branch("number_of_hits_BPIX_layer4", &number_of_hits_BPIX_layer4);
564  treeRun->Branch("number_of_hits_FPIX", &number_of_hits_FPIX);
565  treeRun->Branch("number_of_hits_FPIX_disk1", &number_of_hits_FPIX_disk1);
566  treeRun->Branch("number_of_hits_FPIX_disk2", &number_of_hits_FPIX_disk2);
567  treeRun->Branch("number_of_hits_FPIX_disk3", &number_of_hits_FPIX_disk3);
568  treeRun->Branch("number_of_hits_FPIX_disk1_plus", &number_of_hits_FPIX_disk1_plus);
569  treeRun->Branch("number_of_hits_FPIX_disk1_minus", &number_of_hits_FPIX_disk1_minus);
570  treeRun->Branch("number_of_hits_FPIX_disk2_plus", &number_of_hits_FPIX_disk2_plus);
571  treeRun->Branch("number_of_hits_FPIX_disk2_minus", &number_of_hits_FPIX_disk2_minus);
572  treeRun->Branch("number_of_hits_FPIX_disk3_plus", &number_of_hits_FPIX_disk3_plus);
573  treeRun->Branch("number_of_hits_FPIX_disk3_minus", &number_of_hits_FPIX_disk3_minus);
574 
575  //--- Cluster tree ---//
576  treeCluster->Branch("DetID", &DetectorID);
577 }
578 
579 // ------------ method called once each job just after ending the event loop ------------
581  std::cout << "Total Events: " << nTotalEvents << std::endl;
582  std::cout << "TotalTracks: " << nTotalTracks << std::endl;
583 }
584 
585 // ------------ method called when starting to processes a run ------------
587  lastruntime = 0.0;
588  lastrunnum = 0.0;
589  ntrk_runnum = 0.0;
590  events = 0.0;
591  // a) for Track rate
592  track_BPIX = 0.0;
593  track_FPIX = 0.0;
594  track_PIXEL = 0.0;
595  track_TEC = 0.0;
596  track_TECM = 0.0;
597  track_TECP = 0.0;
598  track_TOB = 0.0;
599  track_TIB = 0.0;
600  track_TID = 0.0;
601  track_TIDM = 0.0;
602  track_TIDP = 0.0;
603 
604  // b) for PIXEL hit rate
605  hit_Total = 0.0;
606  hit_PIX = 0.0;
607  hit_BPIX = 0.0;
608  hit_BPIX_layer1 = 0.0;
609  hit_BPIX_layer2 = 0.0;
610  hit_BPIX_layer3 = 0.0;
611  hit_BPIX_layer4 = 0.0;
612  hit_FPIX = 0.0;
613  hit_FPIX_disk1 = 0.0;
614  hit_FPIX_disk2 = 0.0;
615  hit_FPIX_disk3 = 0.0;
616  hit_FPIX_disk1_plus = 0.0;
617  hit_FPIX_disk1_minus = 0.0;
618  hit_FPIX_disk2_plus = 0.0;
619  hit_FPIX_disk2_minus = 0.0;
620  hit_FPIX_disk3_plus = 0.0;
621  hit_FPIX_disk3_minus = 0.0;
622 }
623 
624 // ------------ method called when ending the processing of a run ------------
625 
629  runnum = lastrunnum;
630  // a) for Track Rate
643  // b) for PIXEL Hit Rate
661 
662  treeRun->Fill();
663 }
664 
665 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
668  desc.setComment("Create tuple with all variables required to calculate cosmic event and track rates.");
669  desc.add<edm::InputTag>("tracksInputTag", edm::InputTag("ALCARECOTkAlCosmicsCTF0T"));
670  desc.add<edm::InputTag>("muonsInputTag", edm::InputTag("muons1Leg"));
671  descriptions.add("cosmicRateAnalyzer", desc);
672 }
673 
674 //define this as a plug-in
static const std::string kSharedResource
Definition: TFileService.h:76
std::vector< double > theta
std::vector< double > dz
Timestamp const & endTime() const
Definition: RunBase.h:42
RunNumber_t run() const
Definition: RunBase.h:40
edm::EDGetTokenT< reco::TrackCollection > trackTags_
std::vector< double > pt
std::vector< double > d0
std::vector< double > eta
void endJob() override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
static constexpr auto TID
Definition: SiStripDetId.h:38
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
std::vector< int > nh_BPIX
std::vector< double > charge
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
tuple magneticField
edm::RunNumber_t lastrunnum
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoToken_
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
Run const & getRun() const
Definition: Event.cc:112
auto const & tracks
cannot be loose
std::vector< int > nh_TEC
unsigned int microsecondOffset() const
Microseconds offset within second.
Definition: Timestamp.h:43
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 getData(T &iHolder) const
Definition: EventSetup.h:128
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_
void setComment(std::string const &value)
int iEvent
Definition: GenABIO.cc:224
std::vector< double > DTtime
std::vector< double > nvh
edm::EDGetTokenT< reco::MuonCollection > muonTags_
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< int > nh_PIXEL
unsigned int unixTime() const
Time in seconds since January 1, 1970.
Definition: Timestamp.h:40
std::vector< double > phi
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static constexpr auto TOB
Definition: SiStripDetId.h:39
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
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:37
Timestamp const & beginTime() const
Definition: RunBase.h:41
edm::Service< TFileService > fs
void beginJob() override
void endRun(edm::Run const &, edm::EventSetup const &) override
std::vector< double > chi2_ndof
tuple cout
Definition: gather_cfg.py:144
unsigned int RunNumber_t
static double stampToReal(edm::Timestamp time)
float timeAtIpInOut
Definition: MuonTime.h:13
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > clustercollectionToken_
static constexpr auto TEC
Definition: SiStripDetId.h:40
Definition: Run.h:45
std::vector< int > nh_TIB
std::vector< int > nh_TID