CMS 3D CMS Logo

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