CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MTVHistoProducerAlgoForTracker.cc
Go to the documentation of this file.
3 
8 
10 
11 #include "TMath.h"
12 #include <TF1.h>
13 
14 using namespace std;
15 
16 namespace {
17  void BinLogX(TH1 *h) {
18  TAxis *axis = h->GetXaxis();
19  int bins = axis->GetNbins();
20 
21  float from = axis->GetXmin();
22  float to = axis->GetXmax();
23  float width = (to - from) / bins;
24  std::vector<float> new_bins(bins+1, 0);
25 
26  for (int i = 0; i <= bins; i++) {
27  new_bins[i] = TMath::Power(10, from + i * width);
28  }
29  axis->Set(bins, new_bins.data());
30  }
31 
32  template<typename T> void fillPlotNoFlow(MonitorElement *h, T val) {
33  h->Fill(std::min(std::max(val,((T) h->getTH1()->GetXaxis()->GetXmin())),((T) h->getTH1()->GetXaxis()->GetXmax())));
34  }
35 }
36 
38  h_ptSIM(nullptr), h_etaSIM(nullptr), h_tracksSIM(nullptr), h_vertposSIM(nullptr), h_bunchxSIM(nullptr)
39 {
40  //parameters for _vs_eta plots
41  minEta = pset.getParameter<double>("minEta");
42  maxEta = pset.getParameter<double>("maxEta");
43  nintEta = pset.getParameter<int>("nintEta");
44  useFabsEta = pset.getParameter<bool>("useFabsEta");
45 
46  //parameters for _vs_pt plots
47  minPt = pset.getParameter<double>("minPt");
48  maxPt = pset.getParameter<double>("maxPt");
49  nintPt = pset.getParameter<int>("nintPt");
50  useInvPt = pset.getParameter<bool>("useInvPt");
51  useLogPt = pset.getUntrackedParameter<bool>("useLogPt",false);
52 
53  //parameters for _vs_Hit plots
54  minHit = pset.getParameter<double>("minHit");
55  maxHit = pset.getParameter<double>("maxHit");
56  nintHit = pset.getParameter<int>("nintHit");
57 
58  //parameters for _vs_Pu plots
59  minPu = pset.getParameter<double>("minPu");
60  maxPu = pset.getParameter<double>("maxPu");
61  nintPu = pset.getParameter<int>("nintPu");
62 
63  //parameters for _vs_Layer plots
64  minLayers = pset.getParameter<double>("minLayers");
65  maxLayers = pset.getParameter<double>("maxLayers");
66  nintLayers = pset.getParameter<int>("nintLayers");
67 
68  //parameters for _vs_phi plots
69  minPhi = pset.getParameter<double>("minPhi");
70  maxPhi = pset.getParameter<double>("maxPhi");
71  nintPhi = pset.getParameter<int>("nintPhi");
72 
73  //parameters for _vs_Dxy plots
74  minDxy = pset.getParameter<double>("minDxy");
75  maxDxy = pset.getParameter<double>("maxDxy");
76  nintDxy = pset.getParameter<int>("nintDxy");
77 
78  //parameters for _vs_Dz plots
79  minDz = pset.getParameter<double>("minDz");
80  maxDz = pset.getParameter<double>("maxDz");
81  nintDz = pset.getParameter<int>("nintDz");
82 
83  //parameters for _vs_ProductionVertexTransvPosition plots
84  minVertpos = pset.getParameter<double>("minVertpos");
85  maxVertpos = pset.getParameter<double>("maxVertpos");
86  nintVertpos = pset.getParameter<int>("nintVertpos");
87 
88  //parameters for _vs_ProductionVertexZPosition plots
89  minZpos = pset.getParameter<double>("minZpos");
90  maxZpos = pset.getParameter<double>("maxZpos");
91  nintZpos = pset.getParameter<int>("nintZpos");
92 
93  //parameters for _vs_dR plots
94  mindr = pset.getParameter<double>("mindr");
95  maxdr = pset.getParameter<double>("maxdr");
96  nintdr = pset.getParameter<int>("nintdr");
97 
98  // paramers for _vs_chi2 plots
99  minChi2 = pset.getParameter<double>("minChi2");
100  maxChi2 = pset.getParameter<double>("maxChi2");
101  nintChi2 = pset.getParameter<int>("nintChi2");
102 
103  //parameters for dE/dx plots
104  minDeDx = pset.getParameter<double>("minDeDx");
105  maxDeDx = pset.getParameter<double>("maxDeDx");
106  nintDeDx = pset.getParameter<int>("nintDeDx");
107 
108  //parameters for Pileup plots
109  minVertcount = pset.getParameter<double>("minVertcount");
110  maxVertcount = pset.getParameter<double>("maxVertcount");
111  nintVertcount = pset.getParameter<int>("nintVertcount");
112 
113  //parameters for number of tracks plots
114  minTracks = pset.getParameter<double>("minTracks");
115  maxTracks = pset.getParameter<double>("maxTracks");
116  nintTracks = pset.getParameter<int>("nintTracks");
117 
118  //parameters for resolution plots
119  ptRes_rangeMin = pset.getParameter<double>("ptRes_rangeMin");
120  ptRes_rangeMax = pset.getParameter<double>("ptRes_rangeMax");
121  ptRes_nbin = pset.getParameter<int>("ptRes_nbin");
122 
123  phiRes_rangeMin = pset.getParameter<double>("phiRes_rangeMin");
124  phiRes_rangeMax = pset.getParameter<double>("phiRes_rangeMax");
125  phiRes_nbin = pset.getParameter<int>("phiRes_nbin");
126 
127  cotThetaRes_rangeMin = pset.getParameter<double>("cotThetaRes_rangeMin");
128  cotThetaRes_rangeMax = pset.getParameter<double>("cotThetaRes_rangeMax");
129  cotThetaRes_nbin = pset.getParameter<int>("cotThetaRes_nbin");
130 
131  dxyRes_rangeMin = pset.getParameter<double>("dxyRes_rangeMin");
132  dxyRes_rangeMax = pset.getParameter<double>("dxyRes_rangeMax");
133  dxyRes_nbin = pset.getParameter<int>("dxyRes_nbin");
134 
135  dzRes_rangeMin = pset.getParameter<double>("dzRes_rangeMin");
136  dzRes_rangeMax = pset.getParameter<double>("dzRes_rangeMax");
137  dzRes_nbin = pset.getParameter<int>("dzRes_nbin");
138 
139 
140  maxDzpvCum = pset.getParameter<double>("maxDzpvCumulative");
141  nintDzpvCum = pset.getParameter<int>("nintDzpvCumulative");
142 
143  maxDzpvsigCum = pset.getParameter<double>("maxDzpvsigCumulative");
144  nintDzpvsigCum = pset.getParameter<int>("nintDzpvsigCumulative");
145 
146  //--- tracking particle selectors for efficiency measurements
147  using namespace edm;
148  using namespace reco::modules;
149  auto initTPselector = [&](auto& sel, auto& name) {
150  sel = std::make_unique<TrackingParticleSelector>(ParameterAdapter<TrackingParticleSelector>::make(pset.getParameter<ParameterSet>(name), iC));
151  };
152  auto initGPselector = [&](auto& sel, auto& name) {
153  sel = std::make_unique<GenParticleCustomSelector>(ParameterAdapter<GenParticleCustomSelector>::make(pset.getParameter<ParameterSet>(name), iC));
154  };
155 
156  initTPselector(generalTpSelector, "generalTpSelector");
157  initTPselector(TpSelectorForEfficiencyVsEta, "TpSelectorForEfficiencyVsEta");
158  initTPselector(TpSelectorForEfficiencyVsPhi, "TpSelectorForEfficiencyVsPhi");
159  initTPselector(TpSelectorForEfficiencyVsPt, "TpSelectorForEfficiencyVsPt");
160  initTPselector(TpSelectorForEfficiencyVsVTXR, "TpSelectorForEfficiencyVsVTXR");
161  initTPselector(TpSelectorForEfficiencyVsVTXZ, "TpSelectorForEfficiencyVsVTXZ");
162 
163  initGPselector(generalGpSelector, "generalGpSelector");
164  initGPselector(GpSelectorForEfficiencyVsEta, "GpSelectorForEfficiencyVsEta");
165  initGPselector(GpSelectorForEfficiencyVsPhi, "GpSelectorForEfficiencyVsPhi");
166  initGPselector(GpSelectorForEfficiencyVsPt, "GpSelectorForEfficiencyVsPt");
167  initGPselector(GpSelectorForEfficiencyVsVTXR, "GpSelectorForEfficiencyVsVTXR");
168  initGPselector(GpSelectorForEfficiencyVsVTXZ, "GpSelectorForEfficiencyVsVTXZ");
169 
170  // fix for the LogScale by Ryan
171  if(useLogPt){
172  maxPt=log10(maxPt);
173  if(minPt > 0){
174  minPt=log10(minPt);
175  }
176  else{
177  edm::LogWarning("MultiTrackValidator")
178  << "minPt = "
179  << minPt << " <= 0 out of range while requesting log scale. Using minPt = 0.1.";
180  minPt=log10(0.1);
181  }
182  }
183 
184 }
185 
187 
189  if(h_ptSIM != nullptr)
190  throw cms::Exception("LogicError") << "bookSimHistos() has already been called";
191 
192  h_ptSIM = ibook.book1D("ptSIM", "generated p_{t}", nintPt, minPt, maxPt);
193  h_etaSIM = ibook.book1D("etaSIM", "generated pseudorapidity", nintEta, minEta, maxEta);
194  h_tracksSIM = ibook.book1D("tracksSIM","number of simulated tracks", nintTracks, minTracks, maxTracks*10);
195  h_vertposSIM = ibook.book1D("vertposSIM","Transverse position of sim vertices", nintVertpos, minVertpos, maxVertpos);
196  h_bunchxSIM = ibook.book1D("bunchxSIM", "bunch crossing", 21, -15.5, 5.5 );
197 
198  if(useLogPt) {
199  BinLogX(h_ptSIM->getTH1F());
200  }
201 }
202 
204  h_assoceta.push_back( ibook.book1D("num_assoc(simToReco)_eta","N of associated tracks (simToReco) vs eta",nintEta,minEta,maxEta) );
205  h_simuleta.push_back( ibook.book1D("num_simul_eta","N of simulated tracks vs eta",nintEta,minEta,maxEta) );
206 
207  h_assocpT.push_back( ibook.book1D("num_assoc(simToReco)_pT","N of associated tracks (simToReco) vs pT",nintPt,minPt,maxPt) );
208  h_simulpT.push_back( ibook.book1D("num_simul_pT","N of simulated tracks vs pT",nintPt,minPt,maxPt) );
209 
210  h_assochit.push_back( ibook.book1D("num_assoc(simToReco)_hit","N of associated tracks (simToReco) vs hit",nintHit,minHit,maxHit) );
211  h_simulhit.push_back( ibook.book1D("num_simul_hit","N of simulated tracks vs hit",nintHit,minHit,maxHit) );
212 
213  h_assoclayer.push_back( ibook.book1D("num_assoc(simToReco)_layer","N of associated tracks (simToReco) vs layer",nintHit,minHit,maxHit) );
214  h_simullayer.push_back( ibook.book1D("num_simul_layer","N of simulated tracks vs layer",nintHit,minHit,maxHit) );
215 
216  h_assocpixellayer.push_back( ibook.book1D("num_assoc(simToReco)_pixellayer","N of associated tracks (simToReco) vs pixel layer",nintHit,minHit,maxHit) );
217  h_simulpixellayer.push_back( ibook.book1D("num_simul_pixellayer","N of simulated tracks vs pixel layer",nintHit,minHit,maxHit) );
218 
219  h_assoc3Dlayer.push_back( ibook.book1D("num_assoc(simToReco)_3Dlayer","N of associated tracks (simToReco) vs 3D layer",nintHit,minHit,maxHit) );
220  h_simul3Dlayer.push_back( ibook.book1D("num_simul_3Dlayer","N of simulated tracks vs 3D layer",nintHit,minHit,maxHit) );
221 
222  h_assocpu.push_back( ibook.book1D("num_assoc(simToReco)_pu","N of associated tracks (simToReco) vs pu",nintPu,minPu,maxPu) );
223  h_simulpu.push_back( ibook.book1D("num_simul_pu","N of simulated tracks vs pu",nintPu,minPu,maxPu) );
224 
225  h_assocphi.push_back( ibook.book1D("num_assoc(simToReco)_phi","N of associated tracks (simToReco) vs phi",nintPhi,minPhi,maxPhi) );
226  h_simulphi.push_back( ibook.book1D("num_simul_phi","N of simulated tracks vs phi",nintPhi,minPhi,maxPhi) );
227 
228  h_assocdxy.push_back( ibook.book1D("num_assoc(simToReco)_dxy","N of associated tracks (simToReco) vs dxy",nintDxy,minDxy,maxDxy) );
229  h_simuldxy.push_back( ibook.book1D("num_simul_dxy","N of simulated tracks vs dxy",nintDxy,minDxy,maxDxy) );
230 
231  h_assocdz.push_back( ibook.book1D("num_assoc(simToReco)_dz","N of associated tracks (simToReco) vs dz",nintDz,minDz,maxDz) );
232  h_simuldz.push_back( ibook.book1D("num_simul_dz","N of simulated tracks vs dz",nintDz,minDz,maxDz) );
233 
234  h_assocvertpos.push_back( ibook.book1D("num_assoc(simToReco)_vertpos",
235  "N of associated tracks (simToReco) vs transverse vert position",
237  h_simulvertpos.push_back( ibook.book1D("num_simul_vertpos","N of simulated tracks vs transverse vert position",
239 
240  h_assoczpos.push_back( ibook.book1D("num_assoc(simToReco)_zpos","N of associated tracks (simToReco) vs z vert position",
242  h_simulzpos.push_back( ibook.book1D("num_simul_zpos","N of simulated tracks vs z vert position",nintZpos,minZpos,maxZpos) );
243 
244  h_assocdr.push_back( ibook.book1D("num_assoc(simToReco)_dr","N of associated tracks (simToReco) vs dR",nintdr,log10(mindr),log10(maxdr)) );
245  h_simuldr.push_back( ibook.book1D("num_simul_dr","N of simulated tracks vs dR",nintdr,log10(mindr),log10(maxdr)) );
246  BinLogX(h_assocdr.back()->getTH1F());
247  BinLogX(h_simuldr.back()->getTH1F());
248 
249  nrecHit_vs_nsimHit_sim2rec.push_back( ibook.book2D("nrecHit_vs_nsimHit_sim2rec","nrecHit vs nsimHit (Sim2RecAssoc)",
251 
252  if(useLogPt){
253  BinLogX(h_assocpT.back()->getTH1F());
254  BinLogX(h_simulpT.back()->getTH1F());
255  }
256 }
257 
259  h_assocdxypv.push_back( ibook.book1D("num_assoc(simToReco)_dxypv","N of associated tracks (simToReco) vs dxy(PV)",nintDxy,minDxy,maxDxy) );
260  h_simuldxypv.push_back( ibook.book1D("num_simul_dxypv","N of simulated tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) );
261 
262  h_assocdzpv.push_back( ibook.book1D("num_assoc(simToReco)_dzpv","N of associated tracks (simToReco) vs dz(PV)",nintDz,minDz,maxDz) );
263  h_simuldzpv.push_back( ibook.book1D("num_simul_dzpv","N of simulated tracks vs dz(PV)",nintDz,minDz,maxDz) );
264 
265  h_assoc_dzpvcut.push_back( ibook.book1D("num_assoc(simToReco)_dzpvcut","N of associated tracks (simToReco) vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
266  h_simul_dzpvcut.push_back( ibook.book1D("num_simul_dzpvcut","N of simulated tracks from sim PV",nintDzpvCum,0,maxDzpvCum) );
267  h_simul2_dzpvcut.push_back( ibook.book1D("num_simul2_dzpvcut","N of simulated tracks (associated to any track) from sim PV",nintDzpvCum,0,maxDzpvCum) );
268 
269  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) );
270  h_simul_dzpvcut_pt.push_back( ibook.book1D("num_simul_dzpvcut_pt","#sump_{T} of simulated tracks from sim PV",nintDzpvCum,0,maxDzpvCum) );
271  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) );
272  h_assoc_dzpvcut_pt.back()->getTH1()->Sumw2();
273  h_simul_dzpvcut_pt.back()->getTH1()->Sumw2();
274  h_simul2_dzpvcut_pt.back()->getTH1()->Sumw2();
275 
276  h_assoc_dzpvsigcut.push_back( ibook.book1D("num_assoc(simToReco)_dzpvsigcut","N of associated tracks (simToReco) vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
277  h_simul_dzpvsigcut.push_back( ibook.book1D("num_simul_dzpvsigcut","N of simulated tracks from sim PV/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
278  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) );
279 
280  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) );
281  h_simul_dzpvsigcut_pt.push_back( ibook.book1D("num_simul_dzpvsigcut_pt","#sump_{T} of simulated tracks from sim PV/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
282  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) );
283  h_assoc_dzpvsigcut_pt.back()->getTH1()->Sumw2();
284  h_simul_dzpvsigcut_pt.back()->getTH1()->Sumw2();
285  h_simul2_dzpvsigcut_pt.back()->getTH1()->Sumw2();
286 }
287 
289  h_tracks.push_back( ibook.book1D("tracks","number of reconstructed tracks", nintTracks, minTracks, maxTracks) );
290  h_fakes.push_back( ibook.book1D("fakes","number of fake reco tracks", nintTracks, minTracks, maxTracks) );
291  h_charge.push_back( ibook.book1D("charge","charge",3,-1.5,1.5) );
292 
293  h_hits.push_back( ibook.book1D("hits", "number of hits per track", nintHit,minHit,maxHit ) );
294  h_losthits.push_back( ibook.book1D("losthits", "number of lost hits per track", nintHit,minHit,maxHit) );
295  h_nchi2.push_back( ibook.book1D("chi2", "normalized #chi^{2}", 200, 0, 20 ) );
296  h_nchi2_prob.push_back( ibook.book1D("chi2_prob", "normalized #chi^{2} probability",100,0,1));
297 
298  h_nmisslayers_inner.push_back( ibook.book1D("missing_inner_layers", "number of missing inner layers", nintLayers,minLayers,maxLayers ) );
299  h_nmisslayers_outer.push_back( ibook.book1D("missing_outer_layers", "number of missing outer layers", nintLayers,minLayers,maxLayers ) );
300 
301  h_algo.push_back( ibook.book1D("h_algo","Tracks by algo",reco::TrackBase::algoSize, 0., double(reco::TrackBase::algoSize) ) );
302  for (size_t ibin=0; ibin<reco::TrackBase::algoSize-1; ibin++)
303  h_algo.back()->setBinLabel(ibin+1,reco::TrackBase::algoNames[ibin]);
304  // h_algo.setBinLabel(ibin+1,reco::TrackBase::algoNames[ibin]);
305 
307  h_recoeta.push_back( ibook.book1D("num_reco_eta","N of reco track vs eta",nintEta,minEta,maxEta) );
308  h_assoc2eta.push_back( ibook.book1D("num_assoc(recoToSim)_eta","N of associated (recoToSim) tracks vs eta",nintEta,minEta,maxEta) );
309  h_loopereta.push_back( ibook.book1D("num_duplicate_eta","N of associated (recoToSim) duplicate tracks vs eta",nintEta,minEta,maxEta) );
310  h_misideta.push_back( ibook.book1D("num_chargemisid_eta","N of associated (recoToSim) charge misIDed tracks vs eta",nintEta,minEta,maxEta) );
311  h_pileupeta.push_back( ibook.book1D("num_pileup_eta","N of associated (recoToSim) pileup tracks vs eta",nintEta,minEta,maxEta) );
312  //
313  h_recopT.push_back( ibook.book1D("num_reco_pT","N of reco track vs pT",nintPt,minPt,maxPt) );
314  h_assoc2pT.push_back( ibook.book1D("num_assoc(recoToSim)_pT","N of associated (recoToSim) tracks vs pT",nintPt,minPt,maxPt) );
315  h_looperpT.push_back( ibook.book1D("num_duplicate_pT","N of associated (recoToSim) duplicate tracks vs pT",nintPt,minPt,maxPt) );
316  h_misidpT.push_back( ibook.book1D("num_chargemisid_pT","N of associated (recoToSim) charge misIDed tracks vs pT",nintPt,minPt,maxPt) );
317  h_pileuppT.push_back( ibook.book1D("num_pileup_pT","N of associated (recoToSim) pileup tracks vs pT",nintPt,minPt,maxPt) );
318  //
319  h_recohit.push_back( ibook.book1D("num_reco_hit","N of reco track vs hit",nintHit,minHit,maxHit) );
320  h_assoc2hit.push_back( ibook.book1D("num_assoc(recoToSim)_hit","N of associated (recoToSim) tracks vs hit",nintHit,minHit,maxHit) );
321  h_looperhit.push_back( ibook.book1D("num_duplicate_hit","N of associated (recoToSim) duplicate tracks vs hit",nintHit,minHit,maxHit) );
322  h_misidhit.push_back( ibook.book1D("num_chargemisid_hit","N of associated (recoToSim) charge misIDed tracks vs hit",nintHit,minHit,maxHit) );
323  h_pileuphit.push_back( ibook.book1D("num_pileup_hit","N of associated (recoToSim) pileup tracks vs hit",nintHit,minHit,maxHit) );
324  //
325  h_recolayer.push_back( ibook.book1D("num_reco_layer","N of reco track vs layer",nintHit,minHit,maxHit) );
326  h_assoc2layer.push_back( ibook.book1D("num_assoc(recoToSim)_layer","N of associated (recoToSim) tracks vs layer",nintHit,minHit,maxHit) );
327  h_looperlayer.push_back( ibook.book1D("num_duplicate_layer","N of associated (recoToSim) duplicate tracks vs layer",nintHit,minHit,maxHit) );
328  h_misidlayer.push_back( ibook.book1D("num_chargemisid_layer","N of associated (recoToSim) charge misIDed tracks vs layer",nintHit,minHit,maxHit) );
329  h_pileuplayer.push_back( ibook.book1D("num_pileup_layer","N of associated (recoToSim) pileup tracks vs layer",nintHit,minHit,maxHit) );
330  //
331  h_recopixellayer.push_back( ibook.book1D("num_reco_pixellayer","N of reco track vs pixellayer",nintHit,minHit,maxHit) );
332  h_assoc2pixellayer.push_back( ibook.book1D("num_assoc(recoToSim)_pixellayer","N of associated (recoToSim) tracks vs pixellayer",nintHit,minHit,maxHit) );
333  h_looperpixellayer.push_back( ibook.book1D("num_duplicate_pixellayer","N of associated (recoToSim) duplicate tracks vs pixellayer",nintHit,minHit,maxHit) );
334  h_misidpixellayer.push_back( ibook.book1D("num_chargemisid_pixellayer","N of associated (recoToSim) charge misIDed tracks vs pixellayer",nintHit,minHit,maxHit) );
335  h_pileuppixellayer.push_back( ibook.book1D("num_pileup_pixellayer","N of associated (recoToSim) pileup tracks vs pixellayer",nintHit,minHit,maxHit) );
336  //
337  h_reco3Dlayer.push_back( ibook.book1D("num_reco_3Dlayer","N of reco track vs 3D layer",nintHit,minHit,maxHit) );
338  h_assoc23Dlayer.push_back( ibook.book1D("num_assoc(recoToSim)_3Dlayer","N of associated (recoToSim) tracks vs 3D layer",nintHit,minHit,maxHit) );
339  h_looper3Dlayer.push_back( ibook.book1D("num_duplicate_3Dlayer","N of associated (recoToSim) duplicate tracks vs 3D layer",nintHit,minHit,maxHit) );
340  h_misid3Dlayer.push_back( ibook.book1D("num_chargemisid_3Dlayer","N of associated (recoToSim) charge misIDed tracks vs 3D layer",nintHit,minHit,maxHit) );
341  h_pileup3Dlayer.push_back( ibook.book1D("num_pileup_3Dlayer","N of associated (recoToSim) pileup tracks vs 3D layer",nintHit,minHit,maxHit) );
342  //
343  h_recopu.push_back( ibook.book1D("num_reco_pu","N of reco track vs pu",nintPu,minPu,maxPu) );
344  h_assoc2pu.push_back( ibook.book1D("num_assoc(recoToSim)_pu","N of associated (recoToSim) tracks vs pu",nintPu,minPu,maxPu) );
345  h_looperpu.push_back( ibook.book1D("num_duplicate_pu","N of associated (recoToSim) duplicate tracks vs pu",nintPu,minPu,maxPu) );
346  h_misidpu.push_back( ibook.book1D("num_chargemisid_pu","N of associated (recoToSim) charge misIDed tracks vs pu",nintPu,minPu,maxPu) );
347  h_pileuppu.push_back( ibook.book1D("num_pileup_pu","N of associated (recoToSim) pileup tracks vs pu",nintPu,minPu,maxPu) );
348  //
349  h_recophi.push_back( ibook.book1D("num_reco_phi","N of reco track vs phi",nintPhi,minPhi,maxPhi) );
350  h_assoc2phi.push_back( ibook.book1D("num_assoc(recoToSim)_phi","N of associated (recoToSim) tracks vs phi",nintPhi,minPhi,maxPhi) );
351  h_looperphi.push_back( ibook.book1D("num_duplicate_phi","N of associated (recoToSim) duplicate tracks vs phi",nintPhi,minPhi,maxPhi) );
352  h_misidphi.push_back( ibook.book1D("num_chargemisid_phi","N of associated (recoToSim) charge misIDed tracks vs phi",nintPhi,minPhi,maxPhi) );
353  h_pileupphi.push_back( ibook.book1D("num_pileup_phi","N of associated (recoToSim) pileup tracks vs phi",nintPhi,minPhi,maxPhi) );
354 
355  h_recodxy.push_back( ibook.book1D("num_reco_dxy","N of reco track vs dxy",nintDxy,minDxy,maxDxy) );
356  h_assoc2dxy.push_back( ibook.book1D("num_assoc(recoToSim)_dxy","N of associated (recoToSim) tracks vs dxy",nintDxy,minDxy,maxDxy) );
357  h_looperdxy.push_back( ibook.book1D("num_duplicate_dxy","N of associated (recoToSim) looper tracks vs dxy",nintDxy,minDxy,maxDxy) );
358  h_misiddxy.push_back( ibook.book1D("num_chargemisid_dxy","N of associated (recoToSim) charge misIDed tracks vs dxy",nintDxy,minDxy,maxDxy) );
359  h_pileupdxy.push_back( ibook.book1D("num_pileup_dxy","N of associated (recoToSim) pileup tracks vs dxy",nintDxy,minDxy,maxDxy) );
360 
361  h_recodz.push_back( ibook.book1D("num_reco_dz","N of reco track vs dz",nintDz,minDz,maxDz) );
362  h_assoc2dz.push_back( ibook.book1D("num_assoc(recoToSim)_dz","N of associated (recoToSim) tracks vs dz",nintDz,minDz,maxDz) );
363  h_looperdz.push_back( ibook.book1D("num_duplicate_dz","N of associated (recoToSim) looper tracks vs dz",nintDz,minDz,maxDz) );
364  h_misiddz.push_back( ibook.book1D("num_chargemisid_versus_dz","N of associated (recoToSim) charge misIDed tracks vs dz",nintDz,minDz,maxDz) );
365  h_pileupdz.push_back( ibook.book1D("num_pileup_dz","N of associated (recoToSim) pileup tracks vs dz",nintDz,minDz,maxDz) );
366 
367  h_recodr.push_back( ibook.book1D("num_reco_dr","N of reconstructed tracks vs dR",nintdr,log10(mindr),log10(maxdr)) );
368  h_assoc2dr.push_back( ibook.book1D("num_assoc(recoToSim)_dr","N of associated tracks (recoToSim) vs dR",nintdr,log10(mindr),log10(maxdr)) );
369  h_pileupdr.push_back( ibook.book1D("num_pileup_dr","N of associated (recoToSim) pileup tracks vs dR",nintdr,log10(mindr),log10(maxdr)) );
370  BinLogX(h_recodr.back()->getTH1F());
371  BinLogX(h_assoc2dr.back()->getTH1F());
372  BinLogX(h_pileupdr.back()->getTH1F());
373 
374  h_recochi2.push_back( ibook.book1D("num_reco_chi2","N of reco track vs normalized #chi^{2}",nintChi2,minChi2,maxChi2) );
375  h_assoc2chi2.push_back( ibook.book1D("num_assoc(recoToSim)_chi2","N of associated (recoToSim) tracks vs normalized #chi^{2}",nintChi2,minChi2,maxChi2) );
376  h_looperchi2.push_back( ibook.book1D("num_duplicate_chi2","N of associated (recoToSim) looper tracks vs normalized #chi^{2}",nintChi2,minChi2,maxChi2) );
377  h_misidchi2.push_back( ibook.book1D("num_chargemisid_chi2","N of associated (recoToSim) charge misIDed tracks vs normalized #chi^{2}",nintChi2,minChi2,maxChi2) );
378  h_pileupchi2.push_back( ibook.book1D("num_pileup_chi2","N of associated (recoToSim) pileup tracks vs normalized #chi^{2}",nintChi2,minChi2,maxChi2) );
379 
381 
382  h_eta.push_back( ibook.book1D("eta", "pseudorapidity residue", 1000, -0.1, 0.1 ) );
383  h_pt.push_back( ibook.book1D("pullPt", "pull of p_{t}", 100, -10, 10 ) );
384  h_pullTheta.push_back( ibook.book1D("pullTheta","pull of #theta parameter",250,-25,25) );
385  h_pullPhi.push_back( ibook.book1D("pullPhi","pull of #phi parameter",250,-25,25) );
386  h_pullDxy.push_back( ibook.book1D("pullDxy","pull of dxy parameter",250,-25,25) );
387  h_pullDz.push_back( ibook.book1D("pullDz","pull of dz parameter",250,-25,25) );
388  h_pullQoverp.push_back( ibook.book1D("pullQoverp","pull of qoverp parameter",250,-25,25) );
389 
390  /* TO BE FIXED -----------
391  if (associators[ww]=="TrackAssociatorByChi2"){
392  h_assochi2.push_back( ibook.book1D("assocChi2","track association #chi^{2}",1000000,0,100000) );
393  h_assochi2_prob.push_back(ibook.book1D("assocChi2_prob","probability of association #chi^{2}",100,0,1));
394  } else if (associators[ww]=="quickTrackAssociatorByHits"){
395  h_assocFraction.push_back( ibook.book1D("assocFraction","fraction of shared hits",200,0,2) );
396  h_assocSharedHit.push_back(ibook.book1D("assocSharedHit","number of shared hits",20,0,20));
397  }
398  */
399  h_assocFraction.push_back( ibook.book1D("assocFraction","fraction of shared hits",200,0,2) );
400  h_assocSharedHit.push_back(ibook.book1D("assocSharedHit","number of shared hits",41,-0.5,40.5));
401  // ----------------------
402 
403  // use the standard error of the mean as the errors in the profile
404  chi2_vs_nhits.push_back( ibook.bookProfile("chi2mean_vs_nhits","mean #chi^{2} vs nhits",nintHit,minHit,maxHit, 100,0,10, " ") );
405 
406  etares_vs_eta.push_back( ibook.book2D("etares_vs_eta","etaresidue vs eta",nintEta,minEta,maxEta,200,-0.1,0.1) );
407  nrec_vs_nsim.push_back( ibook.book2D("nrec_vs_nsim","nrec vs nsim", nintTracks,minTracks,maxTracks, nintTracks,minTracks,maxTracks) );
408 
409  chi2_vs_eta.push_back( ibook.bookProfile("chi2mean","mean #chi^{2} vs #eta",nintEta,minEta,maxEta, 200, 0, 20, " " ));
410  chi2_vs_phi.push_back( ibook.bookProfile("chi2mean_vs_phi","mean #chi^{2} vs #phi",nintPhi,minPhi,maxPhi, 200, 0, 20, " " ) );
411 
412  nhits_vs_eta.push_back( ibook.bookProfile("hits_eta","mean hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
413  nPXBhits_vs_eta.push_back( ibook.bookProfile("PXBhits_vs_eta","mean # PXB its vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
414  nPXFhits_vs_eta.push_back( ibook.bookProfile("PXFhits_vs_eta","mean # PXF hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
415  nTIBhits_vs_eta.push_back( ibook.bookProfile("TIBhits_vs_eta","mean # TIB hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
416  nTIDhits_vs_eta.push_back( ibook.bookProfile("TIDhits_vs_eta","mean # TID hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
417  nTOBhits_vs_eta.push_back( ibook.bookProfile("TOBhits_vs_eta","mean # TOB hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
418  nTEChits_vs_eta.push_back( ibook.bookProfile("TEChits_vs_eta","mean # TEC hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
419 
420  nLayersWithMeas_vs_eta.push_back( ibook.bookProfile("LayersWithMeas_eta","mean # Layers with measurement vs eta",
422  nPXLlayersWithMeas_vs_eta.push_back( ibook.bookProfile("PXLlayersWithMeas_vs_eta","mean # PXL Layers with measurement vs eta",
424  nSTRIPlayersWithMeas_vs_eta.push_back( ibook.bookProfile("STRIPlayersWithMeas_vs_eta","mean # STRIP Layers with measurement vs eta",
426  nSTRIPlayersWith1dMeas_vs_eta.push_back( ibook.bookProfile("STRIPlayersWith1dMeas_vs_eta","mean # STRIP Layers with 1D measurement vs eta",
428  nSTRIPlayersWith2dMeas_vs_eta.push_back( ibook.bookProfile("STRIPlayersWith2dMeas_vs_eta","mean # STRIP Layers with 2D measurement vs eta",
430 
431  nhits_vs_phi.push_back( ibook.bookProfile("hits_phi","mean # hits vs #phi",nintPhi,minPhi,maxPhi,nintHit,minHit,maxHit, " ") );
432 
433  nlosthits_vs_eta.push_back( ibook.bookProfile("losthits_vs_eta","mean # lost hits vs eta",nintEta,minEta,maxEta,nintHit,minHit,maxHit, " ") );
434 
435  //resolution of track parameters
436  // dPt/Pt cotTheta Phi TIP LIP
437  // log10(pt)<0.5 100,0.1 240,0.08 100,0.015 100,0.1000 150,0.3000
438  // 0.5<log10(pt)<1.5 100,0.1 120,0.01 100,0.003 100,0.0100 150,0.0500
439  // >1.5 100,0.3 100,0.005 100,0.0008 100,0.0060 120,0.0300
440 
441  ptres_vs_eta.push_back(ibook.book2D("ptres_vs_eta","ptres_vs_eta",
443 
444  ptres_vs_phi.push_back( ibook.book2D("ptres_vs_phi","p_{t} res vs #phi",
446 
447  ptres_vs_pt.push_back(ibook.book2D("ptres_vs_pt","ptres_vs_pt",nintPt,minPt,maxPt, ptRes_nbin, ptRes_rangeMin, ptRes_rangeMax));
448 
449  cotThetares_vs_eta.push_back(ibook.book2D("cotThetares_vs_eta","cotThetares_vs_eta",
451 
452 
453  cotThetares_vs_pt.push_back(ibook.book2D("cotThetares_vs_pt","cotThetares_vs_pt",
455 
456 
457  phires_vs_eta.push_back(ibook.book2D("phires_vs_eta","phires_vs_eta",
459 
460  phires_vs_pt.push_back(ibook.book2D("phires_vs_pt","phires_vs_pt",
462 
463  phires_vs_phi.push_back(ibook.book2D("phires_vs_phi","#phi res vs #phi",
465 
466  dxyres_vs_eta.push_back(ibook.book2D("dxyres_vs_eta","dxyres_vs_eta",
468 
469  dxyres_vs_pt.push_back( ibook.book2D("dxyres_vs_pt","dxyres_vs_pt",
471 
472  dzres_vs_eta.push_back(ibook.book2D("dzres_vs_eta","dzres_vs_eta",
474 
475  dzres_vs_pt.push_back(ibook.book2D("dzres_vs_pt","dzres_vs_pt",nintPt,minPt,maxPt,dzRes_nbin, dzRes_rangeMin, dzRes_rangeMax));
476 
477  ptmean_vs_eta_phi.push_back(ibook.bookProfile2D("ptmean_vs_eta_phi","mean p_{t} vs #eta and #phi",
478  nintPhi,minPhi,maxPhi,nintEta,minEta,maxEta,1000,0,1000));
479  phimean_vs_eta_phi.push_back(ibook.bookProfile2D("phimean_vs_eta_phi","mean #phi vs #eta and #phi",
481 
482  //pulls of track params vs eta: to be used with fitslicesytool
483  dxypull_vs_eta.push_back(ibook.book2D("dxypull_vs_eta","dxypull_vs_eta",nintEta,minEta,maxEta,100,-10,10));
484  ptpull_vs_eta.push_back(ibook.book2D("ptpull_vs_eta","ptpull_vs_eta",nintEta,minEta,maxEta,100,-10,10));
485  dzpull_vs_eta.push_back(ibook.book2D("dzpull_vs_eta","dzpull_vs_eta",nintEta,minEta,maxEta,100,-10,10));
486  phipull_vs_eta.push_back(ibook.book2D("phipull_vs_eta","phipull_vs_eta",nintEta,minEta,maxEta,100,-10,10));
487  thetapull_vs_eta.push_back(ibook.book2D("thetapull_vs_eta","thetapull_vs_eta",nintEta,minEta,maxEta,100,-10,10));
488 
489  // h_ptshiftetamean.push_back( ibook.book1D("h_ptshifteta_Mean","<#deltapT/pT>[%] vs #eta",nintEta,minEta,maxEta) );
490 
491 
492  //pulls of track params vs phi
493  ptpull_vs_phi.push_back(ibook.book2D("ptpull_vs_phi","p_{t} pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10));
494  phipull_vs_phi.push_back(ibook.book2D("phipull_vs_phi","#phi pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10));
495  thetapull_vs_phi.push_back(ibook.book2D("thetapull_vs_phi","#theta pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10));
496 
497 
498  nrecHit_vs_nsimHit_rec2sim.push_back( ibook.book2D("nrecHit_vs_nsimHit_rec2sim","nrecHit vs nsimHit (Rec2simAssoc)",
500 
501  if(useLogPt){
502  BinLogX(dzres_vs_pt.back()->getTH2F());
503  BinLogX(dxyres_vs_pt.back()->getTH2F());
504  BinLogX(phires_vs_pt.back()->getTH2F());
505  BinLogX(cotThetares_vs_pt.back()->getTH2F());
506  BinLogX(ptres_vs_pt.back()->getTH2F());
507  BinLogX(h_looperpT.back()->getTH1F());
508  BinLogX(h_misidpT.back()->getTH1F());
509  BinLogX(h_recopT.back()->getTH1F());
510  BinLogX(h_assoc2pT.back()->getTH1F());
511  BinLogX(h_pileuppT.back()->getTH1F());
512  }
513 }
514 
516  h_recodxypv.push_back( ibook.book1D("num_reco_dxypv","N of reco track vs dxy(PV)",nintDxy,minDxy,maxDxy) );
517  h_assoc2dxypv.push_back( ibook.book1D("num_assoc(recoToSim)_dxypv","N of associated (recoToSim) tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) );
518  h_looperdxypv.push_back( ibook.book1D("num_duplicate_dxypv","N of associated (recoToSim) looper tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) );
519  h_misiddxypv.push_back( ibook.book1D("num_chargemisid_dxypv","N of associated (recoToSim) charge misIDed tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) );
520  h_pileupdxypv.push_back( ibook.book1D("num_pileup_dxypv","N of associated (recoToSim) pileup tracks vs dxy(PV)",nintDxy,minDxy,maxDxy) );
521 
522  h_recodzpv.push_back( ibook.book1D("num_reco_dzpv","N of reco track vs dz(PV)",nintDz,minDz,maxDz) );
523  h_assoc2dzpv.push_back( ibook.book1D("num_assoc(recoToSim)_dzpv","N of associated (recoToSim) tracks vs dz(PV)",nintDz,minDz,maxDz) );
524  h_looperdzpv.push_back( ibook.book1D("num_duplicate_dzpv","N of associated (recoToSim) looper tracks vs dz(PV)",nintDz,minDz,maxDz) );
525  h_misiddzpv.push_back( ibook.book1D("num_chargemisid_versus_dzpv","N of associated (recoToSim) charge misIDed tracks vs dz(PV)",nintDz,minDz,maxDz) );
526  h_pileupdzpv.push_back( ibook.book1D("num_pileup_dzpv","N of associated (recoToSim) pileup tracks vs dz(PV)",nintDz,minDz,maxDz) );
527 
528  h_reco_dzpvcut.push_back( ibook.book1D("num_reco_dzpvcut","N of reco track vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
529  h_assoc2_dzpvcut.push_back( ibook.book1D("num_assoc(recoToSim)_dzpvcut","N of associated (recoToSim) tracks vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
530  h_pileup_dzpvcut.push_back( ibook.book1D("num_pileup_dzpvcut", "N of associated (recoToSim) pileup tracks vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
531 
532  h_reco_dzpvcut_pt.push_back( ibook.book1D("num_reco_dzpvcut_pt","#sump_{T} of reco track vs dz(PV)",nintDzpvCum,0,maxDzpvCum) );
533  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) );
534  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) );
535  h_reco_dzpvcut_pt.back()->getTH1()->Sumw2();
536  h_assoc2_dzpvcut_pt.back()->getTH1()->Sumw2();
537  h_pileup_dzpvcut_pt.back()->getTH1()->Sumw2();
538 
539  h_reco_dzpvsigcut.push_back( ibook.book1D("num_reco_dzpvsigcut","N of reco track vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
540  h_assoc2_dzpvsigcut.push_back( ibook.book1D("num_assoc(recoToSim)_dzpvsigcut","N of associated (recoToSim) tracks vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
541  h_pileup_dzpvsigcut.push_back( ibook.book1D("num_pileup_dzpvsigcut","N of associated (recoToSim) pileup tracks vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
542 
543  h_reco_dzpvsigcut_pt.push_back( ibook.book1D("num_reco_dzpvsigcut_pt","#sump_{T} of reco track vs dz(PV)/dzError",nintDzpvsigCum,0,maxDzpvsigCum) );
544  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) );
545  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) );
546  h_reco_dzpvsigcut_pt.back()->getTH1()->Sumw2();
547  h_assoc2_dzpvsigcut_pt.back()->getTH1()->Sumw2();
548  h_pileup_dzpvsigcut_pt.back()->getTH1()->Sumw2();
549 
550 }
551 
553  // dE/dx stuff
554  h_dedx_estim.emplace_back(std::initializer_list<MonitorElement*>{
555  ibook.book1D("h_dedx_estim1","dE/dx estimator 1",nintDeDx,minDeDx,maxDeDx),
556  ibook.book1D("h_dedx_estim2","dE/dx estimator 2",nintDeDx,minDeDx,maxDeDx)
557  });
558  h_dedx_nom.emplace_back(std::initializer_list<MonitorElement*>{
559  ibook.book1D("h_dedx_nom1","dE/dx number of measurements",nintHit,minHit,maxHit),
560  ibook.book1D("h_dedx_nom2","dE/dx number of measurements",nintHit,minHit,maxHit)
561  });
562  h_dedx_sat.emplace_back(std::initializer_list<MonitorElement*>{
563  ibook.book1D("h_dedx_sat1","dE/dx number of measurements with saturation",nintHit,minHit,maxHit),
564  ibook.book1D("h_dedx_sat2","dE/dx number of measurements with saturation",nintHit,minHit,maxHit)
565  });
566 }
567 
569  const TrackingParticle::Point& vertexTP,
570  int bx){
571  if(bx == 0) {
572  h_ptSIM->Fill(sqrt(momentumTP.perp2()));
573  h_etaSIM->Fill(momentumTP.eta());
574  h_vertposSIM->Fill(sqrt(vertexTP.perp2()));
575  }
576  h_bunchxSIM->Fill(bx);
577 }
578 
579 
580 
582  const TrackingParticle& tp,
583  const TrackingParticle::Vector& momentumTP,
584  const TrackingParticle::Point& vertexTP,
585  double dxySim, double dzSim,
586  double dxyPVSim, double dzPVSim,
587  int nSimHits,
588  int nSimLayers, int nSimPixelLayers, int nSimStripMonoAndStereoLayers,
589  const reco::Track* track,
590  int numVertices,
591  double dR,
592  const math::XYZPoint *pvPosition){
593  bool isMatched = track;
594  const auto eta = getEta(momentumTP.eta());
595  const auto phi = momentumTP.phi();
596  const auto pt = getPt(sqrt(momentumTP.perp2()));
597  const auto nSim3DLayers = nSimPixelLayers + nSimStripMonoAndStereoLayers;
598  const auto vertxy = sqrt(vertexTP.perp2());
599  const auto vertz = vertexTP.z();
600 
601  if((*TpSelectorForEfficiencyVsEta)(tp)){
602  //effic vs eta
603  fillPlotNoFlow(h_simuleta[count], eta);
604  if (isMatched) fillPlotNoFlow(h_assoceta[count], eta);
605  //effic vs hits
606  fillPlotNoFlow(h_simulhit[count], nSimHits);
607  fillPlotNoFlow(h_simullayer[count], nSimLayers);
608  fillPlotNoFlow(h_simulpixellayer[count], nSimPixelLayers);
609  fillPlotNoFlow(h_simul3Dlayer[count], nSim3DLayers);
610  if(isMatched) {
611  fillPlotNoFlow(h_assochit[count], nSimHits);
612  fillPlotNoFlow(h_assoclayer[count], nSimLayers);
613  fillPlotNoFlow(h_assocpixellayer[count], nSimPixelLayers);
614  fillPlotNoFlow(h_assoc3Dlayer[count], nSim3DLayers);
615  nrecHit_vs_nsimHit_sim2rec[count]->Fill( track->numberOfValidHits(),nSimHits);
616  }
617  //effic vs pu
618  fillPlotNoFlow(h_simulpu[count], numVertices);
619  if(isMatched) fillPlotNoFlow(h_assocpu[count],numVertices);
620  //efficiency vs dR
621  fillPlotNoFlow(h_simuldr[count],dR);
622  if (isMatched) fillPlotNoFlow(h_assocdr[count],dR);
623  }
624 
625  if((*TpSelectorForEfficiencyVsPhi)(tp)){
626  fillPlotNoFlow(h_simulphi[count], phi);
627  if (isMatched) fillPlotNoFlow(h_assocphi[count], phi);
628  }
629 
630  if((*TpSelectorForEfficiencyVsPt)(tp)){
631  fillPlotNoFlow(h_simulpT[count], pt);
632  if (isMatched) fillPlotNoFlow(h_assocpT[count], pt);
633  }
634 
636  fillPlotNoFlow(h_simuldxy[count],dxySim);
637  if (isMatched) fillPlotNoFlow(h_assocdxy[count],dxySim);
638  if(pvPosition) {
639  fillPlotNoFlow(h_simuldxypv[count], dxyPVSim);
640  if (isMatched) fillPlotNoFlow(h_assocdxypv[count], dxyPVSim);
641  }
642 
643  fillPlotNoFlow(h_simulvertpos[count], vertxy);
644  if (isMatched) fillPlotNoFlow(h_assocvertpos[count], vertxy);
645  }
646 
647 
649  fillPlotNoFlow(h_simuldz[count],dzSim);
650  if (isMatched) fillPlotNoFlow(h_assocdz[count],dzSim);
651 
652  fillPlotNoFlow(h_simulzpos[count], vertz);
653  if (isMatched) fillPlotNoFlow(h_assoczpos[count], vertz);
654 
655  if(pvPosition) {
656  fillPlotNoFlow(h_simuldzpv[count], dzPVSim);
657 
658  h_simul_dzpvcut[count]->Fill(0);
659  h_simul_dzpvsigcut[count]->Fill(0);
660  h_simul_dzpvcut_pt[count]->Fill(0, pt);
661  h_simul_dzpvsigcut_pt[count]->Fill(0, pt);
662  if(isMatched) {
663  fillPlotNoFlow(h_assocdzpv[count], dzPVSim);
664 
665  h_simul2_dzpvcut[count]->Fill(0);
666  h_simul2_dzpvsigcut[count]->Fill(0);
667  h_simul2_dzpvcut_pt[count]->Fill(0, pt);
668  h_simul2_dzpvsigcut_pt[count]->Fill(0, pt);
669  const double dzpvcut = std::abs(track->dz(*pvPosition));
670  const double dzpvsigcut = dzpvcut / track->dzError();
671  h_assoc_dzpvcut[count]->Fill(dzpvcut);
672  h_assoc_dzpvsigcut[count]->Fill(dzpvsigcut);
673  h_assoc_dzpvcut_pt[count]->Fill(dzpvcut, pt);
674  h_assoc_dzpvsigcut_pt[count]->Fill(dzpvsigcut, pt);
675  }
676  }
677  }
678 
679 }
680 
682  h_tracksSIM->Fill(numSimTracks);
683 }
684 
685 // dE/dx
687  for (unsigned int i=0; i<v_dEdx.size(); i++) {
688  const edm::ValueMap<reco::DeDxData>& dEdxTrack = *(v_dEdx[i]);
689  const reco::DeDxData& dedx = dEdxTrack[trackref];
690  h_dedx_estim[count][i]->Fill(dedx.dEdx());
691  h_dedx_nom[count][i]->Fill(dedx.numberOfMeasurements());
693  }
694 }
695 
696 
698  const reco::Track& track,
699  const math::XYZPoint& bsPosition,
700  const math::XYZPoint *pvPosition,
701  bool isMatched,
702  bool isSigMatched,
703  bool isChargeMatched,
704  int numAssocRecoTracks,
705  int numVertices,
706  int nSimHits,
707  double sharedFraction,
708  double dR){
709 
710  //Fill track algo histogram
711  fillPlotNoFlow(h_algo[count],track.algo());
712  int sharedHits = sharedFraction * track.numberOfValidHits();
713 
714  //Compute fake rate vs eta
715  const auto eta = getEta(track.momentum().eta());
716  const auto phi = track.momentum().phi();
717  const auto pt = getPt(sqrt(track.momentum().perp2()));
718  const auto dxy = track.dxy(bsPosition);
719  const auto dz = track.dz(bsPosition);
720  const auto dxypv = pvPosition ? track.dxy(*pvPosition) : 0.0;
721  const auto dzpv = pvPosition ? track.dz(*pvPosition) : 0.0;
722  const auto dzpvsig = pvPosition ? dzpv / track.dzError() : 0.0;
723  const auto nhits = track.found();
724  const auto nlayers = track.hitPattern().trackerLayersWithMeasurement();
725  const auto nPixelLayers = track.hitPattern().pixelLayersWithMeasurement();
726  const auto n3DLayers = nPixelLayers + track.hitPattern().numberOfValidStripLayersWithMonoAndStereo();
727  const auto deltar = min(max(dR,h_recodr[count]->getTH1()->GetXaxis()->GetXmin()),h_recodr[count]->getTH1()->GetXaxis()->GetXmax());
728  const auto chi2 = track.normalizedChi2();
729 
730  fillPlotNoFlow(h_recoeta[count], eta);
731  fillPlotNoFlow(h_recophi[count], phi);
732  fillPlotNoFlow(h_recopT[count], pt);
733  fillPlotNoFlow(h_recodxy[count], dxy);
734  fillPlotNoFlow(h_recodz[count], dz);
735  fillPlotNoFlow(h_recohit[count], nhits);
736  fillPlotNoFlow(h_recolayer[count], nlayers);
737  fillPlotNoFlow(h_recopixellayer[count], nPixelLayers);
738  fillPlotNoFlow(h_reco3Dlayer[count], n3DLayers);
739  fillPlotNoFlow(h_recopu[count],numVertices);
740  fillPlotNoFlow(h_recochi2[count], chi2);
741  h_recodr[count]->Fill(deltar);
742  if(pvPosition) {
743  fillPlotNoFlow(h_recodxypv[count], dxypv);
744  fillPlotNoFlow(h_recodzpv[count], dzpv);
745 
746  h_reco_dzpvcut[count]->Fill(std::abs(dzpv));
747  h_reco_dzpvsigcut[count]->Fill(std::abs(dzpvsig));
748  h_reco_dzpvcut_pt[count]->Fill(std::abs(dzpv), pt);
749  h_reco_dzpvsigcut_pt[count]->Fill(std::abs(dzpvsig), pt);
750  }
751 
752  if (isMatched) {
753  fillPlotNoFlow(h_assoc2eta[count], eta);
754  fillPlotNoFlow(h_assoc2phi[count], phi);
755  fillPlotNoFlow(h_assoc2pT[count], pt);
756  fillPlotNoFlow(h_assoc2dxy[count], dxy);
757  fillPlotNoFlow(h_assoc2dz[count], dz);
758  fillPlotNoFlow(h_assoc2hit[count], nhits);
759  fillPlotNoFlow(h_assoc2layer[count], nlayers);
760  fillPlotNoFlow(h_assoc2pixellayer[count], nPixelLayers);
761  fillPlotNoFlow(h_assoc23Dlayer[count], n3DLayers);
762  fillPlotNoFlow(h_assoc2pu[count],numVertices);
763  fillPlotNoFlow(h_assoc2chi2[count], chi2);
764  h_assoc2dr[count]->Fill(deltar);
765  if(pvPosition) {
766  fillPlotNoFlow(h_assoc2dxypv[count], dxypv);
767  fillPlotNoFlow(h_assoc2dzpv[count], dzpv);
768 
769  h_assoc2_dzpvcut[count]->Fill(std::abs(dzpv));
770  h_assoc2_dzpvsigcut[count]->Fill(std::abs(dzpvsig));
771  h_assoc2_dzpvcut_pt[count]->Fill(std::abs(dzpv), pt);
772  h_assoc2_dzpvsigcut_pt[count]->Fill(std::abs(dzpvsig), pt);
773  }
774 
775  nrecHit_vs_nsimHit_rec2sim[count]->Fill( track.numberOfValidHits(),nSimHits);
776  h_assocFraction[count]->Fill( sharedFraction);
777  h_assocSharedHit[count]->Fill( sharedHits);
778 
779  if (!isChargeMatched) {
780  fillPlotNoFlow(h_misideta[count], eta);
781  fillPlotNoFlow(h_misidphi[count], phi);
782  fillPlotNoFlow(h_misidpT[count], pt);
783  fillPlotNoFlow(h_misiddxy[count], dxy);
784  fillPlotNoFlow(h_misiddz[count], dz);
785  fillPlotNoFlow(h_misidhit[count], nhits);
786  fillPlotNoFlow(h_misidlayer[count], nlayers);
787  fillPlotNoFlow(h_misidpixellayer[count], nPixelLayers);
788  fillPlotNoFlow(h_misid3Dlayer[count], n3DLayers);
789  fillPlotNoFlow(h_misidpu[count], numVertices);
790  fillPlotNoFlow(h_misidchi2[count], chi2);
791  if(pvPosition) {
792  fillPlotNoFlow(h_misiddxypv[count], dxypv);
793  fillPlotNoFlow(h_misiddzpv[count], dzpv);
794  }
795  }
796 
797  if (numAssocRecoTracks>1) {
798  fillPlotNoFlow(h_loopereta[count], eta);
799  fillPlotNoFlow(h_looperphi[count], phi);
800  fillPlotNoFlow(h_looperpT[count], pt);
801  fillPlotNoFlow(h_looperdxy[count], dxy);
802  fillPlotNoFlow(h_looperdz[count], dz);
803  fillPlotNoFlow(h_looperhit[count], nhits);
804  fillPlotNoFlow(h_looperlayer[count], nlayers);
805  fillPlotNoFlow(h_looperpixellayer[count], nPixelLayers);
806  fillPlotNoFlow(h_looper3Dlayer[count], n3DLayers);
807  fillPlotNoFlow(h_looperpu[count], numVertices);
808  fillPlotNoFlow(h_looperchi2[count], chi2);
809  if(pvPosition) {
810  fillPlotNoFlow(h_looperdxypv[count], dxypv);
811  fillPlotNoFlow(h_looperdzpv[count], dzpv);
812  }
813  }
814  if(!isSigMatched) {
815  fillPlotNoFlow(h_pileupeta[count], eta);
816  fillPlotNoFlow(h_pileupphi[count], phi);
817  fillPlotNoFlow(h_pileuppT[count], pt);
818  fillPlotNoFlow(h_pileupdxy[count], dxy);
819  fillPlotNoFlow(h_pileupdz[count], dz);
820  fillPlotNoFlow(h_pileuphit[count], nhits);
821  fillPlotNoFlow(h_pileuplayer[count], nlayers);
822  fillPlotNoFlow(h_pileuppixellayer[count], nPixelLayers);
823  fillPlotNoFlow(h_pileup3Dlayer[count], n3DLayers);
824  fillPlotNoFlow(h_pileuppu[count], numVertices);
825  fillPlotNoFlow(h_pileupchi2[count], chi2);
826  h_pileupdr[count]->Fill(deltar);
827  if(pvPosition) {
828  fillPlotNoFlow(h_pileupdxypv[count], dxypv);
829  fillPlotNoFlow(h_pileupdzpv[count], dzpv);
830 
831  h_pileup_dzpvcut[count]->Fill(std::abs(dzpv));
832  h_pileup_dzpvsigcut[count]->Fill(std::abs(dzpvsig));
833  h_pileup_dzpvcut_pt[count]->Fill(std::abs(dzpv), pt);
834  h_pileup_dzpvsigcut_pt[count]->Fill(std::abs(dzpvsig), pt);
835  }
836  }
837  }
838 }
839 
840 
842  const reco::Track& track){
843  //nchi2 and hits global distributions
844  h_nchi2[count]->Fill(track.normalizedChi2());
845  h_nchi2_prob[count]->Fill(TMath::Prob(track.chi2(),(int)track.ndof()));
846  h_hits[count]->Fill(track.numberOfValidHits());
847  h_losthits[count]->Fill(track.numberOfLostHits());
848  chi2_vs_nhits[count]->Fill(track.numberOfValidHits(),track.normalizedChi2());
849  h_charge[count]->Fill( track.charge() );
852 
853  //chi2 and #hit vs eta: fill 2D histos
854  const auto eta = getEta(track.eta());
855  chi2_vs_eta[count]->Fill(eta, track.normalizedChi2());
856  nhits_vs_eta[count]->Fill(eta, track.numberOfValidHits());
865  int LayersAll = track.hitPattern().stripLayersWithMeasurement();
866  int Layers2D = track.hitPattern().numberOfValidStripLayersWithMonoAndStereo();
867  int Layers1D = LayersAll - Layers2D;
868  nSTRIPlayersWithMeas_vs_eta[count]->Fill(eta, LayersAll);
869  nSTRIPlayersWith1dMeas_vs_eta[count]->Fill(eta, Layers1D);
870  nSTRIPlayersWith2dMeas_vs_eta[count]->Fill(eta, Layers2D);
871 
872  nlosthits_vs_eta[count]->Fill(eta, track.numberOfLostHits());
873 }
874 
875 
876 void MTVHistoProducerAlgoForTracker::fill_trackBased_histos(int count, int assTracks, int numRecoTracks, int numSimTracks){
877 
878  h_tracks[count]->Fill(assTracks);
879  h_fakes[count]->Fill(numRecoTracks-assTracks);
880  nrec_vs_nsim[count]->Fill(numRecoTracks,numSimTracks);
881 
882 }
883 
884 
885 
887  const TrackingParticle::Vector& momentumTP,
888  const TrackingParticle::Point& vertexTP,
889  int chargeTP,
890  const reco::Track& track,
891  const math::XYZPoint& bsPosition){
892 
893  // evaluation of TP parameters
894  double qoverpSim = chargeTP/sqrt(momentumTP.x()*momentumTP.x()+momentumTP.y()*momentumTP.y()+momentumTP.z()*momentumTP.z());
895  double lambdaSim = M_PI/2-momentumTP.theta();
896  double phiSim = momentumTP.phi();
897  double dxySim = (-vertexTP.x()*sin(momentumTP.phi())+vertexTP.y()*cos(momentumTP.phi()));
898  double dzSim = vertexTP.z() - (vertexTP.x()*momentumTP.x()+vertexTP.y()*momentumTP.y())/sqrt(momentumTP.perp2())
899  * momentumTP.z()/sqrt(momentumTP.perp2());
900 
901 
902  // reco::Track::ParameterVector rParameters = track.parameters(); // UNUSED
903 
904  double qoverpRec(0);
905  double qoverpErrorRec(0);
906  double ptRec(0);
907  double ptErrorRec(0);
908  double lambdaRec(0);
909  double lambdaErrorRec(0);
910  double phiRec(0);
911  double phiErrorRec(0);
912 
913  /* TO BE FIXED LATER -----------
914  //loop to decide whether to take gsfTrack (utilisation of mode-function) or common track
915  const GsfTrack* gsfTrack(0);
916  if(useGsf){
917  gsfTrack = dynamic_cast<const GsfTrack*>(&(*track));
918  if (gsfTrack==0) edm::LogInfo("TrackValidator") << "Trying to access mode for a non-GsfTrack";
919  }
920 
921  if (gsfTrack) {
922  // get values from mode
923  getRecoMomentum(*gsfTrack, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec,
924  lambdaRec,lambdaErrorRec, phiRec, phiErrorRec);
925  }
926 
927  else {
928  // get values from track (without mode)
929  getRecoMomentum(*track, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec,
930  lambdaRec,lambdaErrorRec, phiRec, phiErrorRec);
931  }
932  */
933  getRecoMomentum(track, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec,
934  lambdaRec,lambdaErrorRec, phiRec, phiErrorRec);
935  // -------------
936 
937  double ptError = ptErrorRec;
938  double ptres=ptRec-sqrt(momentumTP.perp2());
939  double etares=track.eta()-momentumTP.Eta();
940 
941 
942  double dxyRec = track.dxy(bsPosition);
943  double dzRec = track.dz(bsPosition);
944 
945  const auto phiRes = phiRec-phiSim;
946  const auto dxyRes = dxyRec-dxySim;
947  const auto dzRes = dzRec-dzSim;
948  const auto cotThetaRes = 1/tan(M_PI*0.5-lambdaRec)-1/tan(M_PI*0.5-lambdaSim);
949 
950  // eta residue; pt, k, theta, phi, dxy, dz pulls
951  double qoverpPull=(qoverpRec-qoverpSim)/qoverpErrorRec;
952  double thetaPull=(lambdaRec-lambdaSim)/lambdaErrorRec;
953  double phiPull=phiRes/phiErrorRec;
954  double dxyPull=dxyRes/track.dxyError();
955  double dzPull=dzRes/track.dzError();
956 
957 #ifdef EDM_ML_DEBUG
958  double contrib_Qoverp = ((qoverpRec-qoverpSim)/qoverpErrorRec)*
959  ((qoverpRec-qoverpSim)/qoverpErrorRec)/5;
960  double contrib_dxy = ((dxyRec-dxySim)/track.dxyError())*((dxyRec-dxySim)/track.dxyError())/5;
961  double contrib_dz = ((dzRec-dzSim)/track.dzError())*((dzRec-dzSim)/track.dzError())/5;
962  double contrib_theta = ((lambdaRec-lambdaSim)/lambdaErrorRec)*
963  ((lambdaRec-lambdaSim)/lambdaErrorRec)/5;
964  double contrib_phi = ((phiRec-phiSim)/phiErrorRec)*
965  ((phiRec-phiSim)/phiErrorRec)/5;
966 
967  LogTrace("TrackValidatorTEST")
968  //<< "assocChi2=" << tp.begin()->second << "\n"
969  << "" << "\n"
970  << "ptREC=" << ptRec << "\n" << "etaREC=" << track.eta() << "\n" << "qoverpREC=" << qoverpRec << "\n"
971  << "dxyREC=" << dxyRec << "\n" << "dzREC=" << dzRec << "\n"
972  << "thetaREC=" << track.theta() << "\n" << "phiREC=" << phiRec << "\n"
973  << "" << "\n"
974  << "qoverpError()=" << qoverpErrorRec << "\n" << "dxyError()=" << track.dxyError() << "\n"<< "dzError()="
975  << track.dzError() << "\n"
976  << "thetaError()=" << lambdaErrorRec << "\n" << "phiError()=" << phiErrorRec << "\n"
977  << "" << "\n"
978  << "ptSIM=" << sqrt(momentumTP.perp2()) << "\n"<< "etaSIM=" << momentumTP.Eta() << "\n"<< "qoverpSIM=" << qoverpSim << "\n"
979  << "dxySIM=" << dxySim << "\n"<< "dzSIM=" << dzSim << "\n" << "thetaSIM=" << M_PI/2-lambdaSim << "\n"
980  << "phiSIM=" << phiSim << "\n"
981  << "" << "\n"
982  << "contrib_Qoverp=" << contrib_Qoverp << "\n"<< "contrib_dxy=" << contrib_dxy << "\n"<< "contrib_dz=" << contrib_dz << "\n"
983  << "contrib_theta=" << contrib_theta << "\n"<< "contrib_phi=" << contrib_phi << "\n"
984  << "" << "\n"
985  <<"chi2PULL="<<contrib_Qoverp+contrib_dxy+contrib_dz+contrib_theta+contrib_phi<<"\n";
986 #endif
987 
988  h_pullQoverp[count]->Fill(qoverpPull);
989  h_pullTheta[count]->Fill(thetaPull);
990  h_pullPhi[count]->Fill(phiPull);
991  h_pullDxy[count]->Fill(dxyPull);
992  h_pullDz[count]->Fill(dzPull);
993 
994  const auto etaSim = getEta(momentumTP.eta());
995  const auto ptSim = getPt(sqrt(momentumTP.perp2()));
996 
997  h_pt[count]->Fill(ptres/ptError);
998  h_eta[count]->Fill(etares);
999  //etares_vs_eta[count]->Fill(getEta(track.eta()),etares);
1000  etares_vs_eta[count]->Fill(etaSim, etares);
1001 
1002  //resolution of track params: fill 2D histos
1003  dxyres_vs_eta[count]->Fill(etaSim, dxyRes);
1004  ptres_vs_eta[count]->Fill(etaSim, ptres/ptRec);
1005  dzres_vs_eta[count]->Fill(etaSim, dzRes);
1006  phires_vs_eta[count]->Fill(etaSim, phiRes);
1007  cotThetares_vs_eta[count]->Fill(etaSim, cotThetaRes);
1008 
1009  //same as before but vs pT
1010  dxyres_vs_pt[count]->Fill(ptSim, dxyRes);
1011  ptres_vs_pt[count]->Fill(ptSim, ptres/ptRec);
1012  dzres_vs_pt[count]->Fill(ptSim, dzRes);
1013  phires_vs_pt[count]->Fill(ptSim, phiRes);
1014  cotThetares_vs_pt[count]->Fill(ptSim, cotThetaRes);
1015 
1016  //pulls of track params vs eta: fill 2D histos
1017  dxypull_vs_eta[count]->Fill(etaSim, dxyPull);
1018  ptpull_vs_eta[count]->Fill(etaSim, ptres/ptError);
1019  dzpull_vs_eta[count]->Fill(etaSim, dzPull);
1020  phipull_vs_eta[count]->Fill(etaSim, phiPull);
1021  thetapull_vs_eta[count]->Fill(etaSim, thetaPull);
1022 
1023  //plots vs phi
1024  nhits_vs_phi[count]->Fill(phiRec,track.numberOfValidHits());
1025  chi2_vs_phi[count]->Fill(phiRec,track.normalizedChi2());
1026  ptmean_vs_eta_phi[count]->Fill(phiRec,getEta(track.eta()),ptRec);
1027  phimean_vs_eta_phi[count]->Fill(phiRec,getEta(track.eta()),phiRec);
1028 
1029  ptres_vs_phi[count]->Fill(phiSim, ptres/ptRec);
1030  phires_vs_phi[count]->Fill(phiSim, phiRes);
1031  ptpull_vs_phi[count]->Fill(phiSim, ptres/ptError);
1032  phipull_vs_phi[count]->Fill(phiSim, phiPull);
1033  thetapull_vs_phi[count]->Fill(phiSim, thetaPull);
1034 
1035 
1036 }
1037 
1038 
1039 
1040 void
1041 MTVHistoProducerAlgoForTracker::getRecoMomentum (const reco::Track& track, double& pt, double& ptError,
1042  double& qoverp, double& qoverpError, double& lambda,double& lambdaError,
1043  double& phi, double& phiError ) const {
1044  pt = track.pt();
1045  ptError = track.ptError();
1046  qoverp = track.qoverp();
1047  qoverpError = track.qoverpError();
1048  lambda = track.lambda();
1049  lambdaError = track.lambdaError();
1050  phi = track.phi();
1051  phiError = track.phiError();
1052  // cout <<"test1" << endl;
1053 
1054 
1055 
1056 }
1057 
1058 void
1059 MTVHistoProducerAlgoForTracker::getRecoMomentum (const reco::GsfTrack& gsfTrack, double& pt, double& ptError,
1060  double& qoverp, double& qoverpError, double& lambda,double& lambdaError,
1061  double& phi, double& phiError ) const {
1062 
1063  pt = gsfTrack.ptMode();
1064  ptError = gsfTrack.ptModeError();
1065  qoverp = gsfTrack.qoverpMode();
1066  qoverpError = gsfTrack.qoverpModeError();
1067  lambda = gsfTrack.lambdaMode();
1068  lambdaError = gsfTrack.lambdaModeError();
1069  phi = gsfTrack.phiMode();
1070  phiError = gsfTrack.phiModeError();
1071  // cout <<"test2" << endl;
1072 
1073 }
1074 
1075 double
1077  if (useFabsEta) return fabs(eta);
1078  else return eta;
1079 }
1080 
1081 double
1083  if (useInvPt && pt!=0) return 1/pt;
1084  else return pt;
1085 }
1086 
1087 
1089  const reco::GenParticle& tp,
1090  const TrackingParticle::Vector& momentumTP,
1091  const TrackingParticle::Point& vertexTP,
1092  double dxySim, double dzSim, int nSimHits,
1093  const reco::Track* track,
1094  int numVertices){
1095 
1096  bool isMatched = track;
1097 
1098  if((*GpSelectorForEfficiencyVsEta)(tp)){
1099  //effic vs eta
1100  fillPlotNoFlow(h_simuleta[count],getEta(momentumTP.eta()));
1101  if (isMatched) fillPlotNoFlow(h_assoceta[count],getEta(momentumTP.eta()));
1102  //effic vs hits
1103  fillPlotNoFlow(h_simulhit[count],(int)nSimHits);
1104  if(isMatched) {
1105  fillPlotNoFlow(h_assochit[count],(int)nSimHits);
1106  nrecHit_vs_nsimHit_sim2rec[count]->Fill( track->numberOfValidHits(),nSimHits);
1107  }
1108  //effic vs pu
1109  fillPlotNoFlow(h_simulpu[count],numVertices);
1110  if (isMatched) fillPlotNoFlow(h_assocpu[count],numVertices);
1111  //efficiency vs dR
1112  //not implemented for now
1113  }
1114 
1115  if((*GpSelectorForEfficiencyVsPhi)(tp)){
1116  fillPlotNoFlow(h_simulphi[count],momentumTP.phi());
1117  if (isMatched) fillPlotNoFlow(h_assocphi[count],momentumTP.phi());
1118  }
1119 
1120  if((*GpSelectorForEfficiencyVsPt)(tp)){
1121  fillPlotNoFlow(h_simulpT[count],getPt(sqrt(momentumTP.perp2())));
1122  if (isMatched) fillPlotNoFlow(h_assocpT[count],getPt(sqrt(momentumTP.perp2())));
1123  }
1124 
1125  if((*GpSelectorForEfficiencyVsVTXR)(tp)){
1126  fillPlotNoFlow(h_simuldxy[count],dxySim);
1127  if (isMatched) fillPlotNoFlow(h_assocdxy[count],dxySim);
1128 
1129  fillPlotNoFlow(h_simulvertpos[count],sqrt(vertexTP.perp2()));
1130  if (isMatched) fillPlotNoFlow(h_assocvertpos[count],sqrt(vertexTP.perp2()));
1131  }
1132 
1133  if((*GpSelectorForEfficiencyVsVTXZ)(tp)){
1134  fillPlotNoFlow(h_simuldz[count],dzSim);
1135  if (isMatched) fillPlotNoFlow(h_assocdz[count],dzSim);
1136 
1137  fillPlotNoFlow(h_simulzpos[count],vertexTP.z());
1138  if (isMatched) fillPlotNoFlow(h_assoczpos[count],vertexTP.z());
1139  }
1140 
1141 }
double qoverp() const
q / p
Definition: TrackBase.h:560
double phiModeError() const
error on phi from mode
Definition: GsfTrack.h:94
std::vector< MonitorElement * > h_looperhit
std::vector< MonitorElement * > h_simul2_dzpvcut
T getParameter(std::string const &) const
std::vector< MonitorElement * > h_assoc2hit
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
std::vector< MonitorElement * > h_pileupdxypv
std::vector< MonitorElement * > h_recodxy
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::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:548
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:157
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
std::vector< MonitorElement * > nTEChits_vs_eta
std::unique_ptr< TrackingParticleSelector > TpSelectorForEfficiencyVsVTXR
std::vector< MonitorElement * > h_hits
double theta() const
polar angle
Definition: TrackBase.h:566
double dxyError() const
error on dxy
Definition: TrackBase.h:783
std::vector< MonitorElement * > nLayersWithMeas_vs_eta
std::vector< MonitorElement * > h_pullPhi
std::vector< MonitorElement * > phipull_vs_phi
std::vector< std::vector< MonitorElement * > > h_dedx_estim
std::vector< MonitorElement * > h_assoc_dzpvcut_pt
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
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
std::vector< MonitorElement * > h_simul_dzpvcut_pt
std::vector< MonitorElement * > h_assocdz
std::vector< MonitorElement * > nTIDhits_vs_eta
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_assoc2pu
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:632
unsigned short numberOfLostHits() const
number of cases where track crossed a layer without getting a hit.
Definition: TrackBase.h:813
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< MonitorElement * > h_assoc3Dlayer
std::vector< MonitorElement * > h_looper3Dlayer
std::vector< MonitorElement * > h_simul2_dzpvsigcut_pt
int pixelLayersWithMeasurement() const
Definition: HitPattern.cc:497
std::vector< MonitorElement * > h_reco_dzpvcut
const Vector & momentum() const
track momentum vector
Definition: TrackBase.h:662
std::vector< MonitorElement * > h_reco3Dlayer
#define nullptr
std::vector< MonitorElement * > h_pileupchi2
void fill_trackBased_histos(int count, int assTracks, int numRecoTracks, int numSimTracks)
std::vector< MonitorElement * > h_assoc2dz
int trackerLayersWithMeasurement() const
Definition: HitPattern.cc:516
std::vector< MonitorElement * > chi2_vs_phi
int numberOfValidStripTOBHits() const
Definition: HitPattern.h:846
std::vector< MonitorElement * > h_assocdzpv
std::vector< MonitorElement * > h_assocphi
int sharedHits(const reco::GsfTrackRef &, const reco::GsfTrackRef &)
std::unique_ptr< GenParticleCustomSelector > GpSelectorForEfficiencyVsPhi
std::vector< MonitorElement * > phires_vs_phi
MTVHistoProducerAlgoForTracker(const edm::ParameterSet &pset, edm::ConsumesCollector &&iC)
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:484
std::vector< MonitorElement * > h_simul2_dzpvcut_pt
math::XYZPointD Point
point in the space
std::vector< MonitorElement * > h_looperlayer
std::vector< MonitorElement * > phires_vs_pt
std::vector< MonitorElement * > h_assoc2_dzpvsigcut
void fill_generic_recoTrack_histos(int count, const reco::Track &track, const math::XYZPoint &bsPosition, const math::XYZPoint *pvPosition, bool isMatched, bool isSigMatched, bool isChargeMatched, int numAssocRecoTracks, int numVertices, int nSimHits, double sharedFraction, double dR)
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:638
int numberOfValidStripLayersWithMonoAndStereo(uint16_t stripdet, uint16_t layer) const
Definition: HitPattern.cc:339
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:821
std::vector< MonitorElement * > h_simulpu
std::vector< MonitorElement * > h_assoc2chi2
std::vector< MonitorElement * > h_simuldzpv
double chi2() const
chi-squared of the fit
Definition: TrackBase.h:536
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
std::vector< MonitorElement * > h_reco_dzpvcut_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)
std::vector< MonitorElement * > nTOBhits_vs_eta
double ndof() const
number of degrees of freedom of the fit
Definition: TrackBase.h:542
T sqrt(T t)
Definition: SSEVec.h:48
std::vector< MonitorElement * > ptpull_vs_eta
std::vector< MonitorElement * > etares_vs_eta
std::unique_ptr< GenParticleCustomSelector > GpSelectorForEfficiencyVsEta
double pt() const
track transverse momentum
Definition: TrackBase.h:608
std::vector< MonitorElement * > h_recophi
std::vector< MonitorElement * > h_assocpT
std::unique_ptr< TrackingParticleSelector > generalTpSelector
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Definition: TrackBase.h:750
std::vector< MonitorElement * > nSTRIPlayersWith2dMeas_vs_eta
std::vector< MonitorElement * > h_tracks
double phiError() const
error on phi
Definition: TrackBase.h:777
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
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_assoc2pixellayer
int numberOfValidStripTIDHits() const
Definition: HitPattern.h:841
double lambda() const
Lambda angle.
Definition: TrackBase.h:572
TH1 * getTH1(void) const
std::vector< MonitorElement * > h_misid3Dlayer
std::vector< MonitorElement * > nrecHit_vs_nsimHit_sim2rec
bool isMatched(TrackingRecHit const &hit)
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:807
void fill_simAssociated_recoTrack_histos(int count, const reco::Track &track)
int numberOfValidStripTECHits() const
Definition: HitPattern.h:851
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
std::vector< MonitorElement * > h_loopereta
std::vector< MonitorElement * > h_misiddz
#define LogTrace(id)
std::vector< MonitorElement * > h_simullayer
#define M_PI
std::vector< MonitorElement * > h_pileupphi
std::vector< MonitorElement * > chi2_vs_nhits
std::vector< MonitorElement * > h_recodr
std::vector< MonitorElement * > dzpull_vs_eta
std::vector< MonitorElement * > h_simuldz
std::vector< MonitorElement * > h_misiddxy
double qoverpError() const
error on signed transverse curvature
Definition: TrackBase.h:744
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
Definition: TrackBase.h:596
double dzError() const
error on dz
Definition: TrackBase.h:801
std::vector< MonitorElement * > thetapull_vs_phi
std::vector< MonitorElement * > h_recolayer
std::vector< MonitorElement * > h_assoc2_dzpvsigcut_pt
std::vector< MonitorElement * > h_simulvertpos
std::vector< MonitorElement * > dxyres_vs_eta
std::vector< MonitorElement * > h_simuldxypv
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_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:437
void fill_generic_simTrack_histos(const TrackingParticle::Vector &, const TrackingParticle::Point &vertex, int bx)
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
int stripLayersWithMeasurement() const
Definition: HitPattern.h:1001
std::vector< MonitorElement * > h_eta
TH1F * getTH1F(void) const
std::vector< MonitorElement * > h_pt
std::vector< MonitorElement * > cotThetares_vs_pt
std::vector< MonitorElement * > h_recodzpv
std::vector< MonitorElement * > h_pileuppixellayer
int numberOfValidStripTIBHits() const
Definition: HitPattern.h:836
std::vector< MonitorElement * > h_simulphi
std::vector< MonitorElement * > h_pileup_dzpvcut
static const std::string algoNames[]
Definition: TrackBase.h:146
void bookRecoHistos(DQMStore::IBooker &ibook)
int numberOfValidPixelEndcapHits() const
Definition: HitPattern.h:826
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:765
std::vector< MonitorElement * > h_recodxypv
std::vector< MonitorElement * > h_assoc2dr
std::vector< MonitorElement * > h_simul2_dzpvsigcut
std::vector< MonitorElement * > dxypull_vs_eta
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_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_misiddxypv
std::vector< MonitorElement * > h_assocdxy
std::vector< MonitorElement * > h_misidpixellayer
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_pileuplayer
int charge() const
track electric charge
Definition: TrackBase.h:554
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)
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
std::vector< MonitorElement * > ptres_vs_pt
std::vector< MonitorElement * > h_pileupdzpv
std::vector< MonitorElement * > h_pileupdz
math::XYZVectorD Vector
point in the space
std::vector< std::vector< MonitorElement * > > h_dedx_nom
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:578
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 * > 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< MonitorElement * > h_simuldxy
std::vector< MonitorElement * > h_assocdr
std::vector< MonitorElement * > h_assocvertpos
std::vector< MonitorElement * > h_assocpixellayer
std::vector< MonitorElement * > h_recoeta
std::vector< MonitorElement * > thetapull_vs_eta
std::vector< MonitorElement * > h_assoc_dzpvcut
std::vector< MonitorElement * > chi2_vs_eta
void bookSimHistos(DQMStore::IBooker &ibook)
int numberOfHits(HitCategory category) const
Definition: HitPattern.h:785
std::vector< MonitorElement * > h_assocdxypv
std::vector< MonitorElement * > dxyres_vs_pt
std::vector< MonitorElement * > h_losthits
std::vector< MonitorElement * > h_assoc2eta
std::vector< MonitorElement * > h_misidphi
std::vector< MonitorElement * > dzres_vs_pt
std::vector< MonitorElement * > h_pileuppu