CMS 3D CMS Logo

MTVHistoProducerAlgoForTracker.cc
Go to the documentation of this file.
4 
9 
11 
12 #include "TMath.h"
13 #include <TF1.h>
14 
15 using namespace std;
16 
17 namespace {
19 
20  void BinLogX(TH1* h) {
21  TAxis* axis = h->GetXaxis();
22  int bins = axis->GetNbins();
23 
24  float from = axis->GetXmin();
25  float to = axis->GetXmax();
26  float width = (to - from) / bins;
27  std::vector<float> new_bins(bins + 1, 0);
28 
29  for (int i = 0; i <= bins; i++) {
30  new_bins[i] = TMath::Power(10, from + i * width);
31  }
32  axis->Set(bins, new_bins.data());
33  }
34 
35  void BinLogY(TH1* h) {
36  TAxis* axis = h->GetYaxis();
37  int bins = axis->GetNbins();
38 
39  float from = axis->GetXmin();
40  float to = axis->GetXmax();
41  float width = (to - from) / bins;
42  std::vector<float> new_bins(bins + 1, 0);
43 
44  for (int i = 0; i <= bins; i++) {
45  new_bins[i] = TMath::Power(10, from + i * width);
46  }
47  axis->Set(bins, new_bins.data());
48  }
49 
50  template <typename... Args>
51  dqm::reco::MonitorElement* make1DIfLogX(DQMStore::IBooker& ibook, bool logx, Args&&... args) {
52  auto h = std::make_unique<TH1F>(std::forward<Args>(args)...);
53  if (logx)
54  BinLogX(h.get());
55  const auto& name = h->GetName();
56  return ibook.book1D(name, h.release());
57  }
58 
59  template <typename... Args>
60  dqm::reco::MonitorElement* makeProfileIfLogX(DQMStore::IBooker& ibook, bool logx, Args&&... args) {
61  auto h = std::make_unique<TProfile>(std::forward<Args>(args)...);
62  if (logx)
63  BinLogX(h.get());
64  const auto& name = h->GetName();
65  return ibook.bookProfile(name, h.release());
66  }
67 
68  template <typename... Args>
69  dqm::reco::MonitorElement* make2DIfLogX(DQMStore::IBooker& ibook, bool logx, Args&&... args) {
70  auto h = std::make_unique<TH2F>(std::forward<Args>(args)...);
71  if (logx)
72  BinLogX(h.get());
73  const auto& name = h->GetName();
74  return ibook.book2D(name, h.release());
75  }
76 
77  template <typename... Args>
78  dqm::reco::MonitorElement* make2DIfLogY(DQMStore::IBooker& ibook, bool logy, Args&&... args) {
79  auto h = std::make_unique<TH2F>(std::forward<Args>(args)...);
80  if (logy)
81  BinLogY(h.get());
82  const auto& name = h->GetName();
83  return ibook.book2D(name, h.release());
84  }
85 
86  void setBinLabels(dqm::reco::MonitorElement*& h, const std::vector<std::string>& labels) {
87  for (size_t i = 0; i < labels.size(); ++i) {
88  h->setBinLabel(i + 1, labels[i]);
89  }
91  }
92 
93  void setBinLabelsAlgo(dqm::reco::MonitorElement*& h, int axis = 1) {
94  for (size_t i = 0; i < reco::TrackBase::algoSize; ++i) {
95  h->setBinLabel(i + 1, reco::TrackBase::algoName(static_cast<reco::TrackBase::TrackAlgorithm>(i)), axis);
96  }
98  }
99 
100  void fillMVAHistos(const std::vector<dqm::reco::MonitorElement*>& h_mva,
101  const std::vector<dqm::reco::MonitorElement*>& h_mvacut,
102  const std::vector<dqm::reco::MonitorElement*>& h_mva_hp,
103  const std::vector<dqm::reco::MonitorElement*>& h_mvacut_hp,
104  const std::vector<float>& mvas,
105  unsigned int selectsLoose,
106  unsigned int selectsHP) {
107  // Fill MVA1 histos with all tracks, MVA2 histos only with tracks
108  // not selected by MVA1, etc.
109  for (size_t i = 0; i < mvas.size(); ++i) {
110  if (i <= selectsLoose) {
111  h_mva[i]->Fill(mvas[i]);
112  h_mvacut[i]->Fill(mvas[i]);
113  }
114  if (i >= 1 && i <= selectsHP) {
115  h_mva_hp[i]->Fill(mvas[i]);
116  h_mvacut_hp[i]->Fill(mvas[i]);
117  }
118  }
119  }
120 
121  void fillMVAHistos(double xval,
122  const std::vector<dqm::reco::MonitorElement*>& h_mva,
123  const std::vector<dqm::reco::MonitorElement*>& h_mva_hp,
124  const std::vector<float>& mvas,
125  unsigned int selectsLoose,
126  unsigned int selectsHP) {
127  // Fill MVA1 histos with all tracks, MVA2 histos only with tracks
128  // not selected by MVA1, etc.
129  for (size_t i = 0; i < mvas.size(); ++i) {
130  if (i <= selectsLoose) {
131  h_mva[i]->Fill(xval, mvas[i]);
132  }
133  if (i >= 1 && i <= selectsHP) {
134  h_mva_hp[i]->Fill(xval, mvas[i]);
135  }
136  }
137  }
138 } // namespace
139 
141  : doSeedPlots_(doSeedPlots), doMTDPlots_(pset.getUntrackedParameter<bool>("doMTDPlots")) {
142  //parameters for _vs_eta plots
143  minEta = pset.getParameter<double>("minEta");
144  maxEta = pset.getParameter<double>("maxEta");
145  nintEta = pset.getParameter<int>("nintEta");
146  useFabsEta = pset.getParameter<bool>("useFabsEta");
147 
148  //parameters for _vs_pt plots
149  minPt = pset.getParameter<double>("minPt");
150  maxPt = pset.getParameter<double>("maxPt");
151  nintPt = pset.getParameter<int>("nintPt");
152  useInvPt = pset.getParameter<bool>("useInvPt");
153  useLogPt = pset.getUntrackedParameter<bool>("useLogPt", false);
154 
155  //parameters for _vs_Hit plots
156  minHit = pset.getParameter<double>("minHit");
157  maxHit = pset.getParameter<double>("maxHit");
158  nintHit = pset.getParameter<int>("nintHit");
159 
160  //parameters for _vs_Pu plots
161  minPu = pset.getParameter<double>("minPu");
162  maxPu = pset.getParameter<double>("maxPu");
163  nintPu = pset.getParameter<int>("nintPu");
164 
165  //parameters for _vs_Layer plots
166  minLayers = pset.getParameter<double>("minLayers");
167  maxLayers = pset.getParameter<double>("maxLayers");
168  nintLayers = pset.getParameter<int>("nintLayers");
169 
170  //parameters for _vs_phi plots
171  minPhi = pset.getParameter<double>("minPhi");
172  maxPhi = pset.getParameter<double>("maxPhi");
173  nintPhi = pset.getParameter<int>("nintPhi");
174 
175  //parameters for _vs_Dxy plots
176  minDxy = pset.getParameter<double>("minDxy");
177  maxDxy = pset.getParameter<double>("maxDxy");
178  nintDxy = pset.getParameter<int>("nintDxy");
179 
180  //parameters for _vs_Dz plots
181  minDz = pset.getParameter<double>("minDz");
182  maxDz = pset.getParameter<double>("maxDz");
183  nintDz = pset.getParameter<int>("nintDz");
184 
185  dxyDzZoom = pset.getParameter<double>("dxyDzZoom");
186 
187  //parameters for _vs_ProductionVertexTransvPosition plots
188  minVertpos = pset.getParameter<double>("minVertpos");
189  maxVertpos = pset.getParameter<double>("maxVertpos");
190  nintVertpos = pset.getParameter<int>("nintVertpos");
191  useLogVertpos = pset.getUntrackedParameter<bool>("useLogVertpos");
192 
193  //parameters for _vs_ProductionVertexZPosition plots
194  minZpos = pset.getParameter<double>("minZpos");
195  maxZpos = pset.getParameter<double>("maxZpos");
196  nintZpos = pset.getParameter<int>("nintZpos");
197 
198  //parameters for _vs_dR plots
199  mindr = pset.getParameter<double>("mindr");
200  maxdr = pset.getParameter<double>("maxdr");
201  nintdr = pset.getParameter<int>("nintdr");
202 
203  //parameters for _vs_dR_jet plots
204  mindrj = pset.getParameter<double>("mindrj");
205  maxdrj = pset.getParameter<double>("maxdrj");
206  nintdrj = pset.getParameter<int>("nintdrj");
207 
208  // paramers for _vs_chi2 plots
209  minChi2 = pset.getParameter<double>("minChi2");
210  maxChi2 = pset.getParameter<double>("maxChi2");
211  nintChi2 = pset.getParameter<int>("nintChi2");
212 
213  //parameters for dE/dx plots
214  minDeDx = pset.getParameter<double>("minDeDx");
215  maxDeDx = pset.getParameter<double>("maxDeDx");
216  nintDeDx = pset.getParameter<int>("nintDeDx");
217 
218  //parameters for Pileup plots
219  minVertcount = pset.getParameter<double>("minVertcount");
220  maxVertcount = pset.getParameter<double>("maxVertcount");
221  nintVertcount = pset.getParameter<int>("nintVertcount");
222 
223  //parameters for number of tracks plots
224  minTracks = pset.getParameter<double>("minTracks");
225  maxTracks = pset.getParameter<double>("maxTracks");
226  nintTracks = pset.getParameter<int>("nintTracks");
227 
228  //parameters for vs. PV z plots
229  minPVz = pset.getParameter<double>("minPVz");
230  maxPVz = pset.getParameter<double>("maxPVz");
231  nintPVz = pset.getParameter<int>("nintPVz");
232 
233  //parameters for vs. MVA plots
234  minMVA = pset.getParameter<double>("minMVA");
235  maxMVA = pset.getParameter<double>("maxMVA");
236  nintMVA = pset.getParameter<int>("nintMVA");
237 
238  //parameters for resolution plots
239  ptRes_rangeMin = pset.getParameter<double>("ptRes_rangeMin");
240  ptRes_rangeMax = pset.getParameter<double>("ptRes_rangeMax");
241  ptRes_nbin = pset.getParameter<int>("ptRes_nbin");
242 
243  phiRes_rangeMin = pset.getParameter<double>("phiRes_rangeMin");
244  phiRes_rangeMax = pset.getParameter<double>("phiRes_rangeMax");
245  phiRes_nbin = pset.getParameter<int>("phiRes_nbin");
246 
247  cotThetaRes_rangeMin = pset.getParameter<double>("cotThetaRes_rangeMin");
248  cotThetaRes_rangeMax = pset.getParameter<double>("cotThetaRes_rangeMax");
249  cotThetaRes_nbin = pset.getParameter<int>("cotThetaRes_nbin");
250 
251  dxyRes_rangeMin = pset.getParameter<double>("dxyRes_rangeMin");
252  dxyRes_rangeMax = pset.getParameter<double>("dxyRes_rangeMax");
253  dxyRes_nbin = pset.getParameter<int>("dxyRes_nbin");
254 
255  dzRes_rangeMin = pset.getParameter<double>("dzRes_rangeMin");
256  dzRes_rangeMax = pset.getParameter<double>("dzRes_rangeMax");
257  dzRes_nbin = pset.getParameter<int>("dzRes_nbin");
258 
259  maxDzpvCum = pset.getParameter<double>("maxDzpvCumulative");
260  nintDzpvCum = pset.getParameter<int>("nintDzpvCumulative");
261 
262  maxDzpvsigCum = pset.getParameter<double>("maxDzpvsigCumulative");
263  nintDzpvsigCum = pset.getParameter<int>("nintDzpvsigCumulative");
264 
265  //--- tracking particle selectors for efficiency measurements
266  using namespace edm;
267  using namespace reco::modules;
268  auto initTPselector = [&](auto& sel, auto& name) {
269  sel = std::make_unique<TrackingParticleSelector>(
271  };
272  auto initTrackSelector = [&](auto& sel, auto& name) {
274  };
275  auto initGPselector = [&](auto& sel, auto& name) {
276  sel = std::make_unique<GenParticleCustomSelector>(
278  };
279 
280  initTPselector(generalTpSelector, "generalTpSelector");
281  initTPselector(TpSelectorForEfficiencyVsEta, "TpSelectorForEfficiencyVsEta");
282  initTPselector(TpSelectorForEfficiencyVsPhi, "TpSelectorForEfficiencyVsPhi");
283  initTPselector(TpSelectorForEfficiencyVsPt, "TpSelectorForEfficiencyVsPt");
284  initTPselector(TpSelectorForEfficiencyVsVTXR, "TpSelectorForEfficiencyVsVTXR");
285  initTPselector(TpSelectorForEfficiencyVsVTXZ, "TpSelectorForEfficiencyVsVTXZ");
286 
287  initTrackSelector(trackSelectorVsEta, "TpSelectorForEfficiencyVsEta");
288  initTrackSelector(trackSelectorVsPhi, "TpSelectorForEfficiencyVsPhi");
289  initTrackSelector(trackSelectorVsPt, "TpSelectorForEfficiencyVsPt");
290 
291  initGPselector(generalGpSelector, "generalGpSelector");
292  initGPselector(GpSelectorForEfficiencyVsEta, "GpSelectorForEfficiencyVsEta");
293  initGPselector(GpSelectorForEfficiencyVsPhi, "GpSelectorForEfficiencyVsPhi");
294  initGPselector(GpSelectorForEfficiencyVsPt, "GpSelectorForEfficiencyVsPt");
295  initGPselector(GpSelectorForEfficiencyVsVTXR, "GpSelectorForEfficiencyVsVTXR");
296  initGPselector(GpSelectorForEfficiencyVsVTXZ, "GpSelectorForEfficiencyVsVTXZ");
297 
298  // SeedingLayerSets
299  // If enabled, use last bin to denote other or unknown cases
300  seedingLayerSetNames = pset.getParameter<std::vector<std::string>>("seedingLayerSets");
301  std::vector<std::pair<SeedingLayerSetId, std::string>> stripPairSets;
302  if (!seedingLayerSetNames.empty()) {
303  std::vector<std::vector<std::string>> layerSets = SeedingLayerSetsBuilder::layerNamesInSets(seedingLayerSetNames);
304  for (size_t i = 0; i < layerSets.size(); ++i) {
305  const auto& layerSet = layerSets[i];
306  if (layerSet.size() > std::tuple_size<SeedingLayerSetId>::value) {
307  throw cms::Exception("Configuration")
308  << "Got seedingLayerSet " << seedingLayerSetNames[i] << " with " << layerSet.size()
309  << " elements, but I have a hard-coded maximum of " << std::tuple_size<SeedingLayerSetId>::value
310  << ". Please increase the maximum in MTVHistoProducerAlgoForTracker.h";
311  }
312  SeedingLayerSetId setId;
313  for (size_t j = 0; j < layerSet.size(); ++j) {
314  // SeedingLayerSetsBuilder::fillDescriptions() kind-of
315  // suggests that the 'M' prefix stands for strip mono hits
316  // (maybe it should force), so making the assumption here is
317  // (still) a bit ugly. But, this is the easiest way.
318  bool isStripMono = !layerSet[j].empty() && layerSet[j][0] == 'M';
319  setId[j] = std::make_tuple(SeedingLayerSetsBuilder::nameToEnumId(layerSet[j]), isStripMono);
320  }
321  // Account for the fact that strip triplet seeding may give pairs
322  if (layerSet.size() == 3 && isTrackerStrip(std::get<GeomDetEnumerators::SubDetector>(std::get<0>(setId[0])))) {
323  SeedingLayerSetId pairId;
324  pairId[0] = setId[0];
325  pairId[1] = setId[1];
326  stripPairSets.emplace_back(pairId, layerSet[0] + "+" + layerSet[1]);
327  }
328 
329  auto inserted = seedingLayerSetToBin.insert(std::make_pair(setId, i));
330  if (!inserted.second)
331  throw cms::Exception("Configuration") << "SeedingLayerSet " << seedingLayerSetNames[i]
332  << " is specified twice, while the set list should be unique.";
333  }
334 
335  // Add the "strip pairs from strip triplets" if they don't otherwise exist
336  for (const auto& setIdName : stripPairSets) {
337  auto inserted = seedingLayerSetToBin.insert(std::make_pair(setIdName.first, seedingLayerSetNames.size()));
338  if (inserted.second)
339  seedingLayerSetNames.push_back(setIdName.second);
340  }
341 
342  seedingLayerSetNames.emplace_back("Other/Unknown");
343  }
344 
345  // fix for the LogScale by Ryan
346  if (useLogPt) {
347  maxPt = log10(maxPt);
348  if (minPt > 0) {
349  minPt = log10(minPt);
350  } else {
351  edm::LogWarning("MultiTrackValidator")
352  << "minPt = " << minPt << " <= 0 out of range while requesting log scale. Using minPt = 0.1.";
353  minPt = log10(0.1);
354  }
355  }
356  if (useLogVertpos) {
357  maxVertpos = std::log10(maxVertpos);
358  if (minVertpos > 0) {
359  minVertpos = std::log10(minVertpos);
360  } else {
361  edm::LogWarning("MultiTrackValidator")
362  << "minVertpos = " << minVertpos << " <= 0 out of range while requesting log scale. Using minVertpos = 0.1.";
363  minVertpos = -1;
364  }
365  }
366 }
367 
369 
371  const edm::ParameterSet& pset) {
372  edm::ParameterSet psetTrack;
373  psetTrack.copyForModify(pset);
374  psetTrack.eraseSimpleParameter("minHit");
375  psetTrack.eraseSimpleParameter("signalOnly");
376  psetTrack.eraseSimpleParameter("intimeOnly");
377  psetTrack.eraseSimpleParameter("chargedOnly");
378  psetTrack.eraseSimpleParameter("stableOnly");
379  psetTrack.addParameter("maxChi2", 1e10);
380  psetTrack.addParameter("minHit", 0);
381  psetTrack.addParameter("minPixelHit", 0);
382  psetTrack.addParameter("minLayer", 0);
383  psetTrack.addParameter("min3DLayer", 0);
384  psetTrack.addParameter("quality", std::vector<std::string>{});
385  psetTrack.addParameter("algorithm", std::vector<std::string>{});
386  psetTrack.addParameter("originalAlgorithm", std::vector<std::string>{});
387  psetTrack.addParameter("algorithmMaskContains", std::vector<std::string>{});
388  psetTrack.addParameter("invertRapidityCut", false);
389  psetTrack.addParameter("minPhi", -3.2);
390  psetTrack.addParameter("maxPhi", 3.2);
391  return std::make_unique<RecoTrackSelectorBase>(psetTrack);
392 }
393 
395  histograms.h_ptSIM = make1DIfLogX(ibook, useLogPt, "ptSIM", "generated p_{t}", nintPt, minPt, maxPt);
396  histograms.h_etaSIM = ibook.book1D("etaSIM", "generated pseudorapidity", nintEta, minEta, maxEta);
397  histograms.h_tracksSIM =
398  ibook.book1D("tracksSIM", "number of simulated tracks", nintTracks, minTracks, maxTracks * 10);
399  histograms.h_vertposSIM =
400  ibook.book1D("vertposSIM", "Transverse position of sim vertices", nintVertpos, minVertpos, maxVertpos);
401  histograms.h_bunchxSIM = ibook.book1D("bunchxSIM", "bunch crossing", 21, -15.5, 5.5);
402 }
403 
406  bool doResolutionPlots) {
407  histograms.h_assoceta.push_back(
408  ibook.book1D("num_assoc(simToReco)_eta", "N of associated tracks (simToReco) vs eta", nintEta, minEta, maxEta));
409  histograms.h_simuleta.push_back(
410  ibook.book1D("num_simul_eta", "N of simulated tracks vs eta", nintEta, minEta, maxEta));
411 
412  histograms.h_assocpT.push_back(make1DIfLogX(
413  ibook, useLogPt, "num_assoc(simToReco)_pT", "N of associated tracks (simToReco) vs pT", nintPt, minPt, maxPt));
414  histograms.h_simulpT.push_back(
415  make1DIfLogX(ibook, useLogPt, "num_simul_pT", "N of simulated tracks vs pT", nintPt, minPt, maxPt));
416 
417  histograms.h_assocpTvseta.push_back(make2DIfLogY(ibook,
418  useLogPt,
419  "num_assoc(simToReco)_pTvseta",
420  "N of associated tracks (simToReco) in (pT-eta) please",
421  nintEta,
422  minEta,
423  maxEta,
424  nintPt,
425  minPt,
426  maxPt));
427  histograms.h_simulpTvseta.push_back(make2DIfLogY(ibook,
428  useLogPt,
429  "num_simul_pTvseta",
430  "N of simulated tracks in (pT-eta) plane",
431  nintEta,
432  minEta,
433  maxEta,
434  nintPt,
435  minPt,
436  maxPt));
437 
438  histograms.h_assochit.push_back(
439  ibook.book1D("num_assoc(simToReco)_hit", "N of associated tracks (simToReco) vs hit", nintHit, minHit, maxHit));
440  histograms.h_simulhit.push_back(
441  ibook.book1D("num_simul_hit", "N of simulated tracks vs hit", nintHit, minHit, maxHit));
442 
443  histograms.h_assoclayer.push_back(ibook.book1D(
444  "num_assoc(simToReco)_layer", "N of associated tracks (simToReco) vs layer", nintLayers, minLayers, maxLayers));
445  histograms.h_simullayer.push_back(
446  ibook.book1D("num_simul_layer", "N of simulated tracks vs layer", nintLayers, minLayers, maxLayers));
447 
448  histograms.h_assocpixellayer.push_back(ibook.book1D("num_assoc(simToReco)_pixellayer",
449  "N of associated tracks (simToReco) vs pixel layer",
450  nintLayers,
451  minLayers,
452  maxLayers));
453  histograms.h_simulpixellayer.push_back(
454  ibook.book1D("num_simul_pixellayer", "N of simulated tracks vs pixel layer", nintLayers, minLayers, maxLayers));
455 
456  histograms.h_assoc3Dlayer.push_back(ibook.book1D("num_assoc(simToReco)_3Dlayer",
457  "N of associated tracks (simToReco) vs 3D layer",
458  nintLayers,
459  minLayers,
460  maxLayers));
461  histograms.h_simul3Dlayer.push_back(
462  ibook.book1D("num_simul_3Dlayer", "N of simulated tracks vs 3D layer", nintLayers, minLayers, maxLayers));
463 
464  histograms.h_assocpu.push_back(
465  ibook.book1D("num_assoc(simToReco)_pu", "N of associated tracks (simToReco) vs pu", nintPu, minPu, maxPu));
466  histograms.h_simulpu.push_back(ibook.book1D("num_simul_pu", "N of simulated tracks vs pu", nintPu, minPu, maxPu));
467 
468  histograms.h_assocphi.push_back(
469  ibook.book1D("num_assoc(simToReco)_phi", "N of associated tracks (simToReco) vs phi", nintPhi, minPhi, maxPhi));
470  histograms.h_simulphi.push_back(
471  ibook.book1D("num_simul_phi", "N of simulated tracks vs phi", nintPhi, minPhi, maxPhi));
472 
473  histograms.h_assocdxy.push_back(
474  ibook.book1D("num_assoc(simToReco)_dxy", "N of associated tracks (simToReco) vs dxy", nintDxy, minDxy, maxDxy));
475  histograms.h_simuldxy.push_back(
476  ibook.book1D("num_simul_dxy", "N of simulated tracks vs dxy", nintDxy, minDxy, maxDxy));
477 
478  histograms.h_assocdz.push_back(
479  ibook.book1D("num_assoc(simToReco)_dz", "N of associated tracks (simToReco) vs dz", nintDz, minDz, maxDz));
480  histograms.h_simuldz.push_back(ibook.book1D("num_simul_dz", "N of simulated tracks vs dz", nintDz, minDz, maxDz));
481 
482  histograms.h_assocvertpos.push_back(make1DIfLogX(ibook,
484  "num_assoc(simToReco)_vertpos",
485  "N of associated tracks (simToReco) vs transverse vert position",
486  nintVertpos,
487  minVertpos,
488  maxVertpos));
489  histograms.h_simulvertpos.push_back(make1DIfLogX(ibook,
491  "num_simul_vertpos",
492  "N of simulated tracks vs transverse vert position",
493  nintVertpos,
494  minVertpos,
495  maxVertpos));
496 
497  histograms.h_assoczpos.push_back(ibook.book1D(
498  "num_assoc(simToReco)_zpos", "N of associated tracks (simToReco) vs z vert position", nintZpos, minZpos, maxZpos));
499  histograms.h_simulzpos.push_back(
500  ibook.book1D("num_simul_zpos", "N of simulated tracks vs z vert position", nintZpos, minZpos, maxZpos));
501 
502  histograms.h_assocdr.push_back(make1DIfLogX(ibook,
503  true,
504  "num_assoc(simToReco)_dr",
505  "N of associated tracks (simToReco) vs dR",
506  nintdr,
507  log10(mindr),
508  log10(maxdr)));
509  histograms.h_simuldr.push_back(
510  make1DIfLogX(ibook, true, "num_simul_dr", "N of simulated tracks vs dR", nintdr, log10(mindr), log10(maxdr)));
511 
512  histograms.h_assocdrj.push_back(make1DIfLogX(ibook,
513  true,
514  "num_assoc(simToReco)_drj",
515  "N of associated tracks (simToReco) vs dR(TP,jet)",
516  nintdrj,
517  log10(mindrj),
518  log10(maxdrj)));
519  histograms.h_simuldrj.push_back(make1DIfLogX(
520  ibook, true, "num_simul_drj", "N of simulated tracks vs dR(TP,jet)", nintdrj, log10(mindrj), log10(maxdrj)));
521 
522  histograms.h_simul_simpvz.push_back(
523  ibook.book1D("num_simul_simpvz", "N of simulated tracks vs. sim PV z", nintPVz, minPVz, maxPVz));
524  histograms.h_assoc_simpvz.push_back(ibook.book1D(
525  "num_assoc(simToReco)_simpvz", "N of associated tracks (simToReco) vs. sim PV z", nintPVz, minPVz, maxPVz));
526 
527  histograms.nrecHit_vs_nsimHit_sim2rec.push_back(doResolutionPlots ? ibook.book2D("nrecHit_vs_nsimHit_sim2rec",
528  "nrecHit vs nsimHit (Sim2RecAssoc)",
529  nintHit,
530  minHit,
531  maxHit,
532  nintHit,
533  minHit,
534  maxHit)
535  : nullptr);
536 
537  // TODO: use the dynamic track algo priority order also here
538  constexpr auto nalgos = reco::TrackBase::algoSize;
539  histograms.h_duplicates_oriAlgo_vs_oriAlgo.push_back(ibook.book2D("duplicates_oriAlgo_vs_oriAlgo",
540  "Duplicate tracks: originalAlgo vs originalAlgo",
541  nalgos,
542  0,
543  nalgos,
544  nalgos,
545  0,
546  nalgos));
547  setBinLabelsAlgo(histograms.h_duplicates_oriAlgo_vs_oriAlgo.back(), 1);
548  setBinLabelsAlgo(histograms.h_duplicates_oriAlgo_vs_oriAlgo.back(), 2);
549 }
550 
552  histograms.h_assocdxypv.push_back(ibook.book1D(
553  "num_assoc(simToReco)_dxypv", "N of associated tracks (simToReco) vs dxy(PV)", nintDxy, minDxy, maxDxy));
554  histograms.h_simuldxypv.push_back(
555  ibook.book1D("num_simul_dxypv", "N of simulated tracks vs dxy(PV)", nintDxy, minDxy, maxDxy));
556 
557  histograms.h_assocdzpv.push_back(
558  ibook.book1D("num_assoc(simToReco)_dzpv", "N of associated tracks (simToReco) vs dz(PV)", nintDz, minDz, maxDz));
559  histograms.h_simuldzpv.push_back(
560  ibook.book1D("num_simul_dzpv", "N of simulated tracks vs dz(PV)", nintDz, minDz, maxDz));
561 
562  histograms.h_assocdxypvzoomed.push_back(ibook.book1D("num_assoc(simToReco)_dxypv_zoomed",
563  "N of associated tracks (simToReco) vs dxy(PV)",
564  nintDxy,
565  minDxy / dxyDzZoom,
566  maxDxy / dxyDzZoom));
567  histograms.h_simuldxypvzoomed.push_back(ibook.book1D(
568  "num_simul_dxypv_zoomed", "N of simulated tracks vs dxy(PV)", nintDxy, minDxy / dxyDzZoom, maxDxy / dxyDzZoom));
569 
570  histograms.h_assocdzpvzoomed.push_back(ibook.book1D("num_assoc(simToReco)_dzpv_zoomed",
571  "N of associated tracks (simToReco) vs dz(PV)",
572  nintDz,
573  minDz / dxyDzZoom,
574  maxDz / dxyDzZoom));
575  histograms.h_simuldzpvzoomed.push_back(ibook.book1D(
576  "num_simul_dzpv_zoomed", "N of simulated tracks vs dz(PV)", nintDz, minDz / dxyDzZoom, maxDz / dxyDzZoom));
577 
578  histograms.h_assoc_dzpvcut.push_back(ibook.book1D(
579  "num_assoc(simToReco)_dzpvcut", "N of associated tracks (simToReco) vs dz(PV)", nintDzpvCum, 0, maxDzpvCum));
580  histograms.h_simul_dzpvcut.push_back(
581  ibook.book1D("num_simul_dzpvcut", "N of simulated tracks from sim PV", nintDzpvCum, 0, maxDzpvCum));
582  histograms.h_simul2_dzpvcut.push_back(ibook.book1D(
583  "num_simul2_dzpvcut", "N of simulated tracks (associated to any track) from sim PV", nintDzpvCum, 0, maxDzpvCum));
584 
585  histograms.h_assoc_dzpvcut_pt.push_back(ibook.book1D("num_assoc(simToReco)_dzpvcut_pt",
586  "#sump_{T} of associated tracks (simToReco) vs dz(PV)",
587  nintDzpvCum,
588  0,
589  maxDzpvCum));
590  histograms.h_simul_dzpvcut_pt.push_back(
591  ibook.book1D("num_simul_dzpvcut_pt", "#sump_{T} of simulated tracks from sim PV", nintDzpvCum, 0, maxDzpvCum));
592  histograms.h_simul2_dzpvcut_pt.push_back(
593  ibook.book1D("num_simul2_dzpvcut_pt",
594  "#sump_{T} of simulated tracks (associated to any track) from sim PV",
595  nintDzpvCum,
596  0,
597  maxDzpvCum));
598  histograms.h_assoc_dzpvcut_pt.back()->enableSumw2();
599  histograms.h_simul_dzpvcut_pt.back()->enableSumw2();
600  histograms.h_simul2_dzpvcut_pt.back()->enableSumw2();
601 
602  histograms.h_assoc_dzpvsigcut.push_back(ibook.book1D("num_assoc(simToReco)_dzpvsigcut",
603  "N of associated tracks (simToReco) vs dz(PV)/dzError",
605  0,
606  maxDzpvsigCum));
607  histograms.h_simul_dzpvsigcut.push_back(ibook.book1D(
608  "num_simul_dzpvsigcut", "N of simulated tracks from sim PV/dzError", nintDzpvsigCum, 0, maxDzpvsigCum));
609  histograms.h_simul2_dzpvsigcut.push_back(
610  ibook.book1D("num_simul2_dzpvsigcut",
611  "N of simulated tracks (associated to any track) from sim PV/dzError",
613  0,
614  maxDzpvsigCum));
615 
616  histograms.h_assoc_dzpvsigcut_pt.push_back(
617  ibook.book1D("num_assoc(simToReco)_dzpvsigcut_pt",
618  "#sump_{T} of associated tracks (simToReco) vs dz(PV)/dzError",
620  0,
621  maxDzpvsigCum));
622  histograms.h_simul_dzpvsigcut_pt.push_back(ibook.book1D(
623  "num_simul_dzpvsigcut_pt", "#sump_{T} of simulated tracks from sim PV/dzError", nintDzpvsigCum, 0, maxDzpvsigCum));
624  histograms.h_simul2_dzpvsigcut_pt.push_back(
625  ibook.book1D("num_simul2_dzpvsigcut_pt",
626  "#sump_{T} of simulated tracks (associated to any track) from sim PV/dzError",
628  0,
629  maxDzpvsigCum));
630  histograms.h_assoc_dzpvsigcut_pt.back()->enableSumw2();
631  histograms.h_simul_dzpvsigcut_pt.back()->enableSumw2();
632  histograms.h_simul2_dzpvsigcut_pt.back()->enableSumw2();
633 }
634 
637  bool doResolutionPlots) {
638  histograms.h_tracks.push_back(
639  ibook.book1D("tracks", "number of reconstructed tracks", nintTracks, minTracks, maxTracks));
640  histograms.h_fakes.push_back(ibook.book1D("fakes", "number of fake reco tracks", nintTracks, minTracks, maxTracks));
641  histograms.h_charge.push_back(ibook.book1D("charge", "charge", 3, -1.5, 1.5));
642 
643  histograms.h_hits.push_back(ibook.book1D("hits", "number of hits per track", nintHit, minHit, maxHit));
644  histograms.h_losthits.push_back(ibook.book1D("losthits", "number of lost hits per track", nintHit, minHit, maxHit));
645  histograms.h_nchi2.push_back(ibook.book1D("chi2", "normalized #chi^{2}", 200, 0, 20));
646  histograms.h_nchi2_prob.push_back(ibook.book1D("chi2_prob", "normalized #chi^{2} probability", 100, 0, 1));
647 
648  histograms.h_nmisslayers_inner.push_back(
649  ibook.book1D("missing_inner_layers", "number of missing inner layers", nintLayers, minLayers, maxLayers));
650  histograms.h_nmisslayers_outer.push_back(
651  ibook.book1D("missing_outer_layers", "number of missing outer layers", nintLayers, minLayers, maxLayers));
652 
653  histograms.h_algo.push_back(
654  ibook.book1D("h_algo", "Tracks by algo", reco::TrackBase::algoSize, 0., double(reco::TrackBase::algoSize)));
655  for (size_t ibin = 0; ibin < reco::TrackBase::algoSize - 1; ibin++)
656  histograms.h_algo.back()->setBinLabel(ibin + 1, reco::TrackBase::algoNames[ibin]);
657  histograms.h_algo.back()->disableAlphanumeric();
658 
660  histograms.h_recoeta.push_back(ibook.book1D("num_reco_eta", "N of reco track vs eta", nintEta, minEta, maxEta));
661  histograms.h_reco2eta.push_back(
662  ibook.book1D("num_reco2_eta", "N of selected reco track vs eta", nintEta, minEta, maxEta));
663  histograms.h_assoc2eta.push_back(
664  ibook.book1D("num_assoc(recoToSim)_eta", "N of associated (recoToSim) tracks vs eta", nintEta, minEta, maxEta));
665  histograms.h_loopereta.push_back(ibook.book1D(
666  "num_duplicate_eta", "N of associated (recoToSim) duplicate tracks vs eta", nintEta, minEta, maxEta));
667  if (!doSeedPlots_)
668  histograms.h_misideta.push_back(ibook.book1D(
669  "num_chargemisid_eta", "N of associated (recoToSim) charge misIDed tracks vs eta", nintEta, minEta, maxEta));
670  histograms.h_pileupeta.push_back(
671  ibook.book1D("num_pileup_eta", "N of associated (recoToSim) pileup tracks vs eta", nintEta, minEta, maxEta));
672  //
673  histograms.h_recopT.push_back(
674  make1DIfLogX(ibook, useLogPt, "num_reco_pT", "N of reco track vs pT", nintPt, minPt, maxPt));
675  histograms.h_reco2pT.push_back(
676  make1DIfLogX(ibook, useLogPt, "num_reco2_pT", "N of selected reco track vs pT", nintPt, minPt, maxPt));
677  histograms.h_assoc2pT.push_back(make1DIfLogX(
678  ibook, useLogPt, "num_assoc(recoToSim)_pT", "N of associated (recoToSim) tracks vs pT", nintPt, minPt, maxPt));
679  histograms.h_looperpT.push_back(make1DIfLogX(
680  ibook, useLogPt, "num_duplicate_pT", "N of associated (recoToSim) duplicate tracks vs pT", nintPt, minPt, maxPt));
681  if (!doSeedPlots_)
682  histograms.h_misidpT.push_back(make1DIfLogX(ibook,
683  useLogPt,
684  "num_chargemisid_pT",
685  "N of associated (recoToSim) charge misIDed tracks vs pT",
686  nintPt,
687  minPt,
688  maxPt));
689  histograms.h_pileuppT.push_back(make1DIfLogX(
690  ibook, useLogPt, "num_pileup_pT", "N of associated (recoToSim) pileup tracks vs pT", nintPt, minPt, maxPt));
691  //
692  histograms.h_recopTvseta.push_back(make2DIfLogY(ibook,
693  useLogPt,
694  "num_reco_pTvseta",
695  "N of reco track in (pT-eta) plane",
696  nintEta,
697  minEta,
698  maxEta,
699  nintPt,
700  minPt,
701  maxPt));
702  histograms.h_reco2pTvseta.push_back(make2DIfLogY(ibook,
703  useLogPt,
704  "num_reco2_pTvseta",
705  "N of selected reco track in (pT-eta) plane",
706  nintEta,
707  minEta,
708  maxEta,
709  nintPt,
710  minPt,
711  maxPt));
712  histograms.h_assoc2pTvseta.push_back(make2DIfLogY(ibook,
713  useLogPt,
714  "num_assoc(recoToSim)_pTvseta",
715  "N of associated (recoToSim) tracks in (pT-eta) plane",
716  nintEta,
717  minEta,
718  maxEta,
719  nintPt,
720  minPt,
721  maxPt));
722  histograms.h_looperpTvseta.push_back(make2DIfLogY(ibook,
723  useLogPt,
724  "num_duplicate_pTvseta",
725  "N of associated (recoToSim) duplicate tracks in (pT-eta) plane",
726  nintEta,
727  minEta,
728  maxEta,
729  nintPt,
730  minPt,
731  maxPt));
732  if (!doSeedPlots_)
733  histograms.h_misidpTvseta.push_back(
734  make2DIfLogY(ibook,
735  useLogPt,
736  "num_chargemisid_pTvseta",
737  "N of associated (recoToSim) charge misIDed tracks in (pT-eta) plane",
738  nintEta,
739  minEta,
740  maxEta,
741  nintPt,
742  minPt,
743  maxPt));
744  histograms.h_pileuppTvseta.push_back(make2DIfLogY(ibook,
745  useLogPt,
746  "num_pileup_pTvseta",
747  "N of associated (recoToSim) pileup tracks in (pT-eta) plane",
748  nintEta,
749  minEta,
750  maxEta,
751  nintPt,
752  minPt,
753  maxPt));
754  //
755  histograms.h_recohit.push_back(ibook.book1D("num_reco_hit", "N of reco track vs hit", nintHit, minHit, maxHit));
756  histograms.h_assoc2hit.push_back(
757  ibook.book1D("num_assoc(recoToSim)_hit", "N of associated (recoToSim) tracks vs hit", nintHit, minHit, maxHit));
758  histograms.h_looperhit.push_back(ibook.book1D(
759  "num_duplicate_hit", "N of associated (recoToSim) duplicate tracks vs hit", nintHit, minHit, maxHit));
760  if (!doSeedPlots_)
761  histograms.h_misidhit.push_back(ibook.book1D(
762  "num_chargemisid_hit", "N of associated (recoToSim) charge misIDed tracks vs hit", nintHit, minHit, maxHit));
763  histograms.h_pileuphit.push_back(
764  ibook.book1D("num_pileup_hit", "N of associated (recoToSim) pileup tracks vs hit", nintHit, minHit, maxHit));
765  //
766  histograms.h_recolayer.push_back(
767  ibook.book1D("num_reco_layer", "N of reco track vs layer", nintLayers, minLayers, maxLayers));
768  histograms.h_assoc2layer.push_back(ibook.book1D(
769  "num_assoc(recoToSim)_layer", "N of associated (recoToSim) tracks vs layer", nintLayers, minLayers, maxLayers));
770  histograms.h_looperlayer.push_back(ibook.book1D(
771  "num_duplicate_layer", "N of associated (recoToSim) duplicate tracks vs layer", nintLayers, minLayers, maxLayers));
772  if (!doSeedPlots_)
773  histograms.h_misidlayer.push_back(ibook.book1D("num_chargemisid_layer",
774  "N of associated (recoToSim) charge misIDed tracks vs layer",
775  nintLayers,
776  minLayers,
777  maxLayers));
778  histograms.h_pileuplayer.push_back(ibook.book1D(
779  "num_pileup_layer", "N of associated (recoToSim) pileup tracks vs layer", nintLayers, minLayers, maxLayers));
780  //
781  histograms.h_recopixellayer.push_back(
782  ibook.book1D("num_reco_pixellayer", "N of reco track vs pixellayer", nintLayers, minLayers, maxLayers));
783  histograms.h_assoc2pixellayer.push_back(ibook.book1D("num_assoc(recoToSim)_pixellayer",
784  "N of associated (recoToSim) tracks vs pixellayer",
785  nintLayers,
786  minLayers,
787  maxLayers));
788  histograms.h_looperpixellayer.push_back(ibook.book1D("num_duplicate_pixellayer",
789  "N of associated (recoToSim) duplicate tracks vs pixellayer",
790  nintLayers,
791  minLayers,
792  maxLayers));
793  if (!doSeedPlots_)
794  histograms.h_misidpixellayer.push_back(
795  ibook.book1D("num_chargemisid_pixellayer",
796  "N of associated (recoToSim) charge misIDed tracks vs pixellayer",
797  nintLayers,
798  minLayers,
799  maxLayers));
800  histograms.h_pileuppixellayer.push_back(ibook.book1D("num_pileup_pixellayer",
801  "N of associated (recoToSim) pileup tracks vs pixellayer",
802  nintLayers,
803  minLayers,
804  maxLayers));
805  //
806  histograms.h_reco3Dlayer.push_back(
807  ibook.book1D("num_reco_3Dlayer", "N of reco track vs 3D layer", nintLayers, minLayers, maxLayers));
808  histograms.h_assoc23Dlayer.push_back(ibook.book1D("num_assoc(recoToSim)_3Dlayer",
809  "N of associated (recoToSim) tracks vs 3D layer",
810  nintLayers,
811  minLayers,
812  maxLayers));
813  histograms.h_looper3Dlayer.push_back(ibook.book1D("num_duplicate_3Dlayer",
814  "N of associated (recoToSim) duplicate tracks vs 3D layer",
815  nintLayers,
816  minLayers,
817  maxLayers));
818  if (!doSeedPlots_)
819  histograms.h_misid3Dlayer.push_back(ibook.book1D("num_chargemisid_3Dlayer",
820  "N of associated (recoToSim) charge misIDed tracks vs 3D layer",
821  nintLayers,
822  minLayers,
823  maxLayers));
824  histograms.h_pileup3Dlayer.push_back(ibook.book1D(
825  "num_pileup_3Dlayer", "N of associated (recoToSim) pileup tracks vs 3D layer", nintLayers, minLayers, maxLayers));
826  //
827  histograms.h_recopu.push_back(ibook.book1D("num_reco_pu", "N of reco track vs pu", nintPu, minPu, maxPu));
828  histograms.h_reco2pu.push_back(ibook.book1D("num_reco2_pu", "N of selected reco track vs pu", nintPu, minPu, maxPu));
829  histograms.h_assoc2pu.push_back(
830  ibook.book1D("num_assoc(recoToSim)_pu", "N of associated (recoToSim) tracks vs pu", nintPu, minPu, maxPu));
831  histograms.h_looperpu.push_back(
832  ibook.book1D("num_duplicate_pu", "N of associated (recoToSim) duplicate tracks vs pu", nintPu, minPu, maxPu));
833  if (!doSeedPlots_)
834  histograms.h_misidpu.push_back(ibook.book1D(
835  "num_chargemisid_pu", "N of associated (recoToSim) charge misIDed tracks vs pu", nintPu, minPu, maxPu));
836  histograms.h_pileuppu.push_back(
837  ibook.book1D("num_pileup_pu", "N of associated (recoToSim) pileup tracks vs pu", nintPu, minPu, maxPu));
838  //
839  histograms.h_recophi.push_back(ibook.book1D("num_reco_phi", "N of reco track vs phi", nintPhi, minPhi, maxPhi));
840  histograms.h_assoc2phi.push_back(
841  ibook.book1D("num_assoc(recoToSim)_phi", "N of associated (recoToSim) tracks vs phi", nintPhi, minPhi, maxPhi));
842  histograms.h_looperphi.push_back(ibook.book1D(
843  "num_duplicate_phi", "N of associated (recoToSim) duplicate tracks vs phi", nintPhi, minPhi, maxPhi));
844  if (!doSeedPlots_)
845  histograms.h_misidphi.push_back(ibook.book1D(
846  "num_chargemisid_phi", "N of associated (recoToSim) charge misIDed tracks vs phi", nintPhi, minPhi, maxPhi));
847  histograms.h_pileupphi.push_back(
848  ibook.book1D("num_pileup_phi", "N of associated (recoToSim) pileup tracks vs phi", nintPhi, minPhi, maxPhi));
849 
850  histograms.h_recodxy.push_back(ibook.book1D("num_reco_dxy", "N of reco track vs dxy", nintDxy, minDxy, maxDxy));
851  histograms.h_assoc2dxy.push_back(
852  ibook.book1D("num_assoc(recoToSim)_dxy", "N of associated (recoToSim) tracks vs dxy", nintDxy, minDxy, maxDxy));
853  histograms.h_looperdxy.push_back(
854  ibook.book1D("num_duplicate_dxy", "N of associated (recoToSim) looper tracks vs dxy", nintDxy, minDxy, maxDxy));
855  if (!doSeedPlots_)
856  histograms.h_misiddxy.push_back(ibook.book1D(
857  "num_chargemisid_dxy", "N of associated (recoToSim) charge misIDed tracks vs dxy", nintDxy, minDxy, maxDxy));
858  histograms.h_pileupdxy.push_back(
859  ibook.book1D("num_pileup_dxy", "N of associated (recoToSim) pileup tracks vs dxy", nintDxy, minDxy, maxDxy));
860 
861  histograms.h_recodz.push_back(ibook.book1D("num_reco_dz", "N of reco track vs dz", nintDz, minDz, maxDz));
862  histograms.h_assoc2dz.push_back(
863  ibook.book1D("num_assoc(recoToSim)_dz", "N of associated (recoToSim) tracks vs dz", nintDz, minDz, maxDz));
864  histograms.h_looperdz.push_back(
865  ibook.book1D("num_duplicate_dz", "N of associated (recoToSim) looper tracks vs dz", nintDz, minDz, maxDz));
866  if (!doSeedPlots_)
867  histograms.h_misiddz.push_back(ibook.book1D(
868  "num_chargemisid_versus_dz", "N of associated (recoToSim) charge misIDed tracks vs dz", nintDz, minDz, maxDz));
869  histograms.h_pileupdz.push_back(
870  ibook.book1D("num_pileup_dz", "N of associated (recoToSim) pileup tracks vs dz", nintDz, minDz, maxDz));
871 
872  histograms.h_recovertpos.push_back(make1DIfLogX(ibook,
874  "num_reco_vertpos",
875  "N of reconstructed tracks vs transverse ref point position",
876  nintVertpos,
877  minVertpos,
878  maxVertpos));
879  histograms.h_assoc2vertpos.push_back(
880  make1DIfLogX(ibook,
882  "num_assoc(recoToSim)_vertpos",
883  "N of associated (recoToSim) tracks vs transverse ref point position",
884  nintVertpos,
885  minVertpos,
886  maxVertpos));
887  histograms.h_loopervertpos.push_back(
888  make1DIfLogX(ibook,
890  "num_duplicate_vertpos",
891  "N of associated (recoToSim) looper tracks vs transverse ref point position",
892  nintVertpos,
893  minVertpos,
894  maxVertpos));
895  histograms.h_pileupvertpos.push_back(
896  make1DIfLogX(ibook,
898  "num_pileup_vertpos",
899  "N of associated (recoToSim) pileup tracks vs transverse ref point position",
900  nintVertpos,
901  minVertpos,
902  maxVertpos));
903 
904  histograms.h_recozpos.push_back(ibook.book1D(
905  "num_reco_zpos", "N of reconstructed tracks vs transverse ref point position", nintZpos, minZpos, maxZpos));
906  histograms.h_assoc2zpos.push_back(ibook.book1D("num_assoc(recoToSim)_zpos",
907  "N of associated (recoToSim) tracks vs transverse ref point position",
908  nintZpos,
909  minZpos,
910  maxZpos));
911  histograms.h_looperzpos.push_back(
912  ibook.book1D("num_duplicate_zpos",
913  "N of associated (recoToSim) looper tracks vs transverse ref point position",
914  nintZpos,
915  minZpos,
916  maxZpos));
917  histograms.h_pileupzpos.push_back(
918  ibook.book1D("num_pileup_zpos",
919  "N of associated (recoToSim) pileup tracks vs transverse ref point position",
920  nintZpos,
921  minZpos,
922  maxZpos));
923 
924  histograms.h_recodr.push_back(
925  make1DIfLogX(ibook, true, "num_reco_dr", "N of reconstructed tracks vs dR", nintdr, log10(mindr), log10(maxdr)));
926  histograms.h_assoc2dr.push_back(make1DIfLogX(ibook,
927  true,
928  "num_assoc(recoToSim)_dr",
929  "N of associated tracks (recoToSim) vs dR",
930  nintdr,
931  log10(mindr),
932  log10(maxdr)));
933  histograms.h_looperdr.push_back(make1DIfLogX(ibook,
934  true,
935  "num_duplicate_dr",
936  "N of associated (recoToSim) looper tracks vs dR",
937  nintdr,
938  log10(mindr),
939  log10(maxdr)));
940  histograms.h_pileupdr.push_back(make1DIfLogX(ibook,
941  true,
942  "num_pileup_dr",
943  "N of associated (recoToSim) pileup tracks vs dR",
944  nintdr,
945  log10(mindr),
946  log10(maxdr)));
947 
948  histograms.h_recodrj.push_back(make1DIfLogX(
949  ibook, true, "num_reco_drj", "N of reconstructed tracks vs dR(track,jet)", nintdrj, log10(mindrj), log10(maxdrj)));
950  histograms.h_assoc2drj.push_back(make1DIfLogX(ibook,
951  true,
952  "num_assoc(recoToSim)_drj",
953  "N of associated tracks (recoToSim) vs dR(track,jet)",
954  nintdrj,
955  log10(mindrj),
956  log10(maxdrj)));
957  histograms.h_looperdrj.push_back(make1DIfLogX(ibook,
958  true,
959  "num_duplicate_drj",
960  "N of associated (recoToSim) looper tracks vs dR(track,jet)",
961  nintdrj,
962  log10(mindrj),
963  log10(maxdrj)));
964  histograms.h_pileupdrj.push_back(make1DIfLogX(ibook,
965  true,
966  "num_pileup_drj",
967  "N of associated (recoToSim) pileup tracks vs dR(track,jet)",
968  nintdrj,
969  log10(mindrj),
970  log10(maxdrj)));
971 
972  histograms.h_reco_simpvz.push_back(
973  ibook.book1D("num_reco_simpvz", "N of reco track vs. sim PV z", nintPVz, minPVz, maxPVz));
974  histograms.h_assoc2_simpvz.push_back(ibook.book1D(
975  "num_assoc(recoToSim)_simpvz", "N of associated tracks (recoToSim) vs. sim PV z", nintPVz, minPVz, maxPVz));
976  histograms.h_looper_simpvz.push_back(ibook.book1D(
977  "num_duplicate_simpvz", "N of associated (recoToSim) looper tracks vs. sim PV z", nintPVz, minPVz, maxPVz));
978  histograms.h_pileup_simpvz.push_back(ibook.book1D(
979  "num_pileup_simpvz", "N of associated (recoToSim) pileup tracks vs. sim PV z", nintPVz, minPVz, maxPVz));
980 
981  histograms.h_recochi2.push_back(
982  ibook.book1D("num_reco_chi2", "N of reco track vs normalized #chi^{2}", nintChi2, minChi2, maxChi2));
983  histograms.h_assoc2chi2.push_back(ibook.book1D("num_assoc(recoToSim)_chi2",
984  "N of associated (recoToSim) tracks vs normalized #chi^{2}",
985  nintChi2,
986  minChi2,
987  maxChi2));
988  histograms.h_looperchi2.push_back(ibook.book1D("num_duplicate_chi2",
989  "N of associated (recoToSim) looper tracks vs normalized #chi^{2}",
990  nintChi2,
991  minChi2,
992  maxChi2));
993  if (!doSeedPlots_)
994  histograms.h_misidchi2.push_back(
995  ibook.book1D("num_chargemisid_chi2",
996  "N of associated (recoToSim) charge misIDed tracks vs normalized #chi^{2}",
997  nintChi2,
998  minChi2,
999  maxChi2));
1000  histograms.h_pileupchi2.push_back(ibook.book1D("num_pileup_chi2",
1001  "N of associated (recoToSim) pileup tracks vs normalized #chi^{2}",
1002  nintChi2,
1003  minChi2,
1004  maxChi2));
1005 
1006  histograms.h_recochi2prob.push_back(
1007  ibook.book1D("num_reco_chi2prob", "N of reco track vs normalized #chi^{2}", 100, 0., 1.));
1008  histograms.h_assoc2chi2prob.push_back(ibook.book1D(
1009  "num_assoc(recoToSim)_chi2prob", "N of associated (recoToSim) tracks vs normalized #chi^{2}", 100, 0., 1.));
1010  histograms.h_looperchi2prob.push_back(ibook.book1D(
1011  "num_duplicate_chi2prob", "N of associated (recoToSim) looper tracks vs normalized #chi^{2}", 100, 0., 1.));
1012  if (!doSeedPlots_)
1013  histograms.h_misidchi2prob.push_back(
1014  ibook.book1D("num_chargemisid_chi2prob",
1015  "N of associated (recoToSim) charge misIDed tracks vs normalized #chi^{2}",
1016  100,
1017  0.,
1018  1.));
1019  histograms.h_pileupchi2prob.push_back(ibook.book1D(
1020  "num_pileup_chi2prob", "N of associated (recoToSim) pileup tracks vs normalized #chi^{2}", 100, 0., 1.));
1021 
1022  if (!seedingLayerSetNames.empty()) {
1023  const auto size = seedingLayerSetNames.size();
1024  histograms.h_reco_seedingLayerSet.push_back(
1025  ibook.book1D("num_reco_seedingLayerSet", "N of reco track vs. seedingLayerSet", size, 0, size));
1026  histograms.h_assoc2_seedingLayerSet.push_back(
1027  ibook.book1D("num_assoc(recoToSim)_seedingLayerSet",
1028  "N of associated track (recoToSim) tracks vs. seedingLayerSet",
1029  size,
1030  0,
1031  size));
1032  histograms.h_looper_seedingLayerSet.push_back(ibook.book1D(
1033  "num_duplicate_seedingLayerSet", "N of reco associated (recoToSim) looper vs. seedingLayerSet", size, 0, size));
1034  histograms.h_pileup_seedingLayerSet.push_back(ibook.book1D(
1035  "num_pileup_seedingLayerSet", "N of reco associated (recoToSim) pileup vs. seedingLayerSet", size, 0, size));
1036 
1041  }
1042 
1044 
1045  auto bookResolutionPlots1D = [&](std::vector<dqm::reco::MonitorElement*>& vec, auto&&... params) {
1046  vec.push_back(doResolutionPlots ? ibook.book1D(std::forward<decltype(params)>(params)...) : nullptr);
1047  };
1048  auto bookResolutionPlots2D = [&](std::vector<dqm::reco::MonitorElement*>& vec, bool logx, auto&&... params) {
1049  vec.push_back(doResolutionPlots ? make2DIfLogX(ibook, logx, std::forward<decltype(params)>(params)...) : nullptr);
1050  };
1051  auto bookResolutionPlotsProfile2D = [&](std::vector<dqm::reco::MonitorElement*>& vec, auto&&... params) {
1052  vec.push_back(doResolutionPlots ? ibook.bookProfile2D(std::forward<decltype(params)>(params)...) : nullptr);
1053  };
1054 
1055  bookResolutionPlots1D(histograms.h_eta, "eta", "pseudorapidity residue", 1000, -0.1, 0.1);
1056  bookResolutionPlots1D(histograms.h_pt, "pullPt", "pull of p_{t}", 100, -10, 10);
1057  bookResolutionPlots1D(histograms.h_pullTheta, "pullTheta", "pull of #theta parameter", 250, -25, 25);
1058  bookResolutionPlots1D(histograms.h_pullPhi, "pullPhi", "pull of #phi parameter", 250, -25, 25);
1059  bookResolutionPlots1D(histograms.h_pullDxy, "pullDxy", "pull of dxy parameter", 250, -25, 25);
1060  bookResolutionPlots1D(histograms.h_pullDz, "pullDz", "pull of dz parameter", 250, -25, 25);
1061  bookResolutionPlots1D(histograms.h_pullQoverp, "pullQoverp", "pull of qoverp parameter", 250, -25, 25);
1062 
1063  /* TO BE FIXED -----------
1064  if (associators[ww]=="TrackAssociatorByChi2"){
1065  histograms.h_assochi2.push_back( ibook.book1D("assocChi2","track association #chi^{2}",1000000,0,100000) );
1066  histograms.h_assochi2_prob.push_back(ibook.book1D("assocChi2_prob","probability of association #chi^{2}",100,0,1));
1067  } else if (associators[ww]=="quickTrackAssociatorByHits"){
1068  histograms.h_assocFraction.push_back( ibook.book1D("assocFraction","fraction of shared hits",200,0,2) );
1069  histograms.h_assocSharedHit.push_back(ibook.book1D("assocSharedHit","number of shared hits",20,0,20));
1070  }
1071  */
1072  histograms.h_assocFraction.push_back(ibook.book1D("assocFraction", "fraction of shared hits", 200, 0, 2));
1073  histograms.h_assocSharedHit.push_back(ibook.book1D("assocSharedHit", "number of shared hits", 41, -0.5, 40.5));
1074  // ----------------------
1075 
1076  // use the standard error of the mean as the errors in the profile
1077  histograms.chi2_vs_nhits.push_back(
1078  ibook.bookProfile("chi2mean_vs_nhits", "mean #chi^{2} vs nhits", nintHit, minHit, maxHit, 100, 0, 10, " "));
1079 
1080  bookResolutionPlots2D(
1081  histograms.etares_vs_eta, false, "etares_vs_eta", "etaresidue vs eta", nintEta, minEta, maxEta, 200, -0.1, 0.1);
1082  bookResolutionPlots2D(
1083  histograms.nrec_vs_nsim,
1084  false,
1085  "nrec_vs_nsim",
1086  "Number of selected reco tracks vs. number of selected sim tracks;TrackingParticles;Reco tracks",
1087  nintTracks,
1088  minTracks,
1089  maxTracks,
1090  nintTracks,
1091  minTracks,
1092  maxTracks);
1093 
1094  histograms.chi2_vs_eta.push_back(
1095  ibook.bookProfile("chi2mean", "mean #chi^{2} vs #eta", nintEta, minEta, maxEta, 200, 0, 20, " "));
1096  histograms.chi2_vs_phi.push_back(
1097  ibook.bookProfile("chi2mean_vs_phi", "mean #chi^{2} vs #phi", nintPhi, minPhi, maxPhi, 200, 0, 20, " "));
1098  histograms.chi2_vs_pt.push_back(
1099  makeProfileIfLogX(ibook, useLogPt, "chi2mean_vs_pt", "mean #chi^{2} vs p_{T}", nintPt, minPt, maxPt, 0, 20));
1100 
1101  histograms.assoc_chi2_vs_eta.push_back(
1102  ibook.bookProfile("assoc_chi2mean", "mean #chi^{2} vs #eta", nintEta, minEta, maxEta, 200, 0., 20., " "));
1103  histograms.assoc_chi2prob_vs_eta.push_back(ibook.bookProfile(
1104  "assoc_chi2prob_vs_eta", "mean #chi^{2} probability vs #eta", nintEta, minEta, maxEta, 100, 0., 1., " "));
1105  histograms.assoc_chi2_vs_pt.push_back(makeProfileIfLogX(
1106  ibook, useLogPt, "assoc_chi2mean_vs_pt", "mean #chi^{2} vs p_{T}", nintPt, minPt, maxPt, 0., 20.));
1107  histograms.assoc_chi2prob_vs_pt.push_back(makeProfileIfLogX(
1108  ibook, useLogPt, "assoc_chi2prob_vs_pt", "mean #chi^{2} probability vs p_{T}", nintPt, minPt, maxPt, 0., 20.));
1109 
1110  histograms.nhits_vs_eta.push_back(
1111  ibook.bookProfile("hits_eta", "mean hits vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1112  histograms.nPXBhits_vs_eta.push_back(ibook.bookProfile(
1113  "PXBhits_vs_eta", "mean # PXB its vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1114  histograms.nPXFhits_vs_eta.push_back(ibook.bookProfile(
1115  "PXFhits_vs_eta", "mean # PXF hits vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1116  histograms.nPXLhits_vs_eta.push_back(ibook.bookProfile(
1117  "PXLhits_vs_eta", "mean # PXL hits vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1118  histograms.nTIBhits_vs_eta.push_back(ibook.bookProfile(
1119  "TIBhits_vs_eta", "mean # TIB hits vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1120  histograms.nTIDhits_vs_eta.push_back(ibook.bookProfile(
1121  "TIDhits_vs_eta", "mean # TID hits vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1122  histograms.nTOBhits_vs_eta.push_back(ibook.bookProfile(
1123  "TOBhits_vs_eta", "mean # TOB hits vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1124  histograms.nTEChits_vs_eta.push_back(ibook.bookProfile(
1125  "TEChits_vs_eta", "mean # TEC hits vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1126  histograms.nSTRIPhits_vs_eta.push_back(ibook.bookProfile(
1127  "STRIPhits_vs_eta", "mean # STRIP hits vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1128 
1129  histograms.nLayersWithMeas_vs_eta.push_back(ibook.bookProfile("LayersWithMeas_eta",
1130  "mean # Layers with measurement vs eta",
1131  nintEta,
1132  minEta,
1133  maxEta,
1134  nintLayers,
1135  minLayers,
1136  maxLayers,
1137  " "));
1138  histograms.nPXLlayersWithMeas_vs_eta.push_back(ibook.bookProfile("PXLlayersWithMeas_vs_eta",
1139  "mean # PXL Layers with measurement vs eta",
1140  nintEta,
1141  minEta,
1142  maxEta,
1143  nintLayers,
1144  minLayers,
1145  maxLayers,
1146  " "));
1147  histograms.nSTRIPlayersWithMeas_vs_eta.push_back(ibook.bookProfile("STRIPlayersWithMeas_vs_eta",
1148  "mean # STRIP Layers with measurement vs eta",
1149  nintEta,
1150  minEta,
1151  maxEta,
1152  nintLayers,
1153  minLayers,
1154  maxLayers,
1155  " "));
1156  histograms.nSTRIPlayersWith1dMeas_vs_eta.push_back(ibook.bookProfile("STRIPlayersWith1dMeas_vs_eta",
1157  "mean # STRIP Layers with 1D measurement vs eta",
1158  nintEta,
1159  minEta,
1160  maxEta,
1161  nintLayers,
1162  minLayers,
1163  maxLayers,
1164  " "));
1165  histograms.nSTRIPlayersWith2dMeas_vs_eta.push_back(ibook.bookProfile("STRIPlayersWith2dMeas_vs_eta",
1166  "mean # STRIP Layers with 2D measurement vs eta",
1167  nintEta,
1168  minEta,
1169  maxEta,
1170  nintLayers,
1171  minLayers,
1172  maxLayers,
1173  " "));
1174 
1175  if (doMTDPlots_) {
1176  histograms.nMTDhits_vs_eta.push_back(ibook.bookProfile(
1177  "MTDhits_vs_eta", "mean # MTD hits vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1178 
1179  histograms.nBTLhits_vs_eta.push_back(ibook.bookProfile(
1180  "BTLhits_vs_eta", "mean # BTL hits vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1181 
1182  histograms.nETLhits_vs_eta.push_back(ibook.bookProfile(
1183  "ETLhits_vs_eta", "mean # ETL hits vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1184  }
1185 
1186  histograms.nhits_vs_phi.push_back(
1187  ibook.bookProfile("hits_phi", "mean # hits vs #phi", nintPhi, minPhi, maxPhi, nintHit, minHit, maxHit, " "));
1188 
1189  histograms.nlosthits_vs_eta.push_back(ibook.bookProfile(
1190  "losthits_vs_eta", "mean # lost hits vs eta", nintEta, minEta, maxEta, nintHit, minHit, maxHit, " "));
1191 
1192  //resolution of track parameters
1193  // dPt/Pt cotTheta Phi TIP LIP
1194  // log10(pt)<0.5 100,0.1 240,0.08 100,0.015 100,0.1000 150,0.3000
1195  // 0.5<log10(pt)<1.5 100,0.1 120,0.01 100,0.003 100,0.0100 150,0.0500
1196  // >1.5 100,0.3 100,0.005 100,0.0008 100,0.0060 120,0.0300
1197 
1198  bookResolutionPlots2D(histograms.ptres_vs_eta,
1199  false,
1200  "ptres_vs_eta",
1201  "ptres_vs_eta",
1202  nintEta,
1203  minEta,
1204  maxEta,
1205  ptRes_nbin,
1207  ptRes_rangeMax);
1208 
1209  bookResolutionPlots2D(histograms.ptres_vs_phi,
1210  false,
1211  "ptres_vs_phi",
1212  "p_{t} res vs #phi",
1213  nintPhi,
1214  minPhi,
1215  maxPhi,
1216  ptRes_nbin,
1218  ptRes_rangeMax);
1219 
1220  bookResolutionPlots2D(histograms.ptres_vs_pt,
1221  useLogPt,
1222  "ptres_vs_pt",
1223  "ptres_vs_pt",
1224  nintPt,
1225  minPt,
1226  maxPt,
1227  ptRes_nbin,
1229  ptRes_rangeMax);
1230 
1231  bookResolutionPlots2D(histograms.cotThetares_vs_eta,
1232  false,
1233  "cotThetares_vs_eta",
1234  "cotThetares_vs_eta",
1235  nintEta,
1236  minEta,
1237  maxEta,
1241 
1242  bookResolutionPlots2D(histograms.cotThetares_vs_pt,
1243  useLogPt,
1244  "cotThetares_vs_pt",
1245  "cotThetares_vs_pt",
1246  nintPt,
1247  minPt,
1248  maxPt,
1252 
1253  bookResolutionPlots2D(histograms.phires_vs_eta,
1254  false,
1255  "phires_vs_eta",
1256  "phires_vs_eta",
1257  nintEta,
1258  minEta,
1259  maxEta,
1260  phiRes_nbin,
1262  phiRes_rangeMax);
1263 
1264  bookResolutionPlots2D(histograms.phires_vs_pt,
1265  useLogPt,
1266  "phires_vs_pt",
1267  "phires_vs_pt",
1268  nintPt,
1269  minPt,
1270  maxPt,
1271  phiRes_nbin,
1273  phiRes_rangeMax);
1274 
1275  bookResolutionPlots2D(histograms.phires_vs_phi,
1276  false,
1277  "phires_vs_phi",
1278  "#phi res vs #phi",
1279  nintPhi,
1280  minPhi,
1281  maxPhi,
1282  phiRes_nbin,
1284  phiRes_rangeMax);
1285 
1286  bookResolutionPlots2D(histograms.dxyres_vs_eta,
1287  false,
1288  "dxyres_vs_eta",
1289  "dxyres_vs_eta",
1290  nintEta,
1291  minEta,
1292  maxEta,
1293  dxyRes_nbin,
1295  dxyRes_rangeMax);
1296 
1297  bookResolutionPlots2D(histograms.dxyres_vs_pt,
1298  useLogPt,
1299  "dxyres_vs_pt",
1300  "dxyres_vs_pt",
1301  nintPt,
1302  minPt,
1303  maxPt,
1304  dxyRes_nbin,
1306  dxyRes_rangeMax);
1307 
1308  bookResolutionPlots2D(histograms.dzres_vs_eta,
1309  false,
1310  "dzres_vs_eta",
1311  "dzres_vs_eta",
1312  nintEta,
1313  minEta,
1314  maxEta,
1315  dzRes_nbin,
1317  dzRes_rangeMax);
1318 
1319  bookResolutionPlots2D(histograms.dzres_vs_pt,
1320  useLogPt,
1321  "dzres_vs_pt",
1322  "dzres_vs_pt",
1323  nintPt,
1324  minPt,
1325  maxPt,
1326  dzRes_nbin,
1328  dzRes_rangeMax);
1329 
1330  bookResolutionPlotsProfile2D(histograms.ptmean_vs_eta_phi,
1331  "ptmean_vs_eta_phi",
1332  "mean p_{t} vs #eta and #phi",
1333  nintPhi,
1334  minPhi,
1335  maxPhi,
1336  nintEta,
1337  minEta,
1338  maxEta,
1339  1000,
1340  0,
1341  1000);
1342  bookResolutionPlotsProfile2D(histograms.phimean_vs_eta_phi,
1343  "phimean_vs_eta_phi",
1344  "mean #phi vs #eta and #phi",
1345  nintPhi,
1346  minPhi,
1347  maxPhi,
1348  nintEta,
1349  minEta,
1350  maxEta,
1351  nintPhi,
1352  minPhi,
1353  maxPhi);
1354 
1355  //pulls of track params vs eta: to be used with fitslicesytool
1356  bookResolutionPlots2D(
1357  histograms.dxypull_vs_eta, false, "dxypull_vs_eta", "dxypull_vs_eta", nintEta, minEta, maxEta, 100, -10, 10);
1358  bookResolutionPlots2D(
1359  histograms.ptpull_vs_eta, false, "ptpull_vs_eta", "ptpull_vs_eta", nintEta, minEta, maxEta, 100, -10, 10);
1360  bookResolutionPlots2D(
1361  histograms.dzpull_vs_eta, false, "dzpull_vs_eta", "dzpull_vs_eta", nintEta, minEta, maxEta, 100, -10, 10);
1362  bookResolutionPlots2D(
1363  histograms.phipull_vs_eta, false, "phipull_vs_eta", "phipull_vs_eta", nintEta, minEta, maxEta, 100, -10, 10);
1364  bookResolutionPlots2D(
1365  histograms.thetapull_vs_eta, false, "thetapull_vs_eta", "thetapull_vs_eta", nintEta, minEta, maxEta, 100, -10, 10);
1366 
1367  // histograms.h_ptshiftetamean.push_back( ibook.book1D("h_ptshifteta_Mean","<#deltapT/pT>[%] vs #eta",nintEta,minEta,maxEta) );
1368 
1369  //pulls of track params vs phi
1370  bookResolutionPlots2D(
1371  histograms.ptpull_vs_phi, false, "ptpull_vs_phi", "p_{t} pull vs #phi", nintPhi, minPhi, maxPhi, 100, -10, 10);
1372  bookResolutionPlots2D(
1373  histograms.phipull_vs_phi, false, "phipull_vs_phi", "#phi pull vs #phi", nintPhi, minPhi, maxPhi, 100, -10, 10);
1374  bookResolutionPlots2D(histograms.thetapull_vs_phi,
1375  false,
1376  "thetapull_vs_phi",
1377  "#theta pull vs #phi",
1378  nintPhi,
1379  minPhi,
1380  maxPhi,
1381  100,
1382  -10,
1383  10);
1384 
1385  bookResolutionPlots2D(histograms.nrecHit_vs_nsimHit_rec2sim,
1386  false,
1387  "nrecHit_vs_nsimHit_rec2sim",
1388  "nrecHit vs nsimHit (Rec2simAssoc)",
1389  nintHit,
1390  minHit,
1391  maxHit,
1392  nintHit,
1393  minHit,
1394  maxHit);
1395 }
1396 
1398  histograms.h_recodxypv.push_back(
1399  ibook.book1D("num_reco_dxypv", "N of reco track vs dxy(PV)", nintDxy, minDxy, maxDxy));
1400  histograms.h_assoc2dxypv.push_back(ibook.book1D(
1401  "num_assoc(recoToSim)_dxypv", "N of associated (recoToSim) tracks vs dxy(PV)", nintDxy, minDxy, maxDxy));
1402  histograms.h_looperdxypv.push_back(ibook.book1D(
1403  "num_duplicate_dxypv", "N of associated (recoToSim) looper tracks vs dxy(PV)", nintDxy, minDxy, maxDxy));
1404  if (!doSeedPlots_)
1405  histograms.h_misiddxypv.push_back(ibook.book1D("num_chargemisid_dxypv",
1406  "N of associated (recoToSim) charge misIDed tracks vs dxy(PV)",
1407  nintDxy,
1408  minDxy,
1409  maxDxy));
1410  histograms.h_pileupdxypv.push_back(ibook.book1D(
1411  "num_pileup_dxypv", "N of associated (recoToSim) pileup tracks vs dxy(PV)", nintDxy, minDxy, maxDxy));
1412 
1413  histograms.h_recodzpv.push_back(ibook.book1D("num_reco_dzpv", "N of reco track vs dz(PV)", nintDz, minDz, maxDz));
1414  histograms.h_assoc2dzpv.push_back(
1415  ibook.book1D("num_assoc(recoToSim)_dzpv", "N of associated (recoToSim) tracks vs dz(PV)", nintDz, minDz, maxDz));
1416  histograms.h_looperdzpv.push_back(
1417  ibook.book1D("num_duplicate_dzpv", "N of associated (recoToSim) looper tracks vs dz(PV)", nintDz, minDz, maxDz));
1418  if (!doSeedPlots_)
1419  histograms.h_misiddzpv.push_back(ibook.book1D("num_chargemisid_versus_dzpv",
1420  "N of associated (recoToSim) charge misIDed tracks vs dz(PV)",
1421  nintDz,
1422  minDz,
1423  maxDz));
1424  histograms.h_pileupdzpv.push_back(
1425  ibook.book1D("num_pileup_dzpv", "N of associated (recoToSim) pileup tracks vs dz(PV)", nintDz, minDz, maxDz));
1426 
1427  histograms.h_recodxypvzoomed.push_back(ibook.book1D(
1428  "num_reco_dxypv_zoomed", "N of reco track vs dxy(PV)", nintDxy, minDxy / dxyDzZoom, maxDxy / dxyDzZoom));
1429  histograms.h_assoc2dxypvzoomed.push_back(ibook.book1D("num_assoc(recoToSim)_dxypv_zoomed",
1430  "N of associated (recoToSim) tracks vs dxy(PV)",
1431  nintDxy,
1432  minDxy / dxyDzZoom,
1433  maxDxy / dxyDzZoom));
1434  histograms.h_looperdxypvzoomed.push_back(ibook.book1D("num_duplicate_dxypv_zoomed",
1435  "N of associated (recoToSim) looper tracks vs dxy(PV)",
1436  nintDxy,
1437  minDxy / dxyDzZoom,
1438  maxDxy / dxyDzZoom));
1439  if (!doSeedPlots_)
1440  histograms.h_misiddxypvzoomed.push_back(ibook.book1D("num_chargemisid_dxypv_zoomed",
1441  "N of associated (recoToSim) charge misIDed tracks vs dxy(PV)",
1442  nintDxy,
1443  minDxy / dxyDzZoom,
1444  maxDxy / dxyDzZoom));
1445  histograms.h_pileupdxypvzoomed.push_back(ibook.book1D("num_pileup_dxypv_zoomed",
1446  "N of associated (recoToSim) pileup tracks vs dxy(PV)",
1447  nintDxy,
1448  minDxy / dxyDzZoom,
1449  maxDxy / dxyDzZoom));
1450 
1451  histograms.h_recodzpvzoomed.push_back(
1452  ibook.book1D("num_reco_dzpv_zoomed", "N of reco track vs dz(PV)", nintDz, minDz / dxyDzZoom, maxDz / dxyDzZoom));
1453  histograms.h_assoc2dzpvzoomed.push_back(ibook.book1D("num_assoc(recoToSim)_dzpv_zoomed",
1454  "N of associated (recoToSim) tracks vs dz(PV)",
1455  nintDz,
1456  minDz / dxyDzZoom,
1457  maxDz / dxyDzZoom));
1458  histograms.h_looperdzpvzoomed.push_back(ibook.book1D("num_duplicate_dzpv_zoomed",
1459  "N of associated (recoToSim) looper tracks vs dz(PV)",
1460  nintDz,
1461  minDz / dxyDzZoom,
1462  maxDz / dxyDzZoom));
1463  if (!doSeedPlots_)
1464  histograms.h_misiddzpvzoomed.push_back(ibook.book1D("num_chargemisid_versus_dzpv_zoomed",
1465  "N of associated (recoToSim) charge misIDed tracks vs dz(PV)",
1466  nintDz,
1467  minDz / dxyDzZoom,
1468  maxDz / dxyDzZoom));
1469  histograms.h_pileupdzpvzoomed.push_back(ibook.book1D("num_pileup_dzpv_zoomed",
1470  "N of associated (recoToSim) pileup tracks vs dz(PV)",
1471  nintDz,
1472  minDz / dxyDzZoom,
1473  maxDz / dxyDzZoom));
1474 
1475  histograms.h_reco_dzpvcut.push_back(
1476  ibook.book1D("num_reco_dzpvcut", "N of reco track vs dz(PV)", nintDzpvCum, 0, maxDzpvCum));
1477  histograms.h_assoc2_dzpvcut.push_back(ibook.book1D(
1478  "num_assoc(recoToSim)_dzpvcut", "N of associated (recoToSim) tracks vs dz(PV)", nintDzpvCum, 0, maxDzpvCum));
1479  histograms.h_pileup_dzpvcut.push_back(ibook.book1D(
1480  "num_pileup_dzpvcut", "N of associated (recoToSim) pileup tracks vs dz(PV)", nintDzpvCum, 0, maxDzpvCum));
1481 
1482  histograms.h_reco_dzpvcut_pt.push_back(
1483  ibook.book1D("num_reco_dzpvcut_pt", "#sump_{T} of reco track vs dz(PV)", nintDzpvCum, 0, maxDzpvCum));
1484  histograms.h_assoc2_dzpvcut_pt.push_back(ibook.book1D("num_assoc(recoToSim)_dzpvcut_pt",
1485  "#sump_{T} of associated (recoToSim) tracks vs dz(PV)",
1486  nintDzpvCum,
1487  0,
1488  maxDzpvCum));
1489  histograms.h_pileup_dzpvcut_pt.push_back(ibook.book1D("num_pileup_dzpvcut_pt",
1490  "#sump_{T} of associated (recoToSim) pileup tracks vs dz(PV)",
1491  nintDzpvCum,
1492  0,
1493  maxDzpvCum));
1494  histograms.h_reco_dzpvcut_pt.back()->enableSumw2();
1495  histograms.h_assoc2_dzpvcut_pt.back()->enableSumw2();
1496  histograms.h_pileup_dzpvcut_pt.back()->enableSumw2();
1497 
1498  histograms.h_reco_dzpvsigcut.push_back(
1499  ibook.book1D("num_reco_dzpvsigcut", "N of reco track vs dz(PV)/dzError", nintDzpvsigCum, 0, maxDzpvsigCum));
1500  histograms.h_assoc2_dzpvsigcut.push_back(ibook.book1D("num_assoc(recoToSim)_dzpvsigcut",
1501  "N of associated (recoToSim) tracks vs dz(PV)/dzError",
1503  0,
1504  maxDzpvsigCum));
1505  histograms.h_pileup_dzpvsigcut.push_back(ibook.book1D("num_pileup_dzpvsigcut",
1506  "N of associated (recoToSim) pileup tracks vs dz(PV)/dzError",
1508  0,
1509  maxDzpvsigCum));
1510 
1511  histograms.h_reco_dzpvsigcut_pt.push_back(ibook.book1D(
1512  "num_reco_dzpvsigcut_pt", "#sump_{T} of reco track vs dz(PV)/dzError", nintDzpvsigCum, 0, maxDzpvsigCum));
1513  histograms.h_assoc2_dzpvsigcut_pt.push_back(
1514  ibook.book1D("num_assoc(recoToSim)_dzpvsigcut_pt",
1515  "#sump_{T} of associated (recoToSim) tracks vs dz(PV)/dzError",
1517  0,
1518  maxDzpvsigCum));
1519  histograms.h_pileup_dzpvsigcut_pt.push_back(
1520  ibook.book1D("num_pileup_dzpvsigcut_pt",
1521  "#sump_{T} of associated (recoToSim) pileup tracks vs dz(PV)/dzError",
1523  0,
1524  maxDzpvsigCum));
1525  histograms.h_reco_dzpvsigcut_pt.back()->enableSumw2();
1526  histograms.h_assoc2_dzpvsigcut_pt.back()->enableSumw2();
1527  histograms.h_pileup_dzpvsigcut_pt.back()->enableSumw2();
1528 }
1529 
1531  // dE/dx stuff
1532  histograms.h_dedx_estim.emplace_back();
1533  histograms.h_dedx_estim.back().push_back(
1534  ibook.book1D("h_dedx_estim1", "dE/dx estimator 1", nintDeDx, minDeDx, maxDeDx));
1535  histograms.h_dedx_estim.back().push_back(
1536  ibook.book1D("h_dedx_estim2", "dE/dx estimator 2", nintDeDx, minDeDx, maxDeDx));
1537 
1538  histograms.h_dedx_nom.emplace_back();
1539  histograms.h_dedx_nom.back().push_back(
1540  ibook.book1D("h_dedx_nom1", "dE/dx number of measurements", nintHit, minHit, maxHit));
1541  histograms.h_dedx_nom.back().push_back(
1542  ibook.book1D("h_dedx_nom2", "dE/dx number of measurements", nintHit, minHit, maxHit));
1543 
1544  histograms.h_dedx_sat.emplace_back();
1545  histograms.h_dedx_sat.back().push_back(
1546  ibook.book1D("h_dedx_sat1", "dE/dx number of measurements with saturation", nintHit, minHit, maxHit));
1547  histograms.h_dedx_sat.back().push_back(
1548  ibook.book1D("h_dedx_sat2", "dE/dx number of measurements with saturation", nintHit, minHit, maxHit));
1549 }
1550 
1552  histograms.h_seedsFitFailed.push_back(
1553  ibook.book1D("seeds_fitFailed", "Number of seeds for which the fit failed", nintTracks, minTracks, maxTracks));
1554  histograms.h_seedsFitFailedFraction.push_back(
1555  ibook.book1D("seeds_fitFailedFraction", "Fraction of seeds for which the fit failed", 100, 0, 1));
1556 }
1557 
1559  histograms.h_reco_mva.emplace_back();
1560  histograms.h_assoc2_mva.emplace_back();
1561 
1562  histograms.h_reco_mvacut.emplace_back();
1563  histograms.h_assoc_mvacut.emplace_back();
1564  histograms.h_assoc2_mvacut.emplace_back();
1565  histograms.h_simul2_mvacut.emplace_back();
1566 
1567  histograms.h_reco_mva_hp.emplace_back();
1568  histograms.h_assoc2_mva_hp.emplace_back();
1569 
1570  histograms.h_reco_mvacut_hp.emplace_back();
1571  histograms.h_assoc_mvacut_hp.emplace_back();
1572  histograms.h_assoc2_mvacut_hp.emplace_back();
1573  histograms.h_simul2_mvacut_hp.emplace_back();
1574 
1575  histograms.h_assoc2_mva_vs_pt.emplace_back();
1576  histograms.h_fake_mva_vs_pt.emplace_back();
1577  histograms.h_assoc2_mva_vs_pt_hp.emplace_back();
1578  histograms.h_fake_mva_vs_pt_hp.emplace_back();
1579  histograms.h_assoc2_mva_vs_eta.emplace_back();
1580  histograms.h_fake_mva_vs_eta.emplace_back();
1581  histograms.h_assoc2_mva_vs_eta_hp.emplace_back();
1582  histograms.h_fake_mva_vs_eta_hp.emplace_back();
1583 
1584  for (size_t i = 1; i <= nMVAs; ++i) {
1585  auto istr = std::to_string(i);
1586  std::string pfix;
1587 
1588  if (i == 1) {
1589  histograms.h_reco_mva_hp.back().emplace_back();
1590  histograms.h_assoc2_mva_hp.back().emplace_back();
1591 
1592  histograms.h_reco_mvacut_hp.back().emplace_back();
1593  histograms.h_assoc_mvacut_hp.back().emplace_back();
1594  histograms.h_assoc2_mvacut_hp.back().emplace_back();
1595  histograms.h_simul2_mvacut_hp.back().emplace_back();
1596 
1597  histograms.h_assoc2_mva_vs_pt_hp.back().emplace_back();
1598  histograms.h_fake_mva_vs_pt_hp.back().emplace_back();
1599  histograms.h_assoc2_mva_vs_eta_hp.back().emplace_back();
1600  histograms.h_fake_mva_vs_eta_hp.back().emplace_back();
1601  } else {
1602  pfix = " (not loose-selected)";
1603  std::string pfix2 = " (not HP-selected)";
1604 
1605  histograms.h_reco_mva_hp.back().push_back(ibook.book1D(
1606  "num_reco_mva" + istr + "_hp", "N of reco track after vs MVA" + istr + pfix2, nintMVA, minMVA, maxMVA));
1607  histograms.h_assoc2_mva_hp.back().push_back(
1608  ibook.book1D("num_assoc(recoToSim)_mva" + istr + "_hp",
1609  "N of associated tracks (recoToSim) vs MVA" + istr + pfix2,
1610  nintMVA,
1611  minMVA,
1612  maxMVA));
1613 
1614  histograms.h_reco_mvacut_hp.back().push_back(ibook.book1D("num_reco_mva" + istr + "cut" + "_hp",
1615  "N of reco track vs cut on MVA" + istr + pfix2,
1616  nintMVA,
1617  minMVA,
1618  maxMVA));
1619  histograms.h_assoc_mvacut_hp.back().push_back(
1620  ibook.book1D("num_assoc(simToReco)_mva" + istr + "cut_hp",
1621  "N of associated tracks (simToReco) vs cut on MVA" + istr + pfix2,
1622  nintMVA,
1623  minMVA,
1624  maxMVA));
1625  histograms.h_assoc2_mvacut_hp.back().push_back(
1626  ibook.book1D("num_assoc(recoToSim)_mva" + istr + "cut_hp",
1627  "N of associated tracks (recoToSim) vs cut on MVA" + istr + pfix2,
1628  nintMVA,
1629  minMVA,
1630  maxMVA));
1631  histograms.h_simul2_mvacut_hp.back().push_back(
1632  ibook.book1D("num_simul2_mva" + istr + "cut_hp",
1633  "N of simulated tracks (associated to any track) vs cut on MVA" + istr + pfix2,
1634  nintMVA,
1635  minMVA,
1636  maxMVA));
1637 
1638  histograms.h_assoc2_mva_vs_pt_hp.back().push_back(
1639  makeProfileIfLogX(ibook,
1640  useLogPt,
1641  ("mva_assoc(recoToSim)_mva" + istr + "_pT_hp").c_str(),
1642  ("MVA" + istr + " of associated tracks (recoToSim) vs. track p_{T}" + pfix2).c_str(),
1643  nintPt,
1644  minPt,
1645  maxPt,
1646  minMVA,
1647  maxMVA));
1648  histograms.h_fake_mva_vs_pt_hp.back().push_back(
1649  makeProfileIfLogX(ibook,
1650  useLogPt,
1651  ("mva_fake_mva" + istr + "pT_hp").c_str(),
1652  ("MVA" + istr + " of non-associated tracks (recoToSim) vs. track p_{T}" + pfix2).c_str(),
1653  nintPt,
1654  minPt,
1655  maxPt,
1656  minMVA,
1657  maxMVA));
1658  histograms.h_assoc2_mva_vs_eta_hp.back().push_back(
1659  ibook.bookProfile("mva_assoc(recoToSim)_mva" + istr + "_eta_hp",
1660  "MVA" + istr + " of associated tracks (recoToSim) vs. track #eta" + pfix2,
1661  nintEta,
1662  minEta,
1663  maxEta,
1664  nintMVA,
1665  minMVA,
1666  maxMVA));
1667  histograms.h_fake_mva_vs_eta_hp.back().push_back(
1668  ibook.bookProfile("mva_fake_mva" + istr + "eta_hp",
1669  "MVA" + istr + " of non-associated tracks (recoToSim) vs. track #eta" + pfix2,
1670  nintEta,
1671  minEta,
1672  maxEta,
1673  nintMVA,
1674  minMVA,
1675  maxMVA));
1676  }
1677 
1678  histograms.h_reco_mva.back().push_back(
1679  ibook.book1D("num_reco_mva" + istr, "N of reco track vs MVA" + istr + pfix, nintMVA, minMVA, maxMVA));
1680  histograms.h_assoc2_mva.back().push_back(ibook.book1D("num_assoc(recoToSim)_mva" + istr,
1681  "N of associated tracks (recoToSim) vs MVA" + istr + pfix,
1682  nintMVA,
1683  minMVA,
1684  maxMVA));
1685 
1686  histograms.h_reco_mvacut.back().push_back(ibook.book1D(
1687  "num_reco_mva" + istr + "cut", "N of reco track vs cut on MVA" + istr + pfix, nintMVA, minMVA, maxMVA));
1688  histograms.h_assoc_mvacut.back().push_back(
1689  ibook.book1D("num_assoc(simToReco)_mva" + istr + "cut",
1690  "N of associated tracks (simToReco) vs cut on MVA" + istr + pfix,
1691  nintMVA,
1692  minMVA,
1693  maxMVA));
1694  histograms.h_assoc2_mvacut.back().push_back(
1695  ibook.book1D("num_assoc(recoToSim)_mva" + istr + "cut",
1696  "N of associated tracks (recoToSim) vs cut on MVA" + istr + pfix,
1697  nintMVA,
1698  minMVA,
1699  maxMVA));
1700  histograms.h_simul2_mvacut.back().push_back(
1701  ibook.book1D("num_simul2_mva" + istr + "cut",
1702  "N of simulated tracks (associated to any track) vs cut on MVA" + istr + pfix,
1703  nintMVA,
1704  minMVA,
1705  maxMVA));
1706 
1707  histograms.h_assoc2_mva_vs_pt.back().push_back(
1708  makeProfileIfLogX(ibook,
1709  useLogPt,
1710  ("mva_assoc(recoToSim)_mva" + istr + "_pT").c_str(),
1711  ("MVA" + istr + " of associated tracks (recoToSim) vs. track p_{T}" + pfix).c_str(),
1712  nintPt,
1713  minPt,
1714  maxPt,
1715  minMVA,
1716  maxMVA));
1717  histograms.h_fake_mva_vs_pt.back().push_back(
1718  makeProfileIfLogX(ibook,
1719  useLogPt,
1720  ("mva_fake_mva" + istr + "_pT").c_str(),
1721  ("MVA" + istr + " of non-associated tracks (recoToSim) vs. track p_{T}" + pfix).c_str(),
1722  nintPt,
1723  minPt,
1724  maxPt,
1725  minMVA,
1726  maxMVA));
1727  histograms.h_assoc2_mva_vs_eta.back().push_back(
1728  ibook.bookProfile("mva_assoc(recoToSim)_mva" + istr + "_eta",
1729  "MVA" + istr + " of associated tracks (recoToSim) vs. track #eta" + pfix,
1730  nintEta,
1731  minEta,
1732  maxEta,
1733  nintMVA,
1734  minMVA,
1735  maxMVA));
1736  histograms.h_fake_mva_vs_eta.back().push_back(
1737  ibook.bookProfile("mva_fake_mva" + istr + "_eta",
1738  "MVA" + istr + " of non-associated tracks (recoToSim) vs. track #eta" + pfix,
1739  nintEta,
1740  minEta,
1741  maxEta,
1742  nintMVA,
1743  minMVA,
1744  maxMVA));
1745  }
1746 }
1747 
1749  const TrackingParticle::Vector& momentumTP,
1750  const TrackingParticle::Point& vertexTP,
1751  int bx) const {
1752  if (bx == 0) {
1753  histograms.h_ptSIM->Fill(sqrt(momentumTP.perp2()));
1754  histograms.h_etaSIM->Fill(momentumTP.eta());
1755  histograms.h_vertposSIM->Fill(sqrt(vertexTP.perp2()));
1756  }
1757  histograms.h_bunchxSIM->Fill(bx);
1758 }
1759 
1761  const Histograms& histograms,
1762  int count,
1763  const TrackingParticle& tp,
1764  const TrackingParticle::Vector& momentumTP,
1765  const TrackingParticle::Point& vertexTP,
1766  double dxySim,
1767  double dzSim,
1768  double dxyPVSim,
1769  double dzPVSim,
1770  int nSimHits,
1771  int nSimLayers,
1772  int nSimPixelLayers,
1773  int nSimStripMonoAndStereoLayers,
1774  const reco::Track* track,
1775  int numVertices,
1776  double dR,
1777  double dRJet,
1778  const math::XYZPoint* pvPosition,
1779  const TrackingVertex::LorentzVector* simPVPosition,
1780  const math::XYZPoint& bsPosition,
1781  const std::vector<float>& mvas,
1782  unsigned int selectsLoose,
1783  unsigned int selectsHP) const {
1784  bool isMatched = track;
1785  const auto eta = getEta(momentumTP.eta());
1786  const auto phi = momentumTP.phi();
1787  const auto pt = getPt(sqrt(momentumTP.perp2()));
1788  const auto nSim3DLayers = nSimPixelLayers + nSimStripMonoAndStereoLayers;
1789 
1790  const auto vertexTPwrtBS = vertexTP - bsPosition;
1791  const auto vertxy = std::sqrt(vertexTPwrtBS.perp2());
1792  const auto vertz = vertexTPwrtBS.z();
1793 
1794  //efficiency vs. cut on MVA
1795  //
1796  // Note that this includes also pileup TPs, as "signalOnly"
1797  // selection is applied only in the TpSelector*. Have to think if
1798  // this is really what we want.
1799  if (isMatched) {
1800  for (size_t i = 0; i < mvas.size(); ++i) {
1801  if (i <= selectsLoose) {
1802  histograms.h_simul2_mvacut[count][i]->Fill(maxMVA);
1803  histograms.h_assoc_mvacut[count][i]->Fill(mvas[i]);
1804  }
1805  if (i >= 1 && i <= selectsHP) {
1806  histograms.h_simul2_mvacut_hp[count][i]->Fill(maxMVA);
1807  histograms.h_assoc_mvacut_hp[count][i]->Fill(mvas[i]);
1808  }
1809  }
1810  }
1811 
1812  if ((*TpSelectorForEfficiencyVsEta)(tp)) {
1813  //effic vs eta
1814  histograms.h_simuleta[count]->Fill(eta);
1815  if (isMatched)
1816  histograms.h_assoceta[count]->Fill(eta);
1817  }
1818 
1819  if ((*TpSelectorForEfficiencyVsPhi)(tp)) {
1820  histograms.h_simulphi[count]->Fill(phi);
1821  if (isMatched)
1822  histograms.h_assocphi[count]->Fill(phi);
1823  //effic vs hits
1824  histograms.h_simulhit[count]->Fill(nSimHits);
1825  histograms.h_simullayer[count]->Fill(nSimLayers);
1826  histograms.h_simulpixellayer[count]->Fill(nSimPixelLayers);
1827  histograms.h_simul3Dlayer[count]->Fill(nSim3DLayers);
1828  if (isMatched) {
1829  histograms.h_assochit[count]->Fill(nSimHits);
1830  histograms.h_assoclayer[count]->Fill(nSimLayers);
1831  histograms.h_assocpixellayer[count]->Fill(nSimPixelLayers);
1832  histograms.h_assoc3Dlayer[count]->Fill(nSim3DLayers);
1833  if (histograms.nrecHit_vs_nsimHit_sim2rec[count])
1834  histograms.nrecHit_vs_nsimHit_sim2rec[count]->Fill(track->numberOfValidHits(), nSimHits);
1835  }
1836  //effic vs pu
1837  histograms.h_simulpu[count]->Fill(numVertices);
1838  if (isMatched)
1839  histograms.h_assocpu[count]->Fill(numVertices);
1840  //efficiency vs dR
1841  histograms.h_simuldr[count]->Fill(dR);
1842  if (isMatched)
1843  histograms.h_assocdr[count]->Fill(dR);
1844  //efficiency vs dR jet
1845  histograms.h_simuldrj[count]->Fill(dRJet);
1846  if (isMatched)
1847  histograms.h_assocdrj[count]->Fill(dRJet);
1848  }
1849 
1850  if ((*TpSelectorForEfficiencyVsPt)(tp)) {
1851  histograms.h_simulpT[count]->Fill(pt);
1852  if (isMatched)
1853  histograms.h_assocpT[count]->Fill(pt);
1854  }
1855 
1856  if ((*TpSelectorForEfficiencyVsVTXR)(tp)) {
1857  histograms.h_simuldxy[count]->Fill(dxySim);
1858  if (isMatched)
1859  histograms.h_assocdxy[count]->Fill(dxySim);
1860  if (pvPosition) {
1861  histograms.h_simuldxypv[count]->Fill(dxyPVSim);
1862  histograms.h_simuldxypvzoomed[count]->Fill(dxyPVSim);
1863  if (isMatched) {
1864  histograms.h_assocdxypv[count]->Fill(dxyPVSim);
1865  histograms.h_assocdxypvzoomed[count]->Fill(dxyPVSim);
1866  }
1867  }
1868 
1869  histograms.h_simulvertpos[count]->Fill(vertxy);
1870  if (isMatched)
1871  histograms.h_assocvertpos[count]->Fill(vertxy);
1872  }
1873 
1874  if ((*TpSelectorForEfficiencyVsVTXZ)(tp)) {
1875  histograms.h_simuldz[count]->Fill(dzSim);
1876  if (isMatched)
1877  histograms.h_assocdz[count]->Fill(dzSim);
1878 
1879  histograms.h_simulzpos[count]->Fill(vertz);
1880  if (isMatched)
1881  histograms.h_assoczpos[count]->Fill(vertz);
1882 
1883  if (pvPosition) {
1884  histograms.h_simuldzpv[count]->Fill(dzPVSim);
1885  histograms.h_simuldzpvzoomed[count]->Fill(dzPVSim);
1886 
1887  histograms.h_simul_dzpvcut[count]->Fill(0);
1888  histograms.h_simul_dzpvsigcut[count]->Fill(0);
1889  histograms.h_simul_dzpvcut_pt[count]->Fill(0, pt);
1890  histograms.h_simul_dzpvsigcut_pt[count]->Fill(0, pt);
1891 
1892  if (isMatched) {
1893  histograms.h_assocdzpv[count]->Fill(dzPVSim);
1894  histograms.h_assocdzpvzoomed[count]->Fill(dzPVSim);
1895 
1896  histograms.h_simul2_dzpvcut[count]->Fill(0);
1897  histograms.h_simul2_dzpvsigcut[count]->Fill(0);
1898  histograms.h_simul2_dzpvcut_pt[count]->Fill(0, pt);
1899  histograms.h_simul2_dzpvsigcut_pt[count]->Fill(0, pt);
1900  const double dzpvcut = std::abs(track->dz(*pvPosition));
1901  const double dzpvsigcut = dzpvcut / track->dzError();
1902  histograms.h_assoc_dzpvcut[count]->Fill(dzpvcut);
1903  histograms.h_assoc_dzpvsigcut[count]->Fill(dzpvsigcut);
1904  histograms.h_assoc_dzpvcut_pt[count]->Fill(dzpvcut, pt);
1905  histograms.h_assoc_dzpvsigcut_pt[count]->Fill(dzpvsigcut, pt);
1906  }
1907  }
1908  if (simPVPosition) {
1909  const auto simpvz = simPVPosition->z();
1910  histograms.h_simul_simpvz[count]->Fill(simpvz);
1911  if (isMatched) {
1912  histograms.h_assoc_simpvz[count]->Fill(simpvz);
1913  }
1914  }
1915  }
1916 }
1917 
1919  int count,
1920  const reco::Track& track1,
1921  const reco::Track& track2) const {
1922  histograms.h_duplicates_oriAlgo_vs_oriAlgo[count]->Fill(track1.originalAlgo(), track2.originalAlgo());
1923 }
1924 
1926  histograms.h_tracksSIM->Fill(numSimTracks);
1927 }
1928 
1929 // dE/dx
1931  const Histograms& histograms,
1932  int count,
1933  const edm::RefToBase<reco::Track>& trackref,
1934  const std::vector<const edm::ValueMap<reco::DeDxData>*>& v_dEdx) const {
1935  for (unsigned int i = 0; i < v_dEdx.size(); i++) {
1936  const edm::ValueMap<reco::DeDxData>& dEdxTrack = *(v_dEdx[i]);
1937  const reco::DeDxData& dedx = dEdxTrack[trackref];
1938  histograms.h_dedx_estim[count][i]->Fill(dedx.dEdx());
1939  histograms.h_dedx_nom[count][i]->Fill(dedx.numberOfMeasurements());
1940  histograms.h_dedx_sat[count][i]->Fill(dedx.numberOfSaturatedMeasurements());
1941  }
1942 }
1943 
1945  int count,
1946  const reco::Track& track,
1947  const TrackerTopology& ttopo,
1948  const math::XYZPoint& bsPosition,
1949  const math::XYZPoint* pvPosition,
1950  const TrackingVertex::LorentzVector* simPVPosition,
1951  bool isMatched,
1952  bool isSigMatched,
1953  bool isChargeMatched,
1954  int numAssocRecoTracks,
1955  int numVertices,
1956  int nSimHits,
1957  double sharedFraction,
1958  double dR,
1959  double dRJet,
1960  const std::vector<float>& mvas,
1961  unsigned int selectsLoose,
1962  unsigned int selectsHP) const {
1963  //Fill track algo histogram
1964  histograms.h_algo[count]->Fill(track.algo());
1965  int sharedHits = sharedFraction * track.numberOfValidHits();
1966 
1967  //Compute fake rate vs eta
1968  const auto eta = getEta(track.momentum().eta());
1969  const auto phi = track.momentum().phi();
1970  const auto pt = getPt(sqrt(track.momentum().perp2()));
1971  const auto dxy = track.dxy(bsPosition);
1972  const auto dz = track.dz(bsPosition);
1973  const auto dxypv = pvPosition ? track.dxy(*pvPosition) : 0.0;
1974  const auto dzpv = pvPosition ? track.dz(*pvPosition) : 0.0;
1975  const auto dzpvsig = pvPosition ? dzpv / track.dzError() : 0.0;
1976  const auto nhits = track.found();
1977  const auto nlayers = track.hitPattern().trackerLayersWithMeasurement();
1978  const auto nPixelLayers = track.hitPattern().pixelLayersWithMeasurement();
1979  const auto n3DLayers = nPixelLayers + track.hitPattern().numberOfValidStripLayersWithMonoAndStereo();
1980  const auto refPointWrtBS = track.referencePoint() - bsPosition;
1981  const auto vertxy = std::sqrt(refPointWrtBS.perp2());
1982  const auto vertz = refPointWrtBS.z();
1983  const auto chi2 = track.normalizedChi2();
1984  const auto chi2prob = TMath::Prob(track.chi2(), (int)track.ndof());
1985  const bool fillSeedingLayerSets = !seedingLayerSetNames.empty();
1986  const unsigned int seedingLayerSetBin = fillSeedingLayerSets ? getSeedingLayerSetBin(track, ttopo) : 0;
1987  const auto simpvz = simPVPosition ? simPVPosition->z() : 0.0;
1988 
1989  const bool paramsValid = !trackFromSeedFitFailed(track);
1990 
1991  if (paramsValid) {
1992  histograms.h_recoeta[count]->Fill(eta);
1993  histograms.h_recophi[count]->Fill(phi);
1994  histograms.h_recopT[count]->Fill(pt);
1995  histograms.h_recopTvseta[count]->Fill(eta, pt);
1996  histograms.h_recodxy[count]->Fill(dxy);
1997  histograms.h_recodz[count]->Fill(dz);
1998  histograms.h_recochi2[count]->Fill(chi2);
1999  histograms.h_recochi2prob[count]->Fill(chi2prob);
2000  histograms.h_recovertpos[count]->Fill(vertxy);
2001  histograms.h_recozpos[count]->Fill(vertz);
2002  histograms.h_recodr[count]->Fill(dR);
2003  histograms.h_recodrj[count]->Fill(dRJet);
2004  if (fillSeedingLayerSets)
2005  histograms.h_reco_seedingLayerSet[count]->Fill(seedingLayerSetBin);
2006  if (pvPosition) {
2007  histograms.h_recodxypv[count]->Fill(dxypv);
2008  histograms.h_recodzpv[count]->Fill(dzpv);
2009  histograms.h_recodxypvzoomed[count]->Fill(dxypv);
2010  histograms.h_recodzpvzoomed[count]->Fill(dzpv);
2011 
2012  histograms.h_reco_dzpvcut[count]->Fill(std::abs(dzpv));
2013  histograms.h_reco_dzpvsigcut[count]->Fill(std::abs(dzpvsig));
2014  histograms.h_reco_dzpvcut_pt[count]->Fill(std::abs(dzpv), pt);
2015  histograms.h_reco_dzpvsigcut_pt[count]->Fill(std::abs(dzpvsig), pt);
2016  }
2017  if (simPVPosition) {
2018  histograms.h_reco_simpvz[count]->Fill(simpvz);
2019  }
2020  if ((*trackSelectorVsEta)(track, bsPosition)) {
2021  histograms.h_reco2eta[count]->Fill(eta);
2022  }
2023  if ((*trackSelectorVsPt)(track, bsPosition)) {
2024  histograms.h_reco2pT[count]->Fill(pt);
2025  histograms.h_reco2pTvseta[count]->Fill(eta, pt);
2026  }
2027  }
2028  histograms.h_recohit[count]->Fill(nhits);
2029  histograms.h_recolayer[count]->Fill(nlayers);
2030  histograms.h_recopixellayer[count]->Fill(nPixelLayers);
2031  histograms.h_reco3Dlayer[count]->Fill(n3DLayers);
2032  histograms.h_recopu[count]->Fill(numVertices);
2033  if ((*trackSelectorVsPhi)(track, bsPosition)) {
2034  histograms.h_reco2pu[count]->Fill(numVertices);
2035  }
2036 
2037  fillMVAHistos(histograms.h_reco_mva[count],
2038  histograms.h_reco_mvacut[count],
2039  histograms.h_reco_mva_hp[count],
2040  histograms.h_reco_mvacut_hp[count],
2041  mvas,
2042  selectsLoose,
2043  selectsHP);
2044 
2045  if (isMatched) {
2046  if (paramsValid) {
2047  histograms.h_assoc2eta[count]->Fill(eta);
2048  histograms.h_assoc2phi[count]->Fill(phi);
2049  histograms.h_assoc2pT[count]->Fill(pt);
2050  histograms.h_assoc2pTvseta[count]->Fill(eta, pt);
2051  histograms.h_assoc2dxy[count]->Fill(dxy);
2052  histograms.h_assoc2dz[count]->Fill(dz);
2053  histograms.h_assoc2hit[count]->Fill(nhits);
2054  histograms.h_assoc2chi2[count]->Fill(chi2);
2055  histograms.h_assoc2chi2prob[count]->Fill(chi2prob);
2056  histograms.assoc_chi2_vs_eta[count]->Fill(eta, chi2);
2057  histograms.assoc_chi2prob_vs_eta[count]->Fill(eta, chi2prob);
2058  histograms.assoc_chi2_vs_pt[count]->Fill(pt, chi2);
2059  histograms.assoc_chi2prob_vs_pt[count]->Fill(pt, chi2prob);
2060  histograms.h_assoc2vertpos[count]->Fill(vertxy);
2061  histograms.h_assoc2zpos[count]->Fill(vertz);
2062  histograms.h_assoc2dr[count]->Fill(dR);
2063  histograms.h_assoc2drj[count]->Fill(dRJet);
2064  if (fillSeedingLayerSets)
2065  histograms.h_assoc2_seedingLayerSet[count]->Fill(seedingLayerSetBin);
2066  if (pvPosition) {
2067  histograms.h_assoc2dxypv[count]->Fill(dxypv);
2068  histograms.h_assoc2dzpv[count]->Fill(dzpv);
2069  histograms.h_assoc2dxypvzoomed[count]->Fill(dxypv);
2070  histograms.h_assoc2dzpvzoomed[count]->Fill(dzpv);
2071 
2072  histograms.h_assoc2_dzpvcut[count]->Fill(std::abs(dzpv));
2073  histograms.h_assoc2_dzpvsigcut[count]->Fill(std::abs(dzpvsig));
2074  histograms.h_assoc2_dzpvcut_pt[count]->Fill(std::abs(dzpv), pt);
2075  histograms.h_assoc2_dzpvsigcut_pt[count]->Fill(std::abs(dzpvsig), pt);
2076  }
2077  if (simPVPosition) {
2078  histograms.h_assoc2_simpvz[count]->Fill(simpvz);
2079  }
2080  }
2081  histograms.h_assoc2layer[count]->Fill(nlayers);
2082  histograms.h_assoc2pixellayer[count]->Fill(nPixelLayers);
2083  histograms.h_assoc23Dlayer[count]->Fill(n3DLayers);
2084  histograms.h_assoc2pu[count]->Fill(numVertices);
2085 
2086  fillMVAHistos(histograms.h_assoc2_mva[count],
2087  histograms.h_assoc2_mvacut[count],
2088  histograms.h_assoc2_mva_hp[count],
2089  histograms.h_assoc2_mvacut_hp[count],
2090  mvas,
2091  selectsLoose,
2092  selectsHP);
2093  fillMVAHistos(pt,
2094  histograms.h_assoc2_mva_vs_pt[count],
2095  histograms.h_assoc2_mva_vs_pt_hp[count],
2096  mvas,
2097  selectsLoose,
2098  selectsHP);
2099  fillMVAHistos(eta,
2100  histograms.h_assoc2_mva_vs_eta[count],
2101  histograms.h_assoc2_mva_vs_eta_hp[count],
2102  mvas,
2103  selectsLoose,
2104  selectsHP);
2105 
2106  if (histograms.nrecHit_vs_nsimHit_rec2sim[count])
2107  histograms.nrecHit_vs_nsimHit_rec2sim[count]->Fill(track.numberOfValidHits(), nSimHits);
2108  histograms.h_assocFraction[count]->Fill(sharedFraction);
2109  histograms.h_assocSharedHit[count]->Fill(sharedHits);
2110 
2111  if (!doSeedPlots_ && !isChargeMatched) {
2112  histograms.h_misideta[count]->Fill(eta);
2113  histograms.h_misidphi[count]->Fill(phi);
2114  histograms.h_misidpT[count]->Fill(pt);
2115  histograms.h_misidpTvseta[count]->Fill(eta, pt);
2116  histograms.h_misiddxy[count]->Fill(dxy);
2117  histograms.h_misiddz[count]->Fill(dz);
2118  histograms.h_misidhit[count]->Fill(nhits);
2119  histograms.h_misidlayer[count]->Fill(nlayers);
2120  histograms.h_misidpixellayer[count]->Fill(nPixelLayers);
2121  histograms.h_misid3Dlayer[count]->Fill(n3DLayers);
2122  histograms.h_misidpu[count]->Fill(numVertices);
2123  histograms.h_misidchi2[count]->Fill(chi2);
2124  histograms.h_misidchi2prob[count]->Fill(chi2prob);
2125  if (pvPosition) {
2126  histograms.h_misiddxypv[count]->Fill(dxypv);
2127  histograms.h_misiddzpv[count]->Fill(dzpv);
2128  histograms.h_misiddxypvzoomed[count]->Fill(dxypv);
2129  histograms.h_misiddzpvzoomed[count]->Fill(dzpv);
2130  }
2131  }
2132 
2133  if (numAssocRecoTracks > 1) {
2134  if (paramsValid) {
2135  histograms.h_loopereta[count]->Fill(eta);
2136  histograms.h_looperphi[count]->Fill(phi);
2137  histograms.h_looperpT[count]->Fill(pt);
2138  histograms.h_looperpTvseta[count]->Fill(eta, pt);
2139  histograms.h_looperdxy[count]->Fill(dxy);
2140  histograms.h_looperdz[count]->Fill(dz);
2141  histograms.h_looperchi2[count]->Fill(chi2);
2142  histograms.h_looperchi2prob[count]->Fill(chi2prob);
2143  histograms.h_loopervertpos[count]->Fill(vertxy);
2144  histograms.h_looperzpos[count]->Fill(vertz);
2145  histograms.h_looperdr[count]->Fill(dR);
2146  histograms.h_looperdrj[count]->Fill(dRJet);
2147  if (fillSeedingLayerSets)
2148  histograms.h_looper_seedingLayerSet[count]->Fill(seedingLayerSetBin);
2149  if (pvPosition) {
2150  histograms.h_looperdxypv[count]->Fill(dxypv);
2151  histograms.h_looperdzpv[count]->Fill(dzpv);
2152  histograms.h_looperdxypvzoomed[count]->Fill(dxypv);
2153  histograms.h_looperdzpvzoomed[count]->Fill(dzpv);
2154  }
2155  if (simPVPosition) {
2156  histograms.h_looper_simpvz[count]->Fill(simpvz);
2157  }
2158  }
2159  histograms.h_looperhit[count]->Fill(nhits);
2160  histograms.h_looperlayer[count]->Fill(nlayers);
2161  histograms.h_looperpixellayer[count]->Fill(nPixelLayers);
2162  histograms.h_looper3Dlayer[count]->Fill(n3DLayers);
2163  histograms.h_looperpu[count]->Fill(numVertices);
2164  }
2165  if (!isSigMatched) {
2166  if (paramsValid) {
2167  histograms.h_pileupeta[count]->Fill(eta);
2168  histograms.h_pileupphi[count]->Fill(phi);
2169  histograms.h_pileuppT[count]->Fill(pt);
2170  histograms.h_pileuppTvseta[count]->Fill(eta, pt);
2171  histograms.h_pileupdxy[count]->Fill(dxy);
2172  histograms.h_pileupdz[count]->Fill(dz);
2173  histograms.h_pileupchi2[count]->Fill(chi2);
2174  histograms.h_pileupchi2prob[count]->Fill(chi2prob);
2175  histograms.h_pileupvertpos[count]->Fill(vertxy);
2176  histograms.h_pileupzpos[count]->Fill(vertz);
2177  histograms.h_pileupdr[count]->Fill(dR);
2178  histograms.h_pileupdrj[count]->Fill(dRJet);
2179  if (fillSeedingLayerSets)
2180  histograms.h_pileup_seedingLayerSet[count]->Fill(seedingLayerSetBin);
2181  if (pvPosition) {
2182  histograms.h_pileupdxypv[count]->Fill(dxypv);
2183  histograms.h_pileupdzpv[count]->Fill(dzpv);
2184  histograms.h_pileupdxypvzoomed[count]->Fill(dxypv);
2185  histograms.h_pileupdzpvzoomed[count]->Fill(dzpv);
2186 
2187  histograms.h_pileup_dzpvcut[count]->Fill(std::abs(dzpv));
2188  histograms.h_pileup_dzpvsigcut[count]->Fill(std::abs(dzpvsig));
2189  histograms.h_pileup_dzpvcut_pt[count]->Fill(std::abs(dzpv), pt);
2190  histograms.h_pileup_dzpvsigcut_pt[count]->Fill(std::abs(dzpvsig), pt);
2191  }
2192  if (simPVPosition) {
2193  histograms.h_pileup_simpvz[count]->Fill(simpvz);
2194  }
2195  }
2196  histograms.h_pileuphit[count]->Fill(nhits);
2197  histograms.h_pileuplayer[count]->Fill(nlayers);
2198  histograms.h_pileuppixellayer[count]->Fill(nPixelLayers);
2199  histograms.h_pileup3Dlayer[count]->Fill(n3DLayers);
2200  histograms.h_pileuppu[count]->Fill(numVertices);
2201  }
2202  } else { // !isMatched
2203  fillMVAHistos(
2204  pt, histograms.h_fake_mva_vs_pt[count], histograms.h_fake_mva_vs_pt_hp[count], mvas, selectsLoose, selectsHP);
2205  fillMVAHistos(
2206  eta, histograms.h_fake_mva_vs_eta[count], histograms.h_fake_mva_vs_eta_hp[count], mvas, selectsLoose, selectsHP);
2207  }
2208 }
2209 
2211  int count,
2212  const reco::Track& track) const {
2213  //nchi2 and hits global distributions
2214  histograms.h_hits[count]->Fill(track.numberOfValidHits());
2215  histograms.h_losthits[count]->Fill(track.numberOfLostHits());
2216  histograms.h_nmisslayers_inner[count]->Fill(
2218  histograms.h_nmisslayers_outer[count]->Fill(
2220  if (trackFromSeedFitFailed(track))
2221  return;
2222 
2223  histograms.h_nchi2[count]->Fill(track.normalizedChi2());
2224  histograms.h_nchi2_prob[count]->Fill(TMath::Prob(track.chi2(), (int)track.ndof()));
2225  histograms.chi2_vs_nhits[count]->Fill(track.numberOfValidHits(), track.normalizedChi2());
2226  histograms.h_charge[count]->Fill(track.charge());
2227 
2228  //chi2 and #hit vs eta: fill 2D histos
2229  const auto eta = getEta(track.eta());
2230  histograms.chi2_vs_eta[count]->Fill(eta, track.normalizedChi2());
2231  histograms.nhits_vs_eta[count]->Fill(eta, track.numberOfValidHits());
2232  const auto pt = getPt(sqrt(track.momentum().perp2()));
2233  histograms.chi2_vs_pt[count]->Fill(pt, track.normalizedChi2());
2234  const auto pxbHits = track.hitPattern().numberOfValidPixelBarrelHits();
2235  const auto pxfHits = track.hitPattern().numberOfValidPixelEndcapHits();
2236  const auto tibHits = track.hitPattern().numberOfValidStripTIBHits();
2237  const auto tidHits = track.hitPattern().numberOfValidStripTIDHits();
2238  const auto tobHits = track.hitPattern().numberOfValidStripTOBHits();
2239  const auto tecHits = track.hitPattern().numberOfValidStripTECHits();
2240  histograms.nPXBhits_vs_eta[count]->Fill(eta, pxbHits);
2241  histograms.nPXFhits_vs_eta[count]->Fill(eta, pxfHits);
2242  histograms.nPXLhits_vs_eta[count]->Fill(eta, pxbHits + pxfHits);
2243  histograms.nTIBhits_vs_eta[count]->Fill(eta, tibHits);
2244  histograms.nTIDhits_vs_eta[count]->Fill(eta, tidHits);
2245  histograms.nTOBhits_vs_eta[count]->Fill(eta, tobHits);
2246  histograms.nTEChits_vs_eta[count]->Fill(eta, tecHits);
2247  histograms.nSTRIPhits_vs_eta[count]->Fill(eta, tibHits + tidHits + tobHits + tecHits);
2250  if (doMTDPlots_) {
2251  // const auto mtdHits = track.hitPattern().numberOfValidTimingHits();
2252  const auto btlHits = track.hitPattern().numberOfValidTimingBTLHits();
2253  const auto etlHits = track.hitPattern().numberOfValidTimingETLHits();
2254  histograms.nMTDhits_vs_eta[count]->Fill(eta, btlHits + etlHits);
2255  histograms.nBTLhits_vs_eta[count]->Fill(eta, btlHits);
2256  histograms.nETLhits_vs_eta[count]->Fill(eta, etlHits);
2257  }
2258  int LayersAll = track.hitPattern().stripLayersWithMeasurement();
2259  int Layers2D = track.hitPattern().numberOfValidStripLayersWithMonoAndStereo();
2260  int Layers1D = LayersAll - Layers2D;
2261  histograms.nSTRIPlayersWithMeas_vs_eta[count]->Fill(eta, LayersAll);
2262  histograms.nSTRIPlayersWith1dMeas_vs_eta[count]->Fill(eta, Layers1D);
2263  histograms.nSTRIPlayersWith2dMeas_vs_eta[count]->Fill(eta, Layers2D);
2264 
2265  histograms.nlosthits_vs_eta[count]->Fill(eta, track.numberOfLostHits());
2266 }
2267 
2269  int count,
2270  int assTracks,
2271  int numRecoTracks,
2272  int numRecoTracksSelected,
2273  int numSimTracksSelected) const {
2274  histograms.h_tracks[count]->Fill(assTracks);
2275  histograms.h_fakes[count]->Fill(numRecoTracks - assTracks);
2276  if (histograms.nrec_vs_nsim[count])
2277  histograms.nrec_vs_nsim[count]->Fill(numSimTracksSelected, numRecoTracksSelected);
2278 }
2279 
2281  int count,
2282  const TrackingParticle::Vector& momentumTP,
2283  const TrackingParticle::Point& vertexTP,
2284  int chargeTP,
2285  const reco::Track& track,
2286  const math::XYZPoint& bsPosition) const {
2287  if (trackFromSeedFitFailed(track))
2288  return;
2289 
2290  // evaluation of TP parameters
2291  double qoverpSim = chargeTP / sqrt(momentumTP.x() * momentumTP.x() + momentumTP.y() * momentumTP.y() +
2292  momentumTP.z() * momentumTP.z());
2293  double lambdaSim = M_PI / 2 - momentumTP.theta();
2294  double phiSim = momentumTP.phi();
2295  double dxySim = TrackingParticleIP::dxy(vertexTP, momentumTP, bsPosition);
2296  double dzSim = TrackingParticleIP::dz(vertexTP, momentumTP, bsPosition);
2297 
2298  // reco::Track::ParameterVector rParameters = track.parameters(); // UNUSED
2299 
2300  double qoverpRec(0);
2301  double qoverpErrorRec(0);
2302  double ptRec(0);
2303  double ptErrorRec(0);
2304  double lambdaRec(0);
2305  double lambdaErrorRec(0);
2306  double phiRec(0);
2307  double phiErrorRec(0);
2308 
2309  /* TO BE FIXED LATER -----------
2310  //loop to decide whether to take gsfTrack (utilisation of mode-function) or common track
2311  const GsfTrack* gsfTrack(0);
2312  if(useGsf){
2313  gsfTrack = dynamic_cast<const GsfTrack*>(&(*track));
2314  if (gsfTrack==0) edm::LogInfo("TrackValidator") << "Trying to access mode for a non-GsfTrack";
2315  }
2316 
2317  if (gsfTrack) {
2318  // get values from mode
2319  getRecoMomentum(*gsfTrack, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec,
2320  lambdaRec,lambdaErrorRec, phiRec, phiErrorRec);
2321  }
2322 
2323  else {
2324  // get values from track (without mode)
2325  getRecoMomentum(*track, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec,
2326  lambdaRec,lambdaErrorRec, phiRec, phiErrorRec);
2327  }
2328  */
2329  getRecoMomentum(track, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec, lambdaRec, lambdaErrorRec, phiRec, phiErrorRec);
2330  // -------------
2331 
2332  double ptError = ptErrorRec;
2333  double ptres = ptRec - sqrt(momentumTP.perp2());
2334  double etares = track.eta() - momentumTP.Eta();
2335 
2336  double dxyRec = track.dxy(bsPosition);
2337  double dzRec = track.dz(bsPosition);
2338 
2339  const auto phiRes = phiRec - phiSim;
2340  const auto dxyRes = dxyRec - dxySim;
2341  const auto dzRes = dzRec - dzSim;
2342  const auto cotThetaRes = 1 / tan(M_PI * 0.5 - lambdaRec) - 1 / tan(M_PI * 0.5 - lambdaSim);
2343 
2344  // eta residue; pt, k, theta, phi, dxy, dz pulls
2345  double qoverpPull = (qoverpRec - qoverpSim) / qoverpErrorRec;
2346  double thetaPull = (lambdaRec - lambdaSim) / lambdaErrorRec;
2347  double phiPull = phiRes / phiErrorRec;
2348  double dxyPull = dxyRes / track.dxyError();
2349  double dzPull = dzRes / track.dzError();
2350 
2351 #ifdef EDM_ML_DEBUG
2352  double contrib_Qoverp = ((qoverpRec - qoverpSim) / qoverpErrorRec) * ((qoverpRec - qoverpSim) / qoverpErrorRec) / 5;
2353  double contrib_dxy = ((dxyRec - dxySim) / track.dxyError()) * ((dxyRec - dxySim) / track.dxyError()) / 5;
2354  double contrib_dz = ((dzRec - dzSim) / track.dzError()) * ((dzRec - dzSim) / track.dzError()) / 5;
2355  double contrib_theta = ((lambdaRec - lambdaSim) / lambdaErrorRec) * ((lambdaRec - lambdaSim) / lambdaErrorRec) / 5;
2356  double contrib_phi = ((phiRec - phiSim) / phiErrorRec) * ((phiRec - phiSim) / phiErrorRec) / 5;
2357 
2358  LogTrace("TrackValidatorTEST")
2359  //<< "assocChi2=" << tp.begin()->second << "\n"
2360  << ""
2361  << "\n"
2362  << "ptREC=" << ptRec << "\n"
2363  << "etaREC=" << track.eta() << "\n"
2364  << "qoverpREC=" << qoverpRec << "\n"
2365  << "dxyREC=" << dxyRec << "\n"
2366  << "dzREC=" << dzRec << "\n"
2367  << "thetaREC=" << track.theta() << "\n"
2368  << "phiREC=" << phiRec << "\n"
2369  << ""
2370  << "\n"
2371  << "qoverpError()=" << qoverpErrorRec << "\n"
2372  << "dxyError()=" << track.dxyError() << "\n"
2373  << "dzError()=" << track.dzError() << "\n"
2374  << "thetaError()=" << lambdaErrorRec << "\n"
2375  << "phiError()=" << phiErrorRec << "\n"
2376  << ""
2377  << "\n"
2378  << "ptSIM=" << sqrt(momentumTP.perp2()) << "\n"
2379  << "etaSIM=" << momentumTP.Eta() << "\n"
2380  << "qoverpSIM=" << qoverpSim << "\n"
2381  << "dxySIM=" << dxySim << "\n"
2382  << "dzSIM=" << dzSim << "\n"
2383  << "thetaSIM=" << M_PI / 2 - lambdaSim << "\n"
2384  << "phiSIM=" << phiSim << "\n"
2385  << ""
2386  << "\n"
2387  << "contrib_Qoverp=" << contrib_Qoverp << "\n"
2388  << "contrib_dxy=" << contrib_dxy << "\n"
2389  << "contrib_dz=" << contrib_dz << "\n"
2390  << "contrib_theta=" << contrib_theta << "\n"
2391  << "contrib_phi=" << contrib_phi << "\n"
2392  << ""
2393  << "\n"
2394  << "chi2PULL=" << contrib_Qoverp + contrib_dxy + contrib_dz + contrib_theta + contrib_phi << "\n";
2395 #endif
2396 
2397  histograms.h_pullQoverp[count]->Fill(qoverpPull);
2398  histograms.h_pullTheta[count]->Fill(thetaPull);
2399  histograms.h_pullPhi[count]->Fill(phiPull);
2400  histograms.h_pullDxy[count]->Fill(dxyPull);
2401  histograms.h_pullDz[count]->Fill(dzPull);
2402 
2403  const auto etaSim = getEta(momentumTP.eta());
2404  const auto ptSim = getPt(sqrt(momentumTP.perp2()));
2405 
2406  histograms.h_pt[count]->Fill(ptres / ptError);
2407  histograms.h_eta[count]->Fill(etares);
2408  //histograms.etares_vs_eta[count]->Fill(getEta(track.eta()),etares);
2409  histograms.etares_vs_eta[count]->Fill(etaSim, etares);
2410 
2411  //resolution of track params: fill 2D histos
2412  histograms.dxyres_vs_eta[count]->Fill(etaSim, dxyRes);
2413  histograms.ptres_vs_eta[count]->Fill(etaSim, ptres / ptRec);
2414  histograms.dzres_vs_eta[count]->Fill(etaSim, dzRes);
2415  histograms.phires_vs_eta[count]->Fill(etaSim, phiRes);
2416  histograms.cotThetares_vs_eta[count]->Fill(etaSim, cotThetaRes);
2417 
2418  //same as before but vs pT
2419  histograms.dxyres_vs_pt[count]->Fill(ptSim, dxyRes);
2420  histograms.ptres_vs_pt[count]->Fill(ptSim, ptres / ptRec);
2421  histograms.dzres_vs_pt[count]->Fill(ptSim, dzRes);
2422  histograms.phires_vs_pt[count]->Fill(ptSim, phiRes);
2423  histograms.cotThetares_vs_pt[count]->Fill(ptSim, cotThetaRes);
2424 
2425  //pulls of track params vs eta: fill 2D histos
2426  histograms.dxypull_vs_eta[count]->Fill(etaSim, dxyPull);
2427  histograms.ptpull_vs_eta[count]->Fill(etaSim, ptres / ptError);
2428  histograms.dzpull_vs_eta[count]->Fill(etaSim, dzPull);
2429  histograms.phipull_vs_eta[count]->Fill(etaSim, phiPull);
2430  histograms.thetapull_vs_eta[count]->Fill(etaSim, thetaPull);
2431 
2432  //plots vs phi
2433  histograms.nhits_vs_phi[count]->Fill(phiRec, track.numberOfValidHits());
2434  histograms.chi2_vs_phi[count]->Fill(phiRec, track.normalizedChi2());
2435  histograms.ptmean_vs_eta_phi[count]->Fill(phiRec, getEta(track.eta()), ptRec);
2436  histograms.phimean_vs_eta_phi[count]->Fill(phiRec, getEta(track.eta()), phiRec);
2437 
2438  histograms.ptres_vs_phi[count]->Fill(phiSim, ptres / ptRec);
2439  histograms.phires_vs_phi[count]->Fill(phiSim, phiRes);
2440  histograms.ptpull_vs_phi[count]->Fill(phiSim, ptres / ptError);
2441  histograms.phipull_vs_phi[count]->Fill(phiSim, phiPull);
2442  histograms.thetapull_vs_phi[count]->Fill(phiSim, thetaPull);
2443 }
2444 
2446  double& pt,
2447  double& ptError,
2448  double& qoverp,
2449  double& qoverpError,
2450  double& lambda,
2451  double& lambdaError,
2452  double& phi,
2453  double& phiError) const {
2454  pt = track.pt();
2455  ptError = track.ptError();
2456  qoverp = track.qoverp();
2457  qoverpError = track.qoverpError();
2458  lambda = track.lambda();
2459  lambdaError = track.lambdaError();
2460  phi = track.phi();
2461  phiError = track.phiError();
2462  // cout <<"test1" << endl;
2463 }
2464 
2466  double& pt,
2467  double& ptError,
2468  double& qoverp,
2469  double& qoverpError,
2470  double& lambda,
2471  double& lambdaError,
2472  double& phi,
2473  double& phiError) const {
2474  pt = gsfTrack.ptMode();
2475  ptError = gsfTrack.ptModeError();
2476  qoverp = gsfTrack.qoverpMode();
2477  qoverpError = gsfTrack.qoverpModeError();
2478  lambda = gsfTrack.lambdaMode();
2479  lambdaError = gsfTrack.lambdaModeError();
2480  phi = gsfTrack.phiMode();
2481  phiError = gsfTrack.phiModeError();
2482  // cout <<"test2" << endl;
2483 }
2484 
2486  if (useFabsEta)
2487  return fabs(eta);
2488  else
2489  return eta;
2490 }
2491 
2493  if (useInvPt && pt != 0)
2494  return 1 / pt;
2495  else
2496  return pt;
2497 }
2498 
2500  const TrackerTopology& ttopo) const {
2501  if (track.seedRef().isNull() || !track.seedRef().isAvailable())
2502  return seedingLayerSetNames.size() - 1;
2503 
2504  const TrajectorySeed& seed = *(track.seedRef());
2505  const auto hitRange = seed.recHits();
2506  SeedingLayerSetId searchId;
2507  const int nhits = std::distance(hitRange.first, hitRange.second);
2508  if (nhits > static_cast<int>(std::tuple_size<SeedingLayerSetId>::value)) {
2509  LogDebug("TrackValidator") << "Got seed with " << nhits << " hits, but I have a hard-coded maximum of "
2511  << ", classifying the seed as 'unknown'. Please increase the maximum in "
2512  "MTVHistoProducerAlgoForTracker.h if needed.";
2513  return seedingLayerSetNames.size() - 1;
2514  }
2515  int i = 0;
2516  for (auto iHit = hitRange.first; iHit != hitRange.second; ++iHit, ++i) {
2517  DetId detId = iHit->geographicalId();
2518 
2519  if (detId.det() != DetId::Tracker) {
2520  throw cms::Exception("LogicError") << "Encountered seed hit detId " << detId.rawId() << " not from Tracker, but "
2521  << detId.det();
2522  }
2523 
2525  bool subdetStrip = false;
2526  switch (detId.subdetId()) {
2529  break;
2532  break;
2533  case StripSubdetector::TIB:
2534  subdet = GeomDetEnumerators::TIB;
2535  subdetStrip = true;
2536  break;
2537  case StripSubdetector::TID:
2538  subdet = GeomDetEnumerators::TID;
2539  subdetStrip = true;
2540  break;
2541  case StripSubdetector::TOB:
2542  subdet = GeomDetEnumerators::TOB;
2543  subdetStrip = true;
2544  break;
2545  case StripSubdetector::TEC:
2546  subdet = GeomDetEnumerators::TEC;
2547  subdetStrip = true;
2548  break;
2549  default:
2550  throw cms::Exception("LogicError") << "Unknown subdetId " << detId.subdetId();
2551  };
2552 
2553  TrackerDetSide side = static_cast<TrackerDetSide>(ttopo.side(detId));
2554 
2555  // Even with the recent addition of
2556  // SeedingLayerSetsBuilder::fillDescription() this assumption is a
2557  // bit ugly.
2558  const bool isStripMono = subdetStrip && trackerHitRTTI::isSingle(*iHit);
2559  searchId[i] =
2560  SeedingLayerId(SeedingLayerSetsBuilder::SeedingLayerId(subdet, side, ttopo.layer(detId)), isStripMono);
2561  }
2562  auto found = seedingLayerSetToBin.find(searchId);
2563  if (found == seedingLayerSetToBin.end()) {
2564  return seedingLayerSetNames.size() - 1;
2565  }
2566  return found->second;
2567 }
2568 
2570  int count,
2571  const reco::GenParticle& tp,
2572  const TrackingParticle::Vector& momentumTP,
2573  const TrackingParticle::Point& vertexTP,
2574  double dxySim,
2575  double dzSim,
2576  int nSimHits,
2577  const reco::Track* track,
2578  int numVertices) const {
2579  bool isMatched = track;
2580 
2581  if ((*GpSelectorForEfficiencyVsEta)(tp)) {
2582  //effic vs eta
2583  histograms.h_simuleta[count]->Fill(getEta(momentumTP.eta()));
2584  if (isMatched)
2585  histograms.h_assoceta[count]->Fill(getEta(momentumTP.eta()));
2586  }
2587 
2588  if ((*GpSelectorForEfficiencyVsPhi)(tp)) {
2589  histograms.h_simulphi[count]->Fill(momentumTP.phi());
2590  if (isMatched)
2591  histograms.h_assocphi[count]->Fill(momentumTP.phi());
2592  //effic vs hits
2593  histograms.h_simulhit[count]->Fill((int)nSimHits);
2594  if (isMatched) {
2595  histograms.h_assochit[count]->Fill((int)nSimHits);
2596  if (histograms.nrecHit_vs_nsimHit_sim2rec[count])
2597  histograms.nrecHit_vs_nsimHit_sim2rec[count]->Fill(track->numberOfValidHits(), nSimHits);
2598  }
2599  //effic vs pu
2600  histograms.h_simulpu[count]->Fill(numVertices);
2601  if (isMatched)
2602  histograms.h_assocpu[count]->Fill(numVertices);
2603  //efficiency vs dR
2604  //not implemented for now
2605  }
2606 
2607  if ((*GpSelectorForEfficiencyVsPt)(tp)) {
2608  histograms.h_simulpT[count]->Fill(getPt(sqrt(momentumTP.perp2())));
2609  histograms.h_simulpTvseta[count]->Fill(getEta(momentumTP.eta()), getPt(sqrt(momentumTP.perp2())));
2610  if (isMatched) {
2611  histograms.h_assocpT[count]->Fill(getPt(sqrt(momentumTP.perp2())));
2612  histograms.h_assocpTvseta[count]->Fill(getEta(momentumTP.eta()), getPt(sqrt(momentumTP.perp2())));
2613  }
2614  }
2615 
2616  if ((*GpSelectorForEfficiencyVsVTXR)(tp)) {
2617  histograms.h_simuldxy[count]->Fill(dxySim);
2618  if (isMatched)
2619  histograms.h_assocdxy[count]->Fill(dxySim);
2620 
2621  histograms.h_simulvertpos[count]->Fill(sqrt(vertexTP.perp2()));
2622  if (isMatched)
2623  histograms.h_assocvertpos[count]->Fill(sqrt(vertexTP.perp2()));
2624  }
2625 
2626  if ((*GpSelectorForEfficiencyVsVTXZ)(tp)) {
2627  histograms.h_simuldz[count]->Fill(dzSim);
2628  if (isMatched)
2629  histograms.h_assocdz[count]->Fill(dzSim);
2630 
2631  histograms.h_simulzpos[count]->Fill(vertexTP.z());
2632  if (isMatched)
2633  histograms.h_assoczpos[count]->Fill(vertexTP.z());
2634  }
2635 }
2636 
2638  int count,
2639  int seedsFitFailed,
2640  int seedsTotal) const {
2641  histograms.h_seedsFitFailed[count]->Fill(seedsFitFailed);
2642  histograms.h_seedsFitFailedFraction[count]->Fill(static_cast<double>(seedsFitFailed) / seedsTotal);
2643 }
#define LogDebug(id)
size
Write out results.
double qoverp() const
q / p
Definition: TrackBase.h:578
double phiModeError() const
error on phi from mode
Definition: GsfTrack.h:96
const edm::RefToBase< TrajectorySeed > & seedRef() const
Definition: Track.h:155
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
static constexpr auto TEC
void fill_trackBased_histos(const Histograms &histograms, int count, int assTracks, int numRecoTracks, int numRecoTracksSelected, int numSimTracksSelected) const
T getUntrackedParameter(std::string const &, T const &) const
void fill_generic_simTrack_histos(const Histograms &histograms, const TrackingParticle::Vector &, const TrackingParticle::Point &vertex, int bx) const
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
const Point & referencePoint() const
Reference point on the track.
Definition: TrackBase.h:632
std::vector< std::vector< METype > > h_assoc2_mva_vs_eta_hp
std::vector< std::vector< METype > > h_assoc_mvacut
std::unique_ptr< TrackingParticleSelector > TpSelectorForEfficiencyVsPt
std::vector< std::vector< METype > > h_fake_mva_vs_pt_hp
std::unique_ptr< TrackingParticleSelector > TpSelectorForEfficiencyVsEta
void fill_seed_histos(const Histograms &histograms, int count, int seedsFitFailed, int seedsTotal) const
std::vector< std::vector< METype > > h_assoc2_mva_vs_pt
bool trackFromSeedFitFailed(const reco::Track &track)
virtual void disableAlphanumeric()
std::unique_ptr< GenParticleCustomSelector > GpSelectorForEfficiencyVsVTXR
std::vector< std::vector< METype > > h_assoc2_mva_hp
double lambdaMode() const
Lambda angle from mode.
Definition: GsfTrack.h:43
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
Definition: TrackBase.h:572
bool isAvailable() const
Definition: RefToBase.h:119
void getRecoMomentum(const reco::Track &track, double &pt, double &ptError, double &qoverp, double &qoverpError, double &lambda, double &lambdaError, double &phi, double &phiError) const
retrieval of reconstructed momentum components from reco::Track (== mean values for GSF) ...
std::unique_ptr< TrackingParticleSelector > TpSelectorForEfficiencyVsVTXR
std::map< SeedingLayerSetId, unsigned int > seedingLayerSetToBin
double theta() const
polar angle
Definition: TrackBase.h:581
double dxyError() const
error on dxy
Definition: TrackBase.h:716
TrackerDetSide
Definition: TrackerDetSide.h:4
std::vector< std::vector< METype > > h_assoc2_mva_vs_eta
void fill_ResoAndPull_recoTrack_histos(const Histograms &histograms, int count, const TrackingParticle::Vector &momentumTP, const TrackingParticle::Point &vertexTP, int chargeTP, const reco::Track &track, const math::XYZPoint &bsPosition) const
S make(const edm::ParameterSet &cfg)
std::vector< std::vector< METype > > h_reco_mva
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
unsigned int side(const DetId &id) const
std::unique_ptr< GenParticleCustomSelector > GpSelectorForEfficiencyVsVTXZ
std::vector< std::vector< METype > > h_assoc2_mva_vs_pt_hp
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:614
unsigned short numberOfLostHits() const
number of cases where track crossed a layer without getting a hit.
Definition: TrackBase.h:743
void fill_generic_recoTrack_histos(const Histograms &histograms, int count, const reco::Track &track, const TrackerTopology &ttopo, const math::XYZPoint &bsPosition, const math::XYZPoint *pvPosition, const TrackingVertex::LorentzVector *simPVPosition, bool isMatched, bool isSigMatched, bool isChargeMatched, int numAssocRecoTracks, int numVertices, int nSimHits, double sharedFraction, double dR, double dR_jet, const std::vector< float > &mvas, unsigned int selectsLoose, unsigned int selectsHP) const
std::vector< std::vector< METype > > h_dedx_estim
std::unique_ptr< GenParticleCustomSelector > GpSelectorForEfficiencyVsPt
void bookSimHistos(DQMStore::IBooker &ibook, Histograms &histograms)
std::vector< std::vector< METype > > h_simul2_mvacut_hp
int numberOfValidTimingBTLHits() const
Definition: HitPattern.h:853
void bookSimTrackPVAssociationHistos(DQMStore::IBooker &ibook, Histograms &histograms)
std::unique_ptr< RecoTrackSelectorBase > trackSelectorVsPhi
int pixelLayersWithMeasurement() const
Definition: HitPattern.cc:492
const Vector & momentum() const
track momentum vector
Definition: TrackBase.h:629
unsigned int getSeedingLayerSetBin(const reco::Track &track, const TrackerTopology &ttopo) const
void fill_simTrackBased_histos(const Histograms &histograms, int numSimTracks) const
std::vector< std::vector< METype > > h_reco_mva_hp
int trackerLayersWithMeasurement() const
Definition: HitPattern.cc:513
int numberOfValidStripTOBHits() const
Definition: HitPattern.h:825
std::vector< std::vector< METype > > h_fake_mva_vs_pt
void fill_recoAssociated_simTrack_histos(const Histograms &histograms, int count, const TrackingParticle &tp, const TrackingParticle::Vector &momentumTP, const TrackingParticle::Point &vertexTP, double dxy, double dz, double dxyPV, double dzPV, int nSimHits, int nSimLayers, int nSimPixelLayers, int nSimStripMonoAndStereoLayers, const reco::Track *track, int numVertices, double dR, double dR_jet, const math::XYZPoint *pvPosition, const TrackingVertex::LorentzVector *simPVPosition, const math::XYZPoint &bsPosition, const std::vector< float > &mvas, unsigned int selectsLoose, unsigned int selectsHP) const
dqm::dqmstoreimpl::DQMStore DQMStore
Definition: DQMStore.h:706
std::unique_ptr< GenParticleCustomSelector > GpSelectorForEfficiencyVsPhi
double qoverpMode() const
q/p from mode
Definition: GsfTrack.h:39
float dEdx() const
Definition: DeDxData.cc:11
double ptModeError() const
error on Pt (set to 1000 TeV if charge==0 for safety) from mode
Definition: GsfTrack.h:81
TrackAlgorithm algo() const
Definition: TrackBase.h:526
void Fill(long long x)
math::XYZPointD Point
point in the space
math::XYZTLorentzVectorD LorentzVector
std::tuple< GeomDetEnumerators::SubDetector, TrackerDetSide, int > SeedingLayerId
unsigned int numberOfMeasurements() const
Definition: DeDxData.cc:18
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:617
int numberOfValidStripLayersWithMonoAndStereo(uint16_t stripdet, uint16_t layer) const
Definition: HitPattern.cc:348
int numberOfValidPixelBarrelHits() const
Definition: HitPattern.h:805
std::tuple< SeedingLayerSetsBuilder::SeedingLayerId, bool > SeedingLayerId
double chi2() const
chi-squared of the fit
Definition: TrackBase.h:566
auto dz(const T_Vertex &vertex, const T_Momentum &momentum, const T_Point &point)
std::vector< std::vector< METype > > h_assoc_mvacut_hp
double ndof() const
number of degrees of freedom of the fit
Definition: TrackBase.h:569
T sqrt(T t)
Definition: SSEVec.h:19
std::unique_ptr< GenParticleCustomSelector > GpSelectorForEfficiencyVsEta
double pt() const
track transverse momentum
Definition: TrackBase.h:602
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:124
std::unique_ptr< TrackingParticleSelector > generalTpSelector
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, char const *option="s")
Definition: DQMStore.cc:333
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Definition: TrackBase.h:696
double phiError() const
error on phi
Definition: TrackBase.h:713
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
void fill_simAssociated_recoTrack_histos(const Histograms &histograms, int count, const reco::Track &track) const
std::unique_ptr< RecoTrackSelectorBase > trackSelectorVsPt
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
void bookRecoPVAssociationHistos(DQMStore::IBooker &ibook, Histograms &histograms)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int numberOfValidStripTIDHits() const
Definition: HitPattern.h:821
double lambda() const
Lambda angle.
Definition: TrackBase.h:584
bool isMatched(TrackingRecHit const &hit)
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:740
int numberOfValidStripTECHits() const
Definition: HitPattern.h:829
int numberOfValidTimingETLHits() const
Definition: HitPattern.h:857
MonitorElement * bookProfile2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, double lowZ, double highZ, char const *option="s")
Definition: DQMStore.cc:381
static constexpr auto TOB
void eraseSimpleParameter(std::string const &name)
void copyForModify(ParameterSet const &other)
Definition: ParameterSet.cc:93
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
#define LogTrace(id)
bool isTrackerStrip(GeomDetEnumerators::SubDetector m)
#define M_PI
double qoverpError() const
error on signed transverse curvature
Definition: TrackBase.h:693
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
Definition: TrackBase.h:596
void fill_dedx_recoTrack_histos(const Histograms &histograms, int count, const edm::RefToBase< reco::Track > &trackref, const std::vector< const edm::ValueMap< reco::DeDxData > * > &v_dEdx) const
double dzError() const
error on dz
Definition: TrackBase.h:725
static SeedingLayerId nameToEnumId(const std::string &name)
MTVHistoProducerAlgoForTracker(const edm::ParameterSet &pset, const bool doSeedPlots)
std::array< SeedingLayerId, 4 > SeedingLayerSetId
Definition: DetId.h:17
TrackAlgorithm originalAlgo() const
Definition: TrackBase.h:527
std::vector< std::vector< METype > > h_fake_mva_vs_eta_hp
void fill_duplicate_histos(const Histograms &histograms, int count, const reco::Track &track1, const reco::Track &track2) const
static constexpr auto TIB
std::unique_ptr< TrackingParticleSelector > TpSelectorForEfficiencyVsPhi
std::vector< std::vector< METype > > h_fake_mva_vs_eta
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:483
bool isSingle(TrackingRecHit const &hit)
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
double qoverpModeError() const
error on signed transverse curvature from mode
Definition: GsfTrack.h:79
bool isNull() const
Checks for null.
Definition: RefToBase.h:295
std::string algoName() const
Definition: TrackBase.h:529
int stripLayersWithMeasurement() const
Definition: HitPattern.h:975
std::vector< std::vector< METype > > h_assoc2_mva
range recHits() const
int numberOfValidStripTIBHits() const
Definition: HitPattern.h:817
static const std::string algoNames[]
Definition: TrackBase.h:147
int numberOfLostHits(HitCategory category) const
Definition: HitPattern.h:861
unsigned int layer(const DetId &id) const
int numberOfValidPixelEndcapHits() const
Definition: HitPattern.h:809
std::unique_ptr< TrackingParticleSelector > TpSelectorForEfficiencyVsVTXZ
double lambdaError() const
error on lambda
Definition: TrackBase.h:707
std::vector< std::string > seedingLayerSetNames
void bookSimTrackHistos(DQMStore::IBooker &ibook, Histograms &histograms, bool doResolutionPlots)
HLT enums.
auto dxy(const T_Vertex &vertex, const T_Momentum &momentum, const T_Point &point)
void bookRecodEdxHistos(DQMStore::IBooker &ibook, Histograms &histograms)
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Definition: DQMStore.cc:266
unsigned short found() const
Number of valid hits on track.
Definition: Track.h:142
double phiMode() const
azimuthal angle of momentum vector from mode
Definition: GsfTrack.h:55
Monte Carlo truth information used for tracking validation.
int charge() const
track electric charge
Definition: TrackBase.h:575
std::vector< std::vector< METype > > h_dedx_nom
std::vector< std::vector< METype > > h_reco_mvacut
double lambdaModeError() const
error on lambda from mode
Definition: GsfTrack.h:92
std::unique_ptr< GenParticleCustomSelector > generalGpSelector
std::vector< std::vector< METype > > h_dedx_sat
void setBinLabels(std::vector< TH2F > &depth)
math::XYZVectorD Vector
point in the space
void bookRecoHistos(DQMStore::IBooker &ibook, Histograms &histograms, bool doResolutionPlots)
std::unique_ptr< RecoTrackSelectorBase > trackSelectorVsEta
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Definition: TrackBase.h:587
static std::unique_ptr< RecoTrackSelectorBase > makeRecoTrackSelectorFromTPSelectorParameters(const edm::ParameterSet &pset)
static constexpr auto TID
double ptMode() const
track transverse momentum from mode
Definition: GsfTrack.h:47
int numberOfSaturatedMeasurements() const
Definition: DeDxData.cc:20
std::vector< std::vector< METype > > h_assoc2_mvacut
void bookSeedHistos(DQMStore::IBooker &ibook, Histograms &histograms)
void bookMVAHistos(DQMStore::IBooker &ibook, Histograms &histograms, size_t nMVAs)
std::vector< std::vector< METype > > h_simul2_mvacut
#define constexpr
std::vector< std::vector< METype > > h_reco_mvacut_hp
std::vector< std::vector< METype > > h_assoc2_mvacut_hp
static std::vector< std::vector< std::string > > layerNamesInSets(const std::vector< std::string > &namesPSet)
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46