CMS 3D CMS Logo

MTVHistoProducerAlgoForTracker.cc
Go to the documentation of this file.
4 
9 
11 
12 
13 #include "TMath.h"
14 #include <TF1.h>
15 
16 using namespace std;
17 
18 namespace {
19  void BinLogX(TH1 *h) {
20  TAxis *axis = h->GetXaxis();
21  int bins = axis->GetNbins();
22 
23  float from = axis->GetXmin();
24  float to = axis->GetXmax();
25  float width = (to - from) / bins;
26  std::vector<float> new_bins(bins+1, 0);
27 
28  for (int i = 0; i <= bins; i++) {
29  new_bins[i] = TMath::Power(10, from + i * width);
30  }
31  axis->Set(bins, new_bins.data());
32  }
33 
34  template <typename... Args>
35  ConcurrentMonitorElement make1DIfLogX(DQMStore::ConcurrentBooker& ibook, bool logx, Args&& ...args) {
36  auto h = std::make_unique<TH1F>(std::forward<Args>(args)...);
37  if(logx) BinLogX(h.get());
38  const auto& name = h->GetName();
39  return ibook.book1D(name, h.release());
40  }
41 
42  template <typename... Args>
43  ConcurrentMonitorElement makeProfileIfLogX(DQMStore::ConcurrentBooker& ibook, bool logx, Args&& ...args) {
44  auto h = std::make_unique<TProfile>(std::forward<Args>(args)...);
45  if(logx) BinLogX(h.get());
46  const auto& name = h->GetName();
47  return ibook.bookProfile(name, h.release());
48  }
49 
50  template <typename... Args>
51  ConcurrentMonitorElement make2DIfLogX(DQMStore::ConcurrentBooker& ibook, bool logx, Args&& ...args) {
52  auto h = std::make_unique<TH2F>(std::forward<Args>(args)...);
53  if(logx) BinLogX(h.get());
54  const auto& name = h->GetName();
55  return ibook.book2D(name, h.release());
56  }
57 
58  void setBinLabels(ConcurrentMonitorElement& h, const std::vector<std::string>& labels) {
59  for(size_t i=0; i<labels.size(); ++i) {
60  h.setBinLabel(i+1, labels[i]);
61  }
63  }
64 
65  void setBinLabelsAlgo(ConcurrentMonitorElement& h, int axis=1) {
66  for(size_t i=0; i<reco::TrackBase::algoSize; ++i) {
67  h.setBinLabel(i+1, reco::TrackBase::algoName(static_cast<reco::TrackBase::TrackAlgorithm>(i)), axis);
68  }
70  }
71 
72  void fillMVAHistos(const std::vector<ConcurrentMonitorElement>& h_mva,
73  const std::vector<ConcurrentMonitorElement>& h_mvacut,
74  const std::vector<ConcurrentMonitorElement>& h_mva_hp,
75  const std::vector<ConcurrentMonitorElement>& h_mvacut_hp,
76  const std::vector<float>& mvas,
77  unsigned int selectsLoose, unsigned int selectsHP) {
78  // Fill MVA1 histos with all tracks, MVA2 histos only with tracks
79  // not selected by MVA1, etc.
80  for(size_t i=0; i<mvas.size(); ++i) {
81  if(i<=selectsLoose) {
82  h_mva[i].fill(mvas[i]);
83  h_mvacut[i].fill(mvas[i]);
84  }
85  if(i>=1 && i<=selectsHP) {
86  h_mva_hp[i].fill(mvas[i]);
87  h_mvacut_hp[i].fill(mvas[i]);
88  }
89  }
90  }
91 
92  void fillMVAHistos(double xval,
93  const std::vector<ConcurrentMonitorElement>& h_mva,
94  const std::vector<ConcurrentMonitorElement>& h_mva_hp,
95  const std::vector<float>& mvas,
96  unsigned int selectsLoose, unsigned int selectsHP) {
97  // Fill MVA1 histos with all tracks, MVA2 histos only with tracks
98  // not selected by MVA1, etc.
99  for(size_t i=0; i<mvas.size(); ++i) {
100  if(i<=selectsLoose) {
101  h_mva[i].fill(xval, mvas[i]);
102  }
103  if(i>=1 && i<=selectsHP) {
104  h_mva_hp[i].fill(xval, mvas[i]);
105  }
106  }
107  }
108 }
109 
111  doSeedPlots_(doSeedPlots)
112 {
113  //parameters for _vs_eta plots
114  minEta = pset.getParameter<double>("minEta");
115  maxEta = pset.getParameter<double>("maxEta");
116  nintEta = pset.getParameter<int>("nintEta");
117  useFabsEta = pset.getParameter<bool>("useFabsEta");
118 
119  //parameters for _vs_pt plots
120  minPt = pset.getParameter<double>("minPt");
121  maxPt = pset.getParameter<double>("maxPt");
122  nintPt = pset.getParameter<int>("nintPt");
123  useInvPt = pset.getParameter<bool>("useInvPt");
124  useLogPt = pset.getUntrackedParameter<bool>("useLogPt",false);
125 
126  //parameters for _vs_Hit plots
127  minHit = pset.getParameter<double>("minHit");
128  maxHit = pset.getParameter<double>("maxHit");
129  nintHit = pset.getParameter<int>("nintHit");
130 
131  //parameters for _vs_Pu plots
132  minPu = pset.getParameter<double>("minPu");
133  maxPu = pset.getParameter<double>("maxPu");
134  nintPu = pset.getParameter<int>("nintPu");
135 
136  //parameters for _vs_Layer plots
137  minLayers = pset.getParameter<double>("minLayers");
138  maxLayers = pset.getParameter<double>("maxLayers");
139  nintLayers = pset.getParameter<int>("nintLayers");
140 
141  //parameters for _vs_phi plots
142  minPhi = pset.getParameter<double>("minPhi");
143  maxPhi = pset.getParameter<double>("maxPhi");
144  nintPhi = pset.getParameter<int>("nintPhi");
145 
146  //parameters for _vs_Dxy plots
147  minDxy = pset.getParameter<double>("minDxy");
148  maxDxy = pset.getParameter<double>("maxDxy");
149  nintDxy = pset.getParameter<int>("nintDxy");
150 
151  //parameters for _vs_Dz plots
152  minDz = pset.getParameter<double>("minDz");
153  maxDz = pset.getParameter<double>("maxDz");
154  nintDz = pset.getParameter<int>("nintDz");
155 
156  dxyDzZoom = pset.getParameter<double>("dxyDzZoom");
157 
158  //parameters for _vs_ProductionVertexTransvPosition plots
159  minVertpos = pset.getParameter<double>("minVertpos");
160  maxVertpos = pset.getParameter<double>("maxVertpos");
161  nintVertpos = pset.getParameter<int>("nintVertpos");
162  useLogVertpos = pset.getUntrackedParameter<bool>("useLogVertpos");
163 
164  //parameters for _vs_ProductionVertexZPosition plots
165  minZpos = pset.getParameter<double>("minZpos");
166  maxZpos = pset.getParameter<double>("maxZpos");
167  nintZpos = pset.getParameter<int>("nintZpos");
168 
169  //parameters for _vs_dR plots
170  mindr = pset.getParameter<double>("mindr");
171  maxdr = pset.getParameter<double>("maxdr");
172  nintdr = pset.getParameter<int>("nintdr");
173 
174  //parameters for _vs_dR_jet plots
175  mindrj = pset.getParameter<double>("mindrj");
176  maxdrj = pset.getParameter<double>("maxdrj");
177  nintdrj = pset.getParameter<int>("nintdrj");
178 
179  // paramers for _vs_chi2 plots
180  minChi2 = pset.getParameter<double>("minChi2");
181  maxChi2 = pset.getParameter<double>("maxChi2");
182  nintChi2 = pset.getParameter<int>("nintChi2");
183 
184  //parameters for dE/dx plots
185  minDeDx = pset.getParameter<double>("minDeDx");
186  maxDeDx = pset.getParameter<double>("maxDeDx");
187  nintDeDx = pset.getParameter<int>("nintDeDx");
188 
189  //parameters for Pileup plots
190  minVertcount = pset.getParameter<double>("minVertcount");
191  maxVertcount = pset.getParameter<double>("maxVertcount");
192  nintVertcount = pset.getParameter<int>("nintVertcount");
193 
194  //parameters for number of tracks plots
195  minTracks = pset.getParameter<double>("minTracks");
196  maxTracks = pset.getParameter<double>("maxTracks");
197  nintTracks = pset.getParameter<int>("nintTracks");
198 
199  //parameters for vs. PV z plots
200  minPVz = pset.getParameter<double>("minPVz");
201  maxPVz = pset.getParameter<double>("maxPVz");
202  nintPVz = pset.getParameter<int>("nintPVz");
203 
204  //parameters for vs. MVA plots
205  minMVA = pset.getParameter<double>("minMVA");
206  maxMVA = pset.getParameter<double>("maxMVA");
207  nintMVA = pset.getParameter<int>("nintMVA");
208 
209  //parameters for resolution plots
210  ptRes_rangeMin = pset.getParameter<double>("ptRes_rangeMin");
211  ptRes_rangeMax = pset.getParameter<double>("ptRes_rangeMax");
212  ptRes_nbin = pset.getParameter<int>("ptRes_nbin");
213 
214  phiRes_rangeMin = pset.getParameter<double>("phiRes_rangeMin");
215  phiRes_rangeMax = pset.getParameter<double>("phiRes_rangeMax");
216  phiRes_nbin = pset.getParameter<int>("phiRes_nbin");
217 
218  cotThetaRes_rangeMin = pset.getParameter<double>("cotThetaRes_rangeMin");
219  cotThetaRes_rangeMax = pset.getParameter<double>("cotThetaRes_rangeMax");
220  cotThetaRes_nbin = pset.getParameter<int>("cotThetaRes_nbin");
221 
222  dxyRes_rangeMin = pset.getParameter<double>("dxyRes_rangeMin");
223  dxyRes_rangeMax = pset.getParameter<double>("dxyRes_rangeMax");
224  dxyRes_nbin = pset.getParameter<int>("dxyRes_nbin");
225 
226  dzRes_rangeMin = pset.getParameter<double>("dzRes_rangeMin");
227  dzRes_rangeMax = pset.getParameter<double>("dzRes_rangeMax");
228  dzRes_nbin = pset.getParameter<int>("dzRes_nbin");
229 
230 
231  maxDzpvCum = pset.getParameter<double>("maxDzpvCumulative");
232  nintDzpvCum = pset.getParameter<int>("nintDzpvCumulative");
233 
234  maxDzpvsigCum = pset.getParameter<double>("maxDzpvsigCumulative");
235  nintDzpvsigCum = pset.getParameter<int>("nintDzpvsigCumulative");
236 
237  //--- tracking particle selectors for efficiency measurements
238  using namespace edm;
239  using namespace reco::modules;
240  auto initTPselector = [&](auto& sel, auto& name) {
241  sel = std::make_unique<TrackingParticleSelector>(ParameterAdapter<TrackingParticleSelector>::make(pset.getParameter<ParameterSet>(name)));
242  };
243  auto initTrackSelector = [&](auto& sel, auto& name) {
245  };
246  auto initGPselector = [&](auto& sel, auto& name) {
247  sel = std::make_unique<GenParticleCustomSelector>(ParameterAdapter<GenParticleCustomSelector>::make(pset.getParameter<ParameterSet>(name)));
248  };
249 
250  initTPselector(generalTpSelector, "generalTpSelector");
251  initTPselector(TpSelectorForEfficiencyVsEta, "TpSelectorForEfficiencyVsEta");
252  initTPselector(TpSelectorForEfficiencyVsPhi, "TpSelectorForEfficiencyVsPhi");
253  initTPselector(TpSelectorForEfficiencyVsPt, "TpSelectorForEfficiencyVsPt");
254  initTPselector(TpSelectorForEfficiencyVsVTXR, "TpSelectorForEfficiencyVsVTXR");
255  initTPselector(TpSelectorForEfficiencyVsVTXZ, "TpSelectorForEfficiencyVsVTXZ");
256 
257  initTrackSelector(trackSelectorVsEta, "TpSelectorForEfficiencyVsEta");
258  initTrackSelector(trackSelectorVsPhi, "TpSelectorForEfficiencyVsPhi");
259  initTrackSelector(trackSelectorVsPt, "TpSelectorForEfficiencyVsPt");
260 
261  initGPselector(generalGpSelector, "generalGpSelector");
262  initGPselector(GpSelectorForEfficiencyVsEta, "GpSelectorForEfficiencyVsEta");
263  initGPselector(GpSelectorForEfficiencyVsPhi, "GpSelectorForEfficiencyVsPhi");
264  initGPselector(GpSelectorForEfficiencyVsPt, "GpSelectorForEfficiencyVsPt");
265  initGPselector(GpSelectorForEfficiencyVsVTXR, "GpSelectorForEfficiencyVsVTXR");
266  initGPselector(GpSelectorForEfficiencyVsVTXZ, "GpSelectorForEfficiencyVsVTXZ");
267 
268  // SeedingLayerSets
269  // If enabled, use last bin to denote other or unknown cases
270  seedingLayerSetNames = pset.getParameter<std::vector<std::string> >("seedingLayerSets");
271  std::vector<std::pair<SeedingLayerSetId, std::string> > stripPairSets;
272  if(!seedingLayerSetNames.empty()) {
273  std::vector<std::vector<std::string>> layerSets = SeedingLayerSetsBuilder::layerNamesInSets(seedingLayerSetNames);
274  for(size_t i=0; i<layerSets.size(); ++i) {
275  const auto& layerSet = layerSets[i];
276  if(layerSet.size() > std::tuple_size<SeedingLayerSetId>::value) {
277  throw cms::Exception("Configuration") << "Got seedingLayerSet " << seedingLayerSetNames[i] << " with " << layerSet.size() << " elements, but I have a hard-coded maximum of " << std::tuple_size<SeedingLayerSetId>::value << ". Please increase the maximum in MTVHistoProducerAlgoForTracker.h";
278  }
279  SeedingLayerSetId setId;
280  for(size_t j=0; j<layerSet.size(); ++j) {
281  // SeedingLayerSetsBuilder::fillDescriptions() kind-of
282  // suggests that the 'M' prefix stands for strip mono hits
283  // (maybe it should force), so making the assumption here is
284  // (still) a bit ugly. But, this is the easiest way.
285  bool isStripMono = !layerSet[j].empty() && layerSet[j][0] == 'M';
286  setId[j] = std::make_tuple(SeedingLayerSetsBuilder::nameToEnumId(layerSet[j]), isStripMono);
287  }
288  // Account for the fact that strip triplet seeding may give pairs
289  if(layerSet.size() == 3 && isTrackerStrip(std::get<GeomDetEnumerators::SubDetector>(std::get<0>(setId[0])))) {
290  SeedingLayerSetId pairId;
291  pairId[0] = setId[0];
292  pairId[1] = setId[1];
293  stripPairSets.emplace_back(pairId, layerSet[0]+"+"+layerSet[1]);
294  }
295 
296  auto inserted = seedingLayerSetToBin.insert(std::make_pair(setId, i));
297  if(!inserted.second)
298  throw cms::Exception("Configuration") << "SeedingLayerSet " << seedingLayerSetNames[i] << " is specified twice, while the set list should be unique.";
299  }
300 
301  // Add the "strip pairs from strip triplets" if they don't otherwise exist
302  for(const auto& setIdName: stripPairSets) {
303  auto inserted = seedingLayerSetToBin.insert(std::make_pair(setIdName.first, seedingLayerSetNames.size()));
304  if(inserted.second)
305  seedingLayerSetNames.push_back(setIdName.second);
306  }
307 
308  seedingLayerSetNames.emplace_back("Other/Unknown");
309  }
310 
311  // fix for the LogScale by Ryan
312  if(useLogPt){
313  maxPt=log10(maxPt);
314  if(minPt > 0){
315  minPt=log10(minPt);
316  }
317  else{
318  edm::LogWarning("MultiTrackValidator")
319  << "minPt = "
320  << minPt << " <= 0 out of range while requesting log scale. Using minPt = 0.1.";
321  minPt=log10(0.1);
322  }
323  }
324  if(useLogVertpos) {
325  maxVertpos = std::log10(maxVertpos);
326  if(minVertpos > 0) {
327  minVertpos = std::log10(minVertpos);
328  }
329  else {
330  edm::LogWarning("MultiTrackValidator")
331  << "minVertpos = " << minVertpos << " <= 0 out of range while requesting log scale. Using minVertpos = 0.1.";
332  minVertpos = -1;
333  }
334  }
335 
336 }
337 
339 
341  edm::ParameterSet psetTrack;
342  psetTrack.copyForModify(pset);
343  psetTrack.eraseSimpleParameter("minHit");
344  psetTrack.eraseSimpleParameter("signalOnly");
345  psetTrack.eraseSimpleParameter("intimeOnly");
346  psetTrack.eraseSimpleParameter("chargedOnly");
347  psetTrack.eraseSimpleParameter("stableOnly");
348  psetTrack.addParameter("maxChi2", 1e10);
349  psetTrack.addParameter("minHit", 0);
350  psetTrack.addParameter("minPixelHit", 0);
351  psetTrack.addParameter("minLayer", 0);
352  psetTrack.addParameter("min3DLayer", 0);
353  psetTrack.addParameter("quality", std::vector<std::string>{});
354  psetTrack.addParameter("algorithm", std::vector<std::string>{});
355  psetTrack.addParameter("originalAlgorithm", std::vector<std::string>{});
356  psetTrack.addParameter("algorithmMaskContains", std::vector<std::string>{});
357 
358  return std::make_unique<RecoTrackSelectorBase>(psetTrack);
359 }
360 
362  histograms.h_ptSIM = make1DIfLogX(ibook, useLogPt, "ptSIM", "generated p_{t}", nintPt, minPt, maxPt);
363  histograms.h_etaSIM = ibook.book1D("etaSIM", "generated pseudorapidity", nintEta, minEta, maxEta);
364  histograms.h_tracksSIM = ibook.book1D("tracksSIM","number of simulated tracks", nintTracks, minTracks, maxTracks*10);
365  histograms.h_vertposSIM = ibook.book1D("vertposSIM","Transverse position of sim vertices", nintVertpos, minVertpos, maxVertpos);
366  histograms.h_bunchxSIM = ibook.book1D("bunchxSIM", "bunch crossing", 21, -15.5, 5.5 );
367 }
368 
370  histograms.h_assoceta.push_back( ibook.book1D("num_assoc(simToReco)_eta","N of associated tracks (simToReco) vs eta",nintEta,minEta,maxEta) );
371  histograms.h_simuleta.push_back( ibook.book1D("num_simul_eta","N of simulated tracks vs eta",nintEta,minEta,maxEta) );
372 
373  histograms.h_assocpT.push_back( make1DIfLogX(ibook, useLogPt, "num_assoc(simToReco)_pT","N of associated tracks (simToReco) vs pT",nintPt,minPt,maxPt) );
374  histograms.h_simulpT.push_back( make1DIfLogX(ibook, useLogPt, "num_simul_pT","N of simulated tracks vs pT",nintPt,minPt,maxPt) );
375 
376  histograms.h_assochit.push_back( ibook.book1D("num_assoc(simToReco)_hit","N of associated tracks (simToReco) vs hit",nintHit,minHit,maxHit) );
377  histograms.h_simulhit.push_back( ibook.book1D("num_simul_hit","N of simulated tracks vs hit",nintHit,minHit,maxHit) );
378 
379  histograms.h_assoclayer.push_back( ibook.book1D("num_assoc(simToReco)_layer","N of associated tracks (simToReco) vs layer",nintLayers,minLayers,maxLayers) );
380  histograms.h_simullayer.push_back( ibook.book1D("num_simul_layer","N of simulated tracks vs layer",nintLayers,minLayers,maxLayers) );
381 
382  histograms.h_assocpixellayer.push_back( ibook.book1D("num_assoc(simToReco)_pixellayer","N of associated tracks (simToReco) vs pixel layer",nintLayers,minLayers,maxLayers) );
383  histograms.h_simulpixellayer.push_back( ibook.book1D("num_simul_pixellayer","N of simulated tracks vs pixel layer",nintLayers,minLayers,maxLayers) );
384 
385  histograms.h_assoc3Dlayer.push_back( ibook.book1D("num_assoc(simToReco)_3Dlayer","N of associated tracks (simToReco) vs 3D layer",nintLayers,minLayers,maxLayers) );
386  histograms.h_simul3Dlayer.push_back( ibook.book1D("num_simul_3Dlayer","N of simulated tracks vs 3D layer",nintLayers,minLayers,maxLayers) );
387 
388  histograms.h_assocpu.push_back( ibook.book1D("num_assoc(simToReco)_pu","N of associated tracks (simToReco) vs pu",nintPu,minPu,maxPu) );
389  histograms.h_simulpu.push_back( ibook.book1D("num_simul_pu","N of simulated tracks vs pu",nintPu,minPu,maxPu) );
390 
391  histograms.h_assocphi.push_back( ibook.book1D("num_assoc(simToReco)_phi","N of associated tracks (simToReco) vs phi",nintPhi,minPhi,maxPhi) );
392  histograms.h_simulphi.push_back( ibook.book1D("num_simul_phi","N of simulated tracks vs phi",nintPhi,minPhi,maxPhi) );
393 
394  histograms.h_assocdxy.push_back( ibook.book1D("num_assoc(simToReco)_dxy","N of associated tracks (simToReco) vs dxy",nintDxy,minDxy,maxDxy) );
395  histograms.h_simuldxy.push_back( ibook.book1D("num_simul_dxy","N of simulated tracks vs dxy",nintDxy,minDxy,maxDxy) );
396 
397  histograms.h_assocdz.push_back( ibook.book1D("num_assoc(simToReco)_dz","N of associated tracks (simToReco) vs dz",nintDz,minDz,maxDz) );
398  histograms.h_simuldz.push_back( ibook.book1D("num_simul_dz","N of simulated tracks vs dz",nintDz,minDz,maxDz) );
399 
400  histograms.h_assocvertpos.push_back( make1DIfLogX(ibook, useLogVertpos, "num_assoc(simToReco)_vertpos",
401  "N of associated tracks (simToReco) vs transverse vert position",
403  histograms.h_simulvertpos.push_back( make1DIfLogX(ibook, useLogVertpos, "num_simul_vertpos","N of simulated tracks vs transverse vert position",
405 
406  histograms.h_assoczpos.push_back( ibook.book1D("num_assoc(simToReco)_zpos","N of associated tracks (simToReco) vs z vert position",
408  histograms.h_simulzpos.push_back( ibook.book1D("num_simul_zpos","N of simulated tracks vs z vert position",nintZpos,minZpos,maxZpos) );
409 
410  histograms.h_assocdr.push_back( make1DIfLogX(ibook, true, "num_assoc(simToReco)_dr","N of associated tracks (simToReco) vs dR",nintdr,log10(mindr),log10(maxdr)) );
411  histograms.h_simuldr.push_back( make1DIfLogX(ibook, true, "num_simul_dr","N of simulated tracks vs dR",nintdr,log10(mindr),log10(maxdr)) );
412 
413  histograms.h_assocdrj.push_back( make1DIfLogX(ibook, true, "num_assoc(simToReco)_drj","N of associated tracks (simToReco) vs dR(TP,jet)",nintdrj,log10(mindrj),log10(maxdrj)) );
414  histograms.h_simuldrj.push_back( make1DIfLogX(ibook, true, "num_simul_drj","N of simulated tracks vs dR(TP,jet)",nintdrj,log10(mindrj),log10(maxdrj)) );
415 
416 
417  histograms.h_simul_simpvz.push_back( ibook.book1D("num_simul_simpvz", "N of simulated tracks vs. sim PV z", nintPVz, minPVz, maxPVz) );
418  histograms.h_assoc_simpvz.push_back( ibook.book1D("num_assoc(simToReco)_simpvz", "N of associated tracks (simToReco) vs. sim PV z", nintPVz, minPVz, maxPVz) );
419 
420  histograms.nrecHit_vs_nsimHit_sim2rec.push_back( doResolutionPlots ? ibook.book2D("nrecHit_vs_nsimHit_sim2rec","nrecHit vs nsimHit (Sim2RecAssoc)",
423 
424  // TODO: use the dynamic track algo priority order also here
425  constexpr auto nalgos = reco::TrackBase::algoSize;
426  histograms.h_duplicates_oriAlgo_vs_oriAlgo.push_back( ibook.book2D("duplicates_oriAlgo_vs_oriAlgo", "Duplicate tracks: originalAlgo vs originalAlgo",
427  nalgos,0,nalgos, nalgos,0,nalgos) );
428  setBinLabelsAlgo(histograms.h_duplicates_oriAlgo_vs_oriAlgo.back(), 1);
429  setBinLabelsAlgo(histograms.h_duplicates_oriAlgo_vs_oriAlgo.back(), 2);
430 }
431 
433  histograms.h_assocdxypv.push_back( ibook.book1D("num_assoc(simToReco)_dxypv","N of associated tracks (simToReco) vs dxy(PV)",nintDxy,minDxy,maxDxy) );
434  histograms.h_simuldxypv.push_back( ibook.book1D("num_simul_dxypv","N of simulated tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) );
435 
436  histograms.h_assocdzpv.push_back( ibook.book1D("num_assoc(simToReco)_dzpv","N of associated tracks (simToReco) vs dz(PV)",nintDz,minDz,maxDz) );
437  histograms.h_simuldzpv.push_back( ibook.book1D("num_simul_dzpv","N of simulated tracks vs dz(PV)",nintDz,minDz,maxDz) );
438 
439  histograms.h_assocdxypvzoomed.push_back( ibook.book1D("num_assoc(simToReco)_dxypv_zoomed","N of associated tracks (simToReco) vs dxy(PV)",nintDxy,minDxy/dxyDzZoom,maxDxy/dxyDzZoom) );
440  histograms.h_simuldxypvzoomed.push_back( ibook.book1D("num_simul_dxypv_zoomed","N of simulated tracks vs dxy(PV)",nintDxy,minDxy/dxyDzZoom,maxDxy/dxyDzZoom) );
441 
442  histograms.h_assocdzpvzoomed.push_back( ibook.book1D("num_assoc(simToReco)_dzpv_zoomed","N of associated tracks (simToReco) vs dz(PV)",nintDz,minDz/dxyDzZoom,maxDz/dxyDzZoom) );
443  histograms.h_simuldzpvzoomed.push_back( ibook.book1D("num_simul_dzpv_zoomed","N of simulated tracks vs dz(PV)",nintDz,minDz/dxyDzZoom,maxDz/dxyDzZoom) );
444 
445  histograms.h_assoc_dzpvcut.push_back( ibook.book1D("num_assoc(simToReco)_dzpvcut","N of associated tracks (simToReco) vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
446  histograms.h_simul_dzpvcut.push_back( ibook.book1D("num_simul_dzpvcut","N of simulated tracks from sim PV",nintDzpvCum,0,maxDzpvCum) );
447  histograms.h_simul2_dzpvcut.push_back( ibook.book1D("num_simul2_dzpvcut","N of simulated tracks (associated to any track) from sim PV",nintDzpvCum,0,maxDzpvCum) );
448 
449  histograms.h_assoc_dzpvcut_pt.push_back( ibook.book1D("num_assoc(simToReco)_dzpvcut_pt","#sump_{T} of associated tracks (simToReco) vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
450  histograms.h_simul_dzpvcut_pt.push_back( ibook.book1D("num_simul_dzpvcut_pt","#sump_{T} of simulated tracks from sim PV",nintDzpvCum,0,maxDzpvCum) );
451  histograms.h_simul2_dzpvcut_pt.push_back( ibook.book1D("num_simul2_dzpvcut_pt","#sump_{T} of simulated tracks (associated to any track) from sim PV",nintDzpvCum,0,maxDzpvCum) );
452  histograms.h_assoc_dzpvcut_pt.back().enableSumw2();
453  histograms.h_simul_dzpvcut_pt.back().enableSumw2();
454  histograms.h_simul2_dzpvcut_pt.back().enableSumw2();
455 
456  histograms.h_assoc_dzpvsigcut.push_back( ibook.book1D("num_assoc(simToReco)_dzpvsigcut","N of associated tracks (simToReco) vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
457  histograms.h_simul_dzpvsigcut.push_back( ibook.book1D("num_simul_dzpvsigcut","N of simulated tracks from sim PV/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
458  histograms.h_simul2_dzpvsigcut.push_back( ibook.book1D("num_simul2_dzpvsigcut","N of simulated tracks (associated to any track) from sim PV/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
459 
460  histograms.h_assoc_dzpvsigcut_pt.push_back( ibook.book1D("num_assoc(simToReco)_dzpvsigcut_pt","#sump_{T} of associated tracks (simToReco) vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
461  histograms.h_simul_dzpvsigcut_pt.push_back( ibook.book1D("num_simul_dzpvsigcut_pt","#sump_{T} of simulated tracks from sim PV/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
462  histograms.h_simul2_dzpvsigcut_pt.push_back( ibook.book1D("num_simul2_dzpvsigcut_pt","#sump_{T} of simulated tracks (associated to any track) from sim PV/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
463  histograms.h_assoc_dzpvsigcut_pt.back().enableSumw2();
464  histograms.h_simul_dzpvsigcut_pt.back().enableSumw2();
465  histograms.h_simul2_dzpvsigcut_pt.back().enableSumw2();
466 }
467 
469  histograms.h_tracks.push_back( ibook.book1D("tracks","number of reconstructed tracks", nintTracks, minTracks, maxTracks) );
470  histograms.h_fakes.push_back( ibook.book1D("fakes","number of fake reco tracks", nintTracks, minTracks, maxTracks) );
471  histograms.h_charge.push_back( ibook.book1D("charge","charge",3,-1.5,1.5) );
472 
473  histograms.h_hits.push_back( ibook.book1D("hits", "number of hits per track", nintHit,minHit,maxHit ) );
474  histograms.h_losthits.push_back( ibook.book1D("losthits", "number of lost hits per track", nintHit,minHit,maxHit) );
475  histograms.h_nchi2.push_back( ibook.book1D("chi2", "normalized #chi^{2}", 200, 0, 20 ) );
476  histograms.h_nchi2_prob.push_back( ibook.book1D("chi2_prob", "normalized #chi^{2} probability",100,0,1));
477 
478  histograms.h_nmisslayers_inner.push_back( ibook.book1D("missing_inner_layers", "number of missing inner layers", nintLayers,minLayers,maxLayers ) );
479  histograms.h_nmisslayers_outer.push_back( ibook.book1D("missing_outer_layers", "number of missing outer layers", nintLayers,minLayers,maxLayers ) );
480 
481  histograms.h_algo.push_back( ibook.book1D("h_algo","Tracks by algo",reco::TrackBase::algoSize, 0., double(reco::TrackBase::algoSize) ) );
482  for (size_t ibin=0; ibin<reco::TrackBase::algoSize-1; ibin++)
483  histograms.h_algo.back().setBinLabel(ibin+1,reco::TrackBase::algoNames[ibin]);
484  histograms.h_algo.back().disableAlphanumeric();
485 
487  histograms.h_recoeta.push_back( ibook.book1D("num_reco_eta","N of reco track vs eta",nintEta,minEta,maxEta) );
488  histograms.h_reco2eta.push_back( ibook.book1D("num_reco2_eta","N of selected reco track vs eta",nintEta,minEta,maxEta) );
489  histograms.h_assoc2eta.push_back( ibook.book1D("num_assoc(recoToSim)_eta","N of associated (recoToSim) tracks vs eta",nintEta,minEta,maxEta) );
490  histograms.h_loopereta.push_back( ibook.book1D("num_duplicate_eta","N of associated (recoToSim) duplicate tracks vs eta",nintEta,minEta,maxEta) );
491  if(!doSeedPlots_) histograms.h_misideta.push_back( ibook.book1D("num_chargemisid_eta","N of associated (recoToSim) charge misIDed tracks vs eta",nintEta,minEta,maxEta) );
492  histograms.h_pileupeta.push_back( ibook.book1D("num_pileup_eta","N of associated (recoToSim) pileup tracks vs eta",nintEta,minEta,maxEta) );
493  //
494  histograms.h_recopT.push_back( make1DIfLogX(ibook, useLogPt, "num_reco_pT","N of reco track vs pT",nintPt,minPt,maxPt) );
495  histograms.h_reco2pT.push_back( make1DIfLogX(ibook, useLogPt, "num_reco2_pT","N of selected reco track vs pT",nintPt,minPt,maxPt) );
496  histograms.h_assoc2pT.push_back( make1DIfLogX(ibook, useLogPt, "num_assoc(recoToSim)_pT","N of associated (recoToSim) tracks vs pT",nintPt,minPt,maxPt) );
497  histograms.h_looperpT.push_back( make1DIfLogX(ibook, useLogPt, "num_duplicate_pT","N of associated (recoToSim) duplicate tracks vs pT",nintPt,minPt,maxPt) );
498  if(!doSeedPlots_) histograms.h_misidpT.push_back( make1DIfLogX(ibook, useLogPt, "num_chargemisid_pT","N of associated (recoToSim) charge misIDed tracks vs pT",nintPt,minPt,maxPt) );
499  histograms.h_pileuppT.push_back( make1DIfLogX(ibook, useLogPt, "num_pileup_pT","N of associated (recoToSim) pileup tracks vs pT",nintPt,minPt,maxPt) );
500  //
501  histograms.h_recohit.push_back( ibook.book1D("num_reco_hit","N of reco track vs hit",nintHit,minHit,maxHit) );
502  histograms.h_assoc2hit.push_back( ibook.book1D("num_assoc(recoToSim)_hit","N of associated (recoToSim) tracks vs hit",nintHit,minHit,maxHit) );
503  histograms.h_looperhit.push_back( ibook.book1D("num_duplicate_hit","N of associated (recoToSim) duplicate tracks vs hit",nintHit,minHit,maxHit) );
504  if(!doSeedPlots_) histograms.h_misidhit.push_back( ibook.book1D("num_chargemisid_hit","N of associated (recoToSim) charge misIDed tracks vs hit",nintHit,minHit,maxHit) );
505  histograms.h_pileuphit.push_back( ibook.book1D("num_pileup_hit","N of associated (recoToSim) pileup tracks vs hit",nintHit,minHit,maxHit) );
506  //
507  histograms.h_recolayer.push_back( ibook.book1D("num_reco_layer","N of reco track vs layer",nintLayers,minLayers,maxLayers) );
508  histograms.h_assoc2layer.push_back( ibook.book1D("num_assoc(recoToSim)_layer","N of associated (recoToSim) tracks vs layer",nintLayers,minLayers,maxLayers) );
509  histograms.h_looperlayer.push_back( ibook.book1D("num_duplicate_layer","N of associated (recoToSim) duplicate tracks vs layer",nintLayers,minLayers,maxLayers) );
510  if(!doSeedPlots_) histograms.h_misidlayer.push_back( ibook.book1D("num_chargemisid_layer","N of associated (recoToSim) charge misIDed tracks vs layer",nintLayers,minLayers,maxLayers) );
511  histograms.h_pileuplayer.push_back( ibook.book1D("num_pileup_layer","N of associated (recoToSim) pileup tracks vs layer",nintLayers,minLayers,maxLayers) );
512  //
513  histograms.h_recopixellayer.push_back( ibook.book1D("num_reco_pixellayer","N of reco track vs pixellayer",nintLayers,minLayers,maxLayers) );
514  histograms.h_assoc2pixellayer.push_back( ibook.book1D("num_assoc(recoToSim)_pixellayer","N of associated (recoToSim) tracks vs pixellayer",nintLayers,minLayers,maxLayers) );
515  histograms.h_looperpixellayer.push_back( ibook.book1D("num_duplicate_pixellayer","N of associated (recoToSim) duplicate tracks vs pixellayer",nintLayers,minLayers,maxLayers) );
516  if(!doSeedPlots_) histograms.h_misidpixellayer.push_back( ibook.book1D("num_chargemisid_pixellayer","N of associated (recoToSim) charge misIDed tracks vs pixellayer",nintLayers,minLayers,maxLayers) );
517  histograms.h_pileuppixellayer.push_back( ibook.book1D("num_pileup_pixellayer","N of associated (recoToSim) pileup tracks vs pixellayer",nintLayers,minLayers,maxLayers) );
518  //
519  histograms.h_reco3Dlayer.push_back( ibook.book1D("num_reco_3Dlayer","N of reco track vs 3D layer",nintLayers,minLayers,maxLayers) );
520  histograms.h_assoc23Dlayer.push_back( ibook.book1D("num_assoc(recoToSim)_3Dlayer","N of associated (recoToSim) tracks vs 3D layer",nintLayers,minLayers,maxLayers) );
521  histograms.h_looper3Dlayer.push_back( ibook.book1D("num_duplicate_3Dlayer","N of associated (recoToSim) duplicate tracks vs 3D layer",nintLayers,minLayers,maxLayers) );
522  if(!doSeedPlots_) histograms.h_misid3Dlayer.push_back( ibook.book1D("num_chargemisid_3Dlayer","N of associated (recoToSim) charge misIDed tracks vs 3D layer",nintLayers,minLayers,maxLayers) );
523  histograms.h_pileup3Dlayer.push_back( ibook.book1D("num_pileup_3Dlayer","N of associated (recoToSim) pileup tracks vs 3D layer",nintLayers,minLayers,maxLayers) );
524  //
525  histograms.h_recopu.push_back( ibook.book1D("num_reco_pu","N of reco track vs pu",nintPu,minPu,maxPu) );
526  histograms.h_reco2pu.push_back( ibook.book1D("num_reco2_pu","N of selected reco track vs pu",nintPu,minPu,maxPu) );
527  histograms.h_assoc2pu.push_back( ibook.book1D("num_assoc(recoToSim)_pu","N of associated (recoToSim) tracks vs pu",nintPu,minPu,maxPu) );
528  histograms.h_looperpu.push_back( ibook.book1D("num_duplicate_pu","N of associated (recoToSim) duplicate tracks vs pu",nintPu,minPu,maxPu) );
529  if(!doSeedPlots_) histograms.h_misidpu.push_back( ibook.book1D("num_chargemisid_pu","N of associated (recoToSim) charge misIDed tracks vs pu",nintPu,minPu,maxPu) );
530  histograms.h_pileuppu.push_back( ibook.book1D("num_pileup_pu","N of associated (recoToSim) pileup tracks vs pu",nintPu,minPu,maxPu) );
531  //
532  histograms.h_recophi.push_back( ibook.book1D("num_reco_phi","N of reco track vs phi",nintPhi,minPhi,maxPhi) );
533  histograms.h_assoc2phi.push_back( ibook.book1D("num_assoc(recoToSim)_phi","N of associated (recoToSim) tracks vs phi",nintPhi,minPhi,maxPhi) );
534  histograms.h_looperphi.push_back( ibook.book1D("num_duplicate_phi","N of associated (recoToSim) duplicate tracks vs phi",nintPhi,minPhi,maxPhi) );
535  if(!doSeedPlots_) histograms.h_misidphi.push_back( ibook.book1D("num_chargemisid_phi","N of associated (recoToSim) charge misIDed tracks vs phi",nintPhi,minPhi,maxPhi) );
536  histograms.h_pileupphi.push_back( ibook.book1D("num_pileup_phi","N of associated (recoToSim) pileup tracks vs phi",nintPhi,minPhi,maxPhi) );
537 
538  histograms.h_recodxy.push_back( ibook.book1D("num_reco_dxy","N of reco track vs dxy",nintDxy,minDxy,maxDxy) );
539  histograms.h_assoc2dxy.push_back( ibook.book1D("num_assoc(recoToSim)_dxy","N of associated (recoToSim) tracks vs dxy",nintDxy,minDxy,maxDxy) );
540  histograms.h_looperdxy.push_back( ibook.book1D("num_duplicate_dxy","N of associated (recoToSim) looper tracks vs dxy",nintDxy,minDxy,maxDxy) );
541  if(!doSeedPlots_) histograms.h_misiddxy.push_back( ibook.book1D("num_chargemisid_dxy","N of associated (recoToSim) charge misIDed tracks vs dxy",nintDxy,minDxy,maxDxy) );
542  histograms.h_pileupdxy.push_back( ibook.book1D("num_pileup_dxy","N of associated (recoToSim) pileup tracks vs dxy",nintDxy,minDxy,maxDxy) );
543 
544  histograms.h_recodz.push_back( ibook.book1D("num_reco_dz","N of reco track vs dz",nintDz,minDz,maxDz) );
545  histograms.h_assoc2dz.push_back( ibook.book1D("num_assoc(recoToSim)_dz","N of associated (recoToSim) tracks vs dz",nintDz,minDz,maxDz) );
546  histograms.h_looperdz.push_back( ibook.book1D("num_duplicate_dz","N of associated (recoToSim) looper tracks vs dz",nintDz,minDz,maxDz) );
547  if(!doSeedPlots_) histograms.h_misiddz.push_back( ibook.book1D("num_chargemisid_versus_dz","N of associated (recoToSim) charge misIDed tracks vs dz",nintDz,minDz,maxDz) );
548  histograms.h_pileupdz.push_back( ibook.book1D("num_pileup_dz","N of associated (recoToSim) pileup tracks vs dz",nintDz,minDz,maxDz) );
549 
550  histograms.h_recovertpos.push_back( make1DIfLogX(ibook, useLogVertpos, "num_reco_vertpos","N of reconstructed tracks vs transverse ref point position",nintVertpos,minVertpos,maxVertpos) );
551  histograms.h_assoc2vertpos.push_back( make1DIfLogX(ibook, useLogVertpos, "num_assoc(recoToSim)_vertpos","N of associated (recoToSim) tracks vs transverse ref point position",nintVertpos,minVertpos,maxVertpos) );
552  histograms.h_loopervertpos.push_back( make1DIfLogX(ibook, useLogVertpos, "num_duplicate_vertpos","N of associated (recoToSim) looper tracks vs transverse ref point position",nintVertpos,minVertpos,maxVertpos) );
553  histograms.h_pileupvertpos.push_back( make1DIfLogX(ibook, useLogVertpos, "num_pileup_vertpos","N of associated (recoToSim) pileup tracks vs transverse ref point position",nintVertpos,minVertpos,maxVertpos) );
554 
555  histograms.h_recozpos.push_back( ibook.book1D("num_reco_zpos","N of reconstructed tracks vs transverse ref point position",nintZpos,minZpos,maxZpos) );
556  histograms.h_assoc2zpos.push_back( ibook.book1D("num_assoc(recoToSim)_zpos","N of associated (recoToSim) tracks vs transverse ref point position",nintZpos,minZpos,maxZpos) );
557  histograms.h_looperzpos.push_back( ibook.book1D("num_duplicate_zpos","N of associated (recoToSim) looper tracks vs transverse ref point position",nintZpos,minZpos,maxZpos) );
558  histograms.h_pileupzpos.push_back( ibook.book1D("num_pileup_zpos","N of associated (recoToSim) pileup tracks vs transverse ref point position",nintZpos,minZpos,maxZpos) );
559 
560  histograms.h_recodr.push_back( make1DIfLogX(ibook, true, "num_reco_dr","N of reconstructed tracks vs dR",nintdr,log10(mindr),log10(maxdr)) );
561  histograms.h_assoc2dr.push_back( make1DIfLogX(ibook, true, "num_assoc(recoToSim)_dr","N of associated tracks (recoToSim) vs dR",nintdr,log10(mindr),log10(maxdr)) );
562  histograms.h_looperdr.push_back( make1DIfLogX(ibook, true, "num_duplicate_dr","N of associated (recoToSim) looper tracks vs dR",nintdr,log10(mindr),log10(maxdr)) );
563  histograms.h_pileupdr.push_back( make1DIfLogX(ibook, true, "num_pileup_dr","N of associated (recoToSim) pileup tracks vs dR",nintdr,log10(mindr),log10(maxdr)) );
564 
565  histograms.h_recodrj.push_back( make1DIfLogX(ibook, true, "num_reco_drj","N of reconstructed tracks vs dR(track,jet)",nintdrj,log10(mindrj),log10(maxdrj)) );
566  histograms.h_assoc2drj.push_back( make1DIfLogX(ibook, true, "num_assoc(recoToSim)_drj","N of associated tracks (recoToSim) vs dR(track,jet)",nintdrj,log10(mindrj),log10(maxdrj)) );
567  histograms.h_looperdrj.push_back( make1DIfLogX(ibook, true, "num_duplicate_drj","N of associated (recoToSim) looper tracks vs dR(track,jet)",nintdrj,log10(mindrj),log10(maxdrj)) );
568  histograms.h_pileupdrj.push_back( make1DIfLogX(ibook, true, "num_pileup_drj","N of associated (recoToSim) pileup tracks vs dR(track,jet)",nintdrj,log10(mindrj),log10(maxdrj)) );
569 
570  histograms.h_reco_simpvz.push_back( ibook.book1D("num_reco_simpvz", "N of reco track vs. sim PV z", nintPVz, minPVz, maxPVz) );
571  histograms.h_assoc2_simpvz.push_back( ibook.book1D("num_assoc(recoToSim)_simpvz", "N of associated tracks (recoToSim) vs. sim PV z", nintPVz, minPVz, maxPVz) );
572  histograms.h_looper_simpvz.push_back( ibook.book1D("num_duplicate_simpvz", "N of associated (recoToSim) looper tracks vs. sim PV z", nintPVz, minPVz, maxPVz) );
573  histograms.h_pileup_simpvz.push_back( ibook.book1D("num_pileup_simpvz", "N of associated (recoToSim) pileup tracks vs. sim PV z", nintPVz, minPVz, maxPVz) );
574 
575  histograms.h_recochi2.push_back( ibook.book1D("num_reco_chi2","N of reco track vs normalized #chi^{2}",nintChi2,minChi2,maxChi2) );
576  histograms.h_assoc2chi2.push_back( ibook.book1D("num_assoc(recoToSim)_chi2","N of associated (recoToSim) tracks vs normalized #chi^{2}",nintChi2,minChi2,maxChi2) );
577  histograms.h_looperchi2.push_back( ibook.book1D("num_duplicate_chi2","N of associated (recoToSim) looper tracks vs normalized #chi^{2}",nintChi2,minChi2,maxChi2) );
578  if(!doSeedPlots_) histograms.h_misidchi2.push_back( ibook.book1D("num_chargemisid_chi2","N of associated (recoToSim) charge misIDed tracks vs normalized #chi^{2}",nintChi2,minChi2,maxChi2) );
579  histograms.h_pileupchi2.push_back( ibook.book1D("num_pileup_chi2","N of associated (recoToSim) pileup tracks vs normalized #chi^{2}",nintChi2,minChi2,maxChi2) );
580 
581 
582  if(!seedingLayerSetNames.empty()) {
583  const auto size = seedingLayerSetNames.size();
584  histograms.h_reco_seedingLayerSet.push_back(ibook.book1D("num_reco_seedingLayerSet", "N of reco track vs. seedingLayerSet", size,0,size));
585  histograms.h_assoc2_seedingLayerSet.push_back(ibook.book1D("num_assoc(recoToSim)_seedingLayerSet", "N of associated track (recoToSim) tracks vs. seedingLayerSet", size,0,size));
586  histograms.h_looper_seedingLayerSet.push_back(ibook.book1D("num_duplicate_seedingLayerSet", "N of reco associated (recoToSim) looper vs. seedingLayerSet", size,0,size));
587  histograms.h_pileup_seedingLayerSet.push_back(ibook.book1D("num_pileup_seedingLayerSet", "N of reco associated (recoToSim) pileup vs. seedingLayerSet", size,0,size));
588 
593  }
594 
596 
597  auto bookResolutionPlots1D = [&](std::vector<ConcurrentMonitorElement>& vec, auto&&... params) {
598  vec.push_back( doResolutionPlots ? ibook.book1D(std::forward<decltype(params)>(params)...) : ConcurrentMonitorElement{} );
599  };
600  auto bookResolutionPlots2D = [&](std::vector<ConcurrentMonitorElement>& vec, bool logx, auto&&... params) {
601  vec.push_back( doResolutionPlots ? make2DIfLogX(ibook, logx, std::forward<decltype(params)>(params)...) : ConcurrentMonitorElement{} );
602  };
603  auto bookResolutionPlotsProfile2D = [&](std::vector<ConcurrentMonitorElement>& vec, auto&&... params) {
604  vec.push_back( doResolutionPlots ? ibook.bookProfile2D(std::forward<decltype(params)>(params)...) : ConcurrentMonitorElement{} );
605  };
606 
607  bookResolutionPlots1D(histograms.h_eta, "eta", "pseudorapidity residue", 1000, -0.1, 0.1);
608  bookResolutionPlots1D(histograms.h_pt, "pullPt", "pull of p_{t}", 100, -10, 10 );
609  bookResolutionPlots1D(histograms.h_pullTheta, "pullTheta","pull of #theta parameter",250,-25,25);
610  bookResolutionPlots1D(histograms.h_pullPhi, "pullPhi","pull of #phi parameter",250,-25,25);
611  bookResolutionPlots1D(histograms.h_pullDxy, "pullDxy","pull of dxy parameter",250,-25,25);
612  bookResolutionPlots1D(histograms.h_pullDz, "pullDz","pull of dz parameter",250,-25,25);
613  bookResolutionPlots1D(histograms.h_pullQoverp, "pullQoverp","pull of qoverp parameter",250,-25,25);
614 
615  /* TO BE FIXED -----------
616  if (associators[ww]=="TrackAssociatorByChi2"){
617  histograms.h_assochi2.push_back( ibook.book1D("assocChi2","track association #chi^{2}",1000000,0,100000) );
618  histograms.h_assochi2_prob.push_back(ibook.book1D("assocChi2_prob","probability of association #chi^{2}",100,0,1));
619  } else if (associators[ww]=="quickTrackAssociatorByHits"){
620  histograms.h_assocFraction.push_back( ibook.book1D("assocFraction","fraction of shared hits",200,0,2) );
621  histograms.h_assocSharedHit.push_back(ibook.book1D("assocSharedHit","number of shared hits",20,0,20));
622  }
623  */
624  histograms.h_assocFraction.push_back( ibook.book1D("assocFraction","fraction of shared hits",200,0,2) );
625  histograms.h_assocSharedHit.push_back(ibook.book1D("assocSharedHit","number of shared hits",41,-0.5,40.5));
626  // ----------------------
627 
628  // use the standard error of the mean as the errors in the profile
629  histograms.chi2_vs_nhits.push_back( ibook.bookProfile("chi2mean_vs_nhits","mean #chi^{2} vs nhits",nintHit,minHit,maxHit, 100,0,10, " ") );
630 
631  bookResolutionPlots2D(histograms.etares_vs_eta, false, "etares_vs_eta","etaresidue vs eta",nintEta,minEta,maxEta,200,-0.1,0.1);
632  bookResolutionPlots2D(histograms.nrec_vs_nsim, false, "nrec_vs_nsim","Number of selected reco tracks vs. number of selected sim tracks;TrackingParticles;Reco tracks", nintTracks,minTracks,maxTracks, nintTracks,minTracks,maxTracks);
633 
634  histograms.chi2_vs_eta.push_back( ibook.bookProfile("chi2mean","mean #chi^{2} vs #eta",nintEta,minEta,maxEta, 200, 0, 20, " " ));
635  histograms.chi2_vs_phi.push_back( ibook.bookProfile("chi2mean_vs_phi","mean #chi^{2} vs #phi",nintPhi,minPhi,maxPhi, 200, 0, 20, " " ) );
636 
637  histograms.nhits_vs_eta.push_back( ibook.bookProfile("hits_eta","mean hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
638  histograms.nPXBhits_vs_eta.push_back( ibook.bookProfile("PXBhits_vs_eta","mean # PXB its vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
639  histograms.nPXFhits_vs_eta.push_back( ibook.bookProfile("PXFhits_vs_eta","mean # PXF hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
640  histograms.nPXLhits_vs_eta.push_back( ibook.bookProfile("PXLhits_vs_eta","mean # PXL hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
641  histograms.nTIBhits_vs_eta.push_back( ibook.bookProfile("TIBhits_vs_eta","mean # TIB hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
642  histograms.nTIDhits_vs_eta.push_back( ibook.bookProfile("TIDhits_vs_eta","mean # TID hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
643  histograms.nTOBhits_vs_eta.push_back( ibook.bookProfile("TOBhits_vs_eta","mean # TOB hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
644  histograms.nTEChits_vs_eta.push_back( ibook.bookProfile("TEChits_vs_eta","mean # TEC hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
645  histograms.nSTRIPhits_vs_eta.push_back( ibook.bookProfile("STRIPhits_vs_eta","mean # STRIP hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
646 
647  histograms.nLayersWithMeas_vs_eta.push_back( ibook.bookProfile("LayersWithMeas_eta","mean # Layers with measurement vs eta",
649  histograms.nPXLlayersWithMeas_vs_eta.push_back( ibook.bookProfile("PXLlayersWithMeas_vs_eta","mean # PXL Layers with measurement vs eta",
651  histograms.nSTRIPlayersWithMeas_vs_eta.push_back( ibook.bookProfile("STRIPlayersWithMeas_vs_eta","mean # STRIP Layers with measurement vs eta",
653  histograms.nSTRIPlayersWith1dMeas_vs_eta.push_back( ibook.bookProfile("STRIPlayersWith1dMeas_vs_eta","mean # STRIP Layers with 1D measurement vs eta",
655  histograms.nSTRIPlayersWith2dMeas_vs_eta.push_back( ibook.bookProfile("STRIPlayersWith2dMeas_vs_eta","mean # STRIP Layers with 2D measurement vs eta",
657 
658  histograms.nhits_vs_phi.push_back( ibook.bookProfile("hits_phi","mean # hits vs #phi",nintPhi,minPhi,maxPhi,nintHit,minHit,maxHit, " ") );
659 
660  histograms.nlosthits_vs_eta.push_back( ibook.bookProfile("losthits_vs_eta","mean # lost hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
661 
662  //resolution of track parameters
663  // dPt/Pt cotTheta Phi TIP LIP
664  // log10(pt)<0.5 100,0.1 240,0.08 100,0.015 100,0.1000 150,0.3000
665  // 0.5<log10(pt)<1.5 100,0.1 120,0.01 100,0.003 100,0.0100 150,0.0500
666  // >1.5 100,0.3 100,0.005 100,0.0008 100,0.0060 120,0.0300
667 
668  bookResolutionPlots2D(histograms.ptres_vs_eta, false, "ptres_vs_eta","ptres_vs_eta",
670 
671  bookResolutionPlots2D(histograms.ptres_vs_phi, false, "ptres_vs_phi","p_{t} res vs #phi",
673 
674  bookResolutionPlots2D(histograms.ptres_vs_pt, useLogPt, "ptres_vs_pt","ptres_vs_pt",nintPt,minPt,maxPt, ptRes_nbin, ptRes_rangeMin, ptRes_rangeMax);
675 
676  bookResolutionPlots2D(histograms.cotThetares_vs_eta, false, "cotThetares_vs_eta","cotThetares_vs_eta",
678 
679  bookResolutionPlots2D(histograms.cotThetares_vs_pt, useLogPt, "cotThetares_vs_pt","cotThetares_vs_pt",
681 
682 
683  bookResolutionPlots2D(histograms.phires_vs_eta, false, "phires_vs_eta","phires_vs_eta",
685 
686  bookResolutionPlots2D(histograms.phires_vs_pt, useLogPt, "phires_vs_pt","phires_vs_pt",
688 
689  bookResolutionPlots2D(histograms.phires_vs_phi, false, "phires_vs_phi","#phi res vs #phi",
691 
692  bookResolutionPlots2D(histograms.dxyres_vs_eta, false, "dxyres_vs_eta","dxyres_vs_eta",
694 
695  bookResolutionPlots2D(histograms.dxyres_vs_pt, useLogPt, "dxyres_vs_pt","dxyres_vs_pt",
697 
698  bookResolutionPlots2D(histograms.dzres_vs_eta, false, "dzres_vs_eta","dzres_vs_eta",
700 
701  bookResolutionPlots2D(histograms.dzres_vs_pt, useLogPt, "dzres_vs_pt","dzres_vs_pt",nintPt,minPt,maxPt,dzRes_nbin, dzRes_rangeMin, dzRes_rangeMax);
702 
703  bookResolutionPlotsProfile2D(histograms.ptmean_vs_eta_phi, "ptmean_vs_eta_phi","mean p_{t} vs #eta and #phi",
704  nintPhi,minPhi,maxPhi,nintEta,minEta,maxEta,1000,0,1000);
705  bookResolutionPlotsProfile2D(histograms.phimean_vs_eta_phi, "phimean_vs_eta_phi","mean #phi vs #eta and #phi",
707 
708  //pulls of track params vs eta: to be used with fitslicesytool
709  bookResolutionPlots2D(histograms.dxypull_vs_eta, false, "dxypull_vs_eta","dxypull_vs_eta",nintEta,minEta,maxEta,100,-10,10);
710  bookResolutionPlots2D(histograms.ptpull_vs_eta, false, "ptpull_vs_eta","ptpull_vs_eta",nintEta,minEta,maxEta,100,-10,10);
711  bookResolutionPlots2D(histograms.dzpull_vs_eta, false, "dzpull_vs_eta","dzpull_vs_eta",nintEta,minEta,maxEta,100,-10,10);
712  bookResolutionPlots2D(histograms.phipull_vs_eta, false, "phipull_vs_eta","phipull_vs_eta",nintEta,minEta,maxEta,100,-10,10);
713  bookResolutionPlots2D(histograms.thetapull_vs_eta, false, "thetapull_vs_eta","thetapull_vs_eta",nintEta,minEta,maxEta,100,-10,10);
714 
715  // histograms.h_ptshiftetamean.push_back( ibook.book1D("h_ptshifteta_Mean","<#deltapT/pT>[%] vs #eta",nintEta,minEta,maxEta) );
716 
717 
718  //pulls of track params vs phi
719  bookResolutionPlots2D(histograms.ptpull_vs_phi, false, "ptpull_vs_phi","p_{t} pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10);
720  bookResolutionPlots2D(histograms.phipull_vs_phi, false, "phipull_vs_phi","#phi pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10);
721  bookResolutionPlots2D(histograms.thetapull_vs_phi, false, "thetapull_vs_phi","#theta pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10);
722 
723 
724  bookResolutionPlots2D(histograms.nrecHit_vs_nsimHit_rec2sim, false, "nrecHit_vs_nsimHit_rec2sim","nrecHit vs nsimHit (Rec2simAssoc)", nintHit,minHit,maxHit, nintHit,minHit,maxHit);
725 }
726 
728  histograms.h_recodxypv.push_back( ibook.book1D("num_reco_dxypv","N of reco track vs dxy(PV)",nintDxy,minDxy,maxDxy) );
729  histograms.h_assoc2dxypv.push_back( ibook.book1D("num_assoc(recoToSim)_dxypv","N of associated (recoToSim) tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) );
730  histograms.h_looperdxypv.push_back( ibook.book1D("num_duplicate_dxypv","N of associated (recoToSim) looper tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) );
731  if(!doSeedPlots_) histograms.h_misiddxypv.push_back( ibook.book1D("num_chargemisid_dxypv","N of associated (recoToSim) charge misIDed tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) );
732  histograms.h_pileupdxypv.push_back( ibook.book1D("num_pileup_dxypv","N of associated (recoToSim) pileup tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) );
733 
734  histograms.h_recodzpv.push_back( ibook.book1D("num_reco_dzpv","N of reco track vs dz(PV)",nintDz,minDz,maxDz) );
735  histograms.h_assoc2dzpv.push_back( ibook.book1D("num_assoc(recoToSim)_dzpv","N of associated (recoToSim) tracks vs dz(PV)",nintDz,minDz,maxDz) );
736  histograms.h_looperdzpv.push_back( ibook.book1D("num_duplicate_dzpv","N of associated (recoToSim) looper tracks vs dz(PV)",nintDz,minDz,maxDz) );
737  if(!doSeedPlots_) histograms.h_misiddzpv.push_back( ibook.book1D("num_chargemisid_versus_dzpv","N of associated (recoToSim) charge misIDed tracks vs dz(PV)",nintDz,minDz,maxDz) );
738  histograms.h_pileupdzpv.push_back( ibook.book1D("num_pileup_dzpv","N of associated (recoToSim) pileup tracks vs dz(PV)",nintDz,minDz,maxDz) );
739 
740  histograms.h_recodxypvzoomed.push_back( ibook.book1D("num_reco_dxypv_zoomed","N of reco track vs dxy(PV)",nintDxy,minDxy/dxyDzZoom,maxDxy/dxyDzZoom) );
741  histograms.h_assoc2dxypvzoomed.push_back( ibook.book1D("num_assoc(recoToSim)_dxypv_zoomed","N of associated (recoToSim) tracks vs dxy(PV)",nintDxy,minDxy/dxyDzZoom,maxDxy/dxyDzZoom) );
742  histograms.h_looperdxypvzoomed.push_back( ibook.book1D("num_duplicate_dxypv_zoomed","N of associated (recoToSim) looper tracks vs dxy(PV)",nintDxy,minDxy/dxyDzZoom,maxDxy/dxyDzZoom) );
743  if(!doSeedPlots_) histograms.h_misiddxypvzoomed.push_back( ibook.book1D("num_chargemisid_dxypv_zoomed","N of associated (recoToSim) charge misIDed tracks vs dxy(PV)",nintDxy,minDxy/dxyDzZoom,maxDxy/dxyDzZoom) );
744  histograms.h_pileupdxypvzoomed.push_back( ibook.book1D("num_pileup_dxypv_zoomed","N of associated (recoToSim) pileup tracks vs dxy(PV)",nintDxy,minDxy/dxyDzZoom,maxDxy/dxyDzZoom) );
745 
746  histograms.h_recodzpvzoomed.push_back( ibook.book1D("num_reco_dzpv_zoomed","N of reco track vs dz(PV)",nintDz,minDz/dxyDzZoom,maxDz/dxyDzZoom) );
747  histograms.h_assoc2dzpvzoomed.push_back( ibook.book1D("num_assoc(recoToSim)_dzpv_zoomed","N of associated (recoToSim) tracks vs dz(PV)",nintDz,minDz/dxyDzZoom,maxDz/dxyDzZoom) );
748  histograms.h_looperdzpvzoomed.push_back( ibook.book1D("num_duplicate_dzpv_zoomed","N of associated (recoToSim) looper tracks vs dz(PV)",nintDz,minDz/dxyDzZoom,maxDz/dxyDzZoom) );
749  if(!doSeedPlots_) histograms.h_misiddzpvzoomed.push_back( ibook.book1D("num_chargemisid_versus_dzpv_zoomed","N of associated (recoToSim) charge misIDed tracks vs dz(PV)",nintDz,minDz/dxyDzZoom,maxDz/dxyDzZoom) );
750  histograms.h_pileupdzpvzoomed.push_back( ibook.book1D("num_pileup_dzpv_zoomed","N of associated (recoToSim) pileup tracks vs dz(PV)",nintDz,minDz/dxyDzZoom,maxDz/dxyDzZoom) );
751 
752  histograms.h_reco_dzpvcut.push_back( ibook.book1D("num_reco_dzpvcut","N of reco track vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
753  histograms.h_assoc2_dzpvcut.push_back( ibook.book1D("num_assoc(recoToSim)_dzpvcut","N of associated (recoToSim) tracks vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
754  histograms.h_pileup_dzpvcut.push_back( ibook.book1D("num_pileup_dzpvcut", "N of associated (recoToSim) pileup tracks vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
755 
756  histograms.h_reco_dzpvcut_pt.push_back( ibook.book1D("num_reco_dzpvcut_pt","#sump_{T} of reco track vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
757  histograms.h_assoc2_dzpvcut_pt.push_back( ibook.book1D("num_assoc(recoToSim)_dzpvcut_pt","#sump_{T} of associated (recoToSim) tracks vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
758  histograms.h_pileup_dzpvcut_pt.push_back( ibook.book1D("num_pileup_dzpvcut_pt", "#sump_{T} of associated (recoToSim) pileup tracks vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
759  histograms.h_reco_dzpvcut_pt.back().enableSumw2();
760  histograms.h_assoc2_dzpvcut_pt.back().enableSumw2();
761  histograms.h_pileup_dzpvcut_pt.back().enableSumw2();
762 
763  histograms.h_reco_dzpvsigcut.push_back( ibook.book1D("num_reco_dzpvsigcut","N of reco track vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
764  histograms.h_assoc2_dzpvsigcut.push_back( ibook.book1D("num_assoc(recoToSim)_dzpvsigcut","N of associated (recoToSim) tracks vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
765  histograms.h_pileup_dzpvsigcut.push_back( ibook.book1D("num_pileup_dzpvsigcut","N of associated (recoToSim) pileup tracks vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
766 
767  histograms.h_reco_dzpvsigcut_pt.push_back( ibook.book1D("num_reco_dzpvsigcut_pt","#sump_{T} of reco track vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
768  histograms.h_assoc2_dzpvsigcut_pt.push_back( ibook.book1D("num_assoc(recoToSim)_dzpvsigcut_pt","#sump_{T} of associated (recoToSim) tracks vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
769  histograms.h_pileup_dzpvsigcut_pt.push_back( ibook.book1D("num_pileup_dzpvsigcut_pt","#sump_{T} of associated (recoToSim) pileup tracks vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
770  histograms.h_reco_dzpvsigcut_pt.back().enableSumw2();
771  histograms.h_assoc2_dzpvsigcut_pt.back().enableSumw2();
772  histograms.h_pileup_dzpvsigcut_pt.back().enableSumw2();
773 
774 }
775 
777  // dE/dx stuff
778  histograms.h_dedx_estim.emplace_back();
779  histograms.h_dedx_estim.back().push_back(ibook.book1D("h_dedx_estim1","dE/dx estimator 1",nintDeDx,minDeDx,maxDeDx));
780  histograms.h_dedx_estim.back().push_back(ibook.book1D("h_dedx_estim2","dE/dx estimator 2",nintDeDx,minDeDx,maxDeDx));
781 
782  histograms.h_dedx_nom.emplace_back();
783  histograms.h_dedx_nom.back().push_back(ibook.book1D("h_dedx_nom1","dE/dx number of measurements",nintHit,minHit,maxHit));
784  histograms.h_dedx_nom.back().push_back(ibook.book1D("h_dedx_nom2","dE/dx number of measurements",nintHit,minHit,maxHit));
785 
786  histograms.h_dedx_sat.emplace_back();
787  histograms.h_dedx_sat.back().push_back(ibook.book1D("h_dedx_sat1","dE/dx number of measurements with saturation",nintHit,minHit,maxHit));
788  histograms.h_dedx_sat.back().push_back(ibook.book1D("h_dedx_sat2","dE/dx number of measurements with saturation",nintHit,minHit,maxHit));
789 }
790 
792  histograms.h_seedsFitFailed.push_back(ibook.book1D("seeds_fitFailed", "Number of seeds for which the fit failed", nintTracks, minTracks, maxTracks));
793  histograms.h_seedsFitFailedFraction.push_back(ibook.book1D("seeds_fitFailedFraction", "Fraction of seeds for which the fit failed", 100, 0, 1));
794 }
795 
797  histograms.h_reco_mva.emplace_back();
798  histograms.h_assoc2_mva.emplace_back();
799 
800  histograms.h_reco_mvacut.emplace_back();
801  histograms.h_assoc_mvacut.emplace_back();
802  histograms.h_assoc2_mvacut.emplace_back();
803  histograms.h_simul2_mvacut.emplace_back();
804 
805  histograms.h_reco_mva_hp.emplace_back();
806  histograms.h_assoc2_mva_hp.emplace_back();
807 
808  histograms.h_reco_mvacut_hp.emplace_back();
809  histograms.h_assoc_mvacut_hp.emplace_back();
810  histograms.h_assoc2_mvacut_hp.emplace_back();
811  histograms.h_simul2_mvacut_hp.emplace_back();
812 
813  histograms.h_assoc2_mva_vs_pt.emplace_back();
814  histograms.h_fake_mva_vs_pt.emplace_back();
815  histograms.h_assoc2_mva_vs_pt_hp.emplace_back();
816  histograms.h_fake_mva_vs_pt_hp.emplace_back();
817  histograms.h_assoc2_mva_vs_eta.emplace_back();
818  histograms.h_fake_mva_vs_eta.emplace_back();
819  histograms.h_assoc2_mva_vs_eta_hp.emplace_back();
820  histograms.h_fake_mva_vs_eta_hp.emplace_back();
821 
822  for(size_t i=1; i <= nMVAs; ++i) {
823  auto istr = std::to_string(i);
824  std::string pfix;
825 
826  if(i==1) {
827  histograms.h_reco_mva_hp.back().emplace_back();
828  histograms.h_assoc2_mva_hp.back().emplace_back();
829 
830  histograms.h_reco_mvacut_hp.back().emplace_back();
831  histograms.h_assoc_mvacut_hp.back().emplace_back();
832  histograms.h_assoc2_mvacut_hp.back().emplace_back();
833  histograms.h_simul2_mvacut_hp.back().emplace_back();
834 
835  histograms.h_assoc2_mva_vs_pt_hp.back().emplace_back();
836  histograms.h_fake_mva_vs_pt_hp.back().emplace_back();
837  histograms.h_assoc2_mva_vs_eta_hp.back().emplace_back();
838  histograms.h_fake_mva_vs_eta_hp.back().emplace_back();
839  }
840  else {
841  pfix = " (not loose-selected)";
842  std::string pfix2 = " (not HP-selected)";
843 
844  histograms.h_reco_mva_hp.back().push_back(ibook.book1D("num_reco_mva"+istr+"_hp", "N of reco track after vs MVA"+istr+pfix2, nintMVA, minMVA, maxMVA) );
845  histograms.h_assoc2_mva_hp.back().push_back(ibook.book1D("num_assoc(recoToSim)_mva"+istr+"_hp", "N of associated tracks (recoToSim) vs MVA"+istr+pfix2, nintMVA, minMVA, maxMVA) );
846 
847  histograms.h_reco_mvacut_hp.back().push_back(ibook.book1D("num_reco_mva"+istr+"cut"+"_hp", "N of reco track vs cut on MVA"+istr+pfix2, nintMVA, minMVA, maxMVA) );
848  histograms.h_assoc_mvacut_hp.back().push_back(ibook.book1D("num_assoc(simToReco)_mva"+istr+"cut_hp", "N of associated tracks (simToReco) vs cut on MVA"+istr+pfix2, nintMVA, minMVA, maxMVA) );
849  histograms.h_assoc2_mvacut_hp.back().push_back(ibook.book1D("num_assoc(recoToSim)_mva"+istr+"cut_hp", "N of associated tracks (recoToSim) vs cut on MVA"+istr+pfix2, nintMVA, minMVA, maxMVA) );
850  histograms.h_simul2_mvacut_hp.back().push_back(ibook.book1D("num_simul2_mva"+istr+"cut_hp", "N of simulated tracks (associated to any track) vs cut on MVA"+istr+pfix2, nintMVA, minMVA, maxMVA) );
851 
852  histograms.h_assoc2_mva_vs_pt_hp.back().push_back(makeProfileIfLogX(ibook, useLogPt, ("mva_assoc(recoToSim)_mva"+istr+"_pT_hp").c_str(), ("MVA"+istr+" of associated tracks (recoToSim) vs. track p_{T}"+pfix2).c_str(), nintPt, minPt, maxPt, minMVA, maxMVA));
853  histograms.h_fake_mva_vs_pt_hp.back().push_back(makeProfileIfLogX(ibook, useLogPt, ("mva_fake_mva"+istr+"pT_hp").c_str(), ("MVA"+istr+" of non-associated tracks (recoToSim) vs. track p_{T}"+pfix2).c_str(), nintPt, minPt, maxPt, minMVA, maxMVA));
854  histograms.h_assoc2_mva_vs_eta_hp.back().push_back(ibook.bookProfile("mva_assoc(recoToSim)_mva"+istr+"_eta_hp", "MVA"+istr+" of associated tracks (recoToSim) vs. track #eta"+pfix2, nintEta, minEta, maxEta, nintMVA, minMVA, maxMVA));
855  histograms.h_fake_mva_vs_eta_hp.back().push_back(ibook.bookProfile("mva_fake_mva"+istr+"eta_hp", "MVA"+istr+" of non-associated tracks (recoToSim) vs. track #eta"+pfix2, nintEta, minEta, maxEta, nintMVA, minMVA, maxMVA));
856  }
857 
858  histograms.h_reco_mva.back().push_back(ibook.book1D("num_reco_mva"+istr, "N of reco track vs MVA"+istr+pfix, nintMVA, minMVA, maxMVA) );
859  histograms.h_assoc2_mva.back().push_back(ibook.book1D("num_assoc(recoToSim)_mva"+istr, "N of associated tracks (recoToSim) vs MVA"+istr+pfix, nintMVA, minMVA, maxMVA) );
860 
861  histograms.h_reco_mvacut.back().push_back(ibook.book1D("num_reco_mva"+istr+"cut", "N of reco track vs cut on MVA"+istr+pfix, nintMVA, minMVA, maxMVA) );
862  histograms.h_assoc_mvacut.back().push_back(ibook.book1D("num_assoc(simToReco)_mva"+istr+"cut", "N of associated tracks (simToReco) vs cut on MVA"+istr+pfix, nintMVA, minMVA, maxMVA) );
863  histograms.h_assoc2_mvacut.back().push_back(ibook.book1D("num_assoc(recoToSim)_mva"+istr+"cut", "N of associated tracks (recoToSim) vs cut on MVA"+istr+pfix, nintMVA, minMVA, maxMVA) );
864  histograms.h_simul2_mvacut.back().push_back(ibook.book1D("num_simul2_mva"+istr+"cut", "N of simulated tracks (associated to any track) vs cut on MVA"+istr+pfix, nintMVA, minMVA, maxMVA) );
865 
866  histograms.h_assoc2_mva_vs_pt.back().push_back(makeProfileIfLogX(ibook, useLogPt, ("mva_assoc(recoToSim)_mva"+istr+"_pT").c_str(), ("MVA"+istr+" of associated tracks (recoToSim) vs. track p_{T}"+pfix).c_str(), nintPt, minPt, maxPt, minMVA, maxMVA));
867  histograms.h_fake_mva_vs_pt.back().push_back(makeProfileIfLogX(ibook, useLogPt, ("mva_fake_mva"+istr+"_pT").c_str(), ("MVA"+istr+" of non-associated tracks (recoToSim) vs. track p_{T}"+pfix).c_str(), nintPt, minPt, maxPt, minMVA, maxMVA));
868  histograms.h_assoc2_mva_vs_eta.back().push_back(ibook.bookProfile("mva_assoc(recoToSim)_mva"+istr+"_eta", "MVA"+istr+" of associated tracks (recoToSim) vs. track #eta"+pfix, nintEta, minEta, maxEta, nintMVA, minMVA, maxMVA));
869  histograms.h_fake_mva_vs_eta.back().push_back(ibook.bookProfile("mva_fake_mva"+istr+"_eta", "MVA"+istr+" of non-associated tracks (recoToSim) vs. track #eta"+pfix, nintEta, minEta, maxEta, nintMVA, minMVA, maxMVA));
870  }
871 }
872 
874  const TrackingParticle::Vector& momentumTP,
875  const TrackingParticle::Point& vertexTP,
876  int bx) const {
877  if(bx == 0) {
878  histograms.h_ptSIM.fill(sqrt(momentumTP.perp2()));
879  histograms.h_etaSIM.fill(momentumTP.eta());
880  histograms.h_vertposSIM.fill(sqrt(vertexTP.perp2()));
881  }
882  histograms.h_bunchxSIM.fill(bx);
883 }
884 
885 
886 
888  int count,
889  const TrackingParticle& tp,
890  const TrackingParticle::Vector& momentumTP,
891  const TrackingParticle::Point& vertexTP,
892  double dxySim, double dzSim,
893  double dxyPVSim, double dzPVSim,
894  int nSimHits,
895  int nSimLayers, int nSimPixelLayers, int nSimStripMonoAndStereoLayers,
896  const reco::Track* track,
897  int numVertices,
898  double dR,
899  double dRJet,
900  const math::XYZPoint *pvPosition,
901  const TrackingVertex::LorentzVector *simPVPosition,
902  const math::XYZPoint& bsPosition,
903  const std::vector<float>& mvas,
904  unsigned int selectsLoose, unsigned int selectsHP) const {
905  bool isMatched = track;
906  const auto eta = getEta(momentumTP.eta());
907  const auto phi = momentumTP.phi();
908  const auto pt = getPt(sqrt(momentumTP.perp2()));
909  const auto nSim3DLayers = nSimPixelLayers + nSimStripMonoAndStereoLayers;
910 
911  const auto vertexTPwrtBS = vertexTP - bsPosition;
912  const auto vertxy = std::sqrt(vertexTPwrtBS.perp2());
913  const auto vertz = vertexTPwrtBS.z();
914 
915  //efficiency vs. cut on MVA
916  //
917  // Note that this includes also pileup TPs, as "signalOnly"
918  // selection is applied only in the TpSelector*. Have to think if
919  // this is really what we want.
920  if(isMatched) {
921  for(size_t i=0; i<mvas.size(); ++i) {
922  if(i<=selectsLoose) {
923  histograms.h_simul2_mvacut[count][i].fill(maxMVA);
924  histograms.h_assoc_mvacut[count][i].fill(mvas[i]);
925  }
926  if(i>=1 && i<=selectsHP) {
927  histograms.h_simul2_mvacut_hp[count][i].fill(maxMVA);
928  histograms.h_assoc_mvacut_hp[count][i].fill(mvas[i]);
929  }
930  }
931  }
932 
933  if((*TpSelectorForEfficiencyVsEta)(tp)){
934  //effic vs eta
935  histograms.h_simuleta[count].fill(eta);
936  if (isMatched) histograms.h_assoceta[count].fill(eta);
937  }
938 
939  if((*TpSelectorForEfficiencyVsPhi)(tp)){
940  histograms.h_simulphi[count].fill(phi);
941  if (isMatched) histograms.h_assocphi[count].fill(phi);
942  //effic vs hits
943  histograms.h_simulhit[count].fill(nSimHits);
944  histograms.h_simullayer[count].fill(nSimLayers);
945  histograms.h_simulpixellayer[count].fill(nSimPixelLayers);
946  histograms.h_simul3Dlayer[count].fill(nSim3DLayers);
947  if(isMatched) {
948  histograms.h_assochit[count].fill(nSimHits);
949  histograms.h_assoclayer[count].fill(nSimLayers);
950  histograms.h_assocpixellayer[count].fill(nSimPixelLayers);
951  histograms.h_assoc3Dlayer[count].fill(nSim3DLayers);
952  if(histograms.nrecHit_vs_nsimHit_sim2rec[count]) histograms.nrecHit_vs_nsimHit_sim2rec[count].fill( track->numberOfValidHits(),nSimHits);
953  }
954  //effic vs pu
955  histograms.h_simulpu[count].fill(numVertices);
956  if(isMatched) histograms.h_assocpu[count].fill(numVertices);
957  //efficiency vs dR
958  histograms.h_simuldr[count].fill(dR);
959  if (isMatched) histograms.h_assocdr[count].fill(dR);
960  //efficiency vs dR jet
961  histograms.h_simuldrj[count].fill(dRJet);
962  if (isMatched) histograms.h_assocdrj[count].fill(dRJet);
963  }
964 
965  if((*TpSelectorForEfficiencyVsPt)(tp)){
966  histograms.h_simulpT[count].fill(pt);
967  if (isMatched) histograms.h_assocpT[count].fill(pt);
968  }
969 
971  histograms.h_simuldxy[count].fill(dxySim);
972  if (isMatched) histograms.h_assocdxy[count].fill(dxySim);
973  if(pvPosition) {
974  histograms.h_simuldxypv[count].fill(dxyPVSim);
975  histograms.h_simuldxypvzoomed[count].fill(dxyPVSim);
976  if (isMatched) {
977  histograms.h_assocdxypv[count].fill(dxyPVSim);
978  histograms.h_assocdxypvzoomed[count].fill(dxyPVSim);
979  }
980  }
981 
982  histograms.h_simulvertpos[count].fill(vertxy);
983  if (isMatched) histograms.h_assocvertpos[count].fill(vertxy);
984  }
985 
986 
988  histograms.h_simuldz[count].fill(dzSim);
989  if (isMatched) histograms.h_assocdz[count].fill(dzSim);
990 
991  histograms.h_simulzpos[count].fill(vertz);
992  if (isMatched) histograms.h_assoczpos[count].fill(vertz);
993 
994  if(pvPosition) {
995  histograms.h_simuldzpv[count].fill(dzPVSim);
996  histograms.h_simuldzpvzoomed[count].fill(dzPVSim);
997 
998  histograms.h_simul_dzpvcut[count].fill(0);
999  histograms.h_simul_dzpvsigcut[count].fill(0);
1000  histograms.h_simul_dzpvcut_pt[count].fill(0, pt);
1001  histograms.h_simul_dzpvsigcut_pt[count].fill(0, pt);
1002 
1003  if(isMatched) {
1004  histograms.h_assocdzpv[count].fill(dzPVSim);
1005  histograms.h_assocdzpvzoomed[count].fill(dzPVSim);
1006 
1007  histograms.h_simul2_dzpvcut[count].fill(0);
1008  histograms.h_simul2_dzpvsigcut[count].fill(0);
1009  histograms.h_simul2_dzpvcut_pt[count].fill(0, pt);
1010  histograms.h_simul2_dzpvsigcut_pt[count].fill(0, pt);
1011  const double dzpvcut = std::abs(track->dz(*pvPosition));
1012  const double dzpvsigcut = dzpvcut / track->dzError();
1013  histograms.h_assoc_dzpvcut[count].fill(dzpvcut);
1014  histograms.h_assoc_dzpvsigcut[count].fill(dzpvsigcut);
1015  histograms.h_assoc_dzpvcut_pt[count].fill(dzpvcut, pt);
1016  histograms.h_assoc_dzpvsigcut_pt[count].fill(dzpvsigcut, pt);
1017  }
1018  }
1019  if(simPVPosition) {
1020  const auto simpvz = simPVPosition->z();
1021  histograms.h_simul_simpvz[count].fill(simpvz);
1022  if(isMatched) {
1023  histograms.h_assoc_simpvz[count].fill(simpvz);
1024  }
1025  }
1026  }
1027 
1028 }
1029 
1031  int count,
1032  const reco::Track& track1,
1033  const reco::Track& track2) const {
1034  histograms.h_duplicates_oriAlgo_vs_oriAlgo[count].fill(track1.originalAlgo(), track2.originalAlgo());
1035 }
1036 
1038  histograms.h_tracksSIM.fill(numSimTracks);
1039 }
1040 
1041 // dE/dx
1043  for (unsigned int i=0; i<v_dEdx.size(); i++) {
1044  const edm::ValueMap<reco::DeDxData>& dEdxTrack = *(v_dEdx[i]);
1045  const reco::DeDxData& dedx = dEdxTrack[trackref];
1046  histograms.h_dedx_estim[count][i].fill(dedx.dEdx());
1047  histograms.h_dedx_nom[count][i].fill(dedx.numberOfMeasurements());
1048  histograms.h_dedx_sat[count][i].fill(dedx.numberOfSaturatedMeasurements());
1049  }
1050 }
1051 
1052 
1054  int count,
1055  const reco::Track& track,
1056  const TrackerTopology& ttopo,
1057  const math::XYZPoint& bsPosition,
1058  const math::XYZPoint *pvPosition,
1059  const TrackingVertex::LorentzVector *simPVPosition,
1060  bool isMatched,
1061  bool isSigMatched,
1062  bool isChargeMatched,
1063  int numAssocRecoTracks,
1064  int numVertices,
1065  int nSimHits,
1066  double sharedFraction,
1067  double dR,
1068  double dRJet,
1069  const std::vector<float>& mvas,
1070  unsigned int selectsLoose, unsigned int selectsHP) const {
1071 
1072  //Fill track algo histogram
1073  histograms.h_algo[count].fill(track.algo());
1074  int sharedHits = sharedFraction * track.numberOfValidHits();
1075 
1076  //Compute fake rate vs eta
1077  const auto eta = getEta(track.momentum().eta());
1078  const auto phi = track.momentum().phi();
1079  const auto pt = getPt(sqrt(track.momentum().perp2()));
1080  const auto dxy = track.dxy(bsPosition);
1081  const auto dz = track.dz(bsPosition);
1082  const auto dxypv = pvPosition ? track.dxy(*pvPosition) : 0.0;
1083  const auto dzpv = pvPosition ? track.dz(*pvPosition) : 0.0;
1084  const auto dzpvsig = pvPosition ? dzpv / track.dzError() : 0.0;
1085  const auto nhits = track.found();
1086  const auto nlayers = track.hitPattern().trackerLayersWithMeasurement();
1087  const auto nPixelLayers = track.hitPattern().pixelLayersWithMeasurement();
1088  const auto n3DLayers = nPixelLayers + track.hitPattern().numberOfValidStripLayersWithMonoAndStereo();
1089  const auto refPointWrtBS = track.referencePoint() - bsPosition;
1090  const auto vertxy = std::sqrt(refPointWrtBS.perp2());
1091  const auto vertz = refPointWrtBS.z();
1092  const auto chi2 = track.normalizedChi2();
1093  const bool fillSeedingLayerSets = !seedingLayerSetNames.empty();
1094  const unsigned int seedingLayerSetBin = fillSeedingLayerSets ? getSeedingLayerSetBin(track, ttopo) : 0;
1095  const auto simpvz = simPVPosition ? simPVPosition->z() : 0.0;
1096 
1097  const bool paramsValid = !trackFromSeedFitFailed(track);
1098 
1099  if(paramsValid) {
1100  histograms.h_recoeta[count].fill(eta);
1101  histograms.h_recophi[count].fill(phi);
1102  histograms.h_recopT[count].fill(pt);
1103  histograms.h_recodxy[count].fill(dxy);
1104  histograms.h_recodz[count].fill(dz);
1105  histograms.h_recochi2[count].fill(chi2);
1106  histograms.h_recovertpos[count].fill(vertxy);
1107  histograms.h_recozpos[count].fill(vertz);
1108  histograms.h_recodr[count].fill(dR);
1109  histograms.h_recodrj[count].fill(dRJet);
1110  if(fillSeedingLayerSets) histograms.h_reco_seedingLayerSet[count].fill(seedingLayerSetBin);
1111  if(pvPosition) {
1112  histograms.h_recodxypv[count].fill(dxypv);
1113  histograms.h_recodzpv[count].fill(dzpv);
1114  histograms.h_recodxypvzoomed[count].fill(dxypv);
1115  histograms.h_recodzpvzoomed[count].fill(dzpv);
1116 
1117  histograms.h_reco_dzpvcut[count].fill(std::abs(dzpv));
1118  histograms.h_reco_dzpvsigcut[count].fill(std::abs(dzpvsig));
1119  histograms.h_reco_dzpvcut_pt[count].fill(std::abs(dzpv), pt);
1120  histograms.h_reco_dzpvsigcut_pt[count].fill(std::abs(dzpvsig), pt);
1121  }
1122  if(simPVPosition) {
1123  histograms.h_reco_simpvz[count].fill(simpvz);
1124  }
1125  if((*trackSelectorVsEta)(track, bsPosition)) {
1126  histograms.h_reco2eta[count].fill(eta);
1127  }
1128  if((*trackSelectorVsPt)(track, bsPosition)) {
1129  histograms.h_reco2pT[count].fill(pt);
1130  }
1131  }
1132  histograms.h_recohit[count].fill(nhits);
1133  histograms.h_recolayer[count].fill(nlayers);
1134  histograms.h_recopixellayer[count].fill(nPixelLayers);
1135  histograms.h_reco3Dlayer[count].fill(n3DLayers);
1136  histograms.h_recopu[count].fill(numVertices);
1137  if((*trackSelectorVsPhi)(track, bsPosition)) {
1138  histograms.h_reco2pu[count].fill(numVertices);
1139  }
1140 
1141  fillMVAHistos(histograms.h_reco_mva[count], histograms.h_reco_mvacut[count], histograms.h_reco_mva_hp[count], histograms.h_reco_mvacut_hp[count], mvas, selectsLoose, selectsHP);
1142 
1143  if (isMatched) {
1144  if(paramsValid) {
1145  histograms.h_assoc2eta[count].fill(eta);
1146  histograms.h_assoc2phi[count].fill(phi);
1147  histograms.h_assoc2pT[count].fill(pt);
1148  histograms.h_assoc2dxy[count].fill(dxy);
1149  histograms.h_assoc2dz[count].fill(dz);
1150  histograms.h_assoc2hit[count].fill(nhits);
1151  histograms.h_assoc2chi2[count].fill(chi2);
1152  histograms.h_assoc2vertpos[count].fill(vertxy);
1153  histograms.h_assoc2zpos[count].fill(vertz);
1154  histograms.h_assoc2dr[count].fill(dR);
1155  histograms.h_assoc2drj[count].fill(dRJet);
1156  if(fillSeedingLayerSets) histograms.h_assoc2_seedingLayerSet[count].fill(seedingLayerSetBin);
1157  if(pvPosition) {
1158  histograms.h_assoc2dxypv[count].fill(dxypv);
1159  histograms.h_assoc2dzpv[count].fill(dzpv);
1160  histograms.h_assoc2dxypvzoomed[count].fill(dxypv);
1161  histograms.h_assoc2dzpvzoomed[count].fill(dzpv);
1162 
1163  histograms.h_assoc2_dzpvcut[count].fill(std::abs(dzpv));
1164  histograms.h_assoc2_dzpvsigcut[count].fill(std::abs(dzpvsig));
1165  histograms.h_assoc2_dzpvcut_pt[count].fill(std::abs(dzpv), pt);
1166  histograms.h_assoc2_dzpvsigcut_pt[count].fill(std::abs(dzpvsig), pt);
1167  }
1168  if(simPVPosition) {
1169  histograms.h_assoc2_simpvz[count].fill(simpvz);
1170  }
1171  }
1172  histograms.h_assoc2layer[count].fill(nlayers);
1173  histograms.h_assoc2pixellayer[count].fill(nPixelLayers);
1174  histograms.h_assoc23Dlayer[count].fill(n3DLayers);
1175  histograms.h_assoc2pu[count].fill(numVertices);
1176 
1177  fillMVAHistos(histograms.h_assoc2_mva[count], histograms.h_assoc2_mvacut[count], histograms.h_assoc2_mva_hp[count], histograms.h_assoc2_mvacut_hp[count], mvas, selectsLoose, selectsHP);
1178  fillMVAHistos(pt, histograms.h_assoc2_mva_vs_pt[count], histograms.h_assoc2_mva_vs_pt_hp[count], mvas, selectsLoose, selectsHP);
1179  fillMVAHistos(eta, histograms.h_assoc2_mva_vs_eta[count], histograms.h_assoc2_mva_vs_eta_hp[count], mvas, selectsLoose, selectsHP);
1180 
1181  if(histograms.nrecHit_vs_nsimHit_rec2sim[count]) histograms.nrecHit_vs_nsimHit_rec2sim[count].fill( track.numberOfValidHits(),nSimHits);
1182  histograms.h_assocFraction[count].fill( sharedFraction);
1183  histograms.h_assocSharedHit[count].fill( sharedHits);
1184 
1185  if (!doSeedPlots_ && !isChargeMatched) {
1186  histograms.h_misideta[count].fill(eta);
1187  histograms.h_misidphi[count].fill(phi);
1188  histograms.h_misidpT[count].fill(pt);
1189  histograms.h_misiddxy[count].fill(dxy);
1190  histograms.h_misiddz[count].fill(dz);
1191  histograms.h_misidhit[count].fill(nhits);
1192  histograms.h_misidlayer[count].fill(nlayers);
1193  histograms.h_misidpixellayer[count].fill(nPixelLayers);
1194  histograms.h_misid3Dlayer[count].fill(n3DLayers);
1195  histograms.h_misidpu[count].fill(numVertices);
1196  histograms.h_misidchi2[count].fill(chi2);
1197  if(pvPosition) {
1198  histograms.h_misiddxypv[count].fill(dxypv);
1199  histograms.h_misiddzpv[count].fill(dzpv);
1200  histograms.h_misiddxypvzoomed[count].fill(dxypv);
1201  histograms.h_misiddzpvzoomed[count].fill(dzpv);
1202  }
1203  }
1204 
1205  if (numAssocRecoTracks>1) {
1206  if(paramsValid) {
1207  histograms.h_loopereta[count].fill(eta);
1208  histograms.h_looperphi[count].fill(phi);
1209  histograms.h_looperpT[count].fill(pt);
1210  histograms.h_looperdxy[count].fill(dxy);
1211  histograms.h_looperdz[count].fill(dz);
1212  histograms.h_looperchi2[count].fill(chi2);
1213  histograms.h_loopervertpos[count].fill(vertxy);
1214  histograms.h_looperzpos[count].fill(vertz);
1215  histograms.h_looperdr[count].fill(dR);
1216  histograms.h_looperdrj[count].fill(dRJet);
1217  if(fillSeedingLayerSets) histograms.h_looper_seedingLayerSet[count].fill(seedingLayerSetBin);
1218  if(pvPosition) {
1219  histograms.h_looperdxypv[count].fill(dxypv);
1220  histograms.h_looperdzpv[count].fill(dzpv);
1221  histograms.h_looperdxypvzoomed[count].fill(dxypv);
1222  histograms.h_looperdzpvzoomed[count].fill(dzpv);
1223  }
1224  if(simPVPosition) {
1225  histograms.h_looper_simpvz[count].fill(simpvz);
1226  }
1227  }
1228  histograms.h_looperhit[count].fill(nhits);
1229  histograms.h_looperlayer[count].fill(nlayers);
1230  histograms.h_looperpixellayer[count].fill(nPixelLayers);
1231  histograms.h_looper3Dlayer[count].fill(n3DLayers);
1232  histograms.h_looperpu[count].fill(numVertices);
1233  }
1234  if(!isSigMatched) {
1235  if(paramsValid) {
1236  histograms.h_pileupeta[count].fill(eta);
1237  histograms.h_pileupphi[count].fill(phi);
1238  histograms.h_pileuppT[count].fill(pt);
1239  histograms.h_pileupdxy[count].fill(dxy);
1240  histograms.h_pileupdz[count].fill(dz);
1241  histograms.h_pileupchi2[count].fill(chi2);
1242  histograms.h_pileupvertpos[count].fill(vertxy);
1243  histograms.h_pileupzpos[count].fill(vertz);
1244  histograms.h_pileupdr[count].fill(dR);
1245  histograms.h_pileupdrj[count].fill(dRJet);
1246  if(fillSeedingLayerSets) histograms.h_pileup_seedingLayerSet[count].fill(seedingLayerSetBin);
1247  if(pvPosition) {
1248  histograms.h_pileupdxypv[count].fill(dxypv);
1249  histograms.h_pileupdzpv[count].fill(dzpv);
1250  histograms.h_pileupdxypvzoomed[count].fill(dxypv);
1251  histograms.h_pileupdzpvzoomed[count].fill(dzpv);
1252 
1253  histograms.h_pileup_dzpvcut[count].fill(std::abs(dzpv));
1254  histograms.h_pileup_dzpvsigcut[count].fill(std::abs(dzpvsig));
1255  histograms.h_pileup_dzpvcut_pt[count].fill(std::abs(dzpv), pt);
1256  histograms.h_pileup_dzpvsigcut_pt[count].fill(std::abs(dzpvsig), pt);
1257  }
1258  if(simPVPosition) {
1259  histograms.h_pileup_simpvz[count].fill(simpvz);
1260  }
1261  }
1262  histograms.h_pileuphit[count].fill(nhits);
1263  histograms.h_pileuplayer[count].fill(nlayers);
1264  histograms.h_pileuppixellayer[count].fill(nPixelLayers);
1265  histograms.h_pileup3Dlayer[count].fill(n3DLayers);
1266  histograms.h_pileuppu[count].fill(numVertices);
1267  }
1268  }
1269  else { // !isMatched
1270  fillMVAHistos(pt, histograms.h_fake_mva_vs_pt[count], histograms.h_fake_mva_vs_pt_hp[count], mvas, selectsLoose, selectsHP);
1271  fillMVAHistos(eta, histograms.h_fake_mva_vs_eta[count], histograms.h_fake_mva_vs_eta_hp[count], mvas, selectsLoose, selectsHP);
1272  }
1273 }
1274 
1275 
1277  int count,
1278  const reco::Track& track) const {
1279  //nchi2 and hits global distributions
1280  histograms.h_hits[count].fill(track.numberOfValidHits());
1281  histograms.h_losthits[count].fill(track.numberOfLostHits());
1284  if(trackFromSeedFitFailed(track))
1285  return;
1286 
1287  histograms.h_nchi2[count].fill(track.normalizedChi2());
1288  histograms.h_nchi2_prob[count].fill(TMath::Prob(track.chi2(),(int)track.ndof()));
1289  histograms.chi2_vs_nhits[count].fill(track.numberOfValidHits(),track.normalizedChi2());
1290  histograms.h_charge[count].fill( track.charge() );
1291 
1292  //chi2 and #hit vs eta: fill 2D histos
1293  const auto eta = getEta(track.eta());
1294  histograms.chi2_vs_eta[count].fill(eta, track.normalizedChi2());
1295  histograms.nhits_vs_eta[count].fill(eta, track.numberOfValidHits());
1296  const auto pxbHits = track.hitPattern().numberOfValidPixelBarrelHits();
1297  const auto pxfHits = track.hitPattern().numberOfValidPixelEndcapHits();
1298  const auto tibHits = track.hitPattern().numberOfValidStripTIBHits();
1299  const auto tidHits = track.hitPattern().numberOfValidStripTIDHits();
1300  const auto tobHits = track.hitPattern().numberOfValidStripTOBHits();
1301  const auto tecHits = track.hitPattern().numberOfValidStripTECHits();
1302  histograms.nPXBhits_vs_eta[count].fill(eta, pxbHits);
1303  histograms.nPXFhits_vs_eta[count].fill(eta, pxfHits);
1304  histograms.nPXLhits_vs_eta[count].fill(eta, pxbHits+pxfHits);
1305  histograms.nTIBhits_vs_eta[count].fill(eta, tibHits);
1306  histograms.nTIDhits_vs_eta[count].fill(eta, tidHits);
1307  histograms.nTOBhits_vs_eta[count].fill(eta, tobHits);
1308  histograms.nTEChits_vs_eta[count].fill(eta, tecHits);
1309  histograms.nSTRIPhits_vs_eta[count].fill(eta, tibHits+tidHits+tobHits+tecHits);
1312  int LayersAll = track.hitPattern().stripLayersWithMeasurement();
1313  int Layers2D = track.hitPattern().numberOfValidStripLayersWithMonoAndStereo();
1314  int Layers1D = LayersAll - Layers2D;
1315  histograms.nSTRIPlayersWithMeas_vs_eta[count].fill(eta, LayersAll);
1316  histograms.nSTRIPlayersWith1dMeas_vs_eta[count].fill(eta, Layers1D);
1317  histograms.nSTRIPlayersWith2dMeas_vs_eta[count].fill(eta, Layers2D);
1318 
1319  histograms.nlosthits_vs_eta[count].fill(eta, track.numberOfLostHits());
1320 }
1321 
1322 
1323 void MTVHistoProducerAlgoForTracker::fill_trackBased_histos(const Histograms& histograms, int count, int assTracks, int numRecoTracks, int numRecoTracksSelected, int numSimTracksSelected) const {
1324 
1325  histograms.h_tracks[count].fill(assTracks);
1326  histograms.h_fakes[count].fill(numRecoTracks-assTracks);
1327  if(histograms.nrec_vs_nsim[count]) histograms.nrec_vs_nsim[count].fill(numSimTracksSelected, numRecoTracksSelected);
1328 
1329 }
1330 
1331 
1332 
1334  int count,
1335  const TrackingParticle::Vector& momentumTP,
1336  const TrackingParticle::Point& vertexTP,
1337  int chargeTP,
1338  const reco::Track& track,
1339  const math::XYZPoint& bsPosition) const {
1340  if(trackFromSeedFitFailed(track))
1341  return;
1342 
1343  // evaluation of TP parameters
1344  double qoverpSim = chargeTP/sqrt(momentumTP.x()*momentumTP.x()+momentumTP.y()*momentumTP.y()+momentumTP.z()*momentumTP.z());
1345  double lambdaSim = M_PI/2-momentumTP.theta();
1346  double phiSim = momentumTP.phi();
1347  double dxySim = TrackingParticleIP::dxy(vertexTP, momentumTP, bsPosition);
1348  double dzSim = TrackingParticleIP::dz(vertexTP, momentumTP, bsPosition);
1349 
1350 
1351  // reco::Track::ParameterVector rParameters = track.parameters(); // UNUSED
1352 
1353  double qoverpRec(0);
1354  double qoverpErrorRec(0);
1355  double ptRec(0);
1356  double ptErrorRec(0);
1357  double lambdaRec(0);
1358  double lambdaErrorRec(0);
1359  double phiRec(0);
1360  double phiErrorRec(0);
1361 
1362  /* TO BE FIXED LATER -----------
1363  //loop to decide whether to take gsfTrack (utilisation of mode-function) or common track
1364  const GsfTrack* gsfTrack(0);
1365  if(useGsf){
1366  gsfTrack = dynamic_cast<const GsfTrack*>(&(*track));
1367  if (gsfTrack==0) edm::LogInfo("TrackValidator") << "Trying to access mode for a non-GsfTrack";
1368  }
1369 
1370  if (gsfTrack) {
1371  // get values from mode
1372  getRecoMomentum(*gsfTrack, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec,
1373  lambdaRec,lambdaErrorRec, phiRec, phiErrorRec);
1374  }
1375 
1376  else {
1377  // get values from track (without mode)
1378  getRecoMomentum(*track, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec,
1379  lambdaRec,lambdaErrorRec, phiRec, phiErrorRec);
1380  }
1381  */
1382  getRecoMomentum(track, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec,
1383  lambdaRec,lambdaErrorRec, phiRec, phiErrorRec);
1384  // -------------
1385 
1386  double ptError = ptErrorRec;
1387  double ptres=ptRec-sqrt(momentumTP.perp2());
1388  double etares=track.eta()-momentumTP.Eta();
1389 
1390 
1391  double dxyRec = track.dxy(bsPosition);
1392  double dzRec = track.dz(bsPosition);
1393 
1394  const auto phiRes = phiRec-phiSim;
1395  const auto dxyRes = dxyRec-dxySim;
1396  const auto dzRes = dzRec-dzSim;
1397  const auto cotThetaRes = 1/tan(M_PI*0.5-lambdaRec)-1/tan(M_PI*0.5-lambdaSim);
1398 
1399  // eta residue; pt, k, theta, phi, dxy, dz pulls
1400  double qoverpPull=(qoverpRec-qoverpSim)/qoverpErrorRec;
1401  double thetaPull=(lambdaRec-lambdaSim)/lambdaErrorRec;
1402  double phiPull=phiRes/phiErrorRec;
1403  double dxyPull=dxyRes/track.dxyError();
1404  double dzPull=dzRes/track.dzError();
1405 
1406 #ifdef EDM_ML_DEBUG
1407  double contrib_Qoverp = ((qoverpRec-qoverpSim)/qoverpErrorRec)*
1408  ((qoverpRec-qoverpSim)/qoverpErrorRec)/5;
1409  double contrib_dxy = ((dxyRec-dxySim)/track.dxyError())*((dxyRec-dxySim)/track.dxyError())/5;
1410  double contrib_dz = ((dzRec-dzSim)/track.dzError())*((dzRec-dzSim)/track.dzError())/5;
1411  double contrib_theta = ((lambdaRec-lambdaSim)/lambdaErrorRec)*
1412  ((lambdaRec-lambdaSim)/lambdaErrorRec)/5;
1413  double contrib_phi = ((phiRec-phiSim)/phiErrorRec)*
1414  ((phiRec-phiSim)/phiErrorRec)/5;
1415 
1416  LogTrace("TrackValidatorTEST")
1417  //<< "assocChi2=" << tp.begin()->second << "\n"
1418  << "" << "\n"
1419  << "ptREC=" << ptRec << "\n" << "etaREC=" << track.eta() << "\n" << "qoverpREC=" << qoverpRec << "\n"
1420  << "dxyREC=" << dxyRec << "\n" << "dzREC=" << dzRec << "\n"
1421  << "thetaREC=" << track.theta() << "\n" << "phiREC=" << phiRec << "\n"
1422  << "" << "\n"
1423  << "qoverpError()=" << qoverpErrorRec << "\n" << "dxyError()=" << track.dxyError() << "\n"<< "dzError()="
1424  << track.dzError() << "\n"
1425  << "thetaError()=" << lambdaErrorRec << "\n" << "phiError()=" << phiErrorRec << "\n"
1426  << "" << "\n"
1427  << "ptSIM=" << sqrt(momentumTP.perp2()) << "\n"<< "etaSIM=" << momentumTP.Eta() << "\n"<< "qoverpSIM=" << qoverpSim << "\n"
1428  << "dxySIM=" << dxySim << "\n"<< "dzSIM=" << dzSim << "\n" << "thetaSIM=" << M_PI/2-lambdaSim << "\n"
1429  << "phiSIM=" << phiSim << "\n"
1430  << "" << "\n"
1431  << "contrib_Qoverp=" << contrib_Qoverp << "\n"<< "contrib_dxy=" << contrib_dxy << "\n"<< "contrib_dz=" << contrib_dz << "\n"
1432  << "contrib_theta=" << contrib_theta << "\n"<< "contrib_phi=" << contrib_phi << "\n"
1433  << "" << "\n"
1434  <<"chi2PULL="<<contrib_Qoverp+contrib_dxy+contrib_dz+contrib_theta+contrib_phi<<"\n";
1435 #endif
1436 
1437  histograms.h_pullQoverp[count].fill(qoverpPull);
1438  histograms.h_pullTheta[count].fill(thetaPull);
1439  histograms.h_pullPhi[count].fill(phiPull);
1440  histograms.h_pullDxy[count].fill(dxyPull);
1441  histograms.h_pullDz[count].fill(dzPull);
1442 
1443  const auto etaSim = getEta(momentumTP.eta());
1444  const auto ptSim = getPt(sqrt(momentumTP.perp2()));
1445 
1446  histograms.h_pt[count].fill(ptres/ptError);
1447  histograms.h_eta[count].fill(etares);
1448  //histograms.etares_vs_eta[count].fill(getEta(track.eta()),etares);
1449  histograms.etares_vs_eta[count].fill(etaSim, etares);
1450 
1451  //resolution of track params: fill 2D histos
1452  histograms.dxyres_vs_eta[count].fill(etaSim, dxyRes);
1453  histograms.ptres_vs_eta[count].fill(etaSim, ptres/ptRec);
1454  histograms.dzres_vs_eta[count].fill(etaSim, dzRes);
1455  histograms.phires_vs_eta[count].fill(etaSim, phiRes);
1456  histograms.cotThetares_vs_eta[count].fill(etaSim, cotThetaRes);
1457 
1458  //same as before but vs pT
1459  histograms.dxyres_vs_pt[count].fill(ptSim, dxyRes);
1460  histograms.ptres_vs_pt[count].fill(ptSim, ptres/ptRec);
1461  histograms.dzres_vs_pt[count].fill(ptSim, dzRes);
1462  histograms.phires_vs_pt[count].fill(ptSim, phiRes);
1463  histograms.cotThetares_vs_pt[count].fill(ptSim, cotThetaRes);
1464 
1465  //pulls of track params vs eta: fill 2D histos
1466  histograms.dxypull_vs_eta[count].fill(etaSim, dxyPull);
1467  histograms.ptpull_vs_eta[count].fill(etaSim, ptres/ptError);
1468  histograms.dzpull_vs_eta[count].fill(etaSim, dzPull);
1469  histograms.phipull_vs_eta[count].fill(etaSim, phiPull);
1470  histograms.thetapull_vs_eta[count].fill(etaSim, thetaPull);
1471 
1472  //plots vs phi
1473  histograms.nhits_vs_phi[count].fill(phiRec,track.numberOfValidHits());
1474  histograms.chi2_vs_phi[count].fill(phiRec,track.normalizedChi2());
1475  histograms.ptmean_vs_eta_phi[count].fill(phiRec,getEta(track.eta()),ptRec);
1476  histograms.phimean_vs_eta_phi[count].fill(phiRec,getEta(track.eta()),phiRec);
1477 
1478  histograms.ptres_vs_phi[count].fill(phiSim, ptres/ptRec);
1479  histograms.phires_vs_phi[count].fill(phiSim, phiRes);
1480  histograms.ptpull_vs_phi[count].fill(phiSim, ptres/ptError);
1481  histograms.phipull_vs_phi[count].fill(phiSim, phiPull);
1482  histograms.thetapull_vs_phi[count].fill(phiSim, thetaPull);
1483 
1484 
1485 }
1486 
1487 
1488 
1489 void
1491  double& qoverp, double& qoverpError, double& lambda,double& lambdaError,
1492  double& phi, double& phiError ) const {
1493  pt = track.pt();
1494  ptError = track.ptError();
1495  qoverp = track.qoverp();
1496  qoverpError = track.qoverpError();
1497  lambda = track.lambda();
1498  lambdaError = track.lambdaError();
1499  phi = track.phi();
1500  phiError = track.phiError();
1501  // cout <<"test1" << endl;
1502 
1503 
1504 
1505 }
1506 
1507 void
1508 MTVHistoProducerAlgoForTracker::getRecoMomentum (const reco::GsfTrack& gsfTrack, double& pt, double& ptError,
1509  double& qoverp, double& qoverpError, double& lambda,double& lambdaError,
1510  double& phi, double& phiError ) const {
1511 
1512  pt = gsfTrack.ptMode();
1513  ptError = gsfTrack.ptModeError();
1514  qoverp = gsfTrack.qoverpMode();
1515  qoverpError = gsfTrack.qoverpModeError();
1516  lambda = gsfTrack.lambdaMode();
1517  lambdaError = gsfTrack.lambdaModeError();
1518  phi = gsfTrack.phiMode();
1519  phiError = gsfTrack.phiModeError();
1520  // cout <<"test2" << endl;
1521 
1522 }
1523 
1524 double
1526  if (useFabsEta) return fabs(eta);
1527  else return eta;
1528 }
1529 
1530 double
1532  if (useInvPt && pt!=0) return 1/pt;
1533  else return pt;
1534 }
1535 
1537  if(track.seedRef().isNull() || !track.seedRef().isAvailable())
1538  return seedingLayerSetNames.size()-1;
1539 
1540  const TrajectorySeed& seed = *(track.seedRef());
1541  const auto hitRange = seed.recHits();
1542  SeedingLayerSetId searchId;
1543  const int nhits = std::distance(hitRange.first, hitRange.second);
1544  if(nhits > static_cast<int>(std::tuple_size<SeedingLayerSetId>::value)) {
1545  LogDebug("TrackValidator") << "Got seed with " << nhits << " hits, but I have a hard-coded maximum of " << std::tuple_size<SeedingLayerSetId>::value << ", classifying the seed as 'unknown'. Please increase the maximum in MTVHistoProducerAlgoForTracker.h if needed.";
1546  return seedingLayerSetNames.size()-1;
1547  }
1548  int i=0;
1549  for(auto iHit = hitRange.first; iHit != hitRange.second; ++iHit, ++i) {
1550  DetId detId = iHit->geographicalId();
1551 
1552  if(detId.det() != DetId::Tracker) {
1553  throw cms::Exception("LogicError") << "Encountered seed hit detId " << detId.rawId() << " not from Tracker, but " << detId.det();
1554  }
1555 
1557  bool subdetStrip = false;
1558  switch(detId.subdetId()) {
1561  case StripSubdetector::TIB: subdet = GeomDetEnumerators::TIB; subdetStrip = true; break;
1562  case StripSubdetector::TID: subdet = GeomDetEnumerators::TID; subdetStrip = true; break;
1563  case StripSubdetector::TOB: subdet = GeomDetEnumerators::TOB; subdetStrip = true; break;
1564  case StripSubdetector::TEC: subdet = GeomDetEnumerators::TEC; subdetStrip = true; break;
1565  default: throw cms::Exception("LogicError") << "Unknown subdetId " << detId.subdetId();
1566  };
1567 
1568  TrackerDetSide side = static_cast<TrackerDetSide>(ttopo.side(detId));
1569 
1570  // Even with the recent addition of
1571  // SeedingLayerSetsBuilder::fillDescription() this assumption is a
1572  // bit ugly.
1573  const bool isStripMono = subdetStrip && trackerHitRTTI::isSingle(*iHit);
1574  searchId[i] = SeedingLayerId(SeedingLayerSetsBuilder::SeedingLayerId(subdet, side, ttopo.layer(detId)), isStripMono);
1575  }
1576  auto found = seedingLayerSetToBin.find(searchId);
1577  if(found == seedingLayerSetToBin.end()) {
1578  return seedingLayerSetNames.size()-1;
1579  }
1580  return found->second;
1581 }
1582 
1584  int count,
1585  const reco::GenParticle& tp,
1586  const TrackingParticle::Vector& momentumTP,
1587  const TrackingParticle::Point& vertexTP,
1588  double dxySim, double dzSim, int nSimHits,
1589  const reco::Track* track,
1590  int numVertices) const {
1591 
1592  bool isMatched = track;
1593 
1594  if((*GpSelectorForEfficiencyVsEta)(tp)){
1595  //effic vs eta
1596  histograms.h_simuleta[count].fill(getEta(momentumTP.eta()));
1597  if (isMatched) histograms.h_assoceta[count].fill(getEta(momentumTP.eta()));
1598  }
1599 
1600  if((*GpSelectorForEfficiencyVsPhi)(tp)){
1601  histograms.h_simulphi[count].fill(momentumTP.phi());
1602  if (isMatched) histograms.h_assocphi[count].fill(momentumTP.phi());
1603  //effic vs hits
1604  histograms.h_simulhit[count].fill((int)nSimHits);
1605  if(isMatched) {
1606  histograms.h_assochit[count].fill((int)nSimHits);
1607  if(histograms.nrecHit_vs_nsimHit_sim2rec[count]) histograms.nrecHit_vs_nsimHit_sim2rec[count].fill(track->numberOfValidHits(),nSimHits);
1608  }
1609  //effic vs pu
1610  histograms.h_simulpu[count].fill(numVertices);
1611  if (isMatched) histograms.h_assocpu[count].fill(numVertices);
1612  //efficiency vs dR
1613  //not implemented for now
1614  }
1615 
1616  if((*GpSelectorForEfficiencyVsPt)(tp)){
1617  histograms.h_simulpT[count].fill(getPt(sqrt(momentumTP.perp2())));
1618  if (isMatched) histograms.h_assocpT[count].fill(getPt(sqrt(momentumTP.perp2())));
1619  }
1620 
1621  if((*GpSelectorForEfficiencyVsVTXR)(tp)){
1622  histograms.h_simuldxy[count].fill(dxySim);
1623  if (isMatched) histograms.h_assocdxy[count].fill(dxySim);
1624 
1625  histograms.h_simulvertpos[count].fill(sqrt(vertexTP.perp2()));
1626  if (isMatched) histograms.h_assocvertpos[count].fill(sqrt(vertexTP.perp2()));
1627  }
1628 
1629  if((*GpSelectorForEfficiencyVsVTXZ)(tp)){
1630  histograms.h_simuldz[count].fill(dzSim);
1631  if (isMatched) histograms.h_assocdz[count].fill(dzSim);
1632 
1633  histograms.h_simulzpos[count].fill(vertexTP.z());
1634  if (isMatched) histograms.h_assoczpos[count].fill(vertexTP.z());
1635  }
1636 
1637 }
1638 
1640  int count,
1641  int seedsFitFailed,
1642  int seedsTotal) const {
1643  histograms.h_seedsFitFailed[count].fill(seedsFitFailed);
1644  histograms.h_seedsFitFailedFraction[count].fill(static_cast<double>(seedsFitFailed)/seedsTotal);
1645 }
#define LogDebug(id)
std::vector< ConcurrentMonitorElement > h_assoc2pu
size
Write out results.
std::vector< ConcurrentMonitorElement > h_assoc2pixellayer
double qoverp() const
q / p
Definition: TrackBase.h:606
double phiModeError() const
error on phi from mode
Definition: GsfTrack.h:94
std::vector< ConcurrentMonitorElement > h_pileupdxy
std::vector< ConcurrentMonitorElement > h_misidphi
std::vector< ConcurrentMonitorElement > h_fakes
const edm::RefToBase< TrajectorySeed > & seedRef() const
Definition: Track.h:218
std::vector< ConcurrentMonitorElement > h_looperdxy
T getParameter(std::string const &) const
std::vector< ConcurrentMonitorElement > h_looper_seedingLayerSet
void fill_trackBased_histos(const Histograms &histograms, int count, int assTracks, int numRecoTracks, int numRecoTracksSelected, int numSimTracksSelected) const
ConcurrentMonitorElement bookProfile(Args &&...args)
Definition: DQMStore.h:167
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
std::vector< ConcurrentMonitorElement > h_looperlayer
std::vector< ConcurrentMonitorElement > h_assoc2dzpvzoomed
const Point & referencePoint() const
Reference point on the track.
Definition: TrackBase.h:714
std::vector< ConcurrentMonitorElement > h_assoczpos
std::vector< ConcurrentMonitorElement > chi2_vs_eta
std::vector< std::vector< ConcurrentMonitorElement > > h_assoc_mvacut_hp
std::unique_ptr< TrackingParticleSelector > TpSelectorForEfficiencyVsPt
std::vector< ConcurrentMonitorElement > h_pileuphit
std::vector< ConcurrentMonitorElement > h_pullQoverp
std::vector< ConcurrentMonitorElement > h_pileup_seedingLayerSet
std::vector< ConcurrentMonitorElement > h_misiddzpv
std::unique_ptr< TrackingParticleSelector > TpSelectorForEfficiencyVsEta
void fill_seed_histos(const Histograms &histograms, int count, int seedsFitFailed, int seedsTotal) const
std::vector< ConcurrentMonitorElement > h_assoc_dzpvsigcut_pt
std::vector< ConcurrentMonitorElement > h_pileupphi
std::vector< ConcurrentMonitorElement > nSTRIPhits_vs_eta
std::vector< ConcurrentMonitorElement > dxyres_vs_eta
std::vector< ConcurrentMonitorElement > h_pullTheta
std::vector< ConcurrentMonitorElement > h_misidpixellayer
bool trackFromSeedFitFailed(const reco::Track &track)
std::vector< std::vector< ConcurrentMonitorElement > > h_reco_mva
std::vector< ConcurrentMonitorElement > h_assoc3Dlayer
std::vector< ConcurrentMonitorElement > h_simul_dzpvcut_pt
std::vector< ConcurrentMonitorElement > h_assocFraction
std::vector< ConcurrentMonitorElement > h_pullPhi
std::unique_ptr< GenParticleCustomSelector > GpSelectorForEfficiencyVsVTXR
std::vector< ConcurrentMonitorElement > h_seedsFitFailed
std::vector< ConcurrentMonitorElement > h_assoc2eta
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
std::vector< ConcurrentMonitorElement > h_misidhit
std::vector< ConcurrentMonitorElement > h_assoclayer
double lambdaMode() const
Lambda angle from mode.
Definition: GsfTrack.h:45
std::vector< ConcurrentMonitorElement > h_recodr
std::vector< ConcurrentMonitorElement > h_misiddxy
std::vector< ConcurrentMonitorElement > h_pileupdr
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:594
std::vector< ConcurrentMonitorElement > h_assoc2zpos
bool isAvailable() const
Definition: RefToBase.h:114
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) ...
ConcurrentMonitorElement bookProfile2D(Args &&...args)
Definition: DQMStore.h:168
std::vector< ConcurrentMonitorElement > phires_vs_eta
std::vector< ConcurrentMonitorElement > h_looperpu
std::unique_ptr< TrackingParticleSelector > TpSelectorForEfficiencyVsVTXR
std::map< SeedingLayerSetId, unsigned int > seedingLayerSetToBin
std::vector< std::vector< ConcurrentMonitorElement > > h_assoc2_mvacut
double theta() const
polar angle
Definition: TrackBase.h:612
double dxyError() const
error on dxy
Definition: TrackBase.h:841
std::vector< ConcurrentMonitorElement > h_nmisslayers_inner
void bookMVAHistos(DQMStore::ConcurrentBooker &ibook, Histograms &histograms, size_t nMVAs)
std::vector< ConcurrentMonitorElement > h_looperpT
TrackerDetSide
Definition: TrackerDetSide.h:4
void bookSimTrackPVAssociationHistos(DQMStore::ConcurrentBooker &ibook, Histograms &histograms)
std::vector< ConcurrentMonitorElement > nPXLhits_vs_eta
std::vector< ConcurrentMonitorElement > h_pileupdzpv
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< ConcurrentMonitorElement > h_simuldxy
std::vector< ConcurrentMonitorElement > h_assocdzpv
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:50
unsigned int side(const DetId &id) const
std::vector< ConcurrentMonitorElement > nSTRIPlayersWithMeas_vs_eta
std::vector< ConcurrentMonitorElement > nlosthits_vs_eta
std::vector< ConcurrentMonitorElement > h_charge
std::vector< ConcurrentMonitorElement > nrec_vs_nsim
std::unique_ptr< GenParticleCustomSelector > GpSelectorForEfficiencyVsVTXZ
std::vector< ConcurrentMonitorElement > h_simulphi
std::vector< ConcurrentMonitorElement > h_simulpT
std::vector< ConcurrentMonitorElement > h_algo
std::vector< ConcurrentMonitorElement > h_simul2_dzpvsigcut_pt
std::vector< ConcurrentMonitorElement > h_eta
std::vector< std::vector< ConcurrentMonitorElement > > h_fake_mva_vs_pt
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:678
unsigned short numberOfLostHits() const
number of cases where track crossed a layer without getting a hit.
Definition: TrackBase.h:895
std::vector< ConcurrentMonitorElement > h_looperdz
std::vector< ConcurrentMonitorElement > h_misiddz
std::vector< ConcurrentMonitorElement > h_assoc2chi2
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< ConcurrentMonitorElement > h_assoc2_dzpvsigcut
std::vector< ConcurrentMonitorElement > h_pileupdxypv
std::vector< ConcurrentMonitorElement > h_pileupeta
std::vector< ConcurrentMonitorElement > h_assoc2phi
std::unique_ptr< GenParticleCustomSelector > GpSelectorForEfficiencyVsPt
std::vector< ConcurrentMonitorElement > nPXFhits_vs_eta
std::vector< ConcurrentMonitorElement > h_looperdzpv
std::vector< ConcurrentMonitorElement > h_pileupchi2
std::unique_ptr< RecoTrackSelectorBase > trackSelectorVsPhi
std::vector< ConcurrentMonitorElement > h_pileuppT
int pixelLayersWithMeasurement() const
Definition: HitPattern.cc:538
std::vector< ConcurrentMonitorElement > h_assoc2dzpv
std::vector< ConcurrentMonitorElement > h_simuleta
const Vector & momentum() const
track momentum vector
Definition: TrackBase.h:708
std::vector< std::vector< ConcurrentMonitorElement > > h_assoc2_mva_hp
std::vector< ConcurrentMonitorElement > h_simuldzpvzoomed
std::vector< ConcurrentMonitorElement > h_looperphi
std::vector< ConcurrentMonitorElement > h_simulhit
unsigned int getSeedingLayerSetBin(const reco::Track &track, const TrackerTopology &ttopo) const
void fill_simTrackBased_histos(const Histograms &histograms, int numSimTracks) const
std::vector< ConcurrentMonitorElement > h_misiddxypvzoomed
std::vector< ConcurrentMonitorElement > h_assoc2dxypvzoomed
std::vector< ConcurrentMonitorElement > h_pileuplayer
int trackerLayersWithMeasurement() const
Definition: HitPattern.cc:557
std::vector< ConcurrentMonitorElement > h_reco_dzpvsigcut_pt
std::vector< ConcurrentMonitorElement > h_assoc2pT
std::vector< ConcurrentMonitorElement > h_pullDz
int numberOfValidStripTOBHits() const
Definition: HitPattern.h:946
std::vector< ConcurrentMonitorElement > etares_vs_eta
std::vector< ConcurrentMonitorElement > ptres_vs_phi
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
std::vector< ConcurrentMonitorElement > h_simuldzpv
std::vector< ConcurrentMonitorElement > h_pileupdzpvzoomed
std::vector< ConcurrentMonitorElement > h_pileupvertpos
std::vector< std::vector< ConcurrentMonitorElement > > h_simul2_mvacut_hp
std::unique_ptr< GenParticleCustomSelector > GpSelectorForEfficiencyVsPhi
std::vector< ConcurrentMonitorElement > h_pileupdxypvzoomed
std::vector< ConcurrentMonitorElement > h_loopereta
std::vector< ConcurrentMonitorElement > h_hits
double qoverpMode() const
q/p from mode
Definition: GsfTrack.h:41
float dEdx() const
Definition: DeDxData.cc:26
double ptModeError() const
error on Pt (set to 1000 TeV if charge==0 for safety) from mode
Definition: GsfTrack.h:81
std::vector< ConcurrentMonitorElement > h_simuldrj
TrackAlgorithm algo() const
Definition: TrackBase.h:530
std::vector< ConcurrentMonitorElement > h_recodrj
math::XYZPointD Point
point in the space
std::vector< ConcurrentMonitorElement > h_assoc2_dzpvcut
std::vector< ConcurrentMonitorElement > h_misiddxypv
std::vector< ConcurrentMonitorElement > nPXBhits_vs_eta
math::XYZTLorentzVectorD LorentzVector
std::vector< std::vector< ConcurrentMonitorElement > > h_fake_mva_vs_pt_hp
std::vector< ConcurrentMonitorElement > h_recodxypv
std::vector< ConcurrentMonitorElement > nrecHit_vs_nsimHit_rec2sim
std::vector< ConcurrentMonitorElement > h_simulpixellayer
std::vector< ConcurrentMonitorElement > nSTRIPlayersWith2dMeas_vs_eta
std::vector< ConcurrentMonitorElement > dxyres_vs_pt
void bookRecoHistos(DQMStore::ConcurrentBooker &ibook, Histograms &histograms, bool doResolutionPlots)
std::vector< ConcurrentMonitorElement > h_nchi2
std::tuple< GeomDetEnumerators::SubDetector, TrackerDetSide, int > SeedingLayerId
std::vector< ConcurrentMonitorElement > h_simul2_dzpvcut_pt
std::vector< ConcurrentMonitorElement > h_recozpos
unsigned int numberOfMeasurements() const
Definition: DeDxData.cc:37
std::vector< ConcurrentMonitorElement > h_looperpixellayer
std::vector< ConcurrentMonitorElement > h_recopixellayer
std::vector< ConcurrentMonitorElement > h_assocdxypv
std::vector< ConcurrentMonitorElement > h_assocdz
std::vector< ConcurrentMonitorElement > h_looperdrj
std::vector< ConcurrentMonitorElement > phires_vs_phi
void bookSeedHistos(DQMStore::ConcurrentBooker &ibook, Histograms &histograms)
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:684
std::vector< ConcurrentMonitorElement > h_simul_simpvz
int numberOfValidStripLayersWithMonoAndStereo(uint16_t stripdet, uint16_t layer) const
Definition: HitPattern.cc:379
std::vector< ConcurrentMonitorElement > h_pileup_dzpvcut
std::vector< ConcurrentMonitorElement > h_looperdr
std::vector< ConcurrentMonitorElement > nTOBhits_vs_eta
std::vector< std::vector< ConcurrentMonitorElement > > h_simul2_mvacut
int numberOfValidPixelBarrelHits() const
Definition: HitPattern.h:921
std::vector< ConcurrentMonitorElement > ptres_vs_eta
std::vector< std::vector< ConcurrentMonitorElement > > h_fake_mva_vs_eta
std::vector< ConcurrentMonitorElement > h_assoceta
std::vector< ConcurrentMonitorElement > h_reco2eta
std::vector< ConcurrentMonitorElement > h_misidpT
std::vector< ConcurrentMonitorElement > h_reco3Dlayer
std::vector< ConcurrentMonitorElement > h_assoc_dzpvcut_pt
std::vector< ConcurrentMonitorElement > dzres_vs_eta
std::vector< ConcurrentMonitorElement > h_assocdzpvzoomed
std::vector< ConcurrentMonitorElement > h_pileupdz
std::tuple< SeedingLayerSetsBuilder::SeedingLayerId, bool > SeedingLayerId
std::vector< std::vector< ConcurrentMonitorElement > > h_assoc2_mva_vs_eta
double chi2() const
chi-squared of the fit
Definition: TrackBase.h:582
std::vector< ConcurrentMonitorElement > h_assoc2layer
std::vector< ConcurrentMonitorElement > h_recodzpv
std::vector< ConcurrentMonitorElement > nLayersWithMeas_vs_eta
std::vector< ConcurrentMonitorElement > h_pileup3Dlayer
auto dz(const T_Vertex &vertex, const T_Momentum &momentum, const T_Point &point)
ConcurrentMonitorElement book2D(Args &&...args)
Definition: DQMStore.h:163
std::vector< ConcurrentMonitorElement > h_assoc_simpvz
std::vector< ConcurrentMonitorElement > h_reco2pu
std::vector< ConcurrentMonitorElement > h_reco_dzpvcut_pt
double ndof() const
number of degrees of freedom of the fit
Definition: TrackBase.h:588
T sqrt(T t)
Definition: SSEVec.h:18
std::vector< ConcurrentMonitorElement > h_simul3Dlayer
std::vector< ConcurrentMonitorElement > h_simul_dzpvcut
std::vector< ConcurrentMonitorElement > h_misiddzpvzoomed
std::unique_ptr< GenParticleCustomSelector > GpSelectorForEfficiencyVsEta
double pt() const
track transverse momentum
Definition: TrackBase.h:654
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:125
std::vector< ConcurrentMonitorElement > h_misidlayer
std::vector< ConcurrentMonitorElement > ptres_vs_pt
std::unique_ptr< TrackingParticleSelector > generalTpSelector
std::vector< ConcurrentMonitorElement > h_recolayer
std::vector< ConcurrentMonitorElement > nTIDhits_vs_eta
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Definition: TrackBase.h:808
std::vector< ConcurrentMonitorElement > h_pileupzpos
std::vector< ConcurrentMonitorElement > h_simul2_dzpvcut
double phiError() const
error on phi
Definition: TrackBase.h:835
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:41
std::vector< ConcurrentMonitorElement > h_simulvertpos
std::vector< ConcurrentMonitorElement > h_simulzpos
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
std::vector< ConcurrentMonitorElement > h_assoc2hit
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void bookSimHistos(DQMStore::ConcurrentBooker &ibook, Histograms &histograms)
ConcurrentMonitorElement book1D(Args &&...args)
Definition: DQMStore.h:160
int numberOfValidStripTIDHits() const
Definition: HitPattern.h:941
double lambda() const
Lambda angle.
Definition: TrackBase.h:618
bool isMatched(TrackingRecHit const &hit)
std::vector< ConcurrentMonitorElement > h_recodxy
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:889
std::vector< ConcurrentMonitorElement > h_pileup_dzpvsigcut_pt
int numberOfValidStripTECHits() const
Definition: HitPattern.h:951
std::vector< ConcurrentMonitorElement > h_recopT
std::vector< ConcurrentMonitorElement > cotThetares_vs_pt
std::vector< ConcurrentMonitorElement > h_assoc_dzpvcut
std::vector< ConcurrentMonitorElement > h_assocvertpos
void bookSimTrackHistos(DQMStore::ConcurrentBooker &ibook, Histograms &histograms, bool doResolutionPlots)
std::vector< ConcurrentMonitorElement > h_recovertpos
std::vector< ConcurrentMonitorElement > h_assoc_dzpvsigcut
std::vector< ConcurrentMonitorElement > h_assoc2dxypv
std::vector< ConcurrentMonitorElement > dzres_vs_pt
std::vector< ConcurrentMonitorElement > phires_vs_pt
std::vector< ConcurrentMonitorElement > nhits_vs_phi
void eraseSimpleParameter(std::string const &name)
std::vector< ConcurrentMonitorElement > h_assoc2_seedingLayerSet
void copyForModify(ParameterSet const &other)
Definition: ParameterSet.cc:93
std::vector< ConcurrentMonitorElement > h_assocpixellayer
std::vector< ConcurrentMonitorElement > ptmean_vs_eta_phi
std::vector< ConcurrentMonitorElement > h_simulpu
std::vector< ConcurrentMonitorElement > h_simuldxypv
std::vector< ConcurrentMonitorElement > h_looperchi2
std::vector< std::vector< ConcurrentMonitorElement > > h_dedx_estim
std::vector< ConcurrentMonitorElement > h_duplicates_oriAlgo_vs_oriAlgo
std::vector< ConcurrentMonitorElement > h_assoc2dxy
std::vector< ConcurrentMonitorElement > phipull_vs_phi
#define LogTrace(id)
std::vector< ConcurrentMonitorElement > h_recophi
std::vector< ConcurrentMonitorElement > h_loopervertpos
bool isTrackerStrip(GeomDetEnumerators::SubDetector m)
std::vector< ConcurrentMonitorElement > h_simullayer
#define M_PI
std::vector< ConcurrentMonitorElement > h_recodzpvzoomed
double qoverpError() const
error on signed transverse curvature
Definition: TrackBase.h:802
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:642
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
std::vector< ConcurrentMonitorElement > h_nmisslayers_outer
double dzError() const
error on dz
Definition: TrackBase.h:859
std::vector< ConcurrentMonitorElement > h_looper3Dlayer
static SeedingLayerId nameToEnumId(const std::string &name)
std::vector< std::vector< ConcurrentMonitorElement > > h_fake_mva_vs_eta_hp
MTVHistoProducerAlgoForTracker(const edm::ParameterSet &pset, const bool doSeedPlots)
std::vector< std::vector< ConcurrentMonitorElement > > h_dedx_sat
std::vector< ConcurrentMonitorElement > h_nchi2_prob
std::vector< ConcurrentMonitorElement > nhits_vs_eta
std::array< SeedingLayerId, 4 > SeedingLayerSetId
Definition: DetId.h:18
std::vector< ConcurrentMonitorElement > h_assoc2_dzpvsigcut_pt
TrackAlgorithm originalAlgo() const
Definition: TrackBase.h:534
void bookRecoPVAssociationHistos(DQMStore::ConcurrentBooker &ibook, Histograms &histograms)
std::vector< ConcurrentMonitorElement > h_reco_seedingLayerSet
std::vector< ConcurrentMonitorElement > h_assoc2vertpos
std::vector< ConcurrentMonitorElement > h_recohit
void fill_duplicate_histos(const Histograms &histograms, int count, const reco::Track &track1, const reco::Track &track2) const
std::vector< std::vector< ConcurrentMonitorElement > > h_assoc_mvacut
std::unique_ptr< TrackingParticleSelector > TpSelectorForEfficiencyVsPhi
std::vector< std::vector< ConcurrentMonitorElement > > h_assoc2_mva_vs_eta_hp
std::vector< std::vector< ConcurrentMonitorElement > > h_reco_mvacut
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:479
std::vector< ConcurrentMonitorElement > h_assocdr
bool isSingle(TrackingRecHit const &hit)
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
void setBinLabel(int bin, std::string const &label, int axis=1)
std::vector< ConcurrentMonitorElement > h_assocpu
std::vector< ConcurrentMonitorElement > chi2_vs_phi
std::vector< ConcurrentMonitorElement > dxypull_vs_eta
std::vector< ConcurrentMonitorElement > h_reco_dzpvcut
std::vector< ConcurrentMonitorElement > h_recochi2
double qoverpModeError() const
error on signed transverse curvature from mode
Definition: GsfTrack.h:79
bool isNull() const
Checks for null.
Definition: RefToBase.h:331
std::string algoName() const
Definition: TrackBase.h:541
int stripLayersWithMeasurement() const
Definition: HitPattern.h:1138
range recHits() const
std::vector< std::vector< ConcurrentMonitorElement > > h_reco_mvacut_hp
std::vector< ConcurrentMonitorElement > h_pileup_simpvz
std::vector< ConcurrentMonitorElement > h_simul2_dzpvsigcut
int numberOfValidStripTIBHits() const
Definition: HitPattern.h:936
std::vector< std::vector< ConcurrentMonitorElement > > h_reco_mva_hp
std::vector< ConcurrentMonitorElement > h_assoc2dr
static const std::string algoNames[]
Definition: TrackBase.h:148
std::vector< ConcurrentMonitorElement > h_assoc2_dzpvcut_pt
int numberOfLostHits(HitCategory category) const
Definition: HitPattern.h:990
unsigned int layer(const DetId &id) const
int numberOfValidPixelEndcapHits() const
Definition: HitPattern.h:926
std::vector< std::vector< ConcurrentMonitorElement > > h_dedx_nom
std::vector< ConcurrentMonitorElement > dzpull_vs_eta
std::unique_ptr< TrackingParticleSelector > TpSelectorForEfficiencyVsVTXZ
double lambdaError() const
error on lambda
Definition: TrackBase.h:823
std::vector< ConcurrentMonitorElement > h_misid3Dlayer
std::vector< std::string > seedingLayerSetNames
std::vector< std::vector< ConcurrentMonitorElement > > h_assoc2_mva_vs_pt_hp
std::vector< ConcurrentMonitorElement > phimean_vs_eta_phi
HLT enums.
std::vector< ConcurrentMonitorElement > h_assocdxypvzoomed
void fill(Args &&...args) const
auto dxy(const T_Vertex &vertex, const T_Momentum &momentum, const T_Point &point)
std::vector< ConcurrentMonitorElement > h_looperdzpvzoomed
std::vector< ConcurrentMonitorElement > ptpull_vs_phi
std::vector< ConcurrentMonitorElement > h_assocphi
std::vector< ConcurrentMonitorElement > h_pileup_dzpvsigcut
unsigned short found() const
Number of valid hits on track.
Definition: Track.h:199
std::vector< ConcurrentMonitorElement > h_simul_dzpvsigcut
std::vector< ConcurrentMonitorElement > chi2_vs_nhits
std::vector< ConcurrentMonitorElement > h_pt
std::vector< ConcurrentMonitorElement > nrecHit_vs_nsimHit_sim2rec
std::vector< ConcurrentMonitorElement > h_recopu
std::vector< ConcurrentMonitorElement > phipull_vs_eta
std::vector< ConcurrentMonitorElement > h_misideta
std::vector< ConcurrentMonitorElement > h_reco_simpvz
std::vector< ConcurrentMonitorElement > h_assoc23Dlayer
std::vector< ConcurrentMonitorElement > h_assoc2_simpvz
std::vector< std::vector< ConcurrentMonitorElement > > h_assoc2_mvacut_hp
std::vector< ConcurrentMonitorElement > h_looperzpos
std::vector< ConcurrentMonitorElement > nPXLlayersWithMeas_vs_eta
double phiMode() const
azimuthal angle of momentum vector from mode
Definition: GsfTrack.h:57
std::vector< ConcurrentMonitorElement > nTEChits_vs_eta
std::vector< ConcurrentMonitorElement > h_recodxypvzoomed
Monte Carlo truth information used for tracking validation.
std::vector< ConcurrentMonitorElement > h_recodz
std::vector< ConcurrentMonitorElement > h_simuldxypvzoomed
std::vector< ConcurrentMonitorElement > h_seedsFitFailedFraction
int charge() const
track electric charge
Definition: TrackBase.h:600
std::vector< ConcurrentMonitorElement > h_misidchi2
std::vector< ConcurrentMonitorElement > h_losthits
std::vector< ConcurrentMonitorElement > cotThetares_vs_eta
std::vector< ConcurrentMonitorElement > thetapull_vs_eta
std::vector< ConcurrentMonitorElement > h_simuldz
void bookRecodEdxHistos(DQMStore::ConcurrentBooker &ibook, Histograms &histograms)
std::vector< ConcurrentMonitorElement > ptpull_vs_eta
double lambdaModeError() const
error on lambda from mode
Definition: GsfTrack.h:90
std::vector< ConcurrentMonitorElement > h_assoc2drj
std::vector< ConcurrentMonitorElement > h_assocdrj
std::unique_ptr< GenParticleCustomSelector > generalGpSelector
std::vector< ConcurrentMonitorElement > h_reco2pT
std::vector< ConcurrentMonitorElement > h_looperdxypvzoomed
std::vector< ConcurrentMonitorElement > h_reco_dzpvsigcut
void setBinLabels(std::vector< TH2F > &depth)
std::vector< ConcurrentMonitorElement > h_simul_dzpvsigcut_pt
math::XYZVectorD Vector
point in the space
std::unique_ptr< RecoTrackSelectorBase > trackSelectorVsEta
std::vector< ConcurrentMonitorElement > h_looperhit
std::vector< ConcurrentMonitorElement > h_misidpu
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:624
static std::unique_ptr< RecoTrackSelectorBase > makeRecoTrackSelectorFromTPSelectorParameters(const edm::ParameterSet &pset)
std::vector< ConcurrentMonitorElement > h_pileupdrj
std::vector< ConcurrentMonitorElement > h_simuldr
std::vector< ConcurrentMonitorElement > h_assochit
std::vector< ConcurrentMonitorElement > h_assocSharedHit
double ptMode() const
track transverse momentum from mode
Definition: GsfTrack.h:49
int numberOfSaturatedMeasurements() const
Definition: DeDxData.cc:42
std::vector< ConcurrentMonitorElement > h_assocdxy
std::vector< ConcurrentMonitorElement > h_assocpT
std::vector< ConcurrentMonitorElement > h_looperdxypv
std::vector< ConcurrentMonitorElement > h_looper_simpvz
std::vector< ConcurrentMonitorElement > h_pileuppu
std::vector< std::vector< ConcurrentMonitorElement > > h_assoc2_mva_vs_pt
std::vector< ConcurrentMonitorElement > h_recoeta
std::vector< std::vector< ConcurrentMonitorElement > > h_assoc2_mva
#define constexpr
std::vector< ConcurrentMonitorElement > h_pileup_dzpvcut_pt
std::vector< ConcurrentMonitorElement > h_pileuppixellayer
std::vector< ConcurrentMonitorElement > nSTRIPlayersWith1dMeas_vs_eta
std::vector< ConcurrentMonitorElement > h_pullDxy
std::vector< ConcurrentMonitorElement > h_assoc2dz
std::vector< ConcurrentMonitorElement > nTIBhits_vs_eta
static std::vector< std::vector< std::string > > layerNamesInSets(const std::vector< std::string > &namesPSet)
std::vector< ConcurrentMonitorElement > h_tracks
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:39
std::vector< ConcurrentMonitorElement > thetapull_vs_phi