CMS 3D CMS Logo

OuterTrackerMonitorTrackingParticles.cc
Go to the documentation of this file.
1 // Package: SiOuterTrackerV
2 // Class: SiOuterTrackerV
3 
4 // Original Author: Emily MacDonald
5 
6 // system include files
7 #include <fstream>
8 #include <iostream>
9 #include <memory>
10 #include <numeric>
11 #include <vector>
12 
13 // user include files
35 
36 //
37 // constructors and destructor
38 //
40  : conf_(iConfig) {
41  topFolderName_ = conf_.getParameter<std::string>("TopFolderName");
43  consumes<std::vector<TrackingParticle>>(conf_.getParameter<edm::InputTag>("trackingParticleToken"));
45  consumes<TTStubAssociationMap<Ref_Phase2TrackerDigi_>>(conf_.getParameter<edm::InputTag>("MCTruthStubInputTag"));
46  ttClusterMCTruthToken_ = consumes<TTClusterAssociationMap<Ref_Phase2TrackerDigi_>>(
47  conf_.getParameter<edm::InputTag>("MCTruthClusterInputTag"));
48  ttTrackMCTruthToken_ = consumes<TTTrackAssociationMap<Ref_Phase2TrackerDigi_>>(
49  conf_.getParameter<edm::InputTag>("MCTruthTrackInputTag"));
50  L1Tk_nPar = conf_.getParameter<int>("L1Tk_nPar"); // 4 or 5(d0) track parameters
51  L1Tk_minNStub = conf_.getParameter<int>("L1Tk_minNStub"); // min number of stubs in the track
52  L1Tk_maxChi2 = conf_.getParameter<double>("L1Tk_maxChi2"); // maximum chi2 of the track
53  L1Tk_maxChi2dof = conf_.getParameter<double>("L1Tk_maxChi2dof"); // maximum chi2/dof of the track
54  TP_minNStub = conf_.getParameter<int>("TP_minNStub"); // min number of stubs in the tracking particle to
55  //min number of layers with stubs in the tracking particle to consider matching
56  TP_minNLayersStub = conf_.getParameter<int>("TP_minNLayersStub");
57  TP_minPt = conf_.getParameter<double>("TP_minPt"); // min pT to consider matching
58  TP_maxPt = conf_.getParameter<double>("TP_maxPt"); // max pT to consider matching
59  TP_maxEta = conf_.getParameter<double>("TP_maxEta"); // max eta to consider matching
60  TP_maxVtxZ = conf_.getParameter<double>("TP_maxVtxZ"); // max vertZ (or z0) to consider matching
61  TP_select_eventid = conf_.getParameter<int>("TP_select_eventid"); // PI or not
62 }
63 
65  // do anything here that needs to be done at desctruction time
66  // (e.g. close files, deallocate resources etc.)
67 }
68 
69 // member functions
70 
71 // ------------ method called for each event ------------
73  // Tracking Particles
74  edm::Handle<std::vector<TrackingParticle>> trackingParticleHandle;
75  iEvent.getByToken(trackingParticleToken_, trackingParticleHandle);
76 
77  // Truth Association Maps
79  iEvent.getByToken(ttTrackMCTruthToken_, MCTruthTTTrackHandle);
81  iEvent.getByToken(ttClusterMCTruthToken_, MCTruthTTClusterHandle);
83  iEvent.getByToken(ttStubMCTruthToken_, MCTruthTTStubHandle);
84 
85  // Geometries
87  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
88  const TrackerTopology *const tTopo = tTopoHandle.product();
89 
90  // Loop over tracking particles
91  int this_tp = 0;
92  for (auto iterTP : *trackingParticleHandle) {
93  edm::Ptr<TrackingParticle> tp_ptr(trackingParticleHandle, this_tp);
94  this_tp++;
95 
96  int tmp_eventid = iterTP.eventId().event();
97  float tmp_tp_pt = iterTP.pt();
98  float tmp_tp_phi = iterTP.phi();
99  float tmp_tp_eta = iterTP.eta();
100 
101  //Calculate nLayers variable
102  std::vector<edm::Ref<edmNew::DetSetVector<TTStub<Ref_Phase2TrackerDigi_>>, TTStub<Ref_Phase2TrackerDigi_>>>
103  theStubRefs = MCTruthTTStubHandle->findTTStubRefs(tp_ptr);
104 
105  int hasStubInLayer[11] = {0};
106  for (unsigned int is = 0; is < theStubRefs.size(); is++) {
107  DetId detid(theStubRefs.at(is)->getDetId());
108  int layer = -1;
109  if (detid.subdetId() == StripSubdetector::TOB)
110  layer = static_cast<int>(tTopo->layer(detid)) - 1; //fill in array as entries 0-5
111  else if (detid.subdetId() == StripSubdetector::TID)
112  layer = static_cast<int>(tTopo->layer(detid)) + 5; //fill in array as entries 6-10
113 
114  //treat genuine stubs separately (==2 is genuine, ==1 is not)
115  if (MCTruthTTStubHandle->findTrackingParticlePtr(theStubRefs.at(is)).isNull() && hasStubInLayer[layer] < 2)
116  hasStubInLayer[layer] = 1;
117  else
118  hasStubInLayer[layer] = 2;
119  }
120 
121  int nStubLayerTP = 0;
122  int nStubLayerTP_g = 0;
123  for (int isum = 0; isum < 11; isum++) {
124  if (hasStubInLayer[isum] >= 1)
125  nStubLayerTP += 1;
126  else if (hasStubInLayer[isum] == 2)
127  nStubLayerTP_g += 1;
128  }
129 
130  if (std::fabs(tmp_tp_eta) > TP_maxEta)
131  continue;
132  // Fill the 1D distribution plots for tracking particles, to monitor change in stub definition
133  if (tmp_tp_pt > TP_minPt && nStubLayerTP >= TP_minNLayersStub) {
134  trackParts_Pt->Fill(tmp_tp_pt);
135  trackParts_Eta->Fill(tmp_tp_eta);
136  trackParts_Phi->Fill(tmp_tp_phi);
137  }
138 
139  if (TP_select_eventid == 0 && tmp_eventid != 0)
140  continue; //only care about tracking particles from the primary interaction for efficiency/resolution
141  int nStubTP = -1;
142  if (MCTruthTTStubHandle.isValid()) {
143  std::vector<edm::Ref<edmNew::DetSetVector<TTStub<Ref_Phase2TrackerDigi_>>, TTStub<Ref_Phase2TrackerDigi_>>>
144  theStubRefs = MCTruthTTStubHandle->findTTStubRefs(tp_ptr);
145  nStubTP = (int)theStubRefs.size();
146  }
147  if (MCTruthTTClusterHandle.isValid() && MCTruthTTClusterHandle->findTTClusterRefs(tp_ptr).empty())
148  continue;
149 
150  float tmp_tp_vz = iterTP.vz();
151  float tmp_tp_vx = iterTP.vx();
152  float tmp_tp_vy = iterTP.vy();
153  float tmp_tp_charge = tp_ptr->charge();
154  int tmp_tp_pdgid = iterTP.pdgId();
155 
156  // ----------------------------------------------------------------------------------------------
157  // calculate d0 and VtxZ propagated back to the IP, pass if greater than max
158  // VtxZ
159  float tmp_tp_t = tan(2.0 * atan(1.0) - 2.0 * atan(exp(-tmp_tp_eta)));
160  float delx = -tmp_tp_vx;
161  float dely = -tmp_tp_vy;
162  float K = 0.01 * 0.5696 / tmp_tp_pt * tmp_tp_charge; // curvature correction
163  float A = 1. / (2. * K);
164  float tmp_tp_x0p = delx - A * sin(tmp_tp_phi);
165  float tmp_tp_y0p = dely + A * cos(tmp_tp_phi);
166  float tmp_tp_rp = sqrt(tmp_tp_x0p * tmp_tp_x0p + tmp_tp_y0p * tmp_tp_y0p);
167  static double pi = 4.0 * atan(1.0);
168  float delphi = tmp_tp_phi - atan2(-K * tmp_tp_x0p, K * tmp_tp_y0p);
169  if (delphi < -pi)
170  delphi += 2.0 * pi;
171  if (delphi > pi)
172  delphi -= 2.0 * pi;
173 
174  float tmp_tp_VtxZ = tmp_tp_vz + tmp_tp_t * delphi / (2.0 * K);
175  float tmp_tp_VtxR = sqrt(tmp_tp_vx * tmp_tp_vx + tmp_tp_vy * tmp_tp_vy);
176  float tmp_tp_d0 = tmp_tp_charge * tmp_tp_rp - (1. / (2. * K));
177 
178  // simpler formula for d0, in cases where the charge is zero:
179  // https://github.com/cms-sw/cmssw/blob/master/DataFormats/TrackReco/interface/TrackBase.h
180  float other_d0 = -tmp_tp_vx * sin(tmp_tp_phi) + tmp_tp_vy * cos(tmp_tp_phi);
181  tmp_tp_d0 = tmp_tp_d0 * (-1); // fix d0 sign
182  if (K == 0) {
183  tmp_tp_d0 = other_d0;
184  tmp_tp_VtxZ = tmp_tp_vz;
185  }
186  if (std::fabs(tmp_tp_VtxZ) > TP_maxVtxZ)
187  continue;
188 
189  // To make efficiency plots where the denominator has NO stub cuts
190  if (tmp_tp_VtxR < 1.0) {
191  tp_pt->Fill(tmp_tp_pt); //pT effic, no cut on pT, but VtxR cut
192  if (tmp_tp_pt <= 10)
193  tp_pt_zoom->Fill(tmp_tp_pt); //pT effic, no cut on pT, but VtxR cut
194  }
195  if (tmp_tp_pt < TP_minPt)
196  continue;
197  tp_VtxR->Fill(tmp_tp_VtxR); // VtxR efficiency has no cut on VtxR
198  if (tmp_tp_VtxR > 1.0)
199  continue;
200  tp_eta->Fill(tmp_tp_eta);
201  tp_d0->Fill(tmp_tp_d0);
202  tp_VtxZ->Fill(tmp_tp_VtxZ);
203 
204  if (nStubTP < TP_minNStub || nStubLayerTP < TP_minNLayersStub)
205  continue; //nStub cut not included in denominator of efficiency plots
206 
207  // ----------------------------------------------------------------------------------------------
208  // look for L1 tracks matched to the tracking particle
209  int tp_nMatch = 0;
210  int i_track = -1;
211  float i_chi2dof = 99999;
212  if (MCTruthTTTrackHandle.isValid()) {
213  std::vector<edm::Ptr<TTTrack<Ref_Phase2TrackerDigi_>>> matchedTracks =
214  MCTruthTTTrackHandle->findTTTrackPtrs(tp_ptr);
215 
216  // ----------------------------------------------------------------------------------------------
217  // loop over matched L1 tracks
218  // here, "match" means tracks that can be associated to a TrackingParticle
219  // with at least one hit of at least one of its clusters
220  // https://twiki.cern.ch/twiki/bin/viewauth/CMS/SLHCTrackerTriggerSWTools#MC_truth_for_TTTrack
221  int trkCounter = 0;
222  for (auto thisTrack : matchedTracks) {
223  if (!MCTruthTTTrackHandle->isGenuine(thisTrack))
224  continue;
225  // ----------------------------------------------------------------------------------------------
226  // further require L1 track to be (loosely) genuine, that there is only
227  // one TP matched to the track
228  // + have >= L1Tk_minNStub stubs for it to be a valid match
229  int tmp_trk_nstub = thisTrack->getStubRefs().size();
230  if (tmp_trk_nstub < L1Tk_minNStub)
231  continue;
232  float dmatch_pt = 999;
233  float dmatch_eta = 999;
234  float dmatch_phi = 999;
235  int match_id = 999;
236 
237  edm::Ptr<TrackingParticle> my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(thisTrack);
238  dmatch_pt = std::fabs(my_tp->p4().pt() - tmp_tp_pt);
239  dmatch_eta = std::fabs(my_tp->p4().eta() - tmp_tp_eta);
240  dmatch_phi = std::fabs(my_tp->p4().phi() - tmp_tp_phi);
241  match_id = my_tp->pdgId();
242  float tmp_trk_chi2dof = (thisTrack->getChi2(L1Tk_nPar)) / (2 * tmp_trk_nstub - L1Tk_nPar);
243 
244  // ensure that track is uniquely matched to the TP we are looking at!
245  if (dmatch_pt < 0.1 && dmatch_eta < 0.1 && dmatch_phi < 0.1 && tmp_tp_pdgid == match_id) {
246  tp_nMatch++;
247  if (i_track < 0 || tmp_trk_chi2dof < i_chi2dof) {
248  i_track = trkCounter;
249  i_chi2dof = tmp_trk_chi2dof;
250  }
251  }
252  trkCounter++;
253  } // end loop over matched L1 tracks
254 
255  if (tp_nMatch < 1)
256  continue;
257  // Get information on the matched tracks
258  float tmp_matchtrk_pt = -999;
259  float tmp_matchtrk_eta = -999;
260  float tmp_matchtrk_phi = -999;
261  float tmp_matchtrk_VtxZ = -999;
262  float tmp_matchtrk_chi2 = -999;
263  float tmp_matchtrk_chi2dof = -999;
264  int tmp_matchTrk_nStub = -999;
265  float tmp_matchtrk_d0 = -999;
266 
267  tmp_matchtrk_pt = matchedTracks[i_track]->getMomentum(L1Tk_nPar).perp();
268  tmp_matchtrk_eta = matchedTracks[i_track]->getMomentum(L1Tk_nPar).eta();
269  tmp_matchtrk_phi = matchedTracks[i_track]->getMomentum(L1Tk_nPar).phi();
270  tmp_matchtrk_VtxZ = matchedTracks[i_track]->getPOCA(L1Tk_nPar).z();
271  tmp_matchtrk_chi2 = matchedTracks[i_track]->getChi2(L1Tk_nPar);
272  tmp_matchtrk_chi2dof = matchedTracks[i_track]->getChi2Red(L1Tk_nPar);
273  tmp_matchTrk_nStub = (int)matchedTracks[i_track]->getStubRefs().size();
274 
275  Track_MatchedChi2->Fill(tmp_matchtrk_chi2);
276  Track_MatchedChi2Red->Fill(tmp_matchtrk_chi2dof);
277 
278  //for d0
279  float tmp_matchtrk_x0 = matchedTracks[i_track]->getPOCA(L1Tk_nPar).x();
280  float tmp_matchtrk_y0 = matchedTracks[i_track]->getPOCA(L1Tk_nPar).y();
281  tmp_matchtrk_d0 = -tmp_matchtrk_x0 * sin(tmp_matchtrk_phi) + tmp_matchtrk_y0 * cos(tmp_matchtrk_phi);
282 
283  //Add cuts for the matched tracks, numerator
284  if (tmp_tp_pt > TP_maxPt)
285  continue;
286  if (tmp_matchTrk_nStub < L1Tk_minNStub || tmp_matchtrk_chi2 > L1Tk_maxChi2 ||
287  tmp_matchtrk_chi2dof > L1Tk_maxChi2dof)
288  continue;
289 
290  // fill matched track histograms (if passes all criteria)
291  match_tp_pt->Fill(tmp_tp_pt);
292  if (tmp_tp_pt > 0 && tmp_tp_pt <= 10)
293  match_tp_pt_zoom->Fill(tmp_tp_pt);
294  match_tp_eta->Fill(tmp_tp_eta);
295  match_tp_d0->Fill(tmp_tp_d0);
296  match_tp_VtxR->Fill(tmp_tp_VtxR);
297  match_tp_VtxZ->Fill(tmp_tp_VtxZ);
298 
299  // Eta and pT histograms for resolution
300  float pt_diff = tmp_matchtrk_pt - tmp_tp_pt;
301  float pt_res = pt_diff / tmp_tp_pt;
302  float eta_res = tmp_matchtrk_eta - tmp_tp_eta;
303  float phi_res = tmp_matchtrk_phi - tmp_tp_phi;
304  float VtxZ_res = tmp_matchtrk_VtxZ - tmp_tp_VtxZ;
305  float d0_res = tmp_matchtrk_d0 - tmp_tp_d0;
306 
307  // fill total resolution histograms
308  res_pt->Fill(pt_diff);
309  res_ptRel->Fill(pt_res);
310  res_eta->Fill(eta_res);
311 
312  // Fill resolution plots for different abs(eta) bins:
313  // (0, 0.7), (0.7, 1.0), (1.0, 1.2), (1.2, 1.6), (1.6, 2.0), (2.0, 2.4)
314  if (std::fabs(tmp_tp_eta) >= 0 && std::fabs(tmp_tp_eta) < 0.7) {
315  reseta_eta0to0p7->Fill(eta_res);
316  resphi_eta0to0p7->Fill(phi_res);
317  resVtxZ_eta0to0p7->Fill(VtxZ_res);
318  resd0_eta0to0p7->Fill(d0_res);
319  if (tmp_tp_pt >= 2 && tmp_tp_pt < 3)
320  respt_eta0to0p7_pt2to3->Fill(pt_res);
321  else if (tmp_tp_pt >= 3 && tmp_tp_pt < 8)
322  respt_eta0to0p7_pt3to8->Fill(pt_res);
323  else if (tmp_tp_pt >= 8)
325  } else if (std::fabs(tmp_tp_eta) >= 0.7 && std::fabs(tmp_tp_eta) < 1.0) {
326  reseta_eta0p7to1->Fill(eta_res);
327  resphi_eta0p7to1->Fill(phi_res);
328  resVtxZ_eta0p7to1->Fill(VtxZ_res);
329  resd0_eta0p7to1->Fill(d0_res);
330  if (tmp_tp_pt >= 2 && tmp_tp_pt < 3)
331  respt_eta0p7to1_pt2to3->Fill(pt_res);
332  else if (tmp_tp_pt >= 3 && tmp_tp_pt < 8)
333  respt_eta0p7to1_pt3to8->Fill(pt_res);
334  else if (tmp_tp_pt >= 8)
336  } else if (std::fabs(tmp_tp_eta) >= 1.0 && std::fabs(tmp_tp_eta) < 1.2) {
337  reseta_eta1to1p2->Fill(eta_res);
338  resphi_eta1to1p2->Fill(phi_res);
339  resVtxZ_eta1to1p2->Fill(VtxZ_res);
340  resd0_eta1to1p2->Fill(d0_res);
341  if (tmp_tp_pt >= 2 && tmp_tp_pt < 3)
342  respt_eta1to1p2_pt2to3->Fill(pt_res);
343  else if (tmp_tp_pt >= 3 && tmp_tp_pt < 8)
344  respt_eta1to1p2_pt3to8->Fill(pt_res);
345  else if (tmp_tp_pt >= 8)
347  } else if (std::fabs(tmp_tp_eta) >= 1.2 && std::fabs(tmp_tp_eta) < 1.6) {
348  reseta_eta1p2to1p6->Fill(eta_res);
349  resphi_eta1p2to1p6->Fill(phi_res);
350  resVtxZ_eta1p2to1p6->Fill(VtxZ_res);
351  resd0_eta1p2to1p6->Fill(d0_res);
352  if (tmp_tp_pt >= 2 && tmp_tp_pt < 3)
354  else if (tmp_tp_pt >= 3 && tmp_tp_pt < 8)
356  else if (tmp_tp_pt >= 8)
358  } else if (std::fabs(tmp_tp_eta) >= 1.6 && std::fabs(tmp_tp_eta) < 2.0) {
359  reseta_eta1p6to2->Fill(eta_res);
360  resphi_eta1p6to2->Fill(phi_res);
361  resVtxZ_eta1p6to2->Fill(VtxZ_res);
362  resd0_eta1p6to2->Fill(d0_res);
363  if (tmp_tp_pt >= 2 && tmp_tp_pt < 3)
364  respt_eta1p6to2_pt2to3->Fill(pt_res);
365  else if (tmp_tp_pt >= 3 && tmp_tp_pt < 8)
366  respt_eta1p6to2_pt3to8->Fill(pt_res);
367  else if (tmp_tp_pt >= 8)
369  } else if (std::fabs(tmp_tp_eta) >= 2.0 && std::fabs(tmp_tp_eta) <= 2.4) {
370  reseta_eta2to2p4->Fill(eta_res);
371  resphi_eta2to2p4->Fill(phi_res);
372  resVtxZ_eta2to2p4->Fill(VtxZ_res);
373  resd0_eta2to2p4->Fill(d0_res);
374  if (tmp_tp_pt >= 2 && tmp_tp_pt < 3)
375  respt_eta2to2p4_pt2to3->Fill(pt_res);
376  else if (tmp_tp_pt >= 3 && tmp_tp_pt < 8)
377  respt_eta2to2p4_pt3to8->Fill(pt_res);
378  else if (tmp_tp_pt >= 8)
380  }
381  } //if MC TTTrack handle is valid
382  } //end loop over tracking particles
383 } // end of method
384 
385 // ------------ method called once each job just before starting event loop
386 // ------------
388  edm::Run const &run,
389  edm::EventSetup const &es) {
390  // Histogram setup and definitions
392  iBooker.setCurrentFolder(topFolderName_ + "/trackParticles");
393 
394  // 1D: pT
395  edm::ParameterSet psTrackParts_Pt = conf_.getParameter<edm::ParameterSet>("TH1TrackParts_Pt");
396  HistoName = "trackParts_Pt";
397  trackParts_Pt = iBooker.book1D(HistoName,
398  HistoName,
399  psTrackParts_Pt.getParameter<int32_t>("Nbinsx"),
400  psTrackParts_Pt.getParameter<double>("xmin"),
401  psTrackParts_Pt.getParameter<double>("xmax"));
402  trackParts_Pt->setAxisTitle("p_{T} [GeV]", 1);
403  trackParts_Pt->setAxisTitle("# tracking particles", 2);
404 
405  // 1D: eta
406  edm::ParameterSet psTrackParts_Eta = conf_.getParameter<edm::ParameterSet>("TH1TrackParts_Eta");
407  HistoName = "trackParts_Eta";
408  trackParts_Eta = iBooker.book1D(HistoName,
409  HistoName,
410  psTrackParts_Eta.getParameter<int32_t>("Nbinsx"),
411  psTrackParts_Eta.getParameter<double>("xmin"),
412  psTrackParts_Eta.getParameter<double>("xmax"));
413  trackParts_Eta->setAxisTitle("#eta", 1);
414  trackParts_Eta->setAxisTitle("# tracking particles", 2);
415 
416  // 1D: phi
417  edm::ParameterSet psTrackParts_Phi = conf_.getParameter<edm::ParameterSet>("TH1TrackParts_Phi");
418  HistoName = "trackParts_Phi";
419  trackParts_Phi = iBooker.book1D(HistoName,
420  HistoName,
421  psTrackParts_Phi.getParameter<int32_t>("Nbinsx"),
422  psTrackParts_Phi.getParameter<double>("xmin"),
423  psTrackParts_Phi.getParameter<double>("xmax"));
424  trackParts_Phi->setAxisTitle("#phi", 1);
425  trackParts_Phi->setAxisTitle("# tracking particles", 2);
426 
427  // For tracks correctly matched to truth-level track
428  iBooker.setCurrentFolder(topFolderName_ + "/Tracks");
429  // chi2
430  edm::ParameterSet psTrack_Chi2 = conf_.getParameter<edm::ParameterSet>("TH1_Track_Chi2");
431  HistoName = "Track_MatchedChi2";
432  Track_MatchedChi2 = iBooker.book1D(HistoName,
433  HistoName,
434  psTrack_Chi2.getParameter<int32_t>("Nbinsx"),
435  psTrack_Chi2.getParameter<double>("xmin"),
436  psTrack_Chi2.getParameter<double>("xmax"));
437  Track_MatchedChi2->setAxisTitle("L1 Track #chi^{2}", 1);
438  Track_MatchedChi2->setAxisTitle("# Correctly Matched L1 Tracks", 2);
439 
440  // chi2Red
441  edm::ParameterSet psTrack_Chi2Red = conf_.getParameter<edm::ParameterSet>("TH1_Track_Chi2R");
442  HistoName = "Track_MatchedChi2Red";
443  Track_MatchedChi2Red = iBooker.book1D(HistoName,
444  HistoName,
445  psTrack_Chi2Red.getParameter<int32_t>("Nbinsx"),
446  psTrack_Chi2Red.getParameter<double>("xmin"),
447  psTrack_Chi2Red.getParameter<double>("xmax"));
448  Track_MatchedChi2Red->setAxisTitle("L1 Track #chi^{2}/ndf", 1);
449  Track_MatchedChi2Red->setAxisTitle("# Correctly Matched L1 Tracks", 2);
450 
451  // 1D plots for efficiency
452  iBooker.setCurrentFolder(topFolderName_ + "/Tracks/Efficiency");
453  // pT
454  edm::ParameterSet psEffic_pt = conf_.getParameter<edm::ParameterSet>("TH1Effic_pt");
455  HistoName = "tp_pt";
456  tp_pt = iBooker.book1D(HistoName,
457  HistoName,
458  psEffic_pt.getParameter<int32_t>("Nbinsx"),
459  psEffic_pt.getParameter<double>("xmin"),
460  psEffic_pt.getParameter<double>("xmax"));
461  tp_pt->setAxisTitle("p_{T} [GeV]", 1);
462  tp_pt->setAxisTitle("# tracking particles", 2);
463 
464  // Matched TP's pT
465  HistoName = "match_tp_pt";
466  match_tp_pt = iBooker.book1D(HistoName,
467  HistoName,
468  psEffic_pt.getParameter<int32_t>("Nbinsx"),
469  psEffic_pt.getParameter<double>("xmin"),
470  psEffic_pt.getParameter<double>("xmax"));
471  match_tp_pt->setAxisTitle("p_{T} [GeV]", 1);
472  match_tp_pt->setAxisTitle("# matched tracking particles", 2);
473 
474  // pT zoom (0-10 GeV)
475  edm::ParameterSet psEffic_pt_zoom = conf_.getParameter<edm::ParameterSet>("TH1Effic_pt_zoom");
476  HistoName = "tp_pt_zoom";
477  tp_pt_zoom = iBooker.book1D(HistoName,
478  HistoName,
479  psEffic_pt_zoom.getParameter<int32_t>("Nbinsx"),
480  psEffic_pt_zoom.getParameter<double>("xmin"),
481  psEffic_pt_zoom.getParameter<double>("xmax"));
482  tp_pt_zoom->setAxisTitle("p_{T} [GeV]", 1);
483  tp_pt_zoom->setAxisTitle("# tracking particles", 2);
484 
485  // Matched pT zoom (0-10 GeV)
486  HistoName = "match_tp_pt_zoom";
487  match_tp_pt_zoom = iBooker.book1D(HistoName,
488  HistoName,
489  psEffic_pt_zoom.getParameter<int32_t>("Nbinsx"),
490  psEffic_pt_zoom.getParameter<double>("xmin"),
491  psEffic_pt_zoom.getParameter<double>("xmax"));
492  match_tp_pt_zoom->setAxisTitle("p_{T} [GeV]", 1);
493  match_tp_pt_zoom->setAxisTitle("# matched tracking particles", 2);
494 
495  // eta
496  edm::ParameterSet psEffic_eta = conf_.getParameter<edm::ParameterSet>("TH1Effic_eta");
497  HistoName = "tp_eta";
498  tp_eta = iBooker.book1D(HistoName,
499  HistoName,
500  psEffic_eta.getParameter<int32_t>("Nbinsx"),
501  psEffic_eta.getParameter<double>("xmin"),
502  psEffic_eta.getParameter<double>("xmax"));
503  tp_eta->setAxisTitle("#eta", 1);
504  tp_eta->setAxisTitle("# tracking particles", 2);
505 
506  // Matched eta
507  HistoName = "match_tp_eta";
508  match_tp_eta = iBooker.book1D(HistoName,
509  HistoName,
510  psEffic_eta.getParameter<int32_t>("Nbinsx"),
511  psEffic_eta.getParameter<double>("xmin"),
512  psEffic_eta.getParameter<double>("xmax"));
513  match_tp_eta->setAxisTitle("#eta", 1);
514  match_tp_eta->setAxisTitle("# matched tracking particles", 2);
515 
516  // d0
517  edm::ParameterSet psEffic_d0 = conf_.getParameter<edm::ParameterSet>("TH1Effic_d0");
518  HistoName = "tp_d0";
519  tp_d0 = iBooker.book1D(HistoName,
520  HistoName,
521  psEffic_d0.getParameter<int32_t>("Nbinsx"),
522  psEffic_d0.getParameter<double>("xmin"),
523  psEffic_d0.getParameter<double>("xmax"));
524  tp_d0->setAxisTitle("d_{0} [cm]", 1);
525  tp_d0->setAxisTitle("# tracking particles", 2);
526 
527  // Matched d0
528  HistoName = "match_tp_d0";
529  match_tp_d0 = iBooker.book1D(HistoName,
530  HistoName,
531  psEffic_d0.getParameter<int32_t>("Nbinsx"),
532  psEffic_d0.getParameter<double>("xmin"),
533  psEffic_d0.getParameter<double>("xmax"));
534  match_tp_d0->setAxisTitle("d_{0} [cm]", 1);
535  match_tp_d0->setAxisTitle("# matched tracking particles", 2);
536 
537  // VtxR (also known as vxy)
538  edm::ParameterSet psEffic_VtxR = conf_.getParameter<edm::ParameterSet>("TH1Effic_VtxR");
539  HistoName = "tp_VtxR";
540  tp_VtxR = iBooker.book1D(HistoName,
541  HistoName,
542  psEffic_VtxR.getParameter<int32_t>("Nbinsx"),
543  psEffic_VtxR.getParameter<double>("xmin"),
544  psEffic_VtxR.getParameter<double>("xmax"));
545  tp_VtxR->setAxisTitle("d_{xy} [cm]", 1);
546  tp_VtxR->setAxisTitle("# tracking particles", 2);
547 
548  // Matched VtxR
549  HistoName = "match_tp_VtxR";
550  match_tp_VtxR = iBooker.book1D(HistoName,
551  HistoName,
552  psEffic_VtxR.getParameter<int32_t>("Nbinsx"),
553  psEffic_VtxR.getParameter<double>("xmin"),
554  psEffic_VtxR.getParameter<double>("xmax"));
555  match_tp_VtxR->setAxisTitle("d_{xy} [cm]", 1);
556  match_tp_VtxR->setAxisTitle("# matched tracking particles", 2);
557 
558  // VtxZ
559  edm::ParameterSet psEffic_VtxZ = conf_.getParameter<edm::ParameterSet>("TH1Effic_VtxZ");
560  HistoName = "tp_VtxZ";
561  tp_VtxZ = iBooker.book1D(HistoName,
562  HistoName,
563  psEffic_VtxZ.getParameter<int32_t>("Nbinsx"),
564  psEffic_VtxZ.getParameter<double>("xmin"),
565  psEffic_VtxZ.getParameter<double>("xmax"));
566  tp_VtxZ->setAxisTitle("z_{0} [cm]", 1);
567  tp_VtxZ->setAxisTitle("# tracking particles", 2);
568 
569  // Matched d0
570  HistoName = "match_tp_VtxZ";
571  match_tp_VtxZ = iBooker.book1D(HistoName,
572  HistoName,
573  psEffic_VtxZ.getParameter<int32_t>("Nbinsx"),
574  psEffic_VtxZ.getParameter<double>("xmin"),
575  psEffic_VtxZ.getParameter<double>("xmax"));
576  match_tp_VtxZ->setAxisTitle("z_{0} [cm]", 1);
577  match_tp_VtxZ->setAxisTitle("# matched tracking particles", 2);
578 
579  // 1D plots for resolution
580  iBooker.setCurrentFolder(topFolderName_ + "/Tracks/Resolution");
581  // full pT
582  edm::ParameterSet psRes_pt = conf_.getParameter<edm::ParameterSet>("TH1Res_pt");
583  HistoName = "res_pt";
584  res_pt = iBooker.book1D(HistoName,
585  HistoName,
586  psRes_pt.getParameter<int32_t>("Nbinsx"),
587  psRes_pt.getParameter<double>("xmin"),
588  psRes_pt.getParameter<double>("xmax"));
589  res_pt->setAxisTitle("p_{T} [GeV]", 1);
590  res_pt->setAxisTitle("# tracking particles", 2);
591 
592  // Full eta
593  edm::ParameterSet psRes_eta = conf_.getParameter<edm::ParameterSet>("TH1Res_eta");
594  HistoName = "res_eta";
595  res_eta = iBooker.book1D(HistoName,
596  HistoName,
597  psRes_eta.getParameter<int32_t>("Nbinsx"),
598  psRes_eta.getParameter<double>("xmin"),
599  psRes_eta.getParameter<double>("xmax"));
600  res_eta->setAxisTitle("#eta", 1);
601  res_eta->setAxisTitle("# tracking particles", 2);
602 
603  // Relative pT
604  edm::ParameterSet psRes_ptRel = conf_.getParameter<edm::ParameterSet>("TH1Res_ptRel");
605  HistoName = "res_ptRel";
606  res_ptRel = iBooker.book1D(HistoName,
607  HistoName,
608  psRes_ptRel.getParameter<int32_t>("Nbinsx"),
609  psRes_ptRel.getParameter<double>("xmin"),
610  psRes_ptRel.getParameter<double>("xmax"));
611  res_ptRel->setAxisTitle("Relative p_{T} [GeV]", 1);
612  res_ptRel->setAxisTitle("# tracking particles", 2);
613 
614  // Eta parts (for resolution)
615  // Eta 1 (0 to 0.7)
616  HistoName = "reseta_eta0to0p7";
617  reseta_eta0to0p7 = iBooker.book1D(HistoName,
618  HistoName,
619  psRes_eta.getParameter<int32_t>("Nbinsx"),
620  psRes_eta.getParameter<double>("xmin"),
621  psRes_eta.getParameter<double>("xmax"));
622  reseta_eta0to0p7->setAxisTitle("#eta_{trk} - #eta_{tp}", 1);
623  reseta_eta0to0p7->setAxisTitle("# tracking particles", 2);
624 
625  // Eta 2 (0.7 to 1.0)
626  HistoName = "reseta_eta0p7to1";
627  reseta_eta0p7to1 = iBooker.book1D(HistoName,
628  HistoName,
629  psRes_eta.getParameter<int32_t>("Nbinsx"),
630  psRes_eta.getParameter<double>("xmin"),
631  psRes_eta.getParameter<double>("xmax"));
632  reseta_eta0p7to1->setAxisTitle("#eta_{trk} - #eta_{tp}", 1);
633  reseta_eta0p7to1->setAxisTitle("# tracking particles", 2);
634 
635  // Eta 3 (1.0 to 1.2)
636  HistoName = "reseta_eta1to1p2";
637  reseta_eta1to1p2 = iBooker.book1D(HistoName,
638  HistoName,
639  psRes_eta.getParameter<int32_t>("Nbinsx"),
640  psRes_eta.getParameter<double>("xmin"),
641  psRes_eta.getParameter<double>("xmax"));
642  reseta_eta1to1p2->setAxisTitle("#eta_{trk} - #eta_{tp}", 1);
643  reseta_eta1to1p2->setAxisTitle("# tracking particles", 2);
644 
645  // Eta 4 (1.2 to 1.6)
646  HistoName = "reseta_eta1p2to1p6";
647  reseta_eta1p2to1p6 = iBooker.book1D(HistoName,
648  HistoName,
649  psRes_eta.getParameter<int32_t>("Nbinsx"),
650  psRes_eta.getParameter<double>("xmin"),
651  psRes_eta.getParameter<double>("xmax"));
652  reseta_eta1p2to1p6->setAxisTitle("#eta_{trk} - #eta_{tp}", 1);
653  reseta_eta1p2to1p6->setAxisTitle("# tracking particles", 2);
654 
655  // Eta 5 (1.6 to 2.0)
656  HistoName = "reseta_eta1p6to2";
657  reseta_eta1p6to2 = iBooker.book1D(HistoName,
658  HistoName,
659  psRes_eta.getParameter<int32_t>("Nbinsx"),
660  psRes_eta.getParameter<double>("xmin"),
661  psRes_eta.getParameter<double>("xmax"));
662  reseta_eta1p6to2->setAxisTitle("#eta_{trk} - #eta_{tp}", 1);
663  reseta_eta1p6to2->setAxisTitle("# tracking particles", 2);
664 
665  // Eta 6 (2.0 to 2.4)
666  HistoName = "reseta_eta2to2p4";
667  reseta_eta2to2p4 = iBooker.book1D(HistoName,
668  HistoName,
669  psRes_eta.getParameter<int32_t>("Nbinsx"),
670  psRes_eta.getParameter<double>("xmin"),
671  psRes_eta.getParameter<double>("xmax"));
672  reseta_eta2to2p4->setAxisTitle("#eta_{trk} - #eta_{tp}", 1);
673  reseta_eta2to2p4->setAxisTitle("# tracking particles", 2);
674 
675  // pT parts for resolution (pT res vs eta)
676  // pT a (2 to 3 GeV)
677  // Eta 1 (0 to 0.7)
678  HistoName = "respt_eta0to0p7_pt2to3";
679  respt_eta0to0p7_pt2to3 = iBooker.book1D(HistoName,
680  HistoName,
681  psRes_pt.getParameter<int32_t>("Nbinsx"),
682  psRes_pt.getParameter<double>("xmin"),
683  psRes_pt.getParameter<double>("xmax"));
684  respt_eta0to0p7_pt2to3->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
685  respt_eta0to0p7_pt2to3->setAxisTitle("# tracking particles", 2);
686 
687  // Eta 2 (0.7 to 1.0)
688  HistoName = "respt_eta0p7to1_pt2to3";
689  respt_eta0p7to1_pt2to3 = iBooker.book1D(HistoName,
690  HistoName,
691  psRes_pt.getParameter<int32_t>("Nbinsx"),
692  psRes_pt.getParameter<double>("xmin"),
693  psRes_pt.getParameter<double>("xmax"));
694  respt_eta0p7to1_pt2to3->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
695  respt_eta0p7to1_pt2to3->setAxisTitle("# tracking particles", 2);
696 
697  // Eta 3 (1.0 to 1.2)
698  HistoName = "respt_eta1to1p2_pt2to3";
699  respt_eta1to1p2_pt2to3 = iBooker.book1D(HistoName,
700  HistoName,
701  psRes_pt.getParameter<int32_t>("Nbinsx"),
702  psRes_pt.getParameter<double>("xmin"),
703  psRes_pt.getParameter<double>("xmax"));
704  respt_eta1to1p2_pt2to3->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
705  respt_eta1to1p2_pt2to3->setAxisTitle("# tracking particles", 2);
706 
707  // Eta 4 (1.2 to 1.6)
708  HistoName = "respt_eta1p2to1p6_pt2to3";
709  respt_eta1p2to1p6_pt2to3 = iBooker.book1D(HistoName,
710  HistoName,
711  psRes_pt.getParameter<int32_t>("Nbinsx"),
712  psRes_pt.getParameter<double>("xmin"),
713  psRes_pt.getParameter<double>("xmax"));
714  respt_eta1p2to1p6_pt2to3->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
715  respt_eta1p2to1p6_pt2to3->setAxisTitle("# tracking particles", 2);
716 
717  // Eta 5 (1.6 to 2.0)
718  HistoName = "respt_eta1p6to2_pt2to3";
719  respt_eta1p6to2_pt2to3 = iBooker.book1D(HistoName,
720  HistoName,
721  psRes_pt.getParameter<int32_t>("Nbinsx"),
722  psRes_pt.getParameter<double>("xmin"),
723  psRes_pt.getParameter<double>("xmax"));
724  respt_eta1p6to2_pt2to3->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
725  respt_eta1p6to2_pt2to3->setAxisTitle("# tracking particles", 2);
726 
727  // Eta 6 (2.0 to 2.4)
728  HistoName = "respt_eta2to2p4_pt2to3";
729  respt_eta2to2p4_pt2to3 = iBooker.book1D(HistoName,
730  HistoName,
731  psRes_pt.getParameter<int32_t>("Nbinsx"),
732  psRes_pt.getParameter<double>("xmin"),
733  psRes_pt.getParameter<double>("xmax"));
734  respt_eta2to2p4_pt2to3->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
735  respt_eta2to2p4_pt2to3->setAxisTitle("# tracking particles", 2);
736 
737  // pT b (3 to 8 GeV)
738  // Eta 1 (0 to 0.7)
739  HistoName = "respt_eta0to0p7_pt3to8";
740  respt_eta0to0p7_pt3to8 = iBooker.book1D(HistoName,
741  HistoName,
742  psRes_pt.getParameter<int32_t>("Nbinsx"),
743  psRes_pt.getParameter<double>("xmin"),
744  psRes_pt.getParameter<double>("xmax"));
745  respt_eta0to0p7_pt3to8->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
746  respt_eta0to0p7_pt3to8->setAxisTitle("# tracking particles", 2);
747 
748  // Eta 2 (0.7 to 1.0)
749  HistoName = "respt_eta0p7to1_pt3to8";
750  respt_eta0p7to1_pt3to8 = iBooker.book1D(HistoName,
751  HistoName,
752  psRes_pt.getParameter<int32_t>("Nbinsx"),
753  psRes_pt.getParameter<double>("xmin"),
754  psRes_pt.getParameter<double>("xmax"));
755  respt_eta0p7to1_pt3to8->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
756  respt_eta0p7to1_pt3to8->setAxisTitle("# tracking particles", 2);
757 
758  // Eta 3 (1.0 to 1.2)
759  HistoName = "respt_eta1to1p2_pt3to8";
760  respt_eta1to1p2_pt3to8 = iBooker.book1D(HistoName,
761  HistoName,
762  psRes_pt.getParameter<int32_t>("Nbinsx"),
763  psRes_pt.getParameter<double>("xmin"),
764  psRes_pt.getParameter<double>("xmax"));
765  respt_eta1to1p2_pt3to8->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
766  respt_eta1to1p2_pt3to8->setAxisTitle("# tracking particles", 2);
767 
768  // Eta 4 (1.2 to 1.6)
769  HistoName = "respt_eta1p2to1p6_pt3to8";
770  respt_eta1p2to1p6_pt3to8 = iBooker.book1D(HistoName,
771  HistoName,
772  psRes_pt.getParameter<int32_t>("Nbinsx"),
773  psRes_pt.getParameter<double>("xmin"),
774  psRes_pt.getParameter<double>("xmax"));
775  respt_eta1p2to1p6_pt3to8->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
776  respt_eta1p2to1p6_pt3to8->setAxisTitle("# tracking particles", 2);
777 
778  // Eta 5 (1.6 to 2.0)
779  HistoName = "respt_eta1p6to2_pt3to8";
780  respt_eta1p6to2_pt3to8 = iBooker.book1D(HistoName,
781  HistoName,
782  psRes_pt.getParameter<int32_t>("Nbinsx"),
783  psRes_pt.getParameter<double>("xmin"),
784  psRes_pt.getParameter<double>("xmax"));
785  respt_eta1p6to2_pt3to8->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
786  respt_eta1p6to2_pt3to8->setAxisTitle("# tracking particles", 2);
787 
788  // Eta 6 (2.0 to 2.4)
789  HistoName = "respt_eta2to2p4_pt3to8";
790  respt_eta2to2p4_pt3to8 = iBooker.book1D(HistoName,
791  HistoName,
792  psRes_pt.getParameter<int32_t>("Nbinsx"),
793  psRes_pt.getParameter<double>("xmin"),
794  psRes_pt.getParameter<double>("xmax"));
795  respt_eta2to2p4_pt3to8->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
796  respt_eta2to2p4_pt3to8->setAxisTitle("# tracking particles", 2);
797 
798  // pT c (>8 GeV)
799  // Eta 1 (0 to 0.7)
800  HistoName = "respt_eta0to0p7_pt8toInf";
801  respt_eta0to0p7_pt8toInf = iBooker.book1D(HistoName,
802  HistoName,
803  psRes_pt.getParameter<int32_t>("Nbinsx"),
804  psRes_pt.getParameter<double>("xmin"),
805  psRes_pt.getParameter<double>("xmax"));
806  respt_eta0to0p7_pt8toInf->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
807  respt_eta0to0p7_pt8toInf->setAxisTitle("# tracking particles", 2);
808 
809  // Eta 2 (0.7 to 1.0)
810  HistoName = "respt_eta0p7to1_pt8toInf";
811  respt_eta0p7to1_pt8toInf = iBooker.book1D(HistoName,
812  HistoName,
813  psRes_pt.getParameter<int32_t>("Nbinsx"),
814  psRes_pt.getParameter<double>("xmin"),
815  psRes_pt.getParameter<double>("xmax"));
816  respt_eta0p7to1_pt8toInf->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
817  respt_eta0p7to1_pt8toInf->setAxisTitle("# tracking particles", 2);
818 
819  // Eta 3 (1.0 to 1.2)
820  HistoName = "respt_eta1to1p2_pt8toInf";
821  respt_eta1to1p2_pt8toInf = iBooker.book1D(HistoName,
822  HistoName,
823  psRes_pt.getParameter<int32_t>("Nbinsx"),
824  psRes_pt.getParameter<double>("xmin"),
825  psRes_pt.getParameter<double>("xmax"));
826  respt_eta1to1p2_pt8toInf->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
827  respt_eta1to1p2_pt8toInf->setAxisTitle("# tracking particles", 2);
828 
829  // Eta 4 (1.2 to 1.6)
830  HistoName = "respt_eta1p2to1p6_pt8toInf";
831  respt_eta1p2to1p6_pt8toInf = iBooker.book1D(HistoName,
832  HistoName,
833  psRes_pt.getParameter<int32_t>("Nbinsx"),
834  psRes_pt.getParameter<double>("xmin"),
835  psRes_pt.getParameter<double>("xmax"));
836  respt_eta1p2to1p6_pt8toInf->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
837  respt_eta1p2to1p6_pt8toInf->setAxisTitle("# tracking particles", 2);
838 
839  // Eta 5 (1.6 to 2.0)
840  HistoName = "respt_eta1p6to2_pt8toInf";
841  respt_eta1p6to2_pt8toInf = iBooker.book1D(HistoName,
842  HistoName,
843  psRes_pt.getParameter<int32_t>("Nbinsx"),
844  psRes_pt.getParameter<double>("xmin"),
845  psRes_pt.getParameter<double>("xmax"));
846  respt_eta1p6to2_pt8toInf->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
847  respt_eta1p6to2_pt8toInf->setAxisTitle("# tracking particles", 2);
848 
849  // Eta 6 (2.0 to 2.4)
850  HistoName = "respt_eta2to2p4_pt8toInf";
851  respt_eta2to2p4_pt8toInf = iBooker.book1D(HistoName,
852  HistoName,
853  psRes_pt.getParameter<int32_t>("Nbinsx"),
854  psRes_pt.getParameter<double>("xmin"),
855  psRes_pt.getParameter<double>("xmax"));
856  respt_eta2to2p4_pt8toInf->setAxisTitle("(p_{T}(trk) - p_{T}(tp))/p_{T}(tp)", 1);
857  respt_eta2to2p4_pt8toInf->setAxisTitle("# tracking particles", 2);
858 
859  // Phi parts (for resolution)
860  // Eta 1 (0 to 0.7)
861  edm::ParameterSet psRes_phi = conf_.getParameter<edm::ParameterSet>("TH1Res_phi");
862  HistoName = "resphi_eta0to0p7";
863  resphi_eta0to0p7 = iBooker.book1D(HistoName,
864  HistoName,
865  psRes_phi.getParameter<int32_t>("Nbinsx"),
866  psRes_phi.getParameter<double>("xmin"),
867  psRes_phi.getParameter<double>("xmax"));
868  resphi_eta0to0p7->setAxisTitle("#phi_{trk} - #phi_{tp}", 1);
869  resphi_eta0to0p7->setAxisTitle("# tracking particles", 2);
870 
871  // Eta 2 (0.7 to 1.0)
872  HistoName = "resphi_eta0p7to1";
873  resphi_eta0p7to1 = iBooker.book1D(HistoName,
874  HistoName,
875  psRes_phi.getParameter<int32_t>("Nbinsx"),
876  psRes_phi.getParameter<double>("xmin"),
877  psRes_phi.getParameter<double>("xmax"));
878  resphi_eta0p7to1->setAxisTitle("#phi_{trk} - #phi_{tp}", 1);
879  resphi_eta0p7to1->setAxisTitle("# tracking particles", 2);
880 
881  // Eta 3 (1.0 to 1.2)
882  HistoName = "resphi_eta1to1p2";
883  resphi_eta1to1p2 = iBooker.book1D(HistoName,
884  HistoName,
885  psRes_phi.getParameter<int32_t>("Nbinsx"),
886  psRes_phi.getParameter<double>("xmin"),
887  psRes_phi.getParameter<double>("xmax"));
888  resphi_eta1to1p2->setAxisTitle("#phi_{trk} - #phi_{tp}", 1);
889  resphi_eta1to1p2->setAxisTitle("# tracking particles", 2);
890 
891  // Eta 4 (1.2 to 1.6)
892  HistoName = "resphi_eta1p2to1p6";
893  resphi_eta1p2to1p6 = iBooker.book1D(HistoName,
894  HistoName,
895  psRes_phi.getParameter<int32_t>("Nbinsx"),
896  psRes_phi.getParameter<double>("xmin"),
897  psRes_phi.getParameter<double>("xmax"));
898  resphi_eta1p2to1p6->setAxisTitle("#phi_{trk} - #phi_{tp}", 1);
899  resphi_eta1p2to1p6->setAxisTitle("# tracking particles", 2);
900 
901  // Eta 5 (1.6 to 2.0)
902  HistoName = "resphi_eta1p6to2";
903  resphi_eta1p6to2 = iBooker.book1D(HistoName,
904  HistoName,
905  psRes_phi.getParameter<int32_t>("Nbinsx"),
906  psRes_phi.getParameter<double>("xmin"),
907  psRes_phi.getParameter<double>("xmax"));
908  resphi_eta1p6to2->setAxisTitle("#phi_{trk} - #phi_{tp}", 1);
909  resphi_eta1p6to2->setAxisTitle("# tracking particles", 2);
910 
911  // Eta 6 (2.0 to 2.4)
912  HistoName = "resphi_eta2to2p4";
913  resphi_eta2to2p4 = iBooker.book1D(HistoName,
914  HistoName,
915  psRes_phi.getParameter<int32_t>("Nbinsx"),
916  psRes_phi.getParameter<double>("xmin"),
917  psRes_phi.getParameter<double>("xmax"));
918  resphi_eta2to2p4->setAxisTitle("#phi_{trk} - #phi_{tp}", 1);
919  resphi_eta2to2p4->setAxisTitle("# tracking particles", 2);
920 
921  // VtxZ parts (for resolution)
922  // Eta 1 (0 to 0.7)
923  edm::ParameterSet psRes_VtxZ = conf_.getParameter<edm::ParameterSet>("TH1Res_VtxZ");
924  HistoName = "resVtxZ_eta0to0p7";
925  resVtxZ_eta0to0p7 = iBooker.book1D(HistoName,
926  HistoName,
927  psRes_VtxZ.getParameter<int32_t>("Nbinsx"),
928  psRes_VtxZ.getParameter<double>("xmin"),
929  psRes_VtxZ.getParameter<double>("xmax"));
930  resVtxZ_eta0to0p7->setAxisTitle("VtxZ_{trk} - VtxZ_{tp} [cm]", 1);
931  resVtxZ_eta0to0p7->setAxisTitle("# tracking particles", 2);
932 
933  // Eta 2 (0.7 to 1.0)
934  HistoName = "resVtxZ_eta0p7to1";
935  resVtxZ_eta0p7to1 = iBooker.book1D(HistoName,
936  HistoName,
937  psRes_VtxZ.getParameter<int32_t>("Nbinsx"),
938  psRes_VtxZ.getParameter<double>("xmin"),
939  psRes_VtxZ.getParameter<double>("xmax"));
940  resVtxZ_eta0p7to1->setAxisTitle("VtxZ_{trk} - VtxZ_{tp} [cm]", 1);
941  resVtxZ_eta0p7to1->setAxisTitle("# tracking particles", 2);
942 
943  // Eta 3 (1.0 to 1.2)
944  HistoName = "resVtxZ_eta1to1p2";
945  resVtxZ_eta1to1p2 = iBooker.book1D(HistoName,
946  HistoName,
947  psRes_VtxZ.getParameter<int32_t>("Nbinsx"),
948  psRes_VtxZ.getParameter<double>("xmin"),
949  psRes_VtxZ.getParameter<double>("xmax"));
950  resVtxZ_eta1to1p2->setAxisTitle("VtxZ_{trk} - VtxZ_{tp} [cm]", 1);
951  resVtxZ_eta1to1p2->setAxisTitle("# tracking particles", 2);
952 
953  // Eta 4 (1.2 to 1.6)
954  HistoName = "resVtxZ_eta1p2to1p6";
955  resVtxZ_eta1p2to1p6 = iBooker.book1D(HistoName,
956  HistoName,
957  psRes_VtxZ.getParameter<int32_t>("Nbinsx"),
958  psRes_VtxZ.getParameter<double>("xmin"),
959  psRes_VtxZ.getParameter<double>("xmax"));
960  resVtxZ_eta1p2to1p6->setAxisTitle("VtxZ_{trk} - VtxZ_{tp} [cm]", 1);
961  resVtxZ_eta1p2to1p6->setAxisTitle("# tracking particles", 2);
962 
963  // Eta 5 (1.6 to 2.0)
964  HistoName = "resVtxZ_eta1p6to2";
965  resVtxZ_eta1p6to2 = iBooker.book1D(HistoName,
966  HistoName,
967  psRes_VtxZ.getParameter<int32_t>("Nbinsx"),
968  psRes_VtxZ.getParameter<double>("xmin"),
969  psRes_VtxZ.getParameter<double>("xmax"));
970  resVtxZ_eta1p6to2->setAxisTitle("VtxZ_{trk} - VtxZ_{tp} [cm]", 1);
971  resVtxZ_eta1p6to2->setAxisTitle("# tracking particles", 2);
972 
973  // Eta 6 (2.0 to 2.4)
974  HistoName = "resVtxZ_eta2to2p4";
975  resVtxZ_eta2to2p4 = iBooker.book1D(HistoName,
976  HistoName,
977  psRes_VtxZ.getParameter<int32_t>("Nbinsx"),
978  psRes_VtxZ.getParameter<double>("xmin"),
979  psRes_VtxZ.getParameter<double>("xmax"));
980  resVtxZ_eta2to2p4->setAxisTitle("VtxZ_{trk} - VtxZ_{tp} [cm]", 1);
981  resVtxZ_eta2to2p4->setAxisTitle("# tracking particles", 2);
982 
983  // d0 parts (for resolution)
984  // Eta 1 (0 to 0.7)
985  edm::ParameterSet psRes_d0 = conf_.getParameter<edm::ParameterSet>("TH1Res_d0");
986  HistoName = "resd0_eta0to0p7";
987  resd0_eta0to0p7 = iBooker.book1D(HistoName,
988  HistoName,
989  psRes_d0.getParameter<int32_t>("Nbinsx"),
990  psRes_d0.getParameter<double>("xmin"),
991  psRes_d0.getParameter<double>("xmax"));
992  resd0_eta0to0p7->setAxisTitle("d0_{trk} - d0_{tp} [cm]", 1);
993  resd0_eta0to0p7->setAxisTitle("# tracking particles", 2);
994 
995  // Eta 2 (0.7 to 1.0)
996  HistoName = "resd0_eta0p7to1";
997  resd0_eta0p7to1 = iBooker.book1D(HistoName,
998  HistoName,
999  psRes_d0.getParameter<int32_t>("Nbinsx"),
1000  psRes_d0.getParameter<double>("xmin"),
1001  psRes_d0.getParameter<double>("xmax"));
1002  resd0_eta0p7to1->setAxisTitle("d0_{trk} - d0_{tp} [cm]", 1);
1003  resd0_eta0p7to1->setAxisTitle("# tracking particles", 2);
1004 
1005  // Eta 3 (1.0 to 1.2)
1006  HistoName = "resd0_eta1to1p2";
1007  resd0_eta1to1p2 = iBooker.book1D(HistoName,
1008  HistoName,
1009  psRes_d0.getParameter<int32_t>("Nbinsx"),
1010  psRes_d0.getParameter<double>("xmin"),
1011  psRes_d0.getParameter<double>("xmax"));
1012  resd0_eta1to1p2->setAxisTitle("d0_{trk} - d0_{tp} [cm]", 1);
1013  resd0_eta1to1p2->setAxisTitle("# tracking particles", 2);
1014 
1015  // Eta 4 (1.2 to 1.6)
1016  HistoName = "resd0_eta1p2to1p6";
1017  resd0_eta1p2to1p6 = iBooker.book1D(HistoName,
1018  HistoName,
1019  psRes_d0.getParameter<int32_t>("Nbinsx"),
1020  psRes_d0.getParameter<double>("xmin"),
1021  psRes_d0.getParameter<double>("xmax"));
1022  resd0_eta1p2to1p6->setAxisTitle("d0_{trk} - d0_{tp} [cm]", 1);
1023  resd0_eta1p2to1p6->setAxisTitle("# tracking particles", 2);
1024 
1025  // Eta 5 (1.6 to 2.0)
1026  HistoName = "resd0_eta1p6to2";
1027  resd0_eta1p6to2 = iBooker.book1D(HistoName,
1028  HistoName,
1029  psRes_d0.getParameter<int32_t>("Nbinsx"),
1030  psRes_d0.getParameter<double>("xmin"),
1031  psRes_d0.getParameter<double>("xmax"));
1032  resd0_eta1p6to2->setAxisTitle("d0_{trk} - d0_{tp} [cm]", 1);
1033  resd0_eta1p6to2->setAxisTitle("# tracking particles", 2);
1034 
1035  // Eta 6 (2.0 to 2.4)
1036  HistoName = "resd0_eta2to2p4";
1037  resd0_eta2to2p4 = iBooker.book1D(HistoName,
1038  HistoName,
1039  psRes_d0.getParameter<int32_t>("Nbinsx"),
1040  psRes_d0.getParameter<double>("xmin"),
1041  psRes_d0.getParameter<double>("xmax"));
1042  resd0_eta2to2p4->setAxisTitle("d0_{trk} - d0_{tp} [cm]", 1);
1043  resd0_eta2to2p4->setAxisTitle("# tracking particles", 2);
1044 
1045 } // end of method
1046 
const LorentzVector & p4() const
Four-momentum Lorentz vector. Note this is taken from the first SimTrack only.
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
T getParameter(std::string const &) const
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
int pdgId() const
PDG ID.
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
double isum
const Double_t pi
edm::EDGetTokenT< std::vector< TrackingParticle > > trackingParticleToken_
void Fill(long long x)
float charge() const
Electric charge. Note this is taken from the first SimTrack only.
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::EDGetTokenT< TTTrackAssociationMap< Ref_Phase2TrackerDigi_ > > ttTrackMCTruthToken_
T sqrt(T t)
Definition: SSEVec.h:19
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
edm::EDGetTokenT< TTClusterAssociationMap< Ref_Phase2TrackerDigi_ > > ttClusterMCTruthToken_
static constexpr auto TOB
bool isValid() const
Definition: HandleBase.h:70
Class to store the L1 Track Trigger stubs.
Definition: TTStub.h:22
edm::EDGetTokenT< TTStubAssociationMap< Ref_Phase2TrackerDigi_ > > ttStubMCTruthToken_
Definition: DetId.h:17
std::string HistoName
unsigned int layer(const DetId &id) const
void analyze(const edm::Event &, const edm::EventSetup &) override
T get() const
Definition: EventSetup.h:73
static constexpr auto TID
T const * product() const
Definition: ESHandle.h:86
Definition: Run.h:45
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)