28 for (
unsigned int www=0;www<
label.size();www++){
36 dirName+=algo.
label();
39 if (dirName.find(
"Tracks")<dirName.length()){
40 dirName.replace(dirName.find(
"Tracks"),6,
"Trks");
42 if (dirName.find(
"UpdatedAtVtx")<dirName.length()){
43 dirName.replace(dirName.find(
"UpdatedAtVtx"),12,
"UpdAtVtx");
46 if (assoc.find(
"tpToTkmuTrackAssociation")<assoc.length()){
52 h_tracks.push_back( ibooker.
book1D(
"Ntracks",
"Number of reconstructed tracks",100,-0.5,99.5) );
53 h_fakes.push_back( ibooker.
book1D(
"Nfakes",
"Number of fake reco tracks",20,-0.5,19.5) );
54 h_charge.push_back( ibooker.
book1D(
"Ncharge",
"track charge",3,-1.5,1.5) );
57 h_assoceta.push_back( ibooker.
book1D(
"num_assoSimToReco_eta",
"N of associated tracks (simToReco) vs eta",
nintEta,
minEta,
maxEta) );
58 h_assoc2eta.push_back( ibooker.
book1D(
"num_assoRecoToSim_eta",
"N of associated (recoToSim) tracks vs eta",
nintEta,
minEta,
maxEta) );
60 h_misideta.push_back( ibooker.
book1D(
"num_chargemisid_eta",
"N of associated (simToReco) tracks with charge misID vs eta",
nintEta,
minEta,
maxEta) );
63 h_assocpT.push_back( ibooker.
book1D(
"num_assoSimToReco_pT",
"N of associated tracks (simToReco) vs pT",
nintPt,
minPt,
maxPt) );
64 h_assoc2pT.push_back( ibooker.
book1D(
"num_assoRecoToSim_pT",
"N of associated (recoToSim) tracks vs pT",
nintPt,
minPt,
maxPt) );
66 h_misidpT.push_back( ibooker.
book1D(
"num_chargemisid_pT",
"N of associated (simToReco) tracks with charge misID vs pT",
nintPt,
minPt,
maxPt) );
69 h_assocphi.push_back( ibooker.
book1D(
"num_assoSimToReco_phi",
"N of associated tracks (simToReco) vs phi",
nintPhi,
minPhi,
maxPhi) );
70 h_assoc2phi.push_back( ibooker.
book1D(
"num_assoRecoToSim_phi",
"N of associated (recoToSim) tracks vs phi",
nintPhi,
minPhi,
maxPhi) );
72 h_misidphi.push_back( ibooker.
book1D(
"num_chargemisid_phi",
"N of associated (simToReco) tracks with charge misID vs phi",
nintPhi,
minPhi,
maxPhi) );
75 h_assochit.push_back( ibooker.
book1D(
"num_assoSimToReco_hit",
"N of associated tracks (simToReco) vs N SimHits",
nintNHit,
minNHit,
maxNHit) );
76 h_assoc2hit.push_back( ibooker.
book1D(
"num_assoRecoToSim_hit",
"N of associated (recoToSim) tracks vs N Rechits",
nintNHit,
minNHit,
maxNHit) );
78 h_misidhit.push_back( ibooker.
book1D(
"num_chargemisid_hit",
"N of associated (recoToSim) tracks with charge misID vs N RecHits",
nintNHit,
minNHit,
maxNHit) );
81 h_assocdxy.push_back( ibooker.
book1D(
"num_assoSimToReco_dxy",
"N of associated tracks (simToReco) vs dxy",
nintDxy,
minDxy,
maxDxy) );
82 h_assoc2dxy.push_back( ibooker.
book1D(
"num_assoRecoToSim_dxy",
"N of associated (recoToSim) tracks vs dxy",
nintDxy,
minDxy,
maxDxy) );
84 h_misiddxy.push_back( ibooker.
book1D(
"num_chargemisid_dxy",
"N of associated (simToReco) tracks with charge misID vs dxy",
nintDxy,
minDxy,
maxDxy) );
86 h_assocdz.push_back( ibooker.
book1D(
"num_assoSimToReco_dz",
"N of associated tracks (simToReco) vs dz",
nintDz,
minDz,
maxDz) );
87 h_assoc2dz.push_back( ibooker.
book1D(
"num_assoRecoToSim_dz",
"N of associated (recoToSim) tracks vs dz",
nintDz,
minDz,
maxDz) );
89 h_misiddz.push_back( ibooker.
book1D(
"num_chargemisid_dz",
"N of associated (simToReco) tracks with charge misID vs dz",
nintDz,
minDz,
maxDz) );
91 h_assocRpos.push_back( ibooker.
book1D(
"num_assoSimToReco_Rpos",
"N of associated tracks (simToReco) vs Radius",
nintRpos,
minRpos,
maxRpos) );
98 h_assocpu.push_back( ibooker.
book1D(
"num_assoSimToReco_pu",
"N of associated tracks (simToReco) vs pu",
nintPU,
minPU,
maxPU) );
99 h_assoc2pu.push_back( ibooker.
book1D(
"num_assoRecoToSim_pu",
"N of associated (recoToSim) tracks vs pu",
nintPU,
minPU,
maxPU) );
101 h_misidpu.push_back( ibooker.
book1D(
"num_chargemisid_pu",
"N of associated (simToReco) charge misIDed tracks vs pu",
nintPU,
minPU,
maxPU) );
103 h_nchi2.push_back( ibooker.
book1D(
"chi2",
"Track normalized #chi^{2}", 80, 0., 20.) );
104 h_nchi2_prob.push_back( ibooker.
book1D(
"chi2prob",
"Probability of track normalized #chi^{2}",100,0.,1.) );
126 nTRK_LayersWithMeas_vs_eta.push_back(ibooker.
book2D(
"nTRK_LayersWithMeas_vs_eta",
"# TRK Layers with measurement vs eta",
128 nPixel_LayersWithMeas_vs_eta.push_back(ibooker.
book2D(
"nPixel_LayersWithMeas_vs_eta",
"Number of Pixel Layers with measurement vs eta",
132 h_nlosthits.push_back( ibooker.
book1D(
"nlosthits",
"Number of lost hits per track", 6,-0.5,5.5 ) );
133 nlosthits_vs_eta.push_back( ibooker.
book2D(
"nlosthits_vs_eta",
"Number of lost hits per track vs eta",
nintEta,
minEta,
maxEta,6,-0.5,5.5) );
136 ptres_vs_eta.push_back(ibooker.
book2D(
"ptres_vs_eta",
"p_{T} Relative Residual vs #eta",
138 ptres_vs_phi.push_back( ibooker.
book2D(
"ptres_vs_phi",
"p_{T} Relative Residual vs #phi",
140 ptres_vs_pt.push_back(ibooker.
book2D(
"ptres_vs_pt",
"p_{T} Relative Residual vs p_{T}",
142 h_ptpull.push_back( ibooker.
book1D(
"ptpull",
"p_{T} Pull", 100, -10., 10.) );
145 h_qoverppull.push_back( ibooker.
book1D(
"qoverppull",
"q/p Pull", 100, -10., 10.) );
148 etares_vs_eta.push_back( ibooker.
book2D(
"etares_vs_eta",
"#eta Residual vs #eta",
151 thetaCotres_vs_eta.push_back(ibooker.
book2D(
"thetaCotres_vs_eta",
"cot(#theta) Residual vs #eta",
153 thetaCotres_vs_pt.push_back(ibooker.
book2D(
"thetaCotres_vs_pt",
"cot(#theta) Residual vs p_{T}",
155 h_thetapull.push_back( ibooker.
book1D(
"thetapull",
"#theta Pull",100,-10.,10.) );
159 phires_vs_eta.push_back(ibooker.
book2D(
"phires_vs_eta",
"#phi Residual vs #eta",
161 phires_vs_pt.push_back(ibooker.
book2D(
"phires_vs_pt",
"#phi Residual vs p_{T}",
163 phires_vs_phi.push_back(ibooker.
book2D(
"phires_vs_phi",
"#phi Residual vs #phi",
165 h_phipull.push_back( ibooker.
book1D(
"phipull",
"#phi Pull",100,-10.,10.) );
169 dxyres_vs_eta.push_back(ibooker.
book2D(
"dxyres_vs_eta",
"dxy Residual vs #eta",
171 dxyres_vs_pt.push_back( ibooker.
book2D(
"dxyres_vs_pt",
"dxy Residual vs p_{T}",
173 h_dxypull.push_back( ibooker.
book1D(
"dxypull",
"dxy Pull",100,-10.,10.) );
176 dzres_vs_eta.push_back(ibooker.
book2D(
"dzres_vs_eta",
"dz Residual vs #eta",
178 dzres_vs_pt.push_back(ibooker.
book2D(
"dzres_vs_pt",
"dz Residual vs p_{T}",
180 h_dzpull.push_back( ibooker.
book1D(
"dzpull",
"dz Pull",100,-10.,10.) );
186 h_PurityVsQuality.push_back
187 (ibooker.
book2D(
"PurityVsQuality",
"Purity vs Quality (MABH)",20,0.01,1.01,20,0.01,1.01) );
191 h_assochi2.push_back( ibooker.
book1D(
"assocChi2",
"track association #chi^{2}",1000,0.,100.) );
192 h_assochi2_prob.push_back(ibooker.
book1D(
"assocChi2_prob",
"probability of association #chi^{2}",100,0.,1.));
193 }
else if (
associators[ww]==
"trackAssociatorByHits"){
194 h_assocFraction.push_back( ibooker.
book1D(
"assocFraction",
"fraction of shared hits",22,0.,1.1) );
195 h_assocSharedHit.push_back(ibooker.
book1D(
"assocSharedHit",
"number of shared hits",41,-0.5,40.5));
199 BinLogX(h_simulpT.back()->getTH1F());
200 BinLogX(h_assocpT.back()->getTH1F());
201 BinLogX(h_recopT.back()->getTH1F());
202 BinLogX(h_assoc2pT.back()->getTH1F());
203 BinLogX(h_misidpT.back()->getTH1F());
205 BinLogX(phires_vs_pt.back()->getTH2F());
206 BinLogX(thetaCotres_vs_pt.back()->getTH2F());
207 BinLogX(dxyres_vs_pt.back()->getTH2F());
208 BinLogX(dzres_vs_pt.back()->getTH2F());
209 BinLogX(ptres_vs_pt.back()->getTH2F());
218 using namespace reco;
220 edm::LogInfo(
"NewMuonTrackValidator") <<
"\n====================================================" <<
"\n" 221 <<
"Analyzing new event" <<
"\n" 222 <<
"====================================================\n" <<
"\n";
225 int PU_NumInteractions(-1);
228 std::unique_ptr<ParametersDefinerForTP> Cosmic_parametersDefinerTP;
234 event.getByToken(pileupinfo_Token,puinfoH);
235 for (std::vector<PileupSummaryInfo>::const_iterator puInfoIt = puinfoH->begin(); puInfoIt != puinfoH->end(); ++puInfoIt) {
236 if (puInfoIt->getBunchCrossing()==0) {
237 PU_NumInteractions = puInfoIt->getPU_NumInteractions();
248 Cosmic_parametersDefinerTP = _Cosmic_parametersDefinerTP->
clone();
252 event.getByToken(_simHitTpMapTag,simHitsTPAssoc);
253 Cosmic_parametersDefinerTP->initEvent(simHitsTPAssoc);
254 cosmictpSelector.initEvent(simHitsTPAssoc);
262 event.getByToken(tp_effic_Token,TPCollectionHeff);
266 event.getByToken(tp_fake_Token,TPCollectionHfake);
269 event.getByToken(bsSrc_Token,recoBeamSpotHandle);
272 std::vector<const reco::TrackToTrackingParticleAssociator*>
associator;
277 associator.push_back( theAssociator.
product() );
282 for (
unsigned int ww=0;ww<
associators.size();ww++) {
283 for (
unsigned int www=0;www<
label.size();www++) {
288 if(!event.
getByToken(track_Collection_Token[www], trackCollection) && ignoremissingtkcollection_)
continue;
298 <<
label[www].process()<<
":" 299 <<
label[www].label()<<
":" 300 <<
label[www].instance()<<
" with " 303 LogTrace(
"NewMuonTrackValidator") <<
"Calling associateRecoToSim method" <<
"\n";
306 recSimCollL =
std::move(associator[ww]->associateRecoToSim(trackCollection,
308 recSimCollP = &recSimCollL;
310 LogTrace(
"NewMuonTrackValidator") <<
"Calling associateSimToReco method" <<
"\n";
313 simRecCollL =
std::move(associator[ww]->associateSimToReco(trackCollection,
315 simRecCollP = &simRecCollL;
320 <<
label[www].process()<<
":" 321 <<
label[www].label()<<
":" 322 <<
label[www].instance()<<
" with " 328 event.getByToken(simToRecoCollection_Token,simtorecoCollectionH);
330 simRecCollP = simtorecoCollectionH.
product();
333 event.getByToken(recoToSimCollection_Token,recotosimCollectionH);
335 recSimCollP = recotosimCollectionH.
product();
344 edm::LogVerbatim(
"NewMuonTrackValidator") <<
"\n# of TrackingParticles: " << tPCeff.size() <<
"\n";
348 bool TP_is_matched =
false;
349 bool isChargeOK =
true;
364 LogTrace(
"NewMuonTrackValidator") <<
"TrackingParticle "<<
i;
377 if(! cosmictpSelector(tpr,&bs,event,setup))
continue;
378 momentumTP = Cosmic_parametersDefinerTP->momentum(event,setup,tpr);
379 vertexTP = Cosmic_parametersDefinerTP->vertex(event,setup,tpr);
383 edm::LogVerbatim(
"NewMuonTrackValidator") <<
"--------------------Selected TrackingParticle #"<<tpr.
key();
384 edm::LogVerbatim(
"NewMuonTrackValidator") <<
"momentumTP: pt = "<<
sqrt(momentumTP.perp2())<<
", pz = "<<momentumTP.z()
385 <<
", \t vertexTP: radius = "<<
sqrt(vertexTP.perp2())<<
", z = "<<vertexTP.z() <<
"\n";
388 double TPeta = momentumTP.eta();
389 double xTPeta = getEta(TPeta);
390 double TPpt =
sqrt(momentumTP.perp2());
391 double xTPpt = getPt(TPpt);
392 double TPphi = momentumTP.phi();
393 double TPrpos =
sqrt(vertexTP.perp2());
394 double TPzpos = vertexTP.z();
399 nSimHits= tpr.
get()->numberOfHits();
402 nSimHits= tpr.
get()->numberOfHits() - tpr.
get()->numberOfTrackerHits();
405 nSimHits=tpr.
get()->numberOfTrackerHits();
407 edm::LogVerbatim(
"NewMuonTrackValidator") <<
"\t N simhits = "<< nSimHits<<
"\n";
409 int assoc_recoTrack_NValidHits = 0;
410 if(simRecColl.
find(tpr) != simRecColl.
end()) {
411 auto const & rt = simRecColl[tpr];
414 edm::LogVerbatim(
"NewMuonTrackValidator")<<
"-----------------------------associated Track #"<<assoc_recoTrack.
key();
415 TP_is_matched =
true;
417 if (assoc_recoTrack->
charge() != tpr->charge()) isChargeOK =
false;
418 quality = rt.begin()->second;
421 <<
" with pt=" <<
sqrt(momentumTP.perp2())
422 <<
" associated with quality:" << quality <<
"\n";
426 <<
"TrackingParticle #" << tpr.
key()
427 <<
" with pt,eta,phi: " 428 <<
sqrt(momentumTP.perp2()) <<
" , "<< momentumTP.eta() <<
" , "<< momentumTP.phi() <<
" , " 429 <<
" NOT associated to any reco::Track" <<
"\n";
433 fillPlotNoFlow(h_simuleta[w], xTPeta);
435 fillPlotNoFlow(h_assoceta[w], xTPeta);
436 if (!isChargeOK) fillPlotNoFlow(h_misideta[w], xTPeta);
440 fillPlotNoFlow(h_simulphi[w], TPphi);
442 fillPlotNoFlow(h_assocphi[w], TPphi);
443 if (!isChargeOK) fillPlotNoFlow(h_misidphi[w], TPphi);
447 fillPlotNoFlow(h_simulpT[w], xTPpt);
449 fillPlotNoFlow(h_assocpT[w], xTPpt);
450 if (!isChargeOK) fillPlotNoFlow(h_misidpT[w], xTPpt);
454 fillPlotNoFlow(h_simuldxy[w], dxySim);
456 fillPlotNoFlow(h_assocdxy[w], dxySim);
457 if (!isChargeOK) fillPlotNoFlow(h_misiddxy[w], dxySim);
461 fillPlotNoFlow(h_simuldz[w], dzSim);
463 fillPlotNoFlow(h_assocdz[w], dzSim);
464 if (!isChargeOK) fillPlotNoFlow(h_misiddz[w], dzSim);
468 fillPlotNoFlow(h_simulRpos[w], TPrpos);
469 if (TP_is_matched) fillPlotNoFlow(h_assocRpos[w], TPrpos);
472 fillPlotNoFlow(h_simulZpos[w], TPzpos);
473 if (TP_is_matched) fillPlotNoFlow(h_assocZpos[w], TPzpos);
476 fillPlotNoFlow(h_simulhit[w], nSimHits );
478 fillPlotNoFlow(h_assochit[w], nSimHits );
479 nRecHits_vs_nSimHits[
w]->Fill(nSimHits, assoc_recoTrack_NValidHits);
486 fillPlotNoFlow(h_simulpu[w], PU_NumInteractions);
488 fillPlotNoFlow(h_assocpu[w], PU_NumInteractions);
489 if (!isChargeOK) fillPlotNoFlow(h_misidpu[w], PU_NumInteractions);
498 <<
label[www].process()<<
":" 499 <<
label[www].label()<<
":" 500 <<
label[www].instance()
501 <<
": " << trackCollection->size() <<
"\n";
505 bool Track_is_matched =
false;
506 bool isChargeOK =
true;
510 std::vector<std::pair<TrackingParticleRef, double> > tp;
515 edm::LogVerbatim(
"NewMuonTrackValidator")<<
"----------------------------------------Track #"<< track.
key();
517 if(recSimColl.
find(track) != recSimColl.
end()) {
518 tp = recSimColl[
track];
520 tpr = tp.begin()->first;
522 if(simRecColl.
find(tpr) != simRecColl.
end()) {
523 auto const & assoc_track_checkback = simRecColl[tpr].
begin()->first;
525 if ( assoc_track_checkback.key() == track.
key() ) {
526 edm::LogVerbatim(
"NewMuonTrackValidator")<<
"------------------associated TrackingParticle #"<<tpr.
key();
527 Track_is_matched =
true;
529 if (track->
charge() != tpr->charge()) isChargeOK =
false;
530 double Purity = tp.begin()->second;
532 edm::LogVerbatim(
"NewMuonTrackValidator") <<
"reco::Track #" << track.
key() <<
" with pt=" << track->
pt()
533 <<
" associated with purity:" << Purity <<
"\n";
534 if (
MABH) h_PurityVsQuality[
w]->Fill(Quality,Purity);
540 if (!Track_is_matched)
542 <<
"reco::Track #" << track.
key() <<
" with pt=" << track->
pt() <<
" NOT associated to any TrackingParticle" <<
"\n";
546 if(recSimColl.
find(track) != recSimColl.
end()){
547 tp = recSimColl[
track];
549 tpr = tp.begin()->first;
550 Track_is_matched =
true;
552 if (track->
charge() != tpr->charge()) isChargeOK =
false;
553 edm::LogVerbatim(
"NewMuonTrackValidator") <<
"reco::Track #" << track.
key() <<
" with pt=" << track->
pt()
554 <<
" associated with quality:" << tp.begin()->second <<
"\n";
557 edm::LogVerbatim(
"NewMuonTrackValidator") <<
"reco::Track #" << track.
key() <<
" with pt=" << track->
pt()
558 <<
" NOT associated to any TrackingParticle" <<
"\n";
564 edm::LogVerbatim(
"NewMuonTrackValidator") <<
"\t N valid rechits = "<< nRecHits <<
"\n";
566 double etaRec = track->
eta();
567 double xetaRec = getEta(etaRec);
569 double ptRec = track->
pt();
570 double xptRec = getPt(ptRec);
572 double qoverpRec = track->
qoverp();
573 double phiRec = track->
phi();
574 double thetaRec = track->
theta();
579 double ptError = track->
ptError();
582 double dxyError = track->
dxyError();
583 double dzError = track->
dzError();
586 fillPlotNoFlow(h_recoeta[w], xetaRec);
587 if (Track_is_matched) {
588 fillPlotNoFlow(h_assoc2eta[w], xetaRec);
592 fillPlotNoFlow(h_recophi[w], phiRec);
593 if (Track_is_matched) {
594 fillPlotNoFlow(h_assoc2phi[w], phiRec);
598 fillPlotNoFlow(h_recopT[w], xptRec);
599 if (Track_is_matched) {
600 fillPlotNoFlow(h_assoc2pT[w], xptRec);
604 fillPlotNoFlow(h_recodxy[w], dxyRec);
605 if (Track_is_matched) {
606 fillPlotNoFlow(h_assoc2dxy[w], dxyRec);
610 fillPlotNoFlow(h_recodz[w], dzRec);
611 if (Track_is_matched) {
612 fillPlotNoFlow(h_assoc2dz[w], dzRec);
616 fillPlotNoFlow(h_recohit[w], nRecHits);
617 if (Track_is_matched) {
618 fillPlotNoFlow(h_assoc2hit[w], nRecHits);
620 if (!isChargeOK) fillPlotNoFlow(h_misidhit[w], nRecHits);
624 fillPlotNoFlow(h_recopu[w], PU_NumInteractions);
625 if (Track_is_matched) {
626 fillPlotNoFlow(h_assoc2pu[w], PU_NumInteractions);
637 if (! (Track_is_matched &&
tpSelector(*tpp)) )
continue;
639 momentumTP = Lhc_parametersDefinerTP->
momentum(event,setup,tpr) ;
640 vertexTP = Lhc_parametersDefinerTP->
vertex(event,setup,tpr);
645 if (! (Track_is_matched && cosmictpSelector(tpr,&bs,event,setup)) )
continue;
647 momentumTP = Cosmic_parametersDefinerTP->momentum(event,setup,tpr) ;
648 vertexTP = Cosmic_parametersDefinerTP->vertex(event,setup,tpr);
654 double assocChi2 = -tp.begin()->second;
655 h_assochi2[www]->Fill(assocChi2);
656 h_assochi2_prob[www]->Fill(TMath::Prob((assocChi2)*5,5));
658 else if (
associators[ww]==
"trackAssociatorByHits"){
659 double fraction = tp.begin()->second;
660 h_assocFraction[www]->Fill(fraction);
661 h_assocSharedHit[www]->Fill(fraction*nRecHits);
664 h_charge[
w]->Fill(track->
charge());
667 h_nhits[
w]->Fill(nRecHits);
668 nhits_vs_eta[
w]->Fill(xetaRec, nRecHits);
669 nhits_vs_phi[
w]->Fill(phiRec, nRecHits);
690 h_nchi2_prob[
w]->Fill(TMath::Prob(track->
chi2(),(
int)track->
ndof()));
695 double ptSim =
sqrt(momentumTP.perp2());
696 double xptSim = getPt(ptSim);
697 double qoverpSim = tpr->charge() /
698 sqrt(momentumTP.x()*momentumTP.x()+momentumTP.y()*momentumTP.y()+momentumTP.z()*momentumTP.z());
699 double etaSim = momentumTP.eta();
700 double thetaSim = momentumTP.theta();
701 double phiSim = momentumTP.phi();
705 double etares = etaRec - etaSim;
706 double ptRelRes = (ptRec - ptSim) / ptSim;
707 double ptPull = (ptRec - ptSim) / ptError;
708 double qoverpPull = (qoverpRec-qoverpSim) / qoverpError;
709 double thetaPull = (thetaRec - thetaSim) / thetaError;
710 double phiDiff = phiRec - phiSim;
712 if (phiDiff >0.) phiDiff = phiDiff - 2.*
M_PI;
713 else phiDiff = phiDiff + 2.*
M_PI;
715 double phiPull = phiDiff /
phiError;
716 double dxyPull = (dxyRec-dxySim) / dxyError;
717 double dzPull = (dzRec-dzSim) / dzError;
719 h_etaRes[
w]->Fill(etares);
720 etares_vs_eta[
w]->Fill(xetaRec, etares);
722 ptres_vs_eta[
w]->Fill(xetaRec,ptRelRes);
723 ptres_vs_pt[
w]->Fill(xptSim,ptRelRes);
724 ptres_vs_phi[
w]->Fill(phiRec,ptRelRes);
725 h_ptpull[
w]->Fill(ptPull);
726 ptpull_vs_eta[
w]->Fill(xetaRec,ptPull);
727 ptpull_vs_phi[
w]->Fill(phiRec,ptPull);
728 h_qoverppull[
w]->Fill(qoverpPull);
730 thetaCotres_vs_eta[
w]->Fill(xetaRec,
cos(thetaRec)/
sin(thetaRec) -
cos(thetaSim)/
sin(thetaSim));
731 thetaCotres_vs_pt[
w]->Fill(xptSim,
cos(thetaRec)/
sin(thetaRec) -
cos(thetaSim)/
sin(thetaSim));
732 h_thetapull[
w]->Fill(thetaPull);
733 thetapull_vs_eta[
w]->Fill(xetaRec,thetaPull);
734 thetapull_vs_phi[
w]->Fill(phiRec,thetaPull);
736 phires_vs_eta[
w]->Fill(xetaRec,phiDiff);
737 phires_vs_pt[
w]->Fill(xptSim,phiDiff);
738 phires_vs_phi[
w]->Fill(phiRec,phiDiff);
739 h_phipull[
w]->Fill(phiPull);
740 phipull_vs_eta[
w]->Fill(xetaRec,phiPull);
741 phipull_vs_phi[
w]->Fill(phiRec,phiPull);
743 dxyres_vs_eta[
w]->Fill(xetaRec,dxyRec-dxySim);
744 dxyres_vs_pt[
w]->Fill(xptSim,dxyRec-dxySim);
745 h_dxypull[
w]->Fill(dxyPull);
746 dxypull_vs_eta[
w]->Fill(xetaRec,dxyPull);
748 dzres_vs_eta[
w]->Fill(xetaRec,dzRec-dzSim);
749 dzres_vs_pt[
w]->Fill(xptSim,dzRec-dzSim);
750 h_dzpull[
w]->Fill(dzPull);
751 dzpull_vs_eta[
w]->Fill(xetaRec,dzPull);
753 double contrib_Qoverp = qoverpPull*qoverpPull/5;
754 double contrib_dxy = dxyPull*dxyPull/5;
755 double contrib_dz = dzPull*dzPull/5;
756 double contrib_theta = thetaPull*thetaPull/5;
757 double contrib_phi = phiPull*phiPull/5;
758 double assoChi2 = contrib_Qoverp+contrib_dxy+contrib_dz+contrib_theta+contrib_phi;
760 edm::LogVerbatim(
"NewMuonTrackValidator") <<
"normalized Chi2 (track 5-dofs matching) = "<<assoChi2 <<
"\n" 761 <<
"\t contrib_Qoverp = " << contrib_Qoverp <<
"\n" 762 <<
"\t contrib_theta = " << contrib_theta <<
"\n" 763 <<
"\t contrib_phi = " << contrib_phi <<
"\n" 764 <<
"\t contrib_dxy = " << contrib_dxy <<
"\n" 765 <<
"\t contrib_dz = " << contrib_dz <<
"\n";
768 <<
"etaRec = " << etaRec <<
"\n" 769 <<
"qoverpRec = " << qoverpRec <<
"\n" 770 <<
"thetaRec = " << thetaRec <<
"\n" 771 <<
"phiRec = " << phiRec <<
"\n" 772 <<
"dxyRec = " << dxyRec <<
"\n" 773 <<
"dzRec = " << dzRec <<
"\n" 775 <<
"qoverpError = " << qoverpError <<
"\n" 776 <<
"thetaError = " << thetaError <<
"\n" 777 <<
"phiError = " << phiError <<
"\n" 778 <<
"dxyError = " << dxyError <<
"\n" 779 <<
"dzError = " << dzError <<
"\n" 781 <<
"ptSim = " << ptSim <<
"\n" 782 <<
"etaSim = " << etaSim <<
"\n" 783 <<
"qoverpSim = " << qoverpSim <<
"\n" 784 <<
"thetaSim = " << thetaSim <<
"\n" 785 <<
"phiSim = " << phiSim <<
"\n" 786 <<
"dxySim = " << dxySim <<
"\n" 787 <<
"dzSim = " << dzSim <<
"\n";
790 h_tracks[
w]->Fill(at);
791 h_fakes[
w]->Fill(rT-at);
792 edm::LogVerbatim(
"NewMuonTrackValidator") <<
"Total Simulated: " << st <<
"\n" 793 <<
"Total Associated (simToReco): " << ats <<
"\n" 794 <<
"Total Reconstructed: " << rT <<
"\n" 795 <<
"Total Associated (recoToSim): " << at <<
"\n" 796 <<
"Total Fakes: " << rT-at <<
"\n";
double qoverp() const
q / p
std::vector< TrackingParticle > TrackingParticleCollection
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)
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
def replace(string, replacements)
def setup(process, global_tag, zero_tesla=False)
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.
int pixelLayersWithMeasurement() const
void analyze(const edm::Event &, const edm::EventSetup &) override
Method called before the event loop.
int trackerLayersWithMeasurement() const
int numberOfValidMuonCSCHits() const
int numberOfValidMuonRPCHits() const
math::XYZPointD Point
point in the space
BiDirectional_RecoToSim_association
double eta() const
pseudorapidity of momentum vector
double chi2() const
chi-squared of the fit
auto dz(const T_Vertex &vertex, const T_Momentum &momentum, const T_Point &point)
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)
virtual TrackingParticle::Vector momentum(const edm::Event &iEvent, const edm::EventSetup &iSetup, const Charge ch, const Point &vtx, const LorentzVector &lv) const
unsigned short numberOfValidHits() const
number of valid hits found
T const * get() const
Returns C++ pointer to the item.
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Method called at the end of the event loop.
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.
int numberOfLostHits(HitCategory category) const
Point vertex() const
Parent vertex position.
std::unique_ptr< ParametersDefinerForTP > clone() const override
int numberOfValidMuonGEMHits() const
auto dxy(const T_Vertex &vertex, const T_Momentum &momentum, const T_Point &point)
int numberOfValidMuonME0Hits() const
int numberOfValidMuonDTHits() const
Monte Carlo truth information used for tracking validation.
int charge() const
track electric charge
const Point & position() const
position
const_iterator begin() const
first iterator over the map (read only)
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 thetaError() const
error on theta
virtual TrackingParticle::Point vertex(const edm::Event &iEvent, const edm::EventSetup &iSetup, const Charge ch, const Point &vtx, const LorentzVector &lv) const