29 for (
unsigned int ww=0;ww<associators.size();ww++){
30 for (
unsigned int www=0;www<
label.size();www++){
38 dirName+=algo.
label();
41 if (dirName.find(
"Tracks")<dirName.length()){
42 dirName.replace(dirName.find(
"Tracks"),6,
"Trks");
44 if (dirName.find(
"UpdatedAtVtx")<dirName.length()){
45 dirName.replace(dirName.find(
"UpdatedAtVtx"),12,
"UpdAtVtx");
47 string assoc= associators[ww];
48 if (assoc.find(
"tpToTkmuTrackAssociation")<assoc.length()){
57 string subDirName = dirName +
"/simulation";
59 h_ptSIM.push_back( ibooker.
book1D(
"ptSIM",
"generated p_{t}", 5500, 0, 110 ) );
60 h_etaSIM.push_back( ibooker.
book1D(
"etaSIM",
"generated pseudorapidity", 500, -2.5, 2.5 ) );
61 h_tracksSIM.push_back( ibooker.
book1D(
"tracksSIM",
"number of simulated tracks",200,-0.5,99.5) );
62 h_vertposSIM.push_back( ibooker.
book1D(
"vertposSIM",
"Transverse position of sim vertices",100,0.,120.) );
66 h_tracks.push_back( ibooker.
book1D(
"tracks",
"number of reconstructed tracks",200,-0.5,19.5) );
67 h_fakes.push_back( ibooker.
book1D(
"fakes",
"number of fake reco tracks",20,-0.5,19.5) );
68 h_charge.push_back( ibooker.
book1D(
"charge",
"charge",3,-1.5,1.5) );
69 h_hits.push_back( ibooker.
book1D(
"hits",
"number of hits per track", nintHit,
minHit,maxHit ) );
70 h_losthits.push_back( ibooker.
book1D(
"losthits",
"number of lost hits per track", nintHit,
minHit,maxHit) );
71 h_nchi2.push_back( ibooker.
book1D(
"chi2",
"normalized #chi^{2}", 200, 0, 20 ) );
72 h_nchi2_prob.push_back( ibooker.
book1D(
"chi2_prob",
"normalized #chi^{2} probability",100,0,1));
75 h_recoeta.push_back( ibooker.
book1D(
"num_reco_eta",
"N of reco track vs eta",
nint,
min,
max) );
76 h_assoceta.push_back( ibooker.
book1D(
"num_assoc(simToReco)_eta",
"N of associated tracks (simToReco) vs eta",
nint,
min,
max) );
77 h_assoc2eta.push_back( ibooker.
book1D(
"num_assoc(recoToSim)_eta",
"N of associated (recoToSim) tracks vs eta",
nint,
min,
max) );
78 h_simuleta.push_back( ibooker.
book1D(
"num_simul_eta",
"N of simulated tracks vs eta",
nint,
min,
max) );
79 h_recopT.push_back( ibooker.
book1D(
"num_reco_pT",
"N of reco track vs pT",nintpT,minpT,maxpT) );
80 h_assocpT.push_back( ibooker.
book1D(
"num_assoc(simToReco)_pT",
"N of associated tracks (simToReco) vs pT",nintpT,minpT,maxpT) );
81 h_assoc2pT.push_back( ibooker.
book1D(
"num_assoc(recoToSim)_pT",
"N of associated (recoToSim) tracks vs pT",nintpT,minpT,maxpT) );
82 h_simulpT.push_back( ibooker.
book1D(
"num_simul_pT",
"N of simulated tracks vs pT",nintpT,minpT,maxpT) );
84 h_recohit.push_back( ibooker.
book1D(
"num_reco_hit",
"N of reco track vs hit",nintHit,
minHit,maxHit) );
85 h_assochit.push_back( ibooker.
book1D(
"num_assoc(simToReco)_hit",
"N of associated tracks (simToReco) vs hit",nintHit,
minHit,maxHit) );
86 h_assoc2hit.push_back( ibooker.
book1D(
"num_assoc(recoToSim)_hit",
"N of associated (recoToSim) tracks vs hit",nintHit,
minHit,maxHit) );
87 h_simulhit.push_back( ibooker.
book1D(
"num_simul_hit",
"N of simulated tracks vs hit",nintHit,
minHit,maxHit) );
89 h_recophi.push_back( ibooker.
book1D(
"num_reco_phi",
"N of reco track vs phi",nintPhi,minPhi,maxPhi) );
90 h_assocphi.push_back( ibooker.
book1D(
"num_assoc(simToReco)_phi",
"N of associated tracks (simToReco) vs phi",nintPhi,minPhi,maxPhi) );
91 h_assoc2phi.push_back( ibooker.
book1D(
"num_assoc(recoToSim)_phi",
"N of associated (recoToSim) tracks vs phi",nintPhi,minPhi,maxPhi) );
92 h_simulphi.push_back( ibooker.
book1D(
"num_simul_phi",
"N of simulated tracks vs phi",nintPhi,minPhi,maxPhi) );
94 h_recodxy.push_back( ibooker.
book1D(
"num_reco_dxy",
"N of reco track vs dxy",nintDxy,minDxy,
maxDxy) );
95 h_assocdxy.push_back( ibooker.
book1D(
"num_assoc(simToReco)_dxy",
"N of associated tracks (simToReco) vs dxy",nintDxy,minDxy,
maxDxy) );
96 h_assoc2dxy.push_back( ibooker.
book1D(
"num_assoc(recoToSim)_dxy",
"N of associated (recoToSim) tracks vs dxy",nintDxy,minDxy,
maxDxy) );
97 h_simuldxy.push_back( ibooker.
book1D(
"num_simul_dxy",
"N of simulated tracks vs dxy",nintDxy,minDxy,
maxDxy) );
99 h_recodz.push_back( ibooker.
book1D(
"num_reco_dz",
"N of reco track vs dz",nintDz,minDz,maxDz) );
100 h_assocdz.push_back( ibooker.
book1D(
"num_assoc(simToReco)_dz",
"N of associated tracks (simToReco) vs dz",nintDz,minDz,maxDz) );
101 h_assoc2dz.push_back( ibooker.
book1D(
"num_assoc(recoToSim)_dz",
"N of associated (recoToSim) tracks vs dz",nintDz,minDz,maxDz) );
102 h_simuldz.push_back( ibooker.
book1D(
"num_simul_dz",
"N of simulated tracks vs dz",nintDz,minDz,maxDz) );
104 h_assocvertpos.push_back( ibooker.
book1D(
"num_assoc(simToReco)_vertpos",
"N of associated tracks (simToReco) vs transverse vert position",nintVertpos,minVertpos,maxVertpos) );
105 h_simulvertpos.push_back( ibooker.
book1D(
"num_simul_vertpos",
"N of simulated tracks vs transverse vert position",nintVertpos,minVertpos,maxVertpos) );
107 h_assoczpos.push_back( ibooker.
book1D(
"num_assoc(simToReco)_zpos",
"N of associated tracks (simToReco) vs z vert position",nintZpos,minZpos,maxZpos) );
108 h_simulzpos.push_back( ibooker.
book1D(
"num_simul_zpos",
"N of simulated tracks vs z vert position",nintZpos,minZpos,maxZpos) );
112 h_eta.push_back( ibooker.
book1D(
"eta",
"pseudorapidity residue", 1000, -0.1, 0.1 ) );
113 h_pt.push_back( ibooker.
book1D(
"pullPt",
"pull of p_{t}", 100, -10, 10 ) );
114 h_pullTheta.push_back( ibooker.
book1D(
"pullTheta",
"pull of #theta parameter",250,-25,25) );
115 h_pullPhi.push_back( ibooker.
book1D(
"pullPhi",
"pull of #phi parameter",250,-25,25) );
116 h_pullDxy.push_back( ibooker.
book1D(
"pullDxy",
"pull of dxy parameter",250,-25,25) );
117 h_pullDz.push_back( ibooker.
book1D(
"pullDz",
"pull of dz parameter",250,-25,25) );
118 h_pullQoverp.push_back( ibooker.
book1D(
"pullQoverp",
"pull of qoverp parameter",250,-25,25) );
120 if (associators[ww]==
"trackAssociatorByChi2"){
121 h_assochi2.push_back( ibooker.
book1D(
"assocChi2",
"track association #chi^{2}",1000000,0,100000) );
122 h_assochi2_prob.push_back(ibooker.
book1D(
"assocChi2_prob",
"probability of association #chi^{2}",100,0,1));
123 }
else if (associators[ww]==
"trackAssociatorByHits"){
124 h_assocFraction.push_back( ibooker.
book1D(
"assocFraction",
"fraction of shared hits",200,0,2) );
125 h_assocSharedHit.push_back(ibooker.
book1D(
"assocSharedHit",
"number of shared hits",20,0,20));
128 chi2_vs_nhits.push_back( ibooker.
book2D(
"chi2_vs_nhits",
"#chi^{2} vs nhits",25,0,25,100,0,10) );
129 h_chi2meanhitsh.push_back( ibooker.
bookProfile(
"chi2mean_vs_nhits",
"mean #chi^{2} vs nhits",25,0,25,100,0,10) );
131 etares_vs_eta.push_back( ibooker.
book2D(
"etares_vs_eta",
"etaresidue vs eta",
nint,
min,
max,200,-0.1,0.1) );
132 nrec_vs_nsim.push_back( ibooker.
book2D(
"nrec_vs_nsim",
"nrec vs nsim",20,-0.5,19.5,20,-0.5,19.5) );
134 chi2_vs_eta.push_back( ibooker.
book2D(
"chi2_vs_eta",
"chi2_vs_eta",
nint,
min,
max, 200, 0, 20 ));
135 h_chi2meanh.push_back( ibooker.
bookProfile(
"chi2mean",
"mean #chi^{2} vs #eta",
nint,
min,
max, 200, 0, 20) );
136 chi2_vs_phi.push_back( ibooker.
book2D(
"chi2_vs_phi",
"#chi^{2} vs #phi",nintPhi,minPhi,maxPhi, 200, 0, 20 ) );
137 h_chi2mean_vs_phi.push_back( ibooker.
bookProfile(
"chi2mean_vs_phi",
"mean of #chi^{2} vs #phi",nintPhi,minPhi,maxPhi, 200, 0, 20) );
139 nhits_vs_eta.push_back( ibooker.
book2D(
"nhits_vs_eta",
"nhits vs eta",
nint,
min,
max,nintHit,
minHit,maxHit) );
140 nDThits_vs_eta.push_back( ibooker.
book2D(
"nDThits_vs_eta",
"# DT hits vs eta",
nint,
min,
max,nintHit,
minHit,maxHit) );
141 nCSChits_vs_eta.push_back( ibooker.
book2D(
"nCSChits_vs_eta",
"# CSC hits vs eta",
nint,
min,
max,nintHit,
minHit,maxHit) );
142 nRPChits_vs_eta.push_back( ibooker.
book2D(
"nRPChits_vs_eta",
"# RPC hits vs eta",
nint,
min,
max,nintHit,
minHit,maxHit) );
148 nhits_vs_phi.push_back( ibooker.
book2D(
"nhits_vs_phi",
"#hits vs #phi",nintPhi,minPhi,maxPhi,nintHit,
minHit,maxHit) );
149 h_hits_phi.push_back( ibooker.
bookProfile(
"hits_phi",
"mean #hits vs #phi",nintPhi,minPhi,maxPhi, nintHit,
minHit,maxHit) );
151 nlosthits_vs_eta.push_back( ibooker.
book2D(
"nlosthits_vs_eta",
"nlosthits vs eta",
nint,
min,
max,nintHit,
minHit,maxHit) );
154 ptres_vs_eta.push_back(ibooker.
book2D(
"ptres_vs_eta",
"ptres_vs_eta",
nint,
min,
max, ptRes_nbin, ptRes_rangeMin, ptRes_rangeMax));
155 ptres_vs_phi.push_back( ibooker.
book2D(
"ptres_vs_phi",
"p_{t} res vs #phi",nintPhi,minPhi,maxPhi, ptRes_nbin, ptRes_rangeMin, ptRes_rangeMax));
156 ptres_vs_pt.push_back(ibooker.
book2D(
"ptres_vs_pt",
"ptres_vs_pt",nintpT,minpT,maxpT, ptRes_nbin, ptRes_rangeMin, ptRes_rangeMax));
158 cotThetares_vs_eta.push_back(ibooker.
book2D(
"cotThetares_vs_eta",
"cotThetares_vs_eta",
nint,
min,
max,cotThetaRes_nbin, cotThetaRes_rangeMin, cotThetaRes_rangeMax));
159 cotThetares_vs_pt.push_back(ibooker.
book2D(
"cotThetares_vs_pt",
"cotThetares_vs_pt",nintpT,minpT,maxpT, cotThetaRes_nbin, cotThetaRes_rangeMin, cotThetaRes_rangeMax));
161 phires_vs_eta.push_back(ibooker.
book2D(
"phires_vs_eta",
"phires_vs_eta",
nint,
min,
max, phiRes_nbin, phiRes_rangeMin, phiRes_rangeMax));
162 phires_vs_pt.push_back(ibooker.
book2D(
"phires_vs_pt",
"phires_vs_pt",nintpT,minpT,maxpT, phiRes_nbin, phiRes_rangeMin, phiRes_rangeMax));
163 phires_vs_phi.push_back(ibooker.
book2D(
"phires_vs_phi",
"#phi res vs #phi",nintPhi,minPhi,maxPhi,phiRes_nbin, phiRes_rangeMin, phiRes_rangeMax));
165 dxyres_vs_eta.push_back(ibooker.
book2D(
"dxyres_vs_eta",
"dxyres_vs_eta",
nint,
min,
max,dxyRes_nbin, dxyRes_rangeMin, dxyRes_rangeMax));
166 dxyres_vs_pt.push_back( ibooker.
book2D(
"dxyres_vs_pt",
"dxyres_vs_pt",nintpT,minpT,maxpT,dxyRes_nbin, dxyRes_rangeMin, dxyRes_rangeMax));
168 dzres_vs_eta.push_back(ibooker.
book2D(
"dzres_vs_eta",
"dzres_vs_eta",
nint,
min,
max,dzRes_nbin, dzRes_rangeMin, dzRes_rangeMax));
169 dzres_vs_pt.push_back(ibooker.
book2D(
"dzres_vs_pt",
"dzres_vs_pt",nintpT,minpT,maxpT,dzRes_nbin, dzRes_rangeMin, dzRes_rangeMax));
171 ptmean_vs_eta_phi.push_back(ibooker.
bookProfile2D(
"ptmean_vs_eta_phi",
"mean p_{t} vs #eta and #phi",nintPhi,minPhi,maxPhi,
nint,
min,
max,1000,0,1000));
172 phimean_vs_eta_phi.push_back(ibooker.
bookProfile2D(
"phimean_vs_eta_phi",
"mean #phi vs #eta and #phi",nintPhi,minPhi,maxPhi,
nint,
min,
max,nintPhi,minPhi,maxPhi));
175 dxypull_vs_eta.push_back(ibooker.
book2D(
"dxypull_vs_eta",
"dxypull_vs_eta",
nint,
min,
max,100,-10,10));
176 ptpull_vs_eta.push_back(ibooker.
book2D(
"ptpull_vs_eta",
"ptpull_vs_eta",
nint,
min,
max,100,-10,10));
177 dzpull_vs_eta.push_back(ibooker.
book2D(
"dzpull_vs_eta",
"dzpull_vs_eta",
nint,
min,
max,100,-10,10));
178 phipull_vs_eta.push_back(ibooker.
book2D(
"phipull_vs_eta",
"phipull_vs_eta",
nint,
min,
max,100,-10,10));
179 thetapull_vs_eta.push_back(ibooker.
book2D(
"thetapull_vs_eta",
"thetapull_vs_eta",
nint,
min,
max,100,-10,10));
182 ptpull_vs_phi.push_back(ibooker.
book2D(
"ptpull_vs_phi",
"p_{t} pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10));
183 phipull_vs_phi.push_back(ibooker.
book2D(
"phipull_vs_phi",
"#phi pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10));
184 thetapull_vs_phi.push_back(ibooker.
book2D(
"thetapull_vs_phi",
"#theta pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10));
186 nrecHit_vs_nsimHit_sim2rec.push_back( ibooker.
book2D(
"nrecHit_vs_nsimHit_sim2rec",
"nrecHit vs nsimHit (Sim2RecAssoc)",nintHit,
minHit,maxHit, nintHit,
minHit,maxHit ));
187 nrecHit_vs_nsimHit_rec2sim.push_back( ibooker.
book2D(
"nrecHit_vs_nsimHit_rec2sim",
"nrecHit vs nsimHit (Rec2simAssoc)",nintHit,
minHit,maxHit, nintHit,
minHit,maxHit ));
190 h_PurityVsQuality.push_back
191 (ibooker.
book2D(
"PurityVsQuality",
"Purity vs Quality (MABH)",20,0.01,1.01,20,0.01,1.01) );
192 h_assoceta_Quality05.push_back
193 (ibooker.
book1D(
"num_assoc(simToReco)_eta_Q05",
"N of associated tracks (simToReco) vs eta (Quality>0.5)",
nint,
min,
max) );
194 h_assoceta_Quality075.push_back
195 (ibooker.
book1D(
"num_assoc(simToReco)_eta_Q075",
"N of associated tracks (simToReco) vs eta (Quality>0.75)",
nint,
min,
max) );
196 h_assocpT_Quality05.push_back
197 (ibooker.
book1D(
"num_assoc(simToReco)_pT_Q05",
"N of associated tracks (simToReco) vs pT (Quality>0.5)",nintpT,minpT,maxpT) );
198 h_assocpT_Quality075.push_back
199 (ibooker.
book1D(
"num_assoc(simToReco)_pT_Q075",
"N of associated tracks (simToReco) vs pT (Quality>0.75)",nintpT,minpT,maxpT) );
200 h_assocphi_Quality05.push_back
201 (ibooker.
book1D(
"num_assoc(simToReco)_phi_Q05",
"N of associated tracks (simToReco) vs phi (Quality>0.5)",nintPhi,minPhi,maxPhi) );
202 h_assocphi_Quality075.push_back
203 (ibooker.
book1D(
"num_assoc(simToReco)_phi_Q075",
"N of associated tracks (simToReco) vs phi (Quality>0.75)",nintPhi,minPhi,maxPhi) );
207 BinLogX(dzres_vs_pt[j]->
getTH2F());
208 BinLogX(dxyres_vs_pt[j]->
getTH2F());
209 BinLogX(phires_vs_pt[j]->
getTH2F());
210 BinLogX(cotThetares_vs_pt[j]->
getTH2F());
211 BinLogX(ptres_vs_pt[j]->
getTH2F());
212 BinLogX(h_recopT[j]->
getTH1F());
213 BinLogX(h_assocpT[j]->
getTH1F());
214 BinLogX(h_assoc2pT[j]->
getTH1F());
215 BinLogX(h_simulpT[j]->
getTH1F());
217 BinLogX(h_assocpT_Quality05[j]->
getTH1F());
218 BinLogX(h_assocpT_Quality075[j]->
getTH1F());
228 using namespace reco;
230 edm::LogInfo(
"MuonTrackValidator") <<
"\n====================================================" <<
"\n"
231 <<
"Analyzing new event" <<
"\n"
232 <<
"====================================================\n" <<
"\n";
235 std::unique_ptr<ParametersDefinerForTP> Cosmic_parametersDefinerTP;
237 if(parametersDefiner==
"LhcParametersDefinerForTP") {
240 else if(parametersDefiner==
"CosmicParametersDefinerForTP") {
245 Cosmic_parametersDefinerTP = _Cosmic_parametersDefinerTP->clone();
249 event.getByToken(_simHitTpMapTag,simHitsTPAssoc);
250 Cosmic_parametersDefinerTP->initEvent(simHitsTPAssoc);
251 cosmictpSelector.initEvent(simHitsTPAssoc);
255 <<
"Unexpected label: parametersDefiner = "<< parametersDefiner.c_str() <<
"\n";
259 event.getByToken(tp_effic_Token,TPCollectionHeff);
263 event.getByToken(tp_fake_Token,TPCollectionHfake);
266 event.getByToken(bsSrc_Token,recoBeamSpotHandle);
269 std::vector<const reco::TrackToTrackingParticleAssociator*> associator;
270 if (UseAssociators) {
272 for (
unsigned int w=0;
w<associators.size();
w++) {
273 event.getByLabel(associators[
w],theAssociator);
274 associator.push_back( theAssociator.
product() );
279 for (
unsigned int ww=0;ww<associators.size();ww++){
280 for (
unsigned int www=0;www<
label.size();www++){
288 unsigned int trackCollectionSize = 0;
290 if(!event.
getByToken(track_Collection_Token[www], trackCollection)&&ignoremissingtkcollection_) {
299 trackCollectionSize = trackCollection->size();
304 <<
label[www].process()<<
":"
305 <<
label[www].label()<<
":"
306 <<
label[www].instance()<<
" with "
307 << associators[ww].c_str() <<
"\n";
309 LogTrace(
"MuonTrackValidator") <<
"Calling associateRecoToSim method" <<
"\n";
310 recSimColl=associator[ww]->associateRecoToSim(trackCollection,
312 LogTrace(
"MuonTrackValidator") <<
"Calling associateSimToReco method" <<
"\n";
313 simRecColl=associator[ww]->associateSimToReco(trackCollection,
318 <<
label[www].process()<<
":"
319 <<
label[www].label()<<
":"
320 <<
label[www].instance()<<
" with "
321 << associatormap.process()<<
":"
322 << associatormap.label()<<
":"
323 << associatormap.instance()<<
"\n";
326 event.getByToken(simToRecoCollection_Token,simtorecoCollectionH);
327 simRecColl= *(simtorecoCollectionH.
product());
330 event.getByToken(recoToSimCollection_Token,recotosimCollectionH);
331 recSimColl= *(recotosimCollectionH.
product());
340 edm::LogVerbatim(
"MuonTrackValidator") <<
"\n# of TrackingParticles: " << tPCeff.size() <<
"\n";
344 bool TP_is_matched =
false;
346 bool Quality05 =
false;
347 bool Quality075 =
false;
359 if(parametersDefiner==
"LhcParametersDefinerForTP")
361 LogTrace(
"MuonTrackValidator") <<
"TrackingParticle "<<
i;
362 if(! tpSelector(*tp))
continue;
367 dxySim = (-vertex.x()*
sin(momentum.phi())+vertex.y()*
cos(momentum.phi()));
368 dzSim = vertex.z() - (vertex.x()*momentum.x()+vertex.y()*momentum.y()) /
369 sqrt(momentum.perp2()) * momentum.z()/
sqrt(momentum.perp2());
372 else if(parametersDefiner==
"CosmicParametersDefinerForTP")
375 if(! cosmictpSelector(tpr,&bs,event,setup))
continue;
376 momentumTP = Cosmic_parametersDefinerTP->momentum(event,setup,tpr);
377 vertexTP = Cosmic_parametersDefinerTP->vertex(event,setup,tpr);
378 dxySim = (-vertexTP.x()*
sin(momentumTP.phi())+vertexTP.y()*
cos(momentumTP.phi()));
379 dzSim = vertexTP.z() - (vertexTP.x()*momentumTP.x()+vertexTP.y()*momentumTP.y()) /
380 sqrt(momentumTP.perp2()) * momentumTP.z()/
sqrt(momentumTP.perp2());
382 edm::LogVerbatim(
"MuonTrackValidator") <<
"--------------------Selected TrackingParticle #"<<tpr.
key();
383 edm::LogVerbatim(
"MuonTrackValidator") <<
"momentumTP: pt = "<<
sqrt(momentumTP.perp2())<<
", pz = "<<momentumTP.z()
384 <<
", \t vertexTP: radius = "<<
sqrt(vertexTP.perp2())<<
", z = "<<vertexTP.z() <<
"\n";
387 h_ptSIM[
w]->Fill(
sqrt(momentumTP.perp2()));
388 h_etaSIM[
w]->Fill(momentumTP.eta());
389 h_vertposSIM[
w]->Fill(
sqrt(vertexTP.perp2()));
391 std::vector<std::pair<RefToBase<Track>,
double> > rt;
392 if(simRecColl.
find(tpr) != simRecColl.
end()){
393 rt = (std::vector<std::pair<RefToBase<Track>,
double> >) simRecColl[tpr];
396 edm::LogVerbatim(
"MuonTrackValidator")<<
"-----------------------------associated Track #"<<assoc_recoTrack.
key();
397 TP_is_matched =
true;
399 quality = rt.begin()->second;
401 <<
" with pt=" <<
sqrt(momentumTP.perp2())
402 <<
" associated with quality:" << quality <<
"\n";
404 if (quality > 0.75) {
408 else if (quality > 0.5) {
415 <<
"TrackingParticle #" << tpr.
key()
416 <<
" with pt,eta,phi: "
417 <<
sqrt(momentumTP.perp2()) <<
" , "
418 << momentumTP.eta() <<
" , "
419 << momentumTP.phi() <<
" , "
420 <<
" NOT associated to any reco::Track" <<
"\n";
423 for (
unsigned int f=0;
f<etaintervals[
w].size()-1;
f++){
424 if (getEta(momentumTP.eta())>etaintervals[
w][
f]&&
425 getEta(momentumTP.eta())<etaintervals[
w][
f+1]) {
432 totASSeta_Quality075[
w][
f]++;
433 totASSeta_Quality05[
w][
f]++;
435 else if (Quality05) {
436 totASSeta_Quality05[
w][
f]++;
443 for (
unsigned int f=0;
f<phiintervals[
w].size()-1;
f++){
444 if (momentumTP.phi() > phiintervals[
w][
f]&&
445 momentumTP.phi() <phiintervals[
w][
f+1]) {
452 totASS_phi_Quality075[
w][
f]++;
453 totASS_phi_Quality05[
w][
f]++;
455 else if (Quality05) {
456 totASS_phi_Quality05[
w][
f]++;
463 for (
unsigned int f=0;
f<pTintervals[
w].size()-1;
f++){
464 if (getPt(
sqrt(momentumTP.perp2()))>pTintervals[
w][
f]&&
465 getPt(
sqrt(momentumTP.perp2()))<pTintervals[
w][
f+1]) {
472 totASSpT_Quality075[
w][
f]++;
473 totASSpT_Quality05[
w][
f]++;
475 else if (Quality05) {
476 totASSpT_Quality05[
w][
f]++;
483 for (
unsigned int f=0;
f<dxyintervals[
w].size()-1;
f++){
484 if (dxySim>dxyintervals[
w][
f]&&
485 dxySim<dxyintervals[
w][
f+1]) {
493 for (
unsigned int f=0;
f<dzintervals[
w].size()-1;
f++){
494 if (dzSim>dzintervals[
w][
f]&&
495 dzSim<dzintervals[
w][
f+1]) {
503 for (
unsigned int f=0;
f<vertposintervals[
w].size()-1;
f++){
504 if (
sqrt(vertexTP.perp2())>vertposintervals[
w][
f]&&
505 sqrt(vertexTP.perp2())<vertposintervals[
w][
f+1]) {
506 totSIM_vertpos[
w][
f]++;
508 totASS_vertpos[
w][
f]++;
513 for (
unsigned int f=0;
f<zposintervals[
w].size()-1;
f++){
514 if (vertexTP.z()>zposintervals[
w][
f]&&
515 vertexTP.z()<zposintervals[
w][
f+1]) {
524 if (usetracker && usemuon) {
525 nSimHits= tpr.
get()->numberOfHits();
527 else if (!usetracker && usemuon) {
528 nSimHits= tpr.
get()->numberOfHits() - tpr.
get()->numberOfTrackerHits();
530 else if (usetracker && !usemuon) {
531 nSimHits=tpr.
get()->numberOfTrackerHits();
535 edm::LogVerbatim(
"MuonTrackValidator") <<
"\t N simhits = "<< nSimHits<<
"\n";
537 totSIM_hit[
w][
tmp]++;
538 if (TP_is_matched) totASS_hit[
w][
tmp]++;
546 if (st!=0) h_tracksSIM[
w]->Fill(st);
552 <<
label[www].process()<<
":"
553 <<
label[www].label()<<
":"
554 <<
label[www].instance()
555 <<
": " << trackCollectionSize <<
"\n";
559 bool Track_is_matched =
false;
563 std::vector<std::pair<TrackingParticleRef, double> > tp;
567 if (BiDirectional_RecoToSim_association) {
568 edm::LogVerbatim(
"MuonTrackValidator")<<
"----------------------------------------Track #"<< track.
key();
570 if(recSimColl.
find(track) != recSimColl.
end()) {
571 tp = recSimColl[track];
572 if (tp.size() != 0) {
573 tpr = tp.begin()->first;
575 if(simRecColl.
find(tpr) != simRecColl.
end()) {
576 std::vector<std::pair<RefToBase<Track>,
double> > track_checkback = simRecColl[tpr];
578 assoc_track_checkback = track_checkback.begin()->first;
580 if ( assoc_track_checkback.
key() == track.
key() ) {
581 edm::LogVerbatim(
"MuonTrackValidator")<<
"------------------associated TrackingParticle #"<<tpr.
key();
582 Track_is_matched =
true;
584 double Purity = tp.begin()->second;
585 double Quality = track_checkback.begin()->second;
586 edm::LogVerbatim(
"MuonTrackValidator") <<
"reco::Track #" << track.
key() <<
" with pt=" << track->
pt()
587 <<
" associated with quality:" << Purity <<
"\n";
588 if (MABH) h_PurityVsQuality[
w]->Fill(Quality,Purity);
594 if (!Track_is_matched)
596 <<
"reco::Track #" << track.
key() <<
" with pt=" << track->
pt() <<
" NOT associated to any TrackingParticle" <<
"\n";
600 if(recSimColl.
find(track) != recSimColl.
end()){
601 tp = recSimColl[track];
603 Track_is_matched =
true;
604 tpr = tp.begin()->first;
606 edm::LogVerbatim(
"MuonTrackValidator") <<
"reco::Track #" << track.
key() <<
" with pt=" << track->
pt()
607 <<
" associated with quality:" << tp.begin()->second <<
"\n";
610 edm::LogVerbatim(
"MuonTrackValidator") <<
"reco::Track #" << track.
key() <<
" with pt=" << track->
pt()
611 <<
" NOT associated to any TrackingParticle" <<
"\n";
616 for (
unsigned int f=0;
f<etaintervals[
w].size()-1;
f++){
617 if (getEta(track->
momentum().eta())>etaintervals[
w][
f]&&
618 getEta(track->
momentum().eta())<etaintervals[
w][
f+1]) {
620 if (Track_is_matched) {
626 for (
unsigned int f=0;
f<phiintervals[
w].size()-1;
f++){
627 if (track->
momentum().phi()>phiintervals[
w][
f]&&
628 track->
momentum().phi()<phiintervals[
w][
f+1]) {
630 if (Track_is_matched) {
636 for (
unsigned int f=0;
f<pTintervals[
w].size()-1;
f++){
640 if (Track_is_matched) {
646 for (
unsigned int f=0;
f<dxyintervals[
w].size()-1;
f++){
647 if (track->
dxy(bs.position())>dxyintervals[
w][
f]&&
648 track->
dxy(bs.position())<dxyintervals[
w][
f+1]) {
650 if (Track_is_matched) {
656 for (
unsigned int f=0;
f<dzintervals[
w].size()-1;
f++){
657 if (track->
dz(bs.position())>dzintervals[
w][
f]&&
658 track->
dz(bs.position())<dzintervals[
w][
f+1]) {
660 if (Track_is_matched) {
667 totREC_hit[
w][
tmp]++;
668 if (Track_is_matched) totASS2_hit[
w][
tmp]++;
678 if (parametersDefiner==
"LhcParametersDefinerForTP") {
680 if (! (Track_is_matched && tpSelector(*tpp)) )
continue;
682 momentumTP = Lhc_parametersDefinerTP->
momentum(event,setup,tpr) ;
683 vertexTP = Lhc_parametersDefinerTP->vertex(event,setup,tpr);
686 else if (parametersDefiner==
"CosmicParametersDefinerForTP") {
688 if (! (Track_is_matched && cosmictpSelector(tpr,&bs,event,setup)) )
continue;
690 momentumTP = Cosmic_parametersDefinerTP->momentum(event,setup,tpr) ;
691 vertexTP = Cosmic_parametersDefinerTP->vertex(event,setup,tpr);
695 if (associators[ww]==
"trackAssociatorByChi2"){
697 double assocChi2 = -tp.begin()->second;
698 h_assochi2[www]->Fill(assocChi2);
699 h_assochi2_prob[www]->Fill(TMath::Prob((assocChi2)*5,5));
701 else if (associators[ww]==
"trackAssociatorByHits"){
702 double fraction = tp.begin()->second;
703 h_assocFraction[www]->Fill(fraction);
709 h_nchi2_prob[
w]->Fill(TMath::Prob(track->
chi2(),(int)track->
ndof()));
713 h_charge[
w]->Fill( track->
charge() );
715 double ptSim =
sqrt(momentumTP.perp2());
716 double qoverpSim = tpr->charge()/
sqrt(momentumTP.x()*momentumTP.x()+momentumTP.y()*momentumTP.y()+momentumTP.z()*momentumTP.z());
717 double thetaSim = momentumTP.theta();
718 double lambdaSim =
M_PI/2-momentumTP.theta();
719 double phiSim = momentumTP.phi();
720 double dxySim = (-vertexTP.x()*
sin(momentumTP.phi())+vertexTP.y()*
cos(momentumTP.phi()));
721 double dzSim = vertexTP.z() - (vertexTP.x()*momentumTP.x()+vertexTP.y()*momentumTP.y()) /
722 sqrt(momentumTP.perp2()) * momentumTP.z()/
sqrt(momentumTP.perp2());
728 double qoverpErrorRec(0);
730 double ptErrorRec(0);
732 double lambdaErrorRec(0);
734 double phiErrorRec(0);
739 gsfTrack =
dynamic_cast<const GsfTrack*
>(&(*track));
740 if (gsfTrack==0)
edm::LogInfo(
"MuonTrackValidator") <<
"Trying to access mode for a non-GsfTrack";
745 getRecoMomentum(*gsfTrack, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec,
746 lambdaRec,lambdaErrorRec, phiRec, phiErrorRec);
751 getRecoMomentum(*track, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec,
752 lambdaRec,lambdaErrorRec, phiRec, phiErrorRec);
755 double thetaRec = track->
theta();
756 double ptError = ptErrorRec;
757 double ptres = ptRec - ptSim;
758 double etares = track->
eta()-momentumTP.Eta();
759 double dxyRec = track->
dxy(bs.position());
760 double dzRec = track->
dz(bs.position());
762 double qoverpPull=(qoverpRec-qoverpSim)/qoverpErrorRec;
763 double thetaPull=(lambdaRec-lambdaSim)/lambdaErrorRec;
764 double phiDiff = phiRec - phiSim;
766 if (phiDiff >0.) phiDiff = phiDiff - 2.*
M_PI;
767 else phiDiff = phiDiff + 2.*
M_PI;
769 double phiPull=phiDiff/phiErrorRec;
770 double dxyPull=(dxyRec-dxySim)/track->
dxyError();
771 double dzPull=(dzRec-dzSim)/track->
dzError();
773 double contrib_Qoverp = ((qoverpRec-qoverpSim)/qoverpErrorRec)*((qoverpRec-qoverpSim)/qoverpErrorRec)/5;
774 double contrib_dxy = ((dxyRec-dxySim)/track->
dxyError())*((dxyRec-dxySim)/track->
dxyError())/5;
775 double contrib_dz = ((dzRec-dzSim)/track->
dzError())*((dzRec-dzSim)/track->
dzError())/5;
776 double contrib_theta = ((lambdaRec-lambdaSim)/lambdaErrorRec)*((lambdaRec-lambdaSim)/lambdaErrorRec)/5;
777 double contrib_phi = (phiDiff/phiErrorRec)*(phiDiff/phiErrorRec)/5;
779 edm::LogVerbatim(
"MuonTrackValidator") <<
"assocChi2=" << tp.begin()->second <<
"\n"
781 <<
"ptREC=" << ptRec <<
"\n"
782 <<
"etaREC=" << track->
eta() <<
"\n"
783 <<
"qoverpREC=" << qoverpRec <<
"\n"
784 <<
"dxyREC=" << dxyRec <<
"\n"
785 <<
"dzREC=" << dzRec <<
"\n"
786 <<
"thetaREC=" << track->
theta() <<
"\n"
787 <<
"phiREC=" << phiRec <<
"\n"
789 <<
"qoverpError()=" << qoverpErrorRec <<
"\n"
790 <<
"dxyError()=" << track->
dxyError() <<
"\n"
791 <<
"dzError()=" << track->
dzError() <<
"\n"
792 <<
"thetaError()=" << lambdaErrorRec <<
"\n"
793 <<
"phiError()=" << phiErrorRec <<
"\n"
795 <<
"ptSIM=" << ptSim <<
"\n"
796 <<
"etaSIM=" << momentumTP.Eta() <<
"\n"
797 <<
"qoverpSIM=" << qoverpSim <<
"\n"
798 <<
"dxySIM=" << dxySim <<
"\n"
799 <<
"dzSIM=" << dzSim <<
"\n"
800 <<
"thetaSIM=" <<
M_PI/2-lambdaSim <<
"\n"
801 <<
"phiSIM=" << phiSim <<
"\n"
803 <<
"contrib_Qoverp=" << contrib_Qoverp <<
"\n"
804 <<
"contrib_dxy=" << contrib_dxy <<
"\n"
805 <<
"contrib_dz=" << contrib_dz <<
"\n"
806 <<
"contrib_theta=" << contrib_theta <<
"\n"
807 <<
"contrib_phi=" << contrib_phi <<
"\n"
809 <<
"chi2PULL="<<contrib_Qoverp+contrib_dxy+contrib_dz+contrib_theta+contrib_phi<<
"\n";
811 h_pullQoverp[
w]->Fill(qoverpPull);
812 h_pullTheta[
w]->Fill(thetaPull);
813 h_pullPhi[
w]->Fill(phiPull);
814 h_pullDxy[
w]->Fill(dxyPull);
815 h_pullDz[
w]->Fill(dzPull);
817 h_pt[
w]->Fill(ptres/ptError);
818 h_eta[
w]->Fill(etares);
819 etares_vs_eta[
w]->Fill(getEta(track->
eta()),etares);
831 dxyres_vs_eta[
w]->Fill(getEta(track->
eta()),dxyRec-dxySim);
832 ptres_vs_eta[
w]->Fill(getEta(track->
eta()),(ptRec-ptSim)/ptRec);
833 dzres_vs_eta[
w]->Fill(getEta(track->
eta()),dzRec-dzSim);
834 phires_vs_eta[
w]->Fill(getEta(track->
eta()),phiDiff);
835 cotThetares_vs_eta[
w]->Fill(getEta(track->
eta()),
cos(thetaRec)/
sin(thetaRec) -
cos(thetaSim)/
sin(thetaSim));
838 dxyres_vs_pt[
w]->Fill(getPt(ptRec),dxyRec-dxySim);
839 ptres_vs_pt[
w]->Fill(getPt(ptRec),(ptRec-ptSim)/ptRec);
840 dzres_vs_pt[
w]->Fill(getPt(ptRec),dzRec-dzSim);
841 phires_vs_pt[
w]->Fill(getPt(ptRec),phiDiff);
842 cotThetares_vs_pt[
w]->Fill(getPt(ptRec),
cos(thetaRec)/
sin(thetaRec) -
cos(thetaSim)/
sin(thetaSim));
845 dxypull_vs_eta[
w]->Fill(getEta(track->
eta()),dxyPull);
846 ptpull_vs_eta[
w]->Fill(getEta(track->
eta()),ptres/ptError);
847 dzpull_vs_eta[
w]->Fill(getEta(track->
eta()),dzPull);
848 phipull_vs_eta[
w]->Fill(getEta(track->
eta()),phiPull);
849 thetapull_vs_eta[
w]->Fill(getEta(track->
eta()),thetaPull);
854 ptmean_vs_eta_phi[
w]->Fill(phiRec,getEta(track->
eta()),ptRec);
855 phimean_vs_eta_phi[
w]->Fill(phiRec,getEta(track->
eta()),phiRec);
856 ptres_vs_phi[
w]->Fill(phiRec,(ptRec-ptSim)/ptRec);
857 phires_vs_phi[
w]->Fill(phiRec,phiDiff);
858 ptpull_vs_phi[
w]->Fill(phiRec,ptres/ptError);
859 phipull_vs_phi[
w]->Fill(phiRec,phiPull);
860 thetapull_vs_phi[
w]->Fill(phiRec,thetaPull);
863 if (usetracker && usemuon) {
864 nSimHits= tpr.
get()->numberOfHits();
866 else if (!usetracker && usemuon) {
867 nSimHits= tpr.
get()->numberOfHits() - tpr.
get()->numberOfTrackerHits();
869 else if (usetracker && !usemuon) {
870 nSimHits=tpr.
get()->numberOfTrackerHits();
877 if (at!=0) h_tracks[
w]->Fill(at);
878 h_fakes[
w]->Fill(rT-at);
880 <<
"Total Associated (simToReco): " << ats <<
"\n"
881 <<
"Total Reconstructed: " << rT <<
"\n"
882 <<
"Total Associated (recoToSim): " << at <<
"\n"
883 <<
"Total Fakes: " << rT-at <<
"\n";
884 nrec_vs_nsim[
w]->Fill(rT,st);
893 for (
unsigned int ww=0;ww<associators.size();ww++){
894 for (
unsigned int www=0;www<
label.size();www++){
897 doProfileX(chi2_vs_eta[w],h_chi2meanh[w]);
898 doProfileX(nhits_vs_eta[w],h_hits_eta[w]);
899 doProfileX(nDThits_vs_eta[w],h_DThits_eta[w]);
900 doProfileX(nCSChits_vs_eta[w],h_CSChits_eta[w]);
901 doProfileX(nRPChits_vs_eta[w],h_RPChits_eta[w]);
903 doProfileX(nlosthits_vs_eta[w],h_losthits_eta[w]);
905 doProfileX(chi2_vs_nhits[w],h_chi2meanhitsh[w]);
906 doProfileX(chi2_vs_phi[w],h_chi2mean_vs_phi[w]);
907 doProfileX(nhits_vs_phi[w],h_hits_phi[w]);
909 fillPlotFromVector(h_recoeta[w],totRECeta[w]);
910 fillPlotFromVector(h_simuleta[w],totSIMeta[w]);
911 fillPlotFromVector(h_assoceta[w],totASSeta[w]);
912 fillPlotFromVector(h_assoc2eta[w],totASS2eta[w]);
914 fillPlotFromVector(h_recopT[w],totRECpT[w]);
915 fillPlotFromVector(h_simulpT[w],totSIMpT[w]);
916 fillPlotFromVector(h_assocpT[w],totASSpT[w]);
917 fillPlotFromVector(h_assoc2pT[w],totASS2pT[w]);
919 fillPlotFromVector(h_recohit[w],totREC_hit[w]);
920 fillPlotFromVector(h_simulhit[w],totSIM_hit[w]);
921 fillPlotFromVector(h_assochit[w],totASS_hit[w]);
922 fillPlotFromVector(h_assoc2hit[w],totASS2_hit[w]);
924 fillPlotFromVector(h_recophi[w],totREC_phi[w]);
925 fillPlotFromVector(h_simulphi[w],totSIM_phi[w]);
926 fillPlotFromVector(h_assocphi[w],totASS_phi[w]);
927 fillPlotFromVector(h_assoc2phi[w],totASS2_phi[w]);
929 fillPlotFromVector(h_recodxy[w],totREC_dxy[w]);
930 fillPlotFromVector(h_simuldxy[w],totSIM_dxy[w]);
931 fillPlotFromVector(h_assocdxy[w],totASS_dxy[w]);
932 fillPlotFromVector(h_assoc2dxy[w],totASS2_dxy[w]);
934 fillPlotFromVector(h_recodz[w],totREC_dz[w]);
935 fillPlotFromVector(h_simuldz[w],totSIM_dz[w]);
936 fillPlotFromVector(h_assocdz[w],totASS_dz[w]);
937 fillPlotFromVector(h_assoc2dz[w],totASS2_dz[w]);
939 fillPlotFromVector(h_simulvertpos[w],totSIM_vertpos[w]);
940 fillPlotFromVector(h_assocvertpos[w],totASS_vertpos[w]);
942 fillPlotFromVector(h_simulzpos[w],totSIM_zpos[w]);
943 fillPlotFromVector(h_assoczpos[w],totASS_zpos[w]);
946 fillPlotFromVector(h_assoceta_Quality05[w] ,totASSeta_Quality05[w]);
947 fillPlotFromVector(h_assoceta_Quality075[w],totASSeta_Quality075[w]);
948 fillPlotFromVector(h_assocpT_Quality05[w] ,totASSpT_Quality05[w]);
949 fillPlotFromVector(h_assocpT_Quality075[w],totASSpT_Quality075[w]);
950 fillPlotFromVector(h_assocphi_Quality05[w] ,totASS_phi_Quality05[w]);
951 fillPlotFromVector(h_assocphi_Quality075[w],totASS_phi_Quality075[w]);
962 double&
pt,
double& ptError,
double& qoverp,
double& qoverpError,
963 double& lambda,
double& lambdaError,
double& phi,
double& phiError )
const {
975 double&
pt,
double& ptError,
double& qoverp,
double& qoverpError,
976 double& lambda,
double& lambdaError,
double& phi,
double& phiError )
const {
double qoverp() const
q / p
double phiModeError() const
error on phi from mode
std::vector< TrackingParticle > TrackingParticleCollection
double lambdaMode() const
Lambda angle from mode.
Vector momentum() const
spatial momentum vector
const_iterator end() const
last iterator over the map (read only)
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
MonitorElement * bookProfile(Args &&...args)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
double theta() const
polar angle
double dxyError() const
error on dxy
Sin< T >::type sin(const T &t)
const_iterator find(const key_type &k) const
find element with specified reference key
double phi() const
azimuthal angle of momentum vector
unsigned short numberOfLostHits() const
number of cases where track crossed a layer without getting a hit.
key_type key() const
Accessor for product key.
const Vector & momentum() const
track momentum vector
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) ...
int numberOfValidMuonCSCHits() const
double qoverpMode() const
q/p from mode
int numberOfValidMuonRPCHits() const
double ptModeError() const
error on Pt (set to 1000 TeV if charge==0 for safety) from mode
math::XYZPointD Point
point in the space
double eta() const
pseudorapidity of momentum vector
double chi2() const
chi-squared of the fit
MonitorElement * bookProfile2D(Args &&...args)
void post_insert()
post insert action
double ndof() const
number of degrees of freedom of the fit
double pt() const
track transverse momentum
Cos< T >::type cos(const T &t)
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
double phiError() const
error on phi
MonitorElement * book1D(Args &&...args)
Abs< T >::type abs(const T &t)
double lambda() const
Lambda angle.
TH1F * getTH1F(std::string name, std::string process, std::string rootfolder, DQMStore *dbe_, bool verb, bool clone)
void analyze(const edm::Event &, const edm::EventSetup &)
Method called before the event loop.
unsigned short numberOfValidHits() const
number of valid hits found
T const * get() const
Returns C++ pointer to the item.
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
int nint(float a)
Return the nearest integer - analogous to the FORTRAN intrinsic NINT.
double qoverpError() const
error on signed transverse curvature
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...
double dzError() const
error on dz
void setCurrentFolder(const std::string &fullpath)
T const * product() const
MonitorElement * book2D(Args &&...args)
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
double qoverpModeError() const
error on signed transverse curvature from mode
Point vertex() const
Parent vertex position.
ParameterVector parameters() const
Track parameters with one-to-one correspondence to the covariance matrix.
std::vector< std::vector< double > > tmp
double lambdaError() const
error on lambda
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &)
unsigned short found() const
Number of valid hits on track.
int numberOfValidMuonDTHits() const
TH2F * getTH2F(std::string name, std::string process, std::string rootfolder, DQMStore *dbe_, bool verb, bool clone)
double phiMode() const
azimuthal angle of momentum vector from mode
Monte Carlo truth information used for tracking validation.
int charge() const
track electric charge
double lambdaModeError() const
error on lambda from mode
math::XYZVectorD Vector
point in the space
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
double ptMode() const
track transverse momentum from mode
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void endRun(edm::Run const &, edm::EventSetup const &)
Method called at the end of the event loop.