CMS 3D CMS Logo

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