CMS 3D CMS Logo

OuterTrackerMonitorTrackingParticles.cc
Go to the documentation of this file.
1 // Package: SiOuterTrackerV
2 // Class: SiOuterTrackerV
3 
4 
5 // Original Author: Emily MacDonald
6 //
7 
8 // system include files
9 #include <memory>
10 #include <vector>
11 #include <numeric>
12 #include <iostream>
13 #include <fstream>
14 
15 // user include files
38 
39 
40 //
41 // constructors and destructor
42 //
44 : conf_(iConfig)
45 {
46  topFolderName_ = conf_.getParameter<std::string>("TopFolderName");
47  trackingParticleToken_ = consumes< std::vector < TrackingParticle > >(conf_.getParameter<edm::InputTag>("trackingParticleToken"));
48  ttStubMCTruthToken_ = consumes < TTStubAssociationMap < Ref_Phase2TrackerDigi_ > > (conf_.getParameter<edm::InputTag>("MCTruthStubInputTag"));
49  ttClusterMCTruthToken_ = consumes< TTClusterAssociationMap< Ref_Phase2TrackerDigi_ > >(conf_.getParameter<edm::InputTag>("MCTruthClusterInputTag"));
50  ttTrackMCTruthToken_ = consumes< TTTrackAssociationMap< Ref_Phase2TrackerDigi_ > > (conf_.getParameter<edm::InputTag>("MCTruthTrackInputTag"));
51  ttStubToken_ = consumes < edmNew::DetSetVector < TTStub < Ref_Phase2TrackerDigi_ > > > (conf_.getParameter<edm::InputTag>("StubInputTag"));
52  ttTrackToken_ = consumes< std::vector< TTTrack< Ref_Phase2TrackerDigi_ > > > (conf_.getParameter<edm::InputTag>("TTTracksTag"));
53  L1Tk_nPar = conf_.getParameter< int >("L1Tk_nPar"); //4 or 5(d0) track parameters
54  L1Tk_minNStub = conf_.getParameter< int >("L1Tk_minNStub"); //min number of stubs in the track
55  L1Tk_maxChi2 = conf_.getParameter< double >("L1Tk_maxChi2"); //maximum chi2 of the track
56  L1Tk_maxChi2dof = conf_.getParameter< double >("L1Tk_maxChi2dof"); //maximum chi2/dof of the track
57  TP_minNStub = conf_.getParameter< int >("TP_minNStub"); //min number of stubs in the tracking particle to consider matching
58  TP_minPt = conf_.getParameter< double >("TP_minPt"); //min pT to consider matching
59  TP_maxPt = conf_.getParameter< double >("TP_maxPt"); //max pT to consider matching
60  TP_maxEta = conf_.getParameter< double >("TP_maxEta"); //max eta to consider matching
61  TP_maxVtxZ = conf_.getParameter< double >("TP_maxVtxZ"); //max vertZ (or z0) to consider matching
62  TP_select_eventid= conf_.getParameter< int >("TP_select_eventid");} //PI or not
63 
65 {
66  // do anything here that needs to be done at desctruction time
67  // (e.g. close files, deallocate resources etc.)
68 }
69 
70 // member functions
71 
72 // ------------ method called for each event ------------
74 {
75  typename edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ > >::const_iterator inputIter;
76  typename edmNew::DetSet< TTStub< Ref_Phase2TrackerDigi_ > >::const_iterator contentIter;
77  typedef std::vector<TrackingParticle> TrackingParticleCollection;
78 
79  // Tracking Particles
80  edm::Handle< std::vector < TrackingParticle > > trackingParticleHandle;
81  iEvent.getByToken(trackingParticleToken_, trackingParticleHandle);
82 
83  // L1 Primaries
85  iEvent.getByToken(ttStubToken_, TTStubHandle);
87  iEvent.getByToken(ttTrackToken_, TTTrackHandle);
88 
89  // Truth Association Maps
91  iEvent.getByToken(ttTrackMCTruthToken_, MCTruthTTTrackHandle);
93  iEvent.getByToken(ttClusterMCTruthToken_, MCTruthTTClusterHandle);
95  iEvent.getByToken(ttStubMCTruthToken_, MCTruthTTStubHandle);
96 
97  // Geometries
98  edm::ESHandle< TrackerGeometry > tGeometryHandle;
99  const TrackerGeometry* theTrackerGeometry;
100  iSetup.get< TrackerDigiGeometryRecord >().get(tGeometryHandle);
101  theTrackerGeometry = tGeometryHandle.product();
102 
103  // Stub info
104  std::vector<float> TTStubs_x;
105  std::vector<float> TTStubs_y;
106  std::vector<float> TTStubs_z;
107  std::vector<float> TTStubs_r;
108  std::vector<float> TTStubs_eta;
109  std::vector<float> TTStubs_phi;
110  std::vector<int> TTStubs_tpId; //Relates the stub to its tracking particle
111 
112  // Tracking particle distribution, to be used for 1D distribution plots with pT>2, abs(eta)<2.4, and num layers hit >=4
113  // These are slightly different quantitites than those used in the track matching!! They have different cuts
114  std::vector<float> v_tp_pt;
115  std::vector<float> v_tp_eta;
116  std::vector<float> v_tp_phi;
117  std::vector<float> v_tp_nLayers; //Calculated as the number of layers hit
118 
119  // Add protection
120  if ( !TTStubHandle.isValid() ) return;
121 
122  // Loop through stubs to determine a link to each stub's tracking particle
123  for (inputIter = TTStubHandle->begin(); inputIter != TTStubHandle->end();++inputIter){
124  for (contentIter = inputIter->begin(); contentIter != inputIter->end(); ++contentIter){
126 
127  DetId detIdStub = theTrackerGeometry->idToDet((tempStubRef->getClusterRef(0))->getDetId())->geographicalId();
128  const MeasurementPoint& mp = (tempStubRef->getClusterRef(0))->findAverageLocalCoordinates();
129  const GeomDet* theGeomDet = theTrackerGeometry->idToDet(detIdStub);
130  Global3DPoint posStub = theGeomDet->surface().toGlobal(theGeomDet->topology().localPosition(mp));
131 
133 
134  float stubs_x = posStub.x();
135  float stubs_y = posStub.y();
136  float stubs_z = posStub.z();
137  float stubs_r = posStub.perp();
138  float stubs_eta = posStub.eta();
139  float stubs_phi = posStub.phi();
140  TTStubs_x.push_back(stubs_x);
141  TTStubs_y.push_back(stubs_y);
142  TTStubs_z.push_back(stubs_z);
143  TTStubs_r.push_back(stubs_r);
144  TTStubs_eta.push_back(stubs_eta);
145  TTStubs_phi.push_back(stubs_phi);
146 
147  // Set to dummy values first, in case the tp Id cannot be determined
148  TTStubs_tpId.push_back(-1);
149 
150  // Retrieve MC association
151  bool genuineStub = false;
152  if ( MCTruthTTStubHandle.isValid() ) {
153  genuineStub = MCTruthTTStubHandle->isGenuine(tempStubPtr);
154  }
155  if (genuineStub) {
156  edm::Ptr< TrackingParticle > tpPtr = MCTruthTTStubHandle->findTrackingParticlePtr(tempStubPtr);
157  if (tpPtr.isNonnull()) {
158  float x = tpPtr->vertex().x();
159  float y = tpPtr->vertex().y();
160  float z = tpPtr->vertex().z();
161  float px = tpPtr->p4().px();
162  float py = tpPtr->p4().py();
163  float pz = tpPtr->p4().pz();
164  int idx = -1;
165  int counter = 0;
166  // Determine to which tracking particle the stub is associated
167  for (auto it: *trackingParticleHandle){ // Loop over TPs
168  counter++;
169  float allowedRes = 0.001;
170  if (std::fabs(it.vx()-x)>allowedRes) continue;
171  if (std::fabs(it.vy()-y)>allowedRes) continue;
172  if (std::fabs(it.vz()-z)>allowedRes) continue;
173  if (std::fabs(it.px()-px)>allowedRes) continue;
174  if (std::fabs(it.py()-py)>allowedRes) continue;
175  if (std::fabs(it.pz()-pz)>allowedRes) continue;
176 
177  idx=counter;
178  }
179  TTStubs_tpId.back() = idx; // Set the tpId: a link between the stub and its tracking particle
180  }
181  }
182  } // End content iterator
183  } // End input iterator
184 
185  // Effectively, a loop through all tracking particles through their stubs
186  // For each tracking particle, will determine whether the layer has a stub (true) or not (false)
187  std::vector<TpStruct> TPStructs;
188  for (unsigned j=0;j<TTStubs_tpId.size();j++){ // Loop over all stubs
189  const int ID = TTStubs_tpId[j];
190  if(ID<0) continue;
191  int pos = -1;
192  int p = 0; // Counter
193  for(auto thisStruct: TPStructs){ // make sure you only assign one tracking particle to one TpStruct
194  if(ID == thisStruct.TpId) {
195  pos = p; break;
196  }
197  p++;
198  }
199 
200  if (pos<0) { // if you have not yet looped through this tracking particle...
201  TpStruct thisTPStruct;
202  thisTPStruct.TpId = ID;
203  int totalLayers = 11;
204  std::vector<bool> layerElement(totalLayers,false); //set each layer's "hit" status to false
205  thisTPStruct.layer=layerElement;
206  TPStructs.push_back(thisTPStruct);
207  pos=TPStructs.size()-1;
208  }
209  int l=Layer( TTStubs_r[j],TTStubs_z[j] ); // Send through function Layer, which determines which layer the stub is in
210  if (l>=0) TPStructs[pos].layer[l] = true; // Set the layer that is "hit" to true
211  } // End loop over stubs
212 
213  // Fill the tracking particle quantities
214  //std::vector< TrackingParticle >::const_iterator iterTP1;
215  for (auto iterTP1: *trackingParticleHandle) {
216  v_tp_pt.push_back(iterTP1.pt());
217  v_tp_eta.push_back(iterTP1.eta());
218  v_tp_phi.push_back(iterTP1.phi());
219  v_tp_nLayers.push_back(-1); // Set to dummy values first
220  }
221 
222  // Fill nLayers variable for tracking particles
223  // Loop through tracking particles in special container (TPStructs), add up the number of layers set "true" as an integer value
224  for (auto thisStruct: TPStructs){
225  int id = thisStruct.TpId;
226  v_tp_nLayers.at(id-1) = thisStruct.Nlayers();
227  }
228  // Includes all tracking particles, different cuts than those used in the efficiency
229  for (unsigned j=0;j<v_tp_eta.size();j++) { //Over all TPs
230  double trkParts_eta = v_tp_eta[j];
231  double trkParts_pt = v_tp_pt[j];
232  double trkParts_phi = v_tp_phi[j];
233  double trkParts_nLayers = v_tp_nLayers[j]; // the number of layers hit for each tracking particle
234 
235  // Fill the 1D distribution plots for tracking particles, to monitor change in stub definition
236  if (std::fabs(trkParts_eta)<2.4 && trkParts_pt>2 && trkParts_nLayers>=4) {
237  // Fill 1D distributions
238  trackParts_Pt ->Fill(trkParts_pt);
239  trackParts_Eta->Fill(trkParts_eta);
240  trackParts_Phi->Fill(trkParts_phi);
241  }
242  }
243 
244  // Efficiency and resolution for the L1 tracks
245  std::vector<float> trkParts_eta;
246  std::vector<float> trkParts_phi;
247  std::vector<float> trkParts_pt;
248  std::vector<float> trkParts_VtxZ;
249  std::vector<float> trkParts_d0;
250  std::vector<float> trkParts_VtxR;
251  std::vector<int> trkParts_pdgId;
252  std::vector<int> trkParts_nMatch;
253  std::vector<int> trkParts_nStub;
254  std::vector<int> trkParts_eventId;
255  std::vector<float> matchTrk_pt;
256  std::vector<float> matchTrk_eta;
257  std::vector<float> matchTrk_phi;
258  std::vector<float> matchTrk_VtxZ;
259  std::vector<float> matchTrk_d0;
260  std::vector<float> matchTrk_chi2;
261  std::vector<int> matchTrk_nStub;
262 
263  // Add protection
264  if ( !TTTrackHandle.isValid() ) return;
265 
266  // Loop over tracking particles
267  int this_tp = 0;
268  //std::vector< TrackingParticle >::const_iterator iterTP;
269  for (auto iterTP: *trackingParticleHandle) {
270  edm::Ptr< TrackingParticle > tp_ptr(trackingParticleHandle, this_tp);
271  this_tp++;
272 
273  int tmp_eventid = iterTP.eventId().event();
274  float tmp_tp_pt = iterTP.pt();
275  float tmp_tp_phi = iterTP.phi();
276  float tmp_tp_eta = iterTP.eta();
277  float tmp_tp_vz = iterTP.vz();
278  float tmp_tp_vx = iterTP.vx();
279  float tmp_tp_vy = iterTP.vy();
280  float tmp_tp_charge = tp_ptr->charge();
281  int tmp_tp_pdgid = iterTP.pdgId();
282 
283  // ----------------------------------------------------------------------------------------------
284  // calculate d0 and VtxZ propagated back to the IP, pass if greater than max VtxZ
285  float tmp_tp_t = tan(2.0*atan(1.0)-2.0*atan(exp(-tmp_tp_eta)));
286  float delx = -tmp_tp_vx;
287  float dely = -tmp_tp_vy;
288  float K = 0.01*0.5696 / tmp_tp_pt * tmp_tp_charge; // curvature correction
289  float A = 1./(2. * K);
290  float tmp_tp_x0p = delx - A*sin(tmp_tp_phi);
291  float tmp_tp_y0p = dely + A*cos(tmp_tp_phi);
292  float tmp_tp_rp = sqrt(tmp_tp_x0p*tmp_tp_x0p + tmp_tp_y0p*tmp_tp_y0p);
293  static double pi = 4.0*atan(1.0);
294  float delphi = tmp_tp_phi-atan2(-K*tmp_tp_x0p,K*tmp_tp_y0p);
295  if (delphi<-pi) delphi+=2.0*pi;
296  if (delphi>pi) delphi-=2.0*pi;
297 
298  float tmp_tp_VtxZ = tmp_tp_vz+tmp_tp_t*delphi/(2.0*K);
299  float VtxR = sqrt(tmp_tp_vx*tmp_tp_vx + tmp_tp_vy*tmp_tp_vy);
300  float tmp_tp_VtxR = VtxR;
301  float tmp_tp_d0 = tmp_tp_charge*tmp_tp_rp - (1. / (2. * K));
302 
303  //simpler formula for d0, in cases where the charge is zero: https://github.com/cms-sw/cmssw/blob/master/DataFormats/TrackReco/interface/TrackBase.h
304  float other_d0 = -tmp_tp_vx*sin(tmp_tp_phi)+tmp_tp_vy*cos(tmp_tp_phi);
305  tmp_tp_d0 = tmp_tp_d0*(-1); //fix d0 sign
306  if (K==0){
307  tmp_tp_d0 = other_d0;
308  tmp_tp_VtxZ = tmp_tp_vz;
309  }
310  int nStubTP = -1;
311  if ( MCTruthTTStubHandle.isValid() ) {
312  std::vector< edm::Ref< edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ > >, TTStub< Ref_Phase2TrackerDigi_ > > > theStubRefs = MCTruthTTStubHandle->findTTStubRefs(tp_ptr);
313  nStubTP = (int) theStubRefs.size();
314  }
315 
316  // ----------------------------------------------------------------------------------------------
317  // look for L1 tracks matched to the tracking particle
318  if (tmp_eventid > 0) continue; //only care about tracking particles from the primary interaction
319  if (std::fabs(tmp_tp_eta) > TP_maxEta) continue;
320  if (std::fabs(tmp_tp_VtxZ) > TP_maxVtxZ) continue;
321 
322  // ----------------------------------------------------------------------------------------------
323  // only consider TPs with >= X stubs (configurable option)
324  if ( MCTruthTTClusterHandle.isValid() ) {
325  if (MCTruthTTClusterHandle->findTTClusterRefs(tp_ptr).empty()) continue;
326  }
327 
328  // To make efficiency plots where the denominator has NO stub cuts
329  if (VtxR < 1.0) {
330  tp_pt->Fill(tmp_tp_pt); // pT efficiency has no cut on pT, but includes VtxR cut
331  if(tmp_tp_pt>0 && tmp_tp_pt<=10)tp_pt_zoom->Fill(tmp_tp_pt); // pT efficiency has no cut on pT, but includes VtxR cut
332  }
333  if (tmp_tp_pt < TP_minPt) continue;
334  tp_VtxR->Fill(tmp_tp_VtxR); // VtxR efficiency has no cut on VtxR
335  if (VtxR > 1.0) continue;
336  tp_eta->Fill(tmp_tp_eta);
337  tp_d0->Fill(tmp_tp_d0);
338  tp_VtxZ->Fill(tmp_tp_VtxZ);
339 
340  if (nStubTP < TP_minNStub) continue;
341  if ( !MCTruthTTTrackHandle.isValid() ) continue;
342  std::vector< edm::Ptr< TTTrack< Ref_Phase2TrackerDigi_ > > > matchedTracks = MCTruthTTTrackHandle->findTTTrackPtrs(tp_ptr);
343 
344  int nMatch = 0;
345  int i_track = -1;
346  float i_chi2dof = 99999;
347 
348  // ----------------------------------------------------------------------------------------------
349  // loop over matched L1 tracks
350  // here, "match" means tracks that can be associated to a TrackingParticle with at least one hit of at least one of its clusters
351  // https://twiki.cern.ch/twiki/bin/viewauth/CMS/SLHCTrackerTriggerSWTools#MC_truth_for_TTTrack
352  int trkCounter = 0;
353  for (auto thisTrack: matchedTracks) {
354  bool tmp_trk_genuine = false;
355  if (MCTruthTTTrackHandle->isGenuine(thisTrack)) tmp_trk_genuine = true;
356  if (!tmp_trk_genuine) continue;
357  // ----------------------------------------------------------------------------------------------
358  // further require L1 track to be (loosely) genuine, that there is only one TP matched to the track
359  // + have >= L1Tk_minNStub stubs for it to be a valid match
360  int tmp_trk_nstub = thisTrack->getStubRefs().size();
361  if (tmp_trk_nstub < L1Tk_minNStub) continue;
362  float dmatch_pt = 999;
363  float dmatch_eta = 999;
364  float dmatch_phi = 999;
365  int match_id = 999;
366 
367  edm::Ptr< TrackingParticle > my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(thisTrack);
368  dmatch_pt = std::fabs(my_tp->p4().pt() - tmp_tp_pt);
369  dmatch_eta = std::fabs(my_tp->p4().eta() - tmp_tp_eta);
370  dmatch_phi = std::fabs(my_tp->p4().phi() - tmp_tp_phi);
371  match_id = my_tp->pdgId();
372  float tmp_trk_chi2dof = (thisTrack->getChi2(L1Tk_nPar)) / (2*tmp_trk_nstub - L1Tk_nPar);
373 
374  // ensure that track is uniquely matched to the TP we are looking at!
375  if (dmatch_pt<0.1 && dmatch_eta<0.1 && dmatch_phi<0.1 && tmp_tp_pdgid==match_id) {
376  nMatch++;
377  if (i_track < 0 || tmp_trk_chi2dof < i_chi2dof) {
378  i_track = trkCounter;
379  i_chi2dof = tmp_trk_chi2dof;
380  }
381  }
382  trkCounter++;
383  } // end loop over matched L1 tracks
384  // ----------------------------------------------------------------------------------------------
385 
386  // Get information on the matched tracks
387  float tmp_matchtrk_pt = -999;
388  float tmp_matchtrk_eta = -999;
389  float tmp_matchtrk_phi = -999;
390  float tmp_matchtrk_VtxZ = -999;
391  float tmp_matchtrk_chi2 = -999;
392  float tmp_matchtrk_chi2R = -999;
393  int tmp_matchTrk_nStub = -999;
394  float tmp_matchtrk_d0 = -999;
395 
396  if (nMatch > 0) {
397  tmp_matchtrk_pt = matchedTracks[i_track]->getMomentum(L1Tk_nPar).perp();
398  tmp_matchtrk_eta = matchedTracks[i_track]->getMomentum(L1Tk_nPar).eta();
399  tmp_matchtrk_phi = matchedTracks[i_track]->getMomentum(L1Tk_nPar).phi();
400  tmp_matchtrk_VtxZ = matchedTracks[i_track]->getPOCA(L1Tk_nPar).z();
401  tmp_matchtrk_chi2 = matchedTracks[i_track]->getChi2(L1Tk_nPar);
402  tmp_matchtrk_chi2R = matchedTracks[i_track]->getChi2Red(L1Tk_nPar);
403  tmp_matchTrk_nStub = (int) matchedTracks[i_track]->getStubRefs().size();
404 
405  Track_MatchedChi2->Fill(tmp_matchtrk_chi2);
406  Track_MatchedChi2Red->Fill(tmp_matchtrk_chi2R);
407 
408  //for d0
409  float tmp_matchtrk_x0 = matchedTracks[i_track]->getPOCA(L1Tk_nPar).x();
410  float tmp_matchtrk_y0 = matchedTracks[i_track]->getPOCA(L1Tk_nPar).y();
411  tmp_matchtrk_d0 = -tmp_matchtrk_x0*sin(tmp_matchtrk_phi) + tmp_matchtrk_y0*cos(tmp_matchtrk_phi);
412  }
413 
414  trkParts_pt.push_back(tmp_tp_pt);
415  trkParts_eta.push_back(tmp_tp_eta);
416  trkParts_phi.push_back(tmp_tp_phi);
417  trkParts_d0.push_back(tmp_tp_d0);
418  trkParts_VtxZ.push_back(tmp_tp_VtxZ);
419 
420  trkParts_pdgId.push_back(tmp_tp_pdgid);
421  trkParts_VtxR.push_back(tmp_tp_VtxR);
422  trkParts_nMatch.push_back(nMatch);
423  trkParts_nStub.push_back(nStubTP);
424  trkParts_eventId.push_back(tmp_eventid);
425 
426  matchTrk_pt .push_back(tmp_matchtrk_pt);
427  matchTrk_eta.push_back(tmp_matchtrk_eta);
428  matchTrk_phi.push_back(tmp_matchtrk_phi);
429  matchTrk_VtxZ .push_back(tmp_matchtrk_VtxZ);
430  matchTrk_d0 .push_back(tmp_matchtrk_d0);
431 
432  matchTrk_chi2 .push_back(tmp_matchtrk_chi2);
433  matchTrk_nStub.push_back(tmp_matchTrk_nStub);
434  } // End loop over tracking particles
435 
436  for (unsigned j=0;j<trkParts_eta.size();j++) { //Over all TPs
437  float eta = trkParts_eta[j];
438  float pt = trkParts_pt[j];
439  float VtxR = trkParts_VtxR[j];
440  float d0 = trkParts_d0[j];
441  float VtxZ = trkParts_VtxZ[j];
442  float eventId = trkParts_eventId[j];
443 
444  // cut on event ID (eventid=0 means the TP is from the primary interaction, so *not* selecting only eventid=0 means including stuff from pileup)
445  if (TP_select_eventid == 0 && eventId != 0) continue;
446  if (VtxR > 1) continue;
447  if (pt < 2) continue;
448  if (pt > TP_maxPt) continue;
449  if (std::fabs(eta) > TP_maxEta) continue;
450  if (trkParts_nMatch[j] < 1) continue; // was the tracking particle matched to a L1 track?
451  if (matchTrk_nStub[j] < L1Tk_minNStub) continue; // use only tracks with min X stubs
452 
453  // for matched track, retain info on chi2 and chi2/dof
454  float chi2 = matchTrk_chi2[j];
455  int ndof = 2*matchTrk_nStub[j]-4;
456  float chi2dof = (float)chi2/ndof;
457 
458  if (chi2 > L1Tk_maxChi2) continue; // cut on chi2
459  if (chi2dof > L1Tk_maxChi2dof) continue;
460 
461  // fill matched track histograms (if passes all criteria)
462  match_tp_pt->Fill(pt);
463  if(pt>0 && pt<=10)match_tp_pt_zoom->Fill(pt);
464  match_tp_eta->Fill(eta);
465  match_tp_d0->Fill(d0);
466  match_tp_VtxR->Fill(VtxR);
467  match_tp_VtxZ->Fill(VtxZ);
468 
469  if (pt < TP_minPt) continue; //only consider TPs with pt > TP_minPt
470  // fill total resolution histograms
471  res_pt->Fill(matchTrk_pt[j] - trkParts_pt[j]);
472  res_ptRel->Fill((matchTrk_pt[j] - trkParts_pt[j])/trkParts_pt[j]);
473  res_eta->Fill(matchTrk_eta[j] - trkParts_eta[j]);
474 
475  // Eta and pT histograms for resolution
476  float pt_res = (matchTrk_pt[j] - trkParts_pt[j])/trkParts_pt[j];
477  float eta_res = matchTrk_eta[j] - trkParts_eta[j];
478  float phi_res = matchTrk_phi[j] - trkParts_phi[j];
479  float VtxZ_res = matchTrk_VtxZ[j] - trkParts_VtxZ[j];
480  float d0_res = matchTrk_d0[j] - trkParts_d0[j];
481 
482  float tP_eta = trkParts_eta[j];
483  float tP_pt = trkParts_pt[j];
484 
485  // Fill resolution plots for different abs(eta) bins:
486  // (0, 0.7), (0.7, 1.0), (1.0, 1.2), (1.2, 1.6), (1.6, 2.0), (2.0, 2.4)
487  if (std::fabs(tP_eta) >= 0 && std::fabs(tP_eta) < 0.7){
488  reseta_eta0to0p7->Fill(eta_res);
489  resphi_eta0to0p7->Fill(phi_res);
490  resVtxZ_eta0to0p7->Fill(VtxZ_res);
491  resd0_eta0to0p7->Fill(d0_res);
492  if (tP_pt >= 2 && tP_pt < 3) respt_eta0to0p7_pt2to3->Fill(pt_res);
493  else if (tP_pt >= 3 && tP_pt < 8) respt_eta0to0p7_pt3to8->Fill(pt_res);
494  else if (tP_pt >= 8) respt_eta0to0p7_pt8toInf->Fill(pt_res);
495  }
496  else if (std::fabs(tP_eta) >= 0.7 && std::fabs(tP_eta) < 1.0){
497  reseta_eta0p7to1->Fill(eta_res);
498  resphi_eta0p7to1->Fill(phi_res);
499  resVtxZ_eta0p7to1->Fill(VtxZ_res);
500  resd0_eta0p7to1->Fill(d0_res);
501  if (tP_pt >= 2 && tP_pt < 3) respt_eta0p7to1_pt2to3->Fill(pt_res);
502  else if (tP_pt >= 3 && tP_pt < 8) respt_eta0p7to1_pt3to8->Fill(pt_res);
503  else if (tP_pt >= 8) respt_eta0p7to1_pt8toInf->Fill(pt_res);
504  }
505  else if (std::fabs(tP_eta) >= 1.0 && std::fabs(tP_eta) < 1.2){
506  reseta_eta1to1p2->Fill(eta_res);
507  resphi_eta1to1p2->Fill(phi_res);
508  resVtxZ_eta1to1p2->Fill(VtxZ_res);
509  resd0_eta1to1p2->Fill(d0_res);
510  if (tP_pt >= 2 && tP_pt < 3) respt_eta1to1p2_pt2to3->Fill(pt_res);
511  else if (tP_pt >= 3 && tP_pt < 8) respt_eta1to1p2_pt3to8->Fill(pt_res);
512  else if (tP_pt >= 8) respt_eta1to1p2_pt8toInf->Fill(pt_res);
513  }
514  else if (std::fabs(tP_eta) >= 1.2 && std::fabs(tP_eta) < 1.6){
515  reseta_eta1p2to1p6->Fill(eta_res);
516  resphi_eta1p2to1p6->Fill(phi_res);
517  resVtxZ_eta1p2to1p6->Fill(VtxZ_res);
518  resd0_eta1p2to1p6->Fill(d0_res);
519  if (tP_pt >= 2 && tP_pt < 3) respt_eta1p2to1p6_pt2to3->Fill(pt_res);
520  else if (tP_pt >= 3 && tP_pt < 8) respt_eta1p2to1p6_pt3to8->Fill(pt_res);
521  else if (tP_pt >= 8) respt_eta1p2to1p6_pt8toInf->Fill(pt_res);
522  }
523  else if (std::fabs(tP_eta) >= 1.6 && std::fabs(tP_eta) < 2.0){
524  reseta_eta1p6to2->Fill(eta_res);
525  resphi_eta1p6to2->Fill(phi_res);
526  resVtxZ_eta1p6to2->Fill(VtxZ_res);
527  resd0_eta1p6to2->Fill(d0_res);
528  if (tP_pt >= 2 && tP_pt < 3) respt_eta1p6to2_pt2to3->Fill(pt_res);
529  else if (tP_pt >= 3 && tP_pt < 8) respt_eta1p6to2_pt3to8->Fill(pt_res);
530  else if (tP_pt >= 8) respt_eta1p6to2_pt8toInf->Fill(pt_res);
531  }
532  else if (std::fabs(tP_eta) >= 2.0 && std::fabs(tP_eta) <= 2.4){
533  reseta_eta2to2p4->Fill(eta_res);
534  resphi_eta2to2p4->Fill(phi_res);
535  resVtxZ_eta2to2p4->Fill(VtxZ_res);
536  resd0_eta2to2p4->Fill(d0_res);
537  if (tP_pt >= 2 && tP_pt < 3) respt_eta2to2p4_pt2to3->Fill(pt_res);
538  else if (tP_pt >= 3 && tP_pt < 8) respt_eta2to2p4_pt3to8->Fill(pt_res);
539  else if (tP_pt >= 8) respt_eta2to2p4_pt8toInf->Fill(pt_res);
540  }
541  }
542 
543  //Clear all vectors
544  TTStubs_x.clear();
545  TTStubs_y.clear();
546  TTStubs_z.clear();
547  TTStubs_r.clear();
548  TTStubs_eta.clear();
549  TTStubs_phi.clear();
550  TTStubs_tpId.clear();
551  v_tp_pt.clear();
552  v_tp_eta.clear();
553  v_tp_phi.clear();
554  v_tp_nLayers.clear();
555  trkParts_pt.clear();
556  trkParts_eta.clear();
557  trkParts_phi.clear();
558  trkParts_d0.clear();
559  trkParts_VtxZ.clear();
560  trkParts_VtxR.clear();
561  trkParts_pdgId.clear();
562  trkParts_nMatch.clear();
563  trkParts_nStub.clear();
564  trkParts_eventId.clear();
565  matchTrk_pt.clear();
566  matchTrk_eta.clear();
567  matchTrk_phi.clear();
568  matchTrk_d0.clear();
569  matchTrk_VtxZ.clear();
570  matchTrk_chi2.clear();
571  matchTrk_nStub.clear();
572 } // end of method
573 
574 // ------------ method called once each job just before starting event loop ------------
576  // Histogram setup and definitions
578  iBooker.setCurrentFolder(topFolderName_+"/trackParticles");
579 
580  // 1D: pT
581  edm::ParameterSet psTrackParts_Pt = conf_.getParameter<edm::ParameterSet>("TH1TrackParts_Pt");
582  HistoName = "trackParts_Pt";
583  trackParts_Pt = iBooker.book1D(HistoName, HistoName,
584  psTrackParts_Pt.getParameter<int32_t>("Nbinsx"),
585  psTrackParts_Pt.getParameter<double>("xmin"),
586  psTrackParts_Pt.getParameter<double>("xmax"));
587  trackParts_Pt->setAxisTitle("p_{T} [GeV]", 1);
588  trackParts_Pt->setAxisTitle("# tracking particles", 2);
589 
590  // 1D: eta
591  edm::ParameterSet psTrackParts_Eta = conf_.getParameter<edm::ParameterSet>("TH1TrackParts_Eta");
592  HistoName = "trackParts_Eta";
593  trackParts_Eta = iBooker.book1D(HistoName, HistoName,
594  psTrackParts_Eta.getParameter<int32_t>("Nbinsx"),
595  psTrackParts_Eta.getParameter<double>("xmin"),
596  psTrackParts_Eta.getParameter<double>("xmax"));
597  trackParts_Eta->setAxisTitle("#eta", 1);
598  trackParts_Eta->setAxisTitle("# tracking particles", 2);
599 
600  // 1D: phi
601  edm::ParameterSet psTrackParts_Phi = conf_.getParameter<edm::ParameterSet>("TH1TrackParts_Phi");
602  HistoName = "trackParts_Phi";
603  trackParts_Phi = iBooker.book1D(HistoName, HistoName,
604  psTrackParts_Phi.getParameter<int32_t>("Nbinsx"),
605  psTrackParts_Phi.getParameter<double>("xmin"),
606  psTrackParts_Phi.getParameter<double>("xmax"));
607  trackParts_Phi->setAxisTitle("#phi", 1);
608  trackParts_Phi->setAxisTitle("# tracking particles", 2);
609 
610  // For tracks correctly matched to truth-level track
611  iBooker.setCurrentFolder(topFolderName_+"/Tracks");
612  //chi2
613  edm::ParameterSet psTrack_Chi2 = conf_.getParameter<edm::ParameterSet>("TH1_Track_Chi2");
614  HistoName = "Track_MatchedChi2";
615  Track_MatchedChi2 = iBooker.book1D(HistoName, HistoName,
616  psTrack_Chi2.getParameter<int32_t>("Nbinsx"),
617  psTrack_Chi2.getParameter<double>("xmin"),
618  psTrack_Chi2.getParameter<double>("xmax"));
619  Track_MatchedChi2->setAxisTitle("L1 Track #chi^{2}", 1);
620  Track_MatchedChi2->setAxisTitle("# Correctly Matched L1 Tracks", 2);
621 
622  //chi2Red
623  edm::ParameterSet psTrack_Chi2Red = conf_.getParameter<edm::ParameterSet>("TH1_Track_Chi2R");
624  HistoName = "Track_MatchedChi2Red";
625  Track_MatchedChi2Red = iBooker.book1D(HistoName, HistoName,
626  psTrack_Chi2Red.getParameter<int32_t>("Nbinsx"),
627  psTrack_Chi2Red.getParameter<double>("xmin"),
628  psTrack_Chi2Red.getParameter<double>("xmax"));
629  Track_MatchedChi2Red->setAxisTitle("L1 Track #chi^{2}/ndf", 1);
630  Track_MatchedChi2Red->setAxisTitle("# Correctly Matched L1 Tracks", 2);
631 
632  // 1D plots for efficiency
633  iBooker.setCurrentFolder(topFolderName_+"/Tracks/Efficiency");
634  //pT
635  edm::ParameterSet psEffic_pt = conf_.getParameter<edm::ParameterSet>("TH1Effic_pt");
636  HistoName = "tp_pt";
637  tp_pt = iBooker.book1D(HistoName, HistoName,
638  psEffic_pt.getParameter<int32_t>("Nbinsx"),
639  psEffic_pt.getParameter<double>("xmin"),
640  psEffic_pt.getParameter<double>("xmax"));
641  tp_pt->setAxisTitle("p_{T} [GeV]", 1);
642  tp_pt->setAxisTitle("# tracking particles", 2);
643 
644  //Matched TP's pT
645  HistoName = "match_tp_pt";
646  match_tp_pt = iBooker.book1D(HistoName, HistoName,
647  psEffic_pt.getParameter<int32_t>("Nbinsx"),
648  psEffic_pt.getParameter<double>("xmin"),
649  psEffic_pt.getParameter<double>("xmax"));
650  match_tp_pt->setAxisTitle("p_{T} [GeV]", 1);
651  match_tp_pt->setAxisTitle("# matched tracking particles", 2);
652 
653  //pT zoom (0-10 GeV)
654  edm::ParameterSet psEffic_pt_zoom = conf_.getParameter<edm::ParameterSet>("TH1Effic_pt_zoom");
655  HistoName = "tp_pt_zoom";
656  tp_pt_zoom = iBooker.book1D(HistoName, HistoName,
657  psEffic_pt_zoom.getParameter<int32_t>("Nbinsx"),
658  psEffic_pt_zoom.getParameter<double>("xmin"),
659  psEffic_pt_zoom.getParameter<double>("xmax"));
660  tp_pt_zoom->setAxisTitle("p_{T} [GeV]", 1);
661  tp_pt_zoom->setAxisTitle("# tracking particles", 2);
662 
663  //Matched pT zoom (0-10 GeV)
664  HistoName = "match_tp_pt_zoom";
665  match_tp_pt_zoom = iBooker.book1D(HistoName, HistoName,
666  psEffic_pt_zoom.getParameter<int32_t>("Nbinsx"),
667  psEffic_pt_zoom.getParameter<double>("xmin"),
668  psEffic_pt_zoom.getParameter<double>("xmax"));
669  match_tp_pt_zoom->setAxisTitle("p_{T} [GeV]", 1);
670  match_tp_pt_zoom->setAxisTitle("# matched tracking particles", 2);
671 
672  //eta
673  edm::ParameterSet psEffic_eta = conf_.getParameter<edm::ParameterSet>("TH1Effic_eta");
674  HistoName = "tp_eta";
675  tp_eta = iBooker.book1D(HistoName, HistoName,
676  psEffic_eta.getParameter<int32_t>("Nbinsx"),
677  psEffic_eta.getParameter<double>("xmin"),
678  psEffic_eta.getParameter<double>("xmax"));
679  tp_eta->setAxisTitle("#eta", 1);
680  tp_eta->setAxisTitle("# tracking particles", 2);
681 
682  //Matched eta
683  HistoName = "match_tp_eta";
684  match_tp_eta = iBooker.book1D(HistoName, HistoName,
685  psEffic_eta.getParameter<int32_t>("Nbinsx"),
686  psEffic_eta.getParameter<double>("xmin"),
687  psEffic_eta.getParameter<double>("xmax"));
688  match_tp_eta->setAxisTitle("#eta", 1);
689  match_tp_eta->setAxisTitle("# matched tracking particles", 2);
690 
691  //d0
692  edm::ParameterSet psEffic_d0 = conf_.getParameter<edm::ParameterSet>("TH1Effic_d0");
693  HistoName = "tp_d0";
694  tp_d0 = iBooker.book1D(HistoName, HistoName,
695  psEffic_d0.getParameter<int32_t>("Nbinsx"),
696  psEffic_d0.getParameter<double>("xmin"),
697  psEffic_d0.getParameter<double>("xmax"));
698  tp_d0->setAxisTitle("d_{0} [cm]", 1);
699  tp_d0->setAxisTitle("# tracking particles", 2);
700 
701  //Matched d0
702  HistoName = "match_tp_d0";
703  match_tp_d0 = iBooker.book1D(HistoName, HistoName,
704  psEffic_d0.getParameter<int32_t>("Nbinsx"),
705  psEffic_d0.getParameter<double>("xmin"),
706  psEffic_d0.getParameter<double>("xmax"));
707  match_tp_d0->setAxisTitle("d_{0} [cm]", 1);
708  match_tp_d0->setAxisTitle("# matched tracking particles", 2);
709 
710  //VtxR (also known as vxy)
711  edm::ParameterSet psEffic_VtxR = conf_.getParameter<edm::ParameterSet>("TH1Effic_VtxR");
712  HistoName = "tp_VtxR";
713  tp_VtxR = iBooker.book1D(HistoName, HistoName,
714  psEffic_VtxR.getParameter<int32_t>("Nbinsx"),
715  psEffic_VtxR.getParameter<double>("xmin"),
716  psEffic_VtxR.getParameter<double>("xmax"));
717  tp_VtxR->setAxisTitle("d_{xy} [cm]", 1);
718  tp_VtxR->setAxisTitle("# tracking particles", 2);
719 
720  //Matched VtxR
721  HistoName = "match_tp_VtxR";
722  match_tp_VtxR = iBooker.book1D(HistoName, HistoName,
723  psEffic_VtxR.getParameter<int32_t>("Nbinsx"),
724  psEffic_VtxR.getParameter<double>("xmin"),
725  psEffic_VtxR.getParameter<double>("xmax"));
726  match_tp_VtxR->setAxisTitle("d_{xy} [cm]", 1);
727  match_tp_VtxR->setAxisTitle("# matched tracking particles", 2);
728 
729  //VtxZ
730  edm::ParameterSet psEffic_VtxZ = conf_.getParameter<edm::ParameterSet>("TH1Effic_VtxZ");
731  HistoName = "tp_VtxZ";
732  tp_VtxZ = iBooker.book1D(HistoName, HistoName,
733  psEffic_VtxZ.getParameter<int32_t>("Nbinsx"),
734  psEffic_VtxZ.getParameter<double>("xmin"),
735  psEffic_VtxZ.getParameter<double>("xmax"));
736  tp_VtxZ->setAxisTitle("z_{0} [cm]", 1);
737  tp_VtxZ->setAxisTitle("# tracking particles", 2);
738 
739  //Matched d0
740  HistoName = "match_tp_VtxZ";
741  match_tp_VtxZ = iBooker.book1D(HistoName, HistoName,
742  psEffic_VtxZ.getParameter<int32_t>("Nbinsx"),
743  psEffic_VtxZ.getParameter<double>("xmin"),
744  psEffic_VtxZ.getParameter<double>("xmax"));
745  match_tp_VtxZ->setAxisTitle("z_{0} [cm]", 1);
746  match_tp_VtxZ->setAxisTitle("# matched tracking particles", 2);
747 
748  //1D plots for resolution
749  iBooker.setCurrentFolder(topFolderName_+"/Tracks/Resolution");
750  //full pT
751  edm::ParameterSet psRes_pt = conf_.getParameter<edm::ParameterSet>("TH1Res_pt");
752  HistoName = "res_pt";
753  res_pt = iBooker.book1D(HistoName, HistoName,
754  psRes_pt.getParameter<int32_t>("Nbinsx"),
755  psRes_pt.getParameter<double>("xmin"),
756  psRes_pt.getParameter<double>("xmax"));
757  res_pt->setAxisTitle("p_{T} [GeV]", 1);
758  res_pt->setAxisTitle("# tracking particles", 2);
759 
760  //Full eta
761  edm::ParameterSet psRes_eta = conf_.getParameter<edm::ParameterSet>("TH1Res_eta");
762  HistoName = "res_eta";
763  res_eta = iBooker.book1D(HistoName, HistoName,
764  psRes_eta.getParameter<int32_t>("Nbinsx"),
765  psRes_eta.getParameter<double>("xmin"),
766  psRes_eta.getParameter<double>("xmax"));
767  res_eta->setAxisTitle("#eta", 1);
768  res_eta->setAxisTitle("# tracking particles", 2);
769 
770  //Relative pT
771  edm::ParameterSet psRes_ptRel = conf_.getParameter<edm::ParameterSet>("TH1Res_ptRel");
772  HistoName = "res_ptRel";
773  res_ptRel = iBooker.book1D(HistoName, HistoName,
774  psRes_ptRel.getParameter<int32_t>("Nbinsx"),
775  psRes_ptRel.getParameter<double>("xmin"),
776  psRes_ptRel.getParameter<double>("xmax"));
777  res_ptRel->setAxisTitle("Relative p_{T} [GeV]", 1);
778  res_ptRel->setAxisTitle("# tracking particles", 2);
779 
780  //Eta parts (for resolution)
781  //Eta 1 (0 to 0.7)
782  HistoName = "reseta_eta0to0p7";
783  reseta_eta0to0p7 = iBooker.book1D(HistoName, HistoName,
784  psRes_eta.getParameter<int32_t>("Nbinsx"),
785  psRes_eta.getParameter<double>("xmin"),
786  psRes_eta.getParameter<double>("xmax"));
787  reseta_eta0to0p7->setAxisTitle("#eta_{trk} - #eta_{tp}", 1);
788  reseta_eta0to0p7->setAxisTitle("# tracking particles", 2);
789 
790  //Eta 2 (0.7 to 1.0)
791  HistoName = "reseta_eta0p7to1";
792  reseta_eta0p7to1 = iBooker.book1D(HistoName, HistoName,
793  psRes_eta.getParameter<int32_t>("Nbinsx"),
794  psRes_eta.getParameter<double>("xmin"),
795  psRes_eta.getParameter<double>("xmax"));
796  reseta_eta0p7to1->setAxisTitle("#eta_{trk} - #eta_{tp}", 1);
797  reseta_eta0p7to1->setAxisTitle("# tracking particles", 2);
798 
799  //Eta 3 (1.0 to 1.2)
800  HistoName = "reseta_eta1to1p2";
801  reseta_eta1to1p2 = iBooker.book1D(HistoName, HistoName,
802  psRes_eta.getParameter<int32_t>("Nbinsx"),
803  psRes_eta.getParameter<double>("xmin"),
804  psRes_eta.getParameter<double>("xmax"));
805  reseta_eta1to1p2->setAxisTitle("#eta_{trk} - #eta_{tp}", 1);
806  reseta_eta1to1p2->setAxisTitle("# tracking particles", 2);
807 
808  //Eta 4 (1.2 to 1.6)
809  HistoName = "reseta_eta1p2to1p6";
810  reseta_eta1p2to1p6 = iBooker.book1D(HistoName, HistoName,
811  psRes_eta.getParameter<int32_t>("Nbinsx"),
812  psRes_eta.getParameter<double>("xmin"),
813  psRes_eta.getParameter<double>("xmax"));
814  reseta_eta1p2to1p6->setAxisTitle("#eta_{trk} - #eta_{tp}", 1);
815  reseta_eta1p2to1p6->setAxisTitle("# tracking particles", 2);
816 
817  //Eta 5 (1.6 to 2.0)
818  HistoName = "reseta_eta1p6to2";
819  reseta_eta1p6to2 = iBooker.book1D(HistoName, HistoName,
820  psRes_eta.getParameter<int32_t>("Nbinsx"),
821  psRes_eta.getParameter<double>("xmin"),
822  psRes_eta.getParameter<double>("xmax"));
823  reseta_eta1p6to2->setAxisTitle("#eta_{trk} - #eta_{tp}", 1);
824  reseta_eta1p6to2->setAxisTitle("# tracking particles", 2);
825 
826  //Eta 6 (2.0 to 2.4)
827  HistoName = "reseta_eta2to2p4";
828  reseta_eta2to2p4 = iBooker.book1D(HistoName, HistoName,
829  psRes_eta.getParameter<int32_t>("Nbinsx"),
830  psRes_eta.getParameter<double>("xmin"),
831  psRes_eta.getParameter<double>("xmax"));
832  reseta_eta2to2p4->setAxisTitle("#eta_{trk} - #eta_{tp}", 1);
833  reseta_eta2to2p4->setAxisTitle("# tracking particles", 2);
834 
835  //pT parts for resolution (pT res vs eta)
836  //pT a (2 to 3 GeV)
837  //Eta 1 (0 to 0.7)
838  HistoName = "respt_eta0to0p7_pt2to3";
839  respt_eta0to0p7_pt2to3 = iBooker.book1D(HistoName, HistoName,
840  psRes_pt.getParameter<int32_t>("Nbinsx"),
841  psRes_pt.getParameter<double>("xmin"),
842  psRes_pt.getParameter<double>("xmax"));
843  respt_eta0to0p7_pt2to3->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
844  respt_eta0to0p7_pt2to3->setAxisTitle("# tracking particles", 2);
845 
846  //Eta 2 (0.7 to 1.0)
847  HistoName = "respt_eta0p7to1_pt2to3";
848  respt_eta0p7to1_pt2to3 = iBooker.book1D(HistoName, HistoName,
849  psRes_pt.getParameter<int32_t>("Nbinsx"),
850  psRes_pt.getParameter<double>("xmin"),
851  psRes_pt.getParameter<double>("xmax"));
852  respt_eta0p7to1_pt2to3->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
853  respt_eta0p7to1_pt2to3->setAxisTitle("# tracking particles", 2);
854 
855  //Eta 3 (1.0 to 1.2)
856  HistoName = "respt_eta1to1p2_pt2to3";
857  respt_eta1to1p2_pt2to3 = iBooker.book1D(HistoName, HistoName,
858  psRes_pt.getParameter<int32_t>("Nbinsx"),
859  psRes_pt.getParameter<double>("xmin"),
860  psRes_pt.getParameter<double>("xmax"));
861  respt_eta1to1p2_pt2to3->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
862  respt_eta1to1p2_pt2to3->setAxisTitle("# tracking particles", 2);
863 
864  //Eta 4 (1.2 to 1.6)
865  HistoName = "respt_eta1p2to1p6_pt2to3";
866  respt_eta1p2to1p6_pt2to3 = iBooker.book1D(HistoName, HistoName,
867  psRes_pt.getParameter<int32_t>("Nbinsx"),
868  psRes_pt.getParameter<double>("xmin"),
869  psRes_pt.getParameter<double>("xmax"));
870  respt_eta1p2to1p6_pt2to3->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
871  respt_eta1p2to1p6_pt2to3->setAxisTitle("# tracking particles", 2);
872 
873  //Eta 5 (1.6 to 2.0)
874  HistoName = "respt_eta1p6to2_pt2to3";
875  respt_eta1p6to2_pt2to3 = iBooker.book1D(HistoName, HistoName,
876  psRes_pt.getParameter<int32_t>("Nbinsx"),
877  psRes_pt.getParameter<double>("xmin"),
878  psRes_pt.getParameter<double>("xmax"));
879  respt_eta1p6to2_pt2to3->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
880  respt_eta1p6to2_pt2to3->setAxisTitle("# tracking particles", 2);
881 
882  //Eta 6 (2.0 to 2.4)
883  HistoName = "respt_eta2to2p4_pt2to3";
884  respt_eta2to2p4_pt2to3 = iBooker.book1D(HistoName, HistoName,
885  psRes_pt.getParameter<int32_t>("Nbinsx"),
886  psRes_pt.getParameter<double>("xmin"),
887  psRes_pt.getParameter<double>("xmax"));
888  respt_eta2to2p4_pt2to3->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
889  respt_eta2to2p4_pt2to3->setAxisTitle("# tracking particles", 2);
890 
891  //pT b (3 to 8 GeV)
892  //Eta 1 (0 to 0.7)
893  HistoName = "respt_eta0to0p7_pt3to8";
894  respt_eta0to0p7_pt3to8 = iBooker.book1D(HistoName, HistoName,
895  psRes_pt.getParameter<int32_t>("Nbinsx"),
896  psRes_pt.getParameter<double>("xmin"),
897  psRes_pt.getParameter<double>("xmax"));
898  respt_eta0to0p7_pt3to8->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
899  respt_eta0to0p7_pt3to8->setAxisTitle("# tracking particles", 2);
900 
901  //Eta 2 (0.7 to 1.0)
902  HistoName = "respt_eta0p7to1_pt3to8";
903  respt_eta0p7to1_pt3to8 = iBooker.book1D(HistoName, HistoName,
904  psRes_pt.getParameter<int32_t>("Nbinsx"),
905  psRes_pt.getParameter<double>("xmin"),
906  psRes_pt.getParameter<double>("xmax"));
907  respt_eta0p7to1_pt3to8->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
908  respt_eta0p7to1_pt3to8->setAxisTitle("# tracking particles", 2);
909 
910  //Eta 3 (1.0 to 1.2)
911  HistoName = "respt_eta1to1p2_pt3to8";
912  respt_eta1to1p2_pt3to8 = iBooker.book1D(HistoName, HistoName,
913  psRes_pt.getParameter<int32_t>("Nbinsx"),
914  psRes_pt.getParameter<double>("xmin"),
915  psRes_pt.getParameter<double>("xmax"));
916  respt_eta1to1p2_pt3to8->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
917  respt_eta1to1p2_pt3to8->setAxisTitle("# tracking particles", 2);
918 
919  //Eta 4 (1.2 to 1.6)
920  HistoName = "respt_eta1p2to1p6_pt3to8";
921  respt_eta1p2to1p6_pt3to8 = iBooker.book1D(HistoName, HistoName,
922  psRes_pt.getParameter<int32_t>("Nbinsx"),
923  psRes_pt.getParameter<double>("xmin"),
924  psRes_pt.getParameter<double>("xmax"));
925  respt_eta1p2to1p6_pt3to8->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
926  respt_eta1p2to1p6_pt3to8->setAxisTitle("# tracking particles", 2);
927 
928  //Eta 5 (1.6 to 2.0)
929  HistoName = "respt_eta1p6to2_pt3to8";
930  respt_eta1p6to2_pt3to8 = iBooker.book1D(HistoName, HistoName,
931  psRes_pt.getParameter<int32_t>("Nbinsx"),
932  psRes_pt.getParameter<double>("xmin"),
933  psRes_pt.getParameter<double>("xmax"));
934  respt_eta1p6to2_pt3to8->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
935  respt_eta1p6to2_pt3to8->setAxisTitle("# tracking particles", 2);
936 
937  //Eta 6 (2.0 to 2.4)
938  HistoName = "respt_eta2to2p4_pt3to8";
939  respt_eta2to2p4_pt3to8 = iBooker.book1D(HistoName, HistoName,
940  psRes_pt.getParameter<int32_t>("Nbinsx"),
941  psRes_pt.getParameter<double>("xmin"),
942  psRes_pt.getParameter<double>("xmax"));
943  respt_eta2to2p4_pt3to8->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
944  respt_eta2to2p4_pt3to8->setAxisTitle("# tracking particles", 2);
945 
946  //pT c (>8 GeV)
947  //Eta 1 (0 to 0.7)
948  HistoName = "respt_eta0to0p7_pt8toInf";
949  respt_eta0to0p7_pt8toInf = iBooker.book1D(HistoName, HistoName,
950  psRes_pt.getParameter<int32_t>("Nbinsx"),
951  psRes_pt.getParameter<double>("xmin"),
952  psRes_pt.getParameter<double>("xmax"));
953  respt_eta0to0p7_pt8toInf->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
954  respt_eta0to0p7_pt8toInf->setAxisTitle("# tracking particles", 2);
955 
956  //Eta 2 (0.7 to 1.0)
957  HistoName = "respt_eta0p7to1_pt8toInf";
958  respt_eta0p7to1_pt8toInf = iBooker.book1D(HistoName, HistoName,
959  psRes_pt.getParameter<int32_t>("Nbinsx"),
960  psRes_pt.getParameter<double>("xmin"),
961  psRes_pt.getParameter<double>("xmax"));
962  respt_eta0p7to1_pt8toInf->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
963  respt_eta0p7to1_pt8toInf->setAxisTitle("# tracking particles", 2);
964 
965  //Eta 3 (1.0 to 1.2)
966  HistoName = "respt_eta1to1p2_pt8toInf";
967  respt_eta1to1p2_pt8toInf = iBooker.book1D(HistoName, HistoName,
968  psRes_pt.getParameter<int32_t>("Nbinsx"),
969  psRes_pt.getParameter<double>("xmin"),
970  psRes_pt.getParameter<double>("xmax"));
971  respt_eta1to1p2_pt8toInf->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
972  respt_eta1to1p2_pt8toInf->setAxisTitle("# tracking particles", 2);
973 
974  //Eta 4 (1.2 to 1.6)
975  HistoName = "respt_eta1p2to1p6_pt8toInf";
976  respt_eta1p2to1p6_pt8toInf = iBooker.book1D(HistoName, HistoName,
977  psRes_pt.getParameter<int32_t>("Nbinsx"),
978  psRes_pt.getParameter<double>("xmin"),
979  psRes_pt.getParameter<double>("xmax"));
980  respt_eta1p2to1p6_pt8toInf->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
981  respt_eta1p2to1p6_pt8toInf->setAxisTitle("# tracking particles", 2);
982 
983  //Eta 5 (1.6 to 2.0)
984  HistoName = "respt_eta1p6to2_pt8toInf";
985  respt_eta1p6to2_pt8toInf = iBooker.book1D(HistoName, HistoName,
986  psRes_pt.getParameter<int32_t>("Nbinsx"),
987  psRes_pt.getParameter<double>("xmin"),
988  psRes_pt.getParameter<double>("xmax"));
989  respt_eta1p6to2_pt8toInf->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
990  respt_eta1p6to2_pt8toInf->setAxisTitle("# tracking particles", 2);
991 
992  //Eta 6 (2.0 to 2.4)
993  HistoName = "respt_eta2to2p4_pt8toInf";
994  respt_eta2to2p4_pt8toInf = iBooker.book1D(HistoName, HistoName,
995  psRes_pt.getParameter<int32_t>("Nbinsx"),
996  psRes_pt.getParameter<double>("xmin"),
997  psRes_pt.getParameter<double>("xmax"));
998  respt_eta2to2p4_pt8toInf->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
999  respt_eta2to2p4_pt8toInf->setAxisTitle("# tracking particles", 2);
1000 
1001 
1002  //Phi parts (for resolution)
1003  //Eta 1 (0 to 0.7)
1004  edm::ParameterSet psRes_phi = conf_.getParameter<edm::ParameterSet>("TH1Res_phi");
1005  HistoName = "resphi_eta0to0p7";
1006  resphi_eta0to0p7 = iBooker.book1D(HistoName, HistoName,
1007  psRes_phi.getParameter<int32_t>("Nbinsx"),
1008  psRes_phi.getParameter<double>("xmin"),
1009  psRes_phi.getParameter<double>("xmax"));
1010  resphi_eta0to0p7->setAxisTitle("#phi_{trk} - #phi_{tp}", 1);
1011  resphi_eta0to0p7->setAxisTitle("# tracking particles", 2);
1012 
1013  //Eta 2 (0.7 to 1.0)
1014  HistoName = "resphi_eta0p7to1";
1015  resphi_eta0p7to1 = iBooker.book1D(HistoName, HistoName,
1016  psRes_phi.getParameter<int32_t>("Nbinsx"),
1017  psRes_phi.getParameter<double>("xmin"),
1018  psRes_phi.getParameter<double>("xmax"));
1019  resphi_eta0p7to1->setAxisTitle("#phi_{trk} - #phi_{tp}", 1);
1020  resphi_eta0p7to1->setAxisTitle("# tracking particles", 2);
1021 
1022  //Eta 3 (1.0 to 1.2)
1023  HistoName = "resphi_eta1to1p2";
1024  resphi_eta1to1p2 = iBooker.book1D(HistoName, HistoName,
1025  psRes_phi.getParameter<int32_t>("Nbinsx"),
1026  psRes_phi.getParameter<double>("xmin"),
1027  psRes_phi.getParameter<double>("xmax"));
1028  resphi_eta1to1p2->setAxisTitle("#phi_{trk} - #phi_{tp}", 1);
1029  resphi_eta1to1p2->setAxisTitle("# tracking particles", 2);
1030 
1031  //Eta 4 (1.2 to 1.6)
1032  HistoName = "resphi_eta1p2to1p6";
1033  resphi_eta1p2to1p6 = iBooker.book1D(HistoName, HistoName,
1034  psRes_phi.getParameter<int32_t>("Nbinsx"),
1035  psRes_phi.getParameter<double>("xmin"),
1036  psRes_phi.getParameter<double>("xmax"));
1037  resphi_eta1p2to1p6->setAxisTitle("#phi_{trk} - #phi_{tp}", 1);
1038  resphi_eta1p2to1p6->setAxisTitle("# tracking particles", 2);
1039 
1040  //Eta 5 (1.6 to 2.0)
1041  HistoName = "resphi_eta1p6to2";
1042  resphi_eta1p6to2 = iBooker.book1D(HistoName, HistoName,
1043  psRes_phi.getParameter<int32_t>("Nbinsx"),
1044  psRes_phi.getParameter<double>("xmin"),
1045  psRes_phi.getParameter<double>("xmax"));
1046  resphi_eta1p6to2->setAxisTitle("#phi_{trk} - #phi_{tp}", 1);
1047  resphi_eta1p6to2->setAxisTitle("# tracking particles", 2);
1048 
1049  //Eta 6 (2.0 to 2.4)
1050  HistoName = "resphi_eta2to2p4";
1051  resphi_eta2to2p4 = iBooker.book1D(HistoName, HistoName,
1052  psRes_phi.getParameter<int32_t>("Nbinsx"),
1053  psRes_phi.getParameter<double>("xmin"),
1054  psRes_phi.getParameter<double>("xmax"));
1055  resphi_eta2to2p4->setAxisTitle("#phi_{trk} - #phi_{tp}", 1);
1056  resphi_eta2to2p4->setAxisTitle("# tracking particles", 2);
1057 
1058  //VtxZ parts (for resolution)
1059  //Eta 1 (0 to 0.7)
1060  edm::ParameterSet psRes_VtxZ = conf_.getParameter<edm::ParameterSet>("TH1Res_VtxZ");
1061  HistoName = "resVtxZ_eta0to0p7";
1062  resVtxZ_eta0to0p7 = iBooker.book1D(HistoName, HistoName,
1063  psRes_VtxZ.getParameter<int32_t>("Nbinsx"),
1064  psRes_VtxZ.getParameter<double>("xmin"),
1065  psRes_VtxZ.getParameter<double>("xmax"));
1066  resVtxZ_eta0to0p7->setAxisTitle("VtxZ_{trk} - VtxZ_{tp} [cm]", 1);
1067  resVtxZ_eta0to0p7->setAxisTitle("# tracking particles", 2);
1068 
1069  //Eta 2 (0.7 to 1.0)
1070  HistoName = "resVtxZ_eta0p7to1";
1071  resVtxZ_eta0p7to1 = iBooker.book1D(HistoName, HistoName,
1072  psRes_VtxZ.getParameter<int32_t>("Nbinsx"),
1073  psRes_VtxZ.getParameter<double>("xmin"),
1074  psRes_VtxZ.getParameter<double>("xmax"));
1075  resVtxZ_eta0p7to1->setAxisTitle("VtxZ_{trk} - VtxZ_{tp} [cm]", 1);
1076  resVtxZ_eta0p7to1->setAxisTitle("# tracking particles", 2);
1077 
1078  //Eta 3 (1.0 to 1.2)
1079  HistoName = "resVtxZ_eta1to1p2";
1080  resVtxZ_eta1to1p2 = iBooker.book1D(HistoName, HistoName,
1081  psRes_VtxZ.getParameter<int32_t>("Nbinsx"),
1082  psRes_VtxZ.getParameter<double>("xmin"),
1083  psRes_VtxZ.getParameter<double>("xmax"));
1084  resVtxZ_eta1to1p2->setAxisTitle("VtxZ_{trk} - VtxZ_{tp} [cm]", 1);
1085  resVtxZ_eta1to1p2->setAxisTitle("# tracking particles", 2);
1086 
1087  //Eta 4 (1.2 to 1.6)
1088  HistoName = "resVtxZ_eta1p2to1p6";
1089  resVtxZ_eta1p2to1p6 = iBooker.book1D(HistoName, HistoName,
1090  psRes_VtxZ.getParameter<int32_t>("Nbinsx"),
1091  psRes_VtxZ.getParameter<double>("xmin"),
1092  psRes_VtxZ.getParameter<double>("xmax"));
1093  resVtxZ_eta1p2to1p6->setAxisTitle("VtxZ_{trk} - VtxZ_{tp} [cm]", 1);
1094  resVtxZ_eta1p2to1p6->setAxisTitle("# tracking particles", 2);
1095 
1096  //Eta 5 (1.6 to 2.0)
1097  HistoName = "resVtxZ_eta1p6to2";
1098  resVtxZ_eta1p6to2 = iBooker.book1D(HistoName, HistoName,
1099  psRes_VtxZ.getParameter<int32_t>("Nbinsx"),
1100  psRes_VtxZ.getParameter<double>("xmin"),
1101  psRes_VtxZ.getParameter<double>("xmax"));
1102  resVtxZ_eta1p6to2->setAxisTitle("VtxZ_{trk} - VtxZ_{tp} [cm]", 1);
1103  resVtxZ_eta1p6to2->setAxisTitle("# tracking particles", 2);
1104 
1105  //Eta 6 (2.0 to 2.4)
1106  HistoName = "resVtxZ_eta2to2p4";
1107  resVtxZ_eta2to2p4 = iBooker.book1D(HistoName, HistoName,
1108  psRes_VtxZ.getParameter<int32_t>("Nbinsx"),
1109  psRes_VtxZ.getParameter<double>("xmin"),
1110  psRes_VtxZ.getParameter<double>("xmax"));
1111  resVtxZ_eta2to2p4->setAxisTitle("VtxZ_{trk} - VtxZ_{tp} [cm]", 1);
1112  resVtxZ_eta2to2p4->setAxisTitle("# tracking particles", 2);
1113 
1114  //d0 parts (for resolution)
1115  //Eta 1 (0 to 0.7)
1116  edm::ParameterSet psRes_d0 = conf_.getParameter<edm::ParameterSet>("TH1Res_d0");
1117  HistoName = "resd0_eta0to0p7";
1118  resd0_eta0to0p7 = iBooker.book1D(HistoName, HistoName,
1119  psRes_d0.getParameter<int32_t>("Nbinsx"),
1120  psRes_d0.getParameter<double>("xmin"),
1121  psRes_d0.getParameter<double>("xmax"));
1122  resd0_eta0to0p7->setAxisTitle("d0_{trk} - d0_{tp} [cm]", 1);
1123  resd0_eta0to0p7->setAxisTitle("# tracking particles", 2);
1124 
1125  //Eta 2 (0.7 to 1.0)
1126  HistoName = "resd0_eta0p7to1";
1127  resd0_eta0p7to1 = iBooker.book1D(HistoName, HistoName,
1128  psRes_d0.getParameter<int32_t>("Nbinsx"),
1129  psRes_d0.getParameter<double>("xmin"),
1130  psRes_d0.getParameter<double>("xmax"));
1131  resd0_eta0p7to1->setAxisTitle("d0_{trk} - d0_{tp} [cm]", 1);
1132  resd0_eta0p7to1->setAxisTitle("# tracking particles", 2);
1133 
1134  //Eta 3 (1.0 to 1.2)
1135  HistoName = "resd0_eta1to1p2";
1136  resd0_eta1to1p2 = iBooker.book1D(HistoName, HistoName,
1137  psRes_d0.getParameter<int32_t>("Nbinsx"),
1138  psRes_d0.getParameter<double>("xmin"),
1139  psRes_d0.getParameter<double>("xmax"));
1140  resd0_eta1to1p2->setAxisTitle("d0_{trk} - d0_{tp} [cm]", 1);
1141  resd0_eta1to1p2->setAxisTitle("# tracking particles", 2);
1142 
1143  //Eta 4 (1.2 to 1.6)
1144  HistoName = "resd0_eta1p2to1p6";
1145  resd0_eta1p2to1p6 = iBooker.book1D(HistoName, HistoName,
1146  psRes_d0.getParameter<int32_t>("Nbinsx"),
1147  psRes_d0.getParameter<double>("xmin"),
1148  psRes_d0.getParameter<double>("xmax"));
1149  resd0_eta1p2to1p6->setAxisTitle("d0_{trk} - d0_{tp} [cm]", 1);
1150  resd0_eta1p2to1p6->setAxisTitle("# tracking particles", 2);
1151 
1152  //Eta 5 (1.6 to 2.0)
1153  HistoName = "resd0_eta1p6to2";
1154  resd0_eta1p6to2 = iBooker.book1D(HistoName, HistoName,
1155  psRes_d0.getParameter<int32_t>("Nbinsx"),
1156  psRes_d0.getParameter<double>("xmin"),
1157  psRes_d0.getParameter<double>("xmax"));
1158  resd0_eta1p6to2->setAxisTitle("d0_{trk} - d0_{tp} [cm]", 1);
1159  resd0_eta1p6to2->setAxisTitle("# tracking particles", 2);
1160 
1161  //Eta 6 (2.0 to 2.4)
1162  HistoName = "resd0_eta2to2p4";
1163  resd0_eta2to2p4 = iBooker.book1D(HistoName, HistoName,
1164  psRes_d0.getParameter<int32_t>("Nbinsx"),
1165  psRes_d0.getParameter<double>("xmin"),
1166  psRes_d0.getParameter<double>("xmax"));
1167  resd0_eta2to2p4->setAxisTitle("d0_{trk} - d0_{tp} [cm]", 1);
1168  resd0_eta2to2p4->setAxisTitle("# tracking particles", 2);
1169 
1170 } //end of method
1171 
1172 //Function to determine which layer of the detector the stub is in
1173 int OuterTrackerMonitorTrackingParticles::Layer(const float R_, const float Z_) const {
1174  const int sectionNum = 6; //6 layers, 5 discs (per EC) + 1 "disc" for barrel
1175  const float Rmin[sectionNum]={20.,33.,48.,65.,82.,105.};
1176  const float Rmax[sectionNum]={30.,40.,58.,75.,91.,120.};
1177  const float zMin[sectionNum]={0.,125.,145.,165.,200.,240.};
1178  int layer=-1;
1179  for (int i=5;i>=0;--i){
1180  if(std::fabs(Z_)>=zMin[i]){
1181  layer=5+i;
1182  break;
1183  }
1184  }
1185  if(layer==5) for(unsigned i=0; i<unsigned(sectionNum); ++i){
1186  if(R_>Rmin[i] && R_<Rmax[i]){
1187  layer=i;
1188  break;
1189  }
1190  }
1191  return layer;
1192 }
1193 
const LorentzVector & p4() const
Four-momentum Lorentz vector. Note this is taken from the first SimTrack only.
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:106
T getParameter(std::string const &) const
edm::Ref< typename HandleT::element_type, typename HandleT::element_type::value_type::value_type > makeRefTo(const HandleT &iHandle, typename HandleT::element_type::value_type::const_iterator itIter)
const_iterator end(bool update=false) const
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
T perp() const
Definition: PV3DBase.h:72
edm::EDGetTokenT< std::vector< TrackingParticle > > trackingParticleToken_
std::vector< TrackingParticle > TrackingParticleCollection
edm::EDGetTokenT< edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ > > > ttStubToken_
edm::EDGetTokenT< TTStubAssociationMap< Ref_Phase2TrackerDigi_ > > ttStubMCTruthToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
virtual const Topology & topology() const
Definition: GeomDet.cc:81
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
int pdgId() const
PDG ID.
uint32_t ID
Definition: Definitions.h:26
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
T y() const
Definition: PV3DBase.h:63
int Layer(const float R_, const float Z_) const
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
void Fill(long long x)
const Double_t pi
edm::EDGetTokenT< TTTrackAssociationMap< Ref_Phase2TrackerDigi_ > > ttTrackMCTruthToken_
edm::EDGetTokenT< std::vector< TTTrack< Ref_Phase2TrackerDigi_ > > > ttTrackToken_
float charge() const
Electric charge. Note this is taken from the first SimTrack only.
int iEvent
Definition: GenABIO.cc:230
edm::EDGetTokenT< TTClusterAssociationMap< Ref_Phase2TrackerDigi_ > > ttClusterMCTruthToken_
T sqrt(T t)
Definition: SSEVec.h:18
T z() const
Definition: PV3DBase.h:64
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
bool isValid() const
Definition: HandleBase.h:74
Class to store the L1 Track Trigger stubs.
Definition: TTStub.h:22
bool isNonnull() const
Checks for non-null.
Definition: Ptr.h:168
Definition: DetId.h:18
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
std::string HistoName
void analyze(const edm::Event &, const edm::EventSetup &) override
Point vertex() const
Parent vertex position.
T eta() const
Definition: PV3DBase.h:76
static std::atomic< unsigned int > counter
T get() const
Definition: EventSetup.h:63
const TrackerGeomDet * idToDet(DetId) const override
const double Rmax[kNumberCalorimeter]
T x() const
Definition: PV3DBase.h:62
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
T const * product() const
Definition: ESHandle.h:86
const double Rmin[kNumberCalorimeter]
const_iterator begin(bool update=false) const
Definition: Run.h:44