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) );
143 if(useGEMs_) nGEMhits_vs_eta.push_back( ibooker.
book2D(
"nGEMhits_vs_eta",
"# GEM hits vs eta",
nint,
min,
max,nintHit,
minHit,maxHit) );
148 if(useGEMs_) h_GEMhits_eta.push_back( ibooker.
bookProfile(
"GEMhits_eta",
"mean # GEM hits vs eta",
nint,
min,
max,nintHit,
minHit,maxHit) );
150 nhits_vs_phi.push_back( ibooker.
book2D(
"nhits_vs_phi",
"#hits vs #phi",nintPhi,minPhi,maxPhi,nintHit,
minHit,maxHit) );
151 h_hits_phi.push_back( ibooker.
bookProfile(
"hits_phi",
"mean #hits vs #phi",nintPhi,minPhi,maxPhi, nintHit,
minHit,maxHit) );
153 nlosthits_vs_eta.push_back( ibooker.
book2D(
"nlosthits_vs_eta",
"nlosthits vs eta",
nint,
min,
max,nintHit,
minHit,maxHit) );
156 ptres_vs_eta.push_back(ibooker.
book2D(
"ptres_vs_eta",
"ptres_vs_eta",
nint,
min,
max, ptRes_nbin, ptRes_rangeMin, ptRes_rangeMax));
157 ptres_vs_phi.push_back( ibooker.
book2D(
"ptres_vs_phi",
"p_{t} res vs #phi",nintPhi,minPhi,maxPhi, ptRes_nbin, ptRes_rangeMin, ptRes_rangeMax));
158 ptres_vs_pt.push_back(ibooker.
book2D(
"ptres_vs_pt",
"ptres_vs_pt",nintpT,minpT,maxpT, ptRes_nbin, ptRes_rangeMin, ptRes_rangeMax));
160 cotThetares_vs_eta.push_back(ibooker.
book2D(
"cotThetares_vs_eta",
"cotThetares_vs_eta",
nint,
min,
max,cotThetaRes_nbin, cotThetaRes_rangeMin, cotThetaRes_rangeMax));
161 cotThetares_vs_pt.push_back(ibooker.
book2D(
"cotThetares_vs_pt",
"cotThetares_vs_pt",nintpT,minpT,maxpT, cotThetaRes_nbin, cotThetaRes_rangeMin, cotThetaRes_rangeMax));
163 phires_vs_eta.push_back(ibooker.
book2D(
"phires_vs_eta",
"phires_vs_eta",
nint,
min,
max, phiRes_nbin, phiRes_rangeMin, phiRes_rangeMax));
164 phires_vs_pt.push_back(ibooker.
book2D(
"phires_vs_pt",
"phires_vs_pt",nintpT,minpT,maxpT, phiRes_nbin, phiRes_rangeMin, phiRes_rangeMax));
165 phires_vs_phi.push_back(ibooker.
book2D(
"phires_vs_phi",
"#phi res vs #phi",nintPhi,minPhi,maxPhi,phiRes_nbin, phiRes_rangeMin, phiRes_rangeMax));
167 dxyres_vs_eta.push_back(ibooker.
book2D(
"dxyres_vs_eta",
"dxyres_vs_eta",
nint,
min,
max,dxyRes_nbin, dxyRes_rangeMin, dxyRes_rangeMax));
168 dxyres_vs_pt.push_back( ibooker.
book2D(
"dxyres_vs_pt",
"dxyres_vs_pt",nintpT,minpT,maxpT,dxyRes_nbin, dxyRes_rangeMin, dxyRes_rangeMax));
170 dzres_vs_eta.push_back(ibooker.
book2D(
"dzres_vs_eta",
"dzres_vs_eta",
nint,
min,
max,dzRes_nbin, dzRes_rangeMin, dzRes_rangeMax));
171 dzres_vs_pt.push_back(ibooker.
book2D(
"dzres_vs_pt",
"dzres_vs_pt",nintpT,minpT,maxpT,dzRes_nbin, dzRes_rangeMin, dzRes_rangeMax));
173 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));
174 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));
177 dxypull_vs_eta.push_back(ibooker.
book2D(
"dxypull_vs_eta",
"dxypull_vs_eta",
nint,
min,
max,100,-10,10));
178 ptpull_vs_eta.push_back(ibooker.
book2D(
"ptpull_vs_eta",
"ptpull_vs_eta",
nint,
min,
max,100,-10,10));
179 dzpull_vs_eta.push_back(ibooker.
book2D(
"dzpull_vs_eta",
"dzpull_vs_eta",
nint,
min,
max,100,-10,10));
180 phipull_vs_eta.push_back(ibooker.
book2D(
"phipull_vs_eta",
"phipull_vs_eta",
nint,
min,
max,100,-10,10));
181 thetapull_vs_eta.push_back(ibooker.
book2D(
"thetapull_vs_eta",
"thetapull_vs_eta",
nint,
min,
max,100,-10,10));
184 ptpull_vs_phi.push_back(ibooker.
book2D(
"ptpull_vs_phi",
"p_{t} pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10));
185 phipull_vs_phi.push_back(ibooker.
book2D(
"phipull_vs_phi",
"#phi pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10));
186 thetapull_vs_phi.push_back(ibooker.
book2D(
"thetapull_vs_phi",
"#theta pull vs #phi",nintPhi,minPhi,maxPhi,100,-10,10));
188 nrecHit_vs_nsimHit_sim2rec.push_back( ibooker.
book2D(
"nrecHit_vs_nsimHit_sim2rec",
"nrecHit vs nsimHit (Sim2RecAssoc)",nintHit,
minHit,maxHit, nintHit,
minHit,maxHit ));
189 nrecHit_vs_nsimHit_rec2sim.push_back( ibooker.
book2D(
"nrecHit_vs_nsimHit_rec2sim",
"nrecHit vs nsimHit (Rec2simAssoc)",nintHit,
minHit,maxHit, nintHit,
minHit,maxHit ));
192 h_PurityVsQuality.push_back
193 (ibooker.
book2D(
"PurityVsQuality",
"Purity vs Quality (MABH)",20,0.01,1.01,20,0.01,1.01) );
194 h_assoceta_Quality05.push_back
195 (ibooker.
book1D(
"num_assoc(simToReco)_eta_Q05",
"N of associated tracks (simToReco) vs eta (Quality>0.5)",
nint,
min,
max) );
196 h_assoceta_Quality075.push_back
197 (ibooker.
book1D(
"num_assoc(simToReco)_eta_Q075",
"N of associated tracks (simToReco) vs eta (Quality>0.75)",
nint,
min,
max) );
198 h_assocpT_Quality05.push_back
199 (ibooker.
book1D(
"num_assoc(simToReco)_pT_Q05",
"N of associated tracks (simToReco) vs pT (Quality>0.5)",nintpT,minpT,maxpT) );
200 h_assocpT_Quality075.push_back
201 (ibooker.
book1D(
"num_assoc(simToReco)_pT_Q075",
"N of associated tracks (simToReco) vs pT (Quality>0.75)",nintpT,minpT,maxpT) );
202 h_assocphi_Quality05.push_back
203 (ibooker.
book1D(
"num_assoc(simToReco)_phi_Q05",
"N of associated tracks (simToReco) vs phi (Quality>0.5)",nintPhi,minPhi,maxPhi) );
204 h_assocphi_Quality075.push_back
205 (ibooker.
book1D(
"num_assoc(simToReco)_phi_Q075",
"N of associated tracks (simToReco) vs phi (Quality>0.75)",nintPhi,minPhi,maxPhi) );
209 BinLogX(dzres_vs_pt[j]->
getTH2F());
210 BinLogX(dxyres_vs_pt[j]->
getTH2F());
211 BinLogX(phires_vs_pt[j]->
getTH2F());
212 BinLogX(cotThetares_vs_pt[j]->
getTH2F());
213 BinLogX(ptres_vs_pt[j]->
getTH2F());
214 BinLogX(h_recopT[j]->
getTH1F());
215 BinLogX(h_assocpT[j]->
getTH1F());
216 BinLogX(h_assoc2pT[j]->
getTH1F());
217 BinLogX(h_simulpT[j]->
getTH1F());
219 BinLogX(h_assocpT_Quality05[j]->
getTH1F());
220 BinLogX(h_assocpT_Quality075[j]->
getTH1F());
230 using namespace reco;
232 edm::LogInfo(
"MuonTrackValidator") <<
"\n====================================================" <<
"\n"
233 <<
"Analyzing new event" <<
"\n"
234 <<
"====================================================\n" <<
"\n";
237 std::unique_ptr<ParametersDefinerForTP> Cosmic_parametersDefinerTP;
239 if(parametersDefiner==
"LhcParametersDefinerForTP") {
242 else if(parametersDefiner==
"CosmicParametersDefinerForTP") {
247 Cosmic_parametersDefinerTP = _Cosmic_parametersDefinerTP->clone();
251 event.getByToken(_simHitTpMapTag,simHitsTPAssoc);
252 Cosmic_parametersDefinerTP->initEvent(simHitsTPAssoc);
253 cosmictpSelector.initEvent(simHitsTPAssoc);
257 <<
"Unexpected label: parametersDefiner = "<< parametersDefiner.c_str() <<
"\n";
261 event.getByToken(tp_effic_Token,TPCollectionHeff);
265 event.getByToken(tp_fake_Token,TPCollectionHfake);
268 event.getByToken(bsSrc_Token,recoBeamSpotHandle);
271 std::vector<const reco::TrackToTrackingParticleAssociator*> associator;
272 if (UseAssociators) {
274 for (
unsigned int w=0;
w<associators.size();
w++) {
275 event.getByLabel(associators[
w],theAssociator);
276 associator.push_back( theAssociator.
product() );
281 for (
unsigned int ww=0;ww<associators.size();ww++){
282 for (
unsigned int www=0;www<
label.size();www++){
290 unsigned int trackCollectionSize = 0;
292 if(!event.
getByToken(track_Collection_Token[www], trackCollection)&&ignoremissingtkcollection_) {
301 trackCollectionSize = trackCollection->size();
306 <<
label[www].process()<<
":"
307 <<
label[www].label()<<
":"
308 <<
label[www].instance()<<
" with "
309 << associators[ww].c_str() <<
"\n";
311 LogTrace(
"MuonTrackValidator") <<
"Calling associateRecoToSim method" <<
"\n";
312 recSimColl=associator[ww]->associateRecoToSim(trackCollection,
314 LogTrace(
"MuonTrackValidator") <<
"Calling associateSimToReco method" <<
"\n";
315 simRecColl=associator[ww]->associateSimToReco(trackCollection,
320 <<
label[www].process()<<
":"
321 <<
label[www].label()<<
":"
322 <<
label[www].instance()<<
" with "
323 << associatormap.process()<<
":"
324 << associatormap.label()<<
":"
325 << associatormap.instance()<<
"\n";
328 event.getByToken(simToRecoCollection_Token,simtorecoCollectionH);
329 simRecColl= *(simtorecoCollectionH.
product());
332 event.getByToken(recoToSimCollection_Token,recotosimCollectionH);
333 recSimColl= *(recotosimCollectionH.
product());
342 edm::LogVerbatim(
"MuonTrackValidator") <<
"\n# of TrackingParticles: " << tPCeff.size() <<
"\n";
346 bool TP_is_matched =
false;
348 bool Quality05 =
false;
349 bool Quality075 =
false;
361 if(parametersDefiner==
"LhcParametersDefinerForTP")
363 LogTrace(
"MuonTrackValidator") <<
"TrackingParticle "<<
i;
364 if(! tpSelector(*tp))
continue;
369 dxySim = (-vertex.x()*
sin(momentum.phi())+vertex.y()*
cos(momentum.phi()));
370 dzSim = vertex.z() - (vertex.x()*momentum.x()+vertex.y()*momentum.y()) /
371 sqrt(momentum.perp2()) * momentum.z()/
sqrt(momentum.perp2());
374 else if(parametersDefiner==
"CosmicParametersDefinerForTP")
377 if(! cosmictpSelector(tpr,&bs,event,setup))
continue;
378 momentumTP = Cosmic_parametersDefinerTP->momentum(event,setup,tpr);
379 vertexTP = Cosmic_parametersDefinerTP->vertex(event,setup,tpr);
380 dxySim = (-vertexTP.x()*
sin(momentumTP.phi())+vertexTP.y()*
cos(momentumTP.phi()));
381 dzSim = vertexTP.z() - (vertexTP.x()*momentumTP.x()+vertexTP.y()*momentumTP.y()) /
382 sqrt(momentumTP.perp2()) * momentumTP.z()/
sqrt(momentumTP.perp2());
384 edm::LogVerbatim(
"MuonTrackValidator") <<
"--------------------Selected TrackingParticle #"<<tpr.
key();
385 edm::LogVerbatim(
"MuonTrackValidator") <<
"momentumTP: pt = "<<
sqrt(momentumTP.perp2())<<
", pz = "<<momentumTP.z()
386 <<
", \t vertexTP: radius = "<<
sqrt(vertexTP.perp2())<<
", z = "<<vertexTP.z() <<
"\n";
389 h_ptSIM[
w]->Fill(
sqrt(momentumTP.perp2()));
390 h_etaSIM[
w]->Fill(momentumTP.eta());
391 h_vertposSIM[
w]->Fill(
sqrt(vertexTP.perp2()));
393 std::vector<std::pair<RefToBase<Track>,
double> > rt;
394 if(simRecColl.
find(tpr) != simRecColl.
end()){
395 rt = (std::vector<std::pair<RefToBase<Track>,
double> >) simRecColl[tpr];
398 edm::LogVerbatim(
"MuonTrackValidator")<<
"-----------------------------associated Track #"<<assoc_recoTrack.
key();
399 TP_is_matched =
true;
401 quality = rt.begin()->second;
403 <<
" with pt=" <<
sqrt(momentumTP.perp2())
404 <<
" associated with quality:" << quality <<
"\n";
406 if (quality > 0.75) {
410 else if (quality > 0.5) {
417 <<
"TrackingParticle #" << tpr.
key()
418 <<
" with pt,eta,phi: "
419 <<
sqrt(momentumTP.perp2()) <<
" , "
420 << momentumTP.eta() <<
" , "
421 << momentumTP.phi() <<
" , "
422 <<
" NOT associated to any reco::Track" <<
"\n";
425 for (
unsigned int f=0;
f<etaintervals[
w].size()-1;
f++){
426 if (
getEta(momentumTP.eta())>etaintervals[
w][
f]&&
427 getEta(momentumTP.eta())<etaintervals[
w][
f+1]) {
434 totASSeta_Quality075[
w][
f]++;
435 totASSeta_Quality05[
w][
f]++;
437 else if (Quality05) {
438 totASSeta_Quality05[
w][
f]++;
445 for (
unsigned int f=0;
f<phiintervals[
w].size()-1;
f++){
446 if (momentumTP.phi() > phiintervals[
w][
f]&&
447 momentumTP.phi() <phiintervals[
w][
f+1]) {
454 totASS_phi_Quality075[
w][
f]++;
455 totASS_phi_Quality05[
w][
f]++;
457 else if (Quality05) {
458 totASS_phi_Quality05[
w][
f]++;
465 for (
unsigned int f=0;
f<pTintervals[
w].size()-1;
f++){
466 if (getPt(
sqrt(momentumTP.perp2()))>pTintervals[
w][
f]&&
467 getPt(
sqrt(momentumTP.perp2()))<pTintervals[
w][
f+1]) {
474 totASSpT_Quality075[
w][
f]++;
475 totASSpT_Quality05[
w][
f]++;
477 else if (Quality05) {
478 totASSpT_Quality05[
w][
f]++;
485 for (
unsigned int f=0;
f<dxyintervals[
w].size()-1;
f++){
486 if (dxySim>dxyintervals[
w][
f]&&
487 dxySim<dxyintervals[
w][
f+1]) {
495 for (
unsigned int f=0;
f<dzintervals[
w].size()-1;
f++){
496 if (dzSim>dzintervals[
w][
f]&&
497 dzSim<dzintervals[
w][
f+1]) {
505 for (
unsigned int f=0;
f<vertposintervals[
w].size()-1;
f++){
506 if (
sqrt(vertexTP.perp2())>vertposintervals[
w][
f]&&
507 sqrt(vertexTP.perp2())<vertposintervals[
w][
f+1]) {
508 totSIM_vertpos[
w][
f]++;
510 totASS_vertpos[
w][
f]++;
515 for (
unsigned int f=0;
f<zposintervals[
w].size()-1;
f++){
516 if (vertexTP.z()>zposintervals[
w][
f]&&
517 vertexTP.z()<zposintervals[
w][
f+1]) {
526 if (usetracker && usemuon) {
527 nSimHits= tpr.
get()->numberOfHits();
529 else if (!usetracker && usemuon) {
530 nSimHits= tpr.
get()->numberOfHits() - tpr.
get()->numberOfTrackerHits();
532 else if (usetracker && !usemuon) {
533 nSimHits=tpr.
get()->numberOfTrackerHits();
537 edm::LogVerbatim(
"MuonTrackValidator") <<
"\t N simhits = "<< nSimHits<<
"\n";
539 totSIM_hit[
w][
tmp]++;
540 if (TP_is_matched) totASS_hit[
w][
tmp]++;
548 if (st!=0) h_tracksSIM[
w]->Fill(st);
554 <<
label[www].process()<<
":"
555 <<
label[www].label()<<
":"
556 <<
label[www].instance()
557 <<
": " << trackCollectionSize <<
"\n";
561 bool Track_is_matched =
false;
565 std::vector<std::pair<TrackingParticleRef, double> > tp;
569 if (BiDirectional_RecoToSim_association) {
570 edm::LogVerbatim(
"MuonTrackValidator")<<
"----------------------------------------Track #"<< track.
key();
572 if(recSimColl.
find(track) != recSimColl.
end()) {
573 tp = recSimColl[track];
574 if (tp.size() != 0) {
575 tpr = tp.begin()->first;
577 if(simRecColl.
find(tpr) != simRecColl.
end()) {
578 std::vector<std::pair<RefToBase<Track>,
double> > track_checkback = simRecColl[tpr];
580 assoc_track_checkback = track_checkback.begin()->first;
582 if ( assoc_track_checkback.
key() == track.
key() ) {
583 edm::LogVerbatim(
"MuonTrackValidator")<<
"------------------associated TrackingParticle #"<<tpr.
key();
584 Track_is_matched =
true;
586 double Purity = tp.begin()->second;
587 double Quality = track_checkback.begin()->second;
588 edm::LogVerbatim(
"MuonTrackValidator") <<
"reco::Track #" << track.
key() <<
" with pt=" << track->
pt()
589 <<
" associated with quality:" << Purity <<
"\n";
590 if (MABH) h_PurityVsQuality[
w]->Fill(Quality,Purity);
596 if (!Track_is_matched)
598 <<
"reco::Track #" << track.
key() <<
" with pt=" << track->
pt() <<
" NOT associated to any TrackingParticle" <<
"\n";
602 if(recSimColl.
find(track) != recSimColl.
end()){
603 tp = recSimColl[track];
605 Track_is_matched =
true;
606 tpr = tp.begin()->first;
608 edm::LogVerbatim(
"MuonTrackValidator") <<
"reco::Track #" << track.
key() <<
" with pt=" << track->
pt()
609 <<
" associated with quality:" << tp.begin()->second <<
"\n";
612 edm::LogVerbatim(
"MuonTrackValidator") <<
"reco::Track #" << track.
key() <<
" with pt=" << track->
pt()
613 <<
" NOT associated to any TrackingParticle" <<
"\n";
618 for (
unsigned int f=0;
f<etaintervals[
w].size()-1;
f++){
622 if (Track_is_matched) {
628 for (
unsigned int f=0;
f<phiintervals[
w].size()-1;
f++){
629 if (track->
momentum().phi()>phiintervals[
w][
f]&&
630 track->
momentum().phi()<phiintervals[
w][
f+1]) {
632 if (Track_is_matched) {
638 for (
unsigned int f=0;
f<pTintervals[
w].size()-1;
f++){
642 if (Track_is_matched) {
648 for (
unsigned int f=0;
f<dxyintervals[
w].size()-1;
f++){
649 if (track->
dxy(bs.position())>dxyintervals[
w][
f]&&
650 track->
dxy(bs.position())<dxyintervals[
w][
f+1]) {
652 if (Track_is_matched) {
658 for (
unsigned int f=0;
f<dzintervals[
w].size()-1;
f++){
659 if (track->
dz(bs.position())>dzintervals[
w][
f]&&
660 track->
dz(bs.position())<dzintervals[
w][
f+1]) {
662 if (Track_is_matched) {
669 totREC_hit[
w][
tmp]++;
670 if (Track_is_matched) totASS2_hit[
w][
tmp]++;
680 if (parametersDefiner==
"LhcParametersDefinerForTP") {
682 if (! (Track_is_matched && tpSelector(*tpp)) )
continue;
684 momentumTP = Lhc_parametersDefinerTP->
momentum(event,setup,tpr) ;
685 vertexTP = Lhc_parametersDefinerTP->vertex(event,setup,tpr);
688 else if (parametersDefiner==
"CosmicParametersDefinerForTP") {
690 if (! (Track_is_matched && cosmictpSelector(tpr,&bs,event,setup)) )
continue;
692 momentumTP = Cosmic_parametersDefinerTP->momentum(event,setup,tpr) ;
693 vertexTP = Cosmic_parametersDefinerTP->vertex(event,setup,tpr);
697 if (associators[ww]==
"trackAssociatorByChi2"){
699 double assocChi2 = -tp.begin()->second;
700 h_assochi2[www]->Fill(assocChi2);
701 h_assochi2_prob[www]->Fill(TMath::Prob((assocChi2)*5,5));
703 else if (associators[ww]==
"trackAssociatorByHits"){
704 double fraction = tp.begin()->second;
705 h_assocFraction[www]->Fill(fraction);
711 h_nchi2_prob[
w]->Fill(TMath::Prob(track->
chi2(),(int)track->
ndof()));
715 h_charge[
w]->Fill( track->
charge() );
717 double ptSim =
sqrt(momentumTP.perp2());
718 double qoverpSim = tpr->charge()/
sqrt(momentumTP.x()*momentumTP.x()+momentumTP.y()*momentumTP.y()+momentumTP.z()*momentumTP.z());
719 double thetaSim = momentumTP.theta();
720 double lambdaSim =
M_PI/2-momentumTP.theta();
721 double phiSim = momentumTP.phi();
722 double dxySim = (-vertexTP.x()*
sin(momentumTP.phi())+vertexTP.y()*
cos(momentumTP.phi()));
723 double dzSim = vertexTP.z() - (vertexTP.x()*momentumTP.x()+vertexTP.y()*momentumTP.y()) /
724 sqrt(momentumTP.perp2()) * momentumTP.z()/
sqrt(momentumTP.perp2());
730 double qoverpErrorRec(0);
732 double ptErrorRec(0);
734 double lambdaErrorRec(0);
736 double phiErrorRec(0);
741 gsfTrack =
dynamic_cast<const GsfTrack*
>(&(*track));
742 if (gsfTrack==0)
edm::LogInfo(
"MuonTrackValidator") <<
"Trying to access mode for a non-GsfTrack";
747 getRecoMomentum(*gsfTrack, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec,
748 lambdaRec,lambdaErrorRec, phiRec, phiErrorRec);
753 getRecoMomentum(*track, ptRec, ptErrorRec, qoverpRec, qoverpErrorRec,
754 lambdaRec,lambdaErrorRec, phiRec, phiErrorRec);
757 double thetaRec = track->
theta();
758 double ptError = ptErrorRec;
759 double ptres = ptRec - ptSim;
760 double etares = track->
eta()-momentumTP.Eta();
761 double dxyRec = track->
dxy(bs.position());
762 double dzRec = track->
dz(bs.position());
764 double qoverpPull=(qoverpRec-qoverpSim)/qoverpErrorRec;
765 double thetaPull=(lambdaRec-lambdaSim)/lambdaErrorRec;
766 double phiDiff = phiRec - phiSim;
768 if (phiDiff >0.) phiDiff = phiDiff - 2.*
M_PI;
769 else phiDiff = phiDiff + 2.*
M_PI;
771 double phiPull=phiDiff/phiErrorRec;
772 double dxyPull=(dxyRec-dxySim)/track->
dxyError();
773 double dzPull=(dzRec-dzSim)/track->
dzError();
775 double contrib_Qoverp = ((qoverpRec-qoverpSim)/qoverpErrorRec)*((qoverpRec-qoverpSim)/qoverpErrorRec)/5;
776 double contrib_dxy = ((dxyRec-dxySim)/track->
dxyError())*((dxyRec-dxySim)/track->
dxyError())/5;
777 double contrib_dz = ((dzRec-dzSim)/track->
dzError())*((dzRec-dzSim)/track->
dzError())/5;
778 double contrib_theta = ((lambdaRec-lambdaSim)/lambdaErrorRec)*((lambdaRec-lambdaSim)/lambdaErrorRec)/5;
779 double contrib_phi = (phiDiff/phiErrorRec)*(phiDiff/phiErrorRec)/5;
781 edm::LogVerbatim(
"MuonTrackValidator") <<
"assocChi2=" << tp.begin()->second <<
"\n"
783 <<
"ptREC=" << ptRec <<
"\n"
784 <<
"etaREC=" << track->
eta() <<
"\n"
785 <<
"qoverpREC=" << qoverpRec <<
"\n"
786 <<
"dxyREC=" << dxyRec <<
"\n"
787 <<
"dzREC=" << dzRec <<
"\n"
788 <<
"thetaREC=" << track->
theta() <<
"\n"
789 <<
"phiREC=" << phiRec <<
"\n"
791 <<
"qoverpError()=" << qoverpErrorRec <<
"\n"
792 <<
"dxyError()=" << track->
dxyError() <<
"\n"
793 <<
"dzError()=" << track->
dzError() <<
"\n"
794 <<
"thetaError()=" << lambdaErrorRec <<
"\n"
795 <<
"phiError()=" << phiErrorRec <<
"\n"
797 <<
"ptSIM=" << ptSim <<
"\n"
798 <<
"etaSIM=" << momentumTP.Eta() <<
"\n"
799 <<
"qoverpSIM=" << qoverpSim <<
"\n"
800 <<
"dxySIM=" << dxySim <<
"\n"
801 <<
"dzSIM=" << dzSim <<
"\n"
802 <<
"thetaSIM=" <<
M_PI/2-lambdaSim <<
"\n"
803 <<
"phiSIM=" << phiSim <<
"\n"
805 <<
"contrib_Qoverp=" << contrib_Qoverp <<
"\n"
806 <<
"contrib_dxy=" << contrib_dxy <<
"\n"
807 <<
"contrib_dz=" << contrib_dz <<
"\n"
808 <<
"contrib_theta=" << contrib_theta <<
"\n"
809 <<
"contrib_phi=" << contrib_phi <<
"\n"
811 <<
"chi2PULL="<<contrib_Qoverp+contrib_dxy+contrib_dz+contrib_theta+contrib_phi<<
"\n";
813 h_pullQoverp[
w]->Fill(qoverpPull);
814 h_pullTheta[
w]->Fill(thetaPull);
815 h_pullPhi[
w]->Fill(phiPull);
816 h_pullDxy[
w]->Fill(dxyPull);
817 h_pullDz[
w]->Fill(dzPull);
819 h_pt[
w]->Fill(ptres/ptError);
820 h_eta[
w]->Fill(etares);
821 etares_vs_eta[
w]->Fill(
getEta(track->
eta()),etares);
833 dxyres_vs_eta[
w]->Fill(
getEta(track->
eta()),dxyRec-dxySim);
834 ptres_vs_eta[
w]->Fill(
getEta(track->
eta()),(ptRec-ptSim)/ptRec);
835 dzres_vs_eta[
w]->Fill(
getEta(track->
eta()),dzRec-dzSim);
836 phires_vs_eta[
w]->Fill(
getEta(track->
eta()),phiDiff);
837 cotThetares_vs_eta[
w]->Fill(
getEta(track->
eta()),
cos(thetaRec)/
sin(thetaRec) -
cos(thetaSim)/
sin(thetaSim));
840 dxyres_vs_pt[
w]->Fill(getPt(ptRec),dxyRec-dxySim);
841 ptres_vs_pt[
w]->Fill(getPt(ptRec),(ptRec-ptSim)/ptRec);
842 dzres_vs_pt[
w]->Fill(getPt(ptRec),dzRec-dzSim);
843 phires_vs_pt[
w]->Fill(getPt(ptRec),phiDiff);
844 cotThetares_vs_pt[
w]->Fill(getPt(ptRec),
cos(thetaRec)/
sin(thetaRec) -
cos(thetaSim)/
sin(thetaSim));
847 dxypull_vs_eta[
w]->Fill(
getEta(track->
eta()),dxyPull);
848 ptpull_vs_eta[
w]->Fill(
getEta(track->
eta()),ptres/ptError);
849 dzpull_vs_eta[
w]->Fill(
getEta(track->
eta()),dzPull);
850 phipull_vs_eta[
w]->Fill(
getEta(track->
eta()),phiPull);
851 thetapull_vs_eta[
w]->Fill(
getEta(track->
eta()),thetaPull);
856 ptmean_vs_eta_phi[
w]->Fill(phiRec,
getEta(track->
eta()),ptRec);
857 phimean_vs_eta_phi[
w]->Fill(phiRec,
getEta(track->
eta()),phiRec);
858 ptres_vs_phi[
w]->Fill(phiRec,(ptRec-ptSim)/ptRec);
859 phires_vs_phi[
w]->Fill(phiRec,phiDiff);
860 ptpull_vs_phi[
w]->Fill(phiRec,ptres/ptError);
861 phipull_vs_phi[
w]->Fill(phiRec,phiPull);
862 thetapull_vs_phi[
w]->Fill(phiRec,thetaPull);
865 if (usetracker && usemuon) {
866 nSimHits= tpr.
get()->numberOfHits();
868 else if (!usetracker && usemuon) {
869 nSimHits= tpr.
get()->numberOfHits() - tpr.
get()->numberOfTrackerHits();
871 else if (usetracker && !usemuon) {
872 nSimHits=tpr.
get()->numberOfTrackerHits();
879 if (at!=0) h_tracks[
w]->Fill(at);
880 h_fakes[
w]->Fill(rT-at);
882 <<
"Total Associated (simToReco): " << ats <<
"\n"
883 <<
"Total Reconstructed: " << rT <<
"\n"
884 <<
"Total Associated (recoToSim): " << at <<
"\n"
885 <<
"Total Fakes: " << rT-at <<
"\n";
886 nrec_vs_nsim[
w]->Fill(rT,st);
895 for (
unsigned int ww=0;ww<associators.size();ww++){
896 for (
unsigned int www=0;www<
label.size();www++){
899 doProfileX(chi2_vs_eta[w],h_chi2meanh[w]);
900 doProfileX(nhits_vs_eta[w],h_hits_eta[w]);
901 doProfileX(nDThits_vs_eta[w],h_DThits_eta[w]);
902 doProfileX(nCSChits_vs_eta[w],h_CSChits_eta[w]);
903 doProfileX(nRPChits_vs_eta[w],h_RPChits_eta[w]);
904 if (useGEMs_) doProfileX(nGEMhits_vs_eta[w],h_GEMhits_eta[w]);
906 doProfileX(nlosthits_vs_eta[w],h_losthits_eta[w]);
908 doProfileX(chi2_vs_nhits[w],h_chi2meanhitsh[w]);
909 doProfileX(chi2_vs_phi[w],h_chi2mean_vs_phi[w]);
910 doProfileX(nhits_vs_phi[w],h_hits_phi[w]);
912 fillPlotFromVector(h_recoeta[w],totRECeta[w]);
913 fillPlotFromVector(h_simuleta[w],totSIMeta[w]);
914 fillPlotFromVector(h_assoceta[w],totASSeta[w]);
915 fillPlotFromVector(h_assoc2eta[w],totASS2eta[w]);
917 fillPlotFromVector(h_recopT[w],totRECpT[w]);
918 fillPlotFromVector(h_simulpT[w],totSIMpT[w]);
919 fillPlotFromVector(h_assocpT[w],totASSpT[w]);
920 fillPlotFromVector(h_assoc2pT[w],totASS2pT[w]);
922 fillPlotFromVector(h_recohit[w],totREC_hit[w]);
923 fillPlotFromVector(h_simulhit[w],totSIM_hit[w]);
924 fillPlotFromVector(h_assochit[w],totASS_hit[w]);
925 fillPlotFromVector(h_assoc2hit[w],totASS2_hit[w]);
927 fillPlotFromVector(h_recophi[w],totREC_phi[w]);
928 fillPlotFromVector(h_simulphi[w],totSIM_phi[w]);
929 fillPlotFromVector(h_assocphi[w],totASS_phi[w]);
930 fillPlotFromVector(h_assoc2phi[w],totASS2_phi[w]);
932 fillPlotFromVector(h_recodxy[w],totREC_dxy[w]);
933 fillPlotFromVector(h_simuldxy[w],totSIM_dxy[w]);
934 fillPlotFromVector(h_assocdxy[w],totASS_dxy[w]);
935 fillPlotFromVector(h_assoc2dxy[w],totASS2_dxy[w]);
937 fillPlotFromVector(h_recodz[w],totREC_dz[w]);
938 fillPlotFromVector(h_simuldz[w],totSIM_dz[w]);
939 fillPlotFromVector(h_assocdz[w],totASS_dz[w]);
940 fillPlotFromVector(h_assoc2dz[w],totASS2_dz[w]);
942 fillPlotFromVector(h_simulvertpos[w],totSIM_vertpos[w]);
943 fillPlotFromVector(h_assocvertpos[w],totASS_vertpos[w]);
945 fillPlotFromVector(h_simulzpos[w],totSIM_zpos[w]);
946 fillPlotFromVector(h_assoczpos[w],totASS_zpos[w]);
949 fillPlotFromVector(h_assoceta_Quality05[w] ,totASSeta_Quality05[w]);
950 fillPlotFromVector(h_assoceta_Quality075[w],totASSeta_Quality075[w]);
951 fillPlotFromVector(h_assocpT_Quality05[w] ,totASSpT_Quality05[w]);
952 fillPlotFromVector(h_assocpT_Quality075[w],totASSpT_Quality075[w]);
953 fillPlotFromVector(h_assocphi_Quality05[w] ,totASS_phi_Quality05[w]);
954 fillPlotFromVector(h_assocphi_Quality075[w],totASS_phi_Quality075[w]);
965 double&
pt,
double& ptError,
double& qoverp,
double& qoverpError,
966 double& lambda,
double& lambdaError,
double& phi,
double& phiError )
const {
978 double&
pt,
double& ptError,
double& qoverp,
double& qoverpError,
979 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
static float getEta(float eta, int bits=5)
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
int numberOfValidMuonGEMHits() const
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 endRun(edm::Run const &, edm::EventSetup const &)
Method called at the end of the event loop.