27 for (
unsigned int ww = 0; ww <
associators.size(); ww++) {
28 for (
unsigned int www = 0; www <
label.size(); www++) {
33 auto setBinLogX = [
this](TH1* th1) {
39 if (!
algo.process().empty())
41 if (!
algo.label().empty())
43 if (!
algo.instance().empty())
52 if (
assoc.find(
"tpToTkmuTrackAssociation") <
assoc.length()) {
61 h_charge.push_back(ibooker.
book1D(
"Ncharge",
"track charge", 3, -1.5, 1.5));
64 h_assoceta.push_back(ibooker.
book1D(
65 "num_assoSimToReco_eta",
"N of associated tracks (simToReco) vs eta",
nintEta,
minEta,
maxEta));
66 h_assoc2eta.push_back(ibooker.
book1D(
67 "num_assoRecoToSim_eta",
"N of associated (recoToSim) tracks vs eta",
nintEta,
minEta,
maxEta));
69 h_misideta.push_back(ibooker.
book1D(
"num_chargemisid_eta",
70 "N of associated (simToReco) tracks with charge misID vs eta",
75 h_recopT.push_back(ibooker.
book1D(
"num_reco_pT",
"N of reco track vs pT",
nintPt,
minPt,
maxPt, setBinLogX));
76 h_assocpT.push_back(ibooker.
book1D(
77 "num_assoSimToReco_pT",
"N of associated tracks (simToReco) vs pT",
nintPt,
minPt,
maxPt, setBinLogX));
78 h_assoc2pT.push_back(ibooker.
book1D(
79 "num_assoRecoToSim_pT",
"N of associated (recoToSim) tracks vs pT",
nintPt,
minPt,
maxPt, setBinLogX));
82 h_misidpT.push_back(ibooker.
book1D(
"num_chargemisid_pT",
83 "N of associated (simToReco) tracks with charge misID vs pT",
90 h_assocphi.push_back(ibooker.
book1D(
91 "num_assoSimToReco_phi",
"N of associated tracks (simToReco) vs phi",
nintPhi,
minPhi,
maxPhi));
92 h_assoc2phi.push_back(ibooker.
book1D(
93 "num_assoRecoToSim_phi",
"N of associated (recoToSim) tracks vs phi",
nintPhi,
minPhi,
maxPhi));
95 h_misidphi.push_back(ibooker.
book1D(
"num_chargemisid_phi",
96 "N of associated (simToReco) tracks with charge misID vs phi",
102 h_assochit.push_back(ibooker.
book1D(
104 h_assoc2hit.push_back(ibooker.
book1D(
106 h_simulhit.push_back(
108 h_misidhit.push_back(ibooker.
book1D(
"num_chargemisid_hit",
109 "N of associated (recoToSim) tracks with charge misID vs N RecHits",
115 h_assocdxy.push_back(ibooker.
book1D(
116 "num_assoSimToReco_dxy",
"N of associated tracks (simToReco) vs dxy",
nintDxy,
minDxy,
maxDxy));
117 h_assoc2dxy.push_back(ibooker.
book1D(
118 "num_assoRecoToSim_dxy",
"N of associated (recoToSim) tracks vs dxy",
nintDxy,
minDxy,
maxDxy));
120 h_misiddxy.push_back(ibooker.
book1D(
"num_chargemisid_dxy",
121 "N of associated (simToReco) tracks with charge misID vs dxy",
127 ibooker.
book1D(
"num_assoSimToReco_dz",
"N of associated tracks (simToReco) vs dz",
nintDz,
minDz,
maxDz));
128 h_assoc2dz.push_back(
129 ibooker.
book1D(
"num_assoRecoToSim_dz",
"N of associated (recoToSim) tracks vs dz",
nintDz,
minDz,
maxDz));
131 h_misiddz.push_back(ibooker.
book1D(
132 "num_chargemisid_dz",
"N of associated (simToReco) tracks with charge misID vs dz",
nintDz,
minDz,
maxDz));
134 h_assocRpos.push_back(ibooker.
book1D(
136 h_simulRpos.push_back(
139 h_assocZpos.push_back(ibooker.
book1D(
145 ibooker.
book1D(
"num_assoSimToReco_pu",
"N of associated tracks (simToReco) vs pu",
nintPU,
minPU,
maxPU));
146 h_assoc2pu.push_back(
147 ibooker.
book1D(
"num_assoRecoToSim_pu",
"N of associated (recoToSim) tracks vs pu",
nintPU,
minPU,
maxPU));
149 h_misidpu.push_back(ibooker.
book1D(
150 "num_chargemisid_pu",
"N of associated (simToReco) charge misIDed tracks vs pu",
nintPU,
minPU,
maxPU));
152 h_nchi2.push_back(ibooker.
book1D(
"chi2",
"Track normalized #chi^{2}", 80, 0., 20.));
153 h_nchi2_prob.push_back(ibooker.
book1D(
"chi2prob",
"Probability of track normalized #chi^{2}", 100, 0., 1.));
155 chi2_vs_nhits.push_back(
161 nhits_vs_eta.push_back(
163 nhits_vs_phi.push_back(
167 nDThits_vs_eta.push_back(ibooker.
book2D(
169 nCSChits_vs_eta.push_back(ibooker.
book2D(
171 nRPChits_vs_eta.push_back(ibooker.
book2D(
174 nGEMhits_vs_eta.push_back(ibooker.
book2D(
177 nME0hits_vs_eta.push_back(ibooker.
book2D(
182 nTRK_LayersWithMeas_vs_eta.push_back(ibooker.
book2D(
"nTRK_LayersWithMeas_vs_eta",
183 "# TRK Layers with measurement vs eta",
190 nPixel_LayersWithMeas_vs_eta.push_back(ibooker.
book2D(
"nPixel_LayersWithMeas_vs_eta",
191 "Number of Pixel Layers with measurement vs eta",
198 h_nmisslayers_inner.push_back(ibooker.
book1D(
200 h_nmisslayers_outer.push_back(ibooker.
book1D(
202 h_nlosthits.push_back(ibooker.
book1D(
"nlosthits",
"Number of lost hits per track", 6, -0.5, 5.5));
203 nlosthits_vs_eta.push_back(ibooker.
book2D(
204 "nlosthits_vs_eta",
"Number of lost hits per track vs eta",
nintEta,
minEta,
maxEta, 6, -0.5, 5.5));
207 ptres_vs_eta.push_back(ibooker.
book2D(
"ptres_vs_eta",
208 "p_{T} Relative Residual vs #eta",
215 ptres_vs_phi.push_back(ibooker.
book2D(
"ptres_vs_phi",
216 "p_{T} Relative Residual vs #phi",
223 ptres_vs_pt.push_back(ibooker.
book2D(
"ptres_vs_pt",
224 "p_{T} Relative Residual vs p_{T}",
232 h_ptpull.push_back(ibooker.
book1D(
"ptpull",
"p_{T} Pull", 100, -10., 10.));
233 ptpull_vs_eta.push_back(
235 ptpull_vs_phi.push_back(
237 h_qoverppull.push_back(ibooker.
book1D(
"qoverppull",
"q/p Pull", 100, -10., 10.));
240 etares_vs_eta.push_back(ibooker.
book2D(
"etares_vs_eta",
241 "#eta Residual vs #eta",
249 thetaCotres_vs_eta.push_back(ibooker.
book2D(
"thetaCotres_vs_eta",
250 "cot(#theta) Residual vs #eta",
257 thetaCotres_vs_pt.push_back(ibooker.
book2D(
"thetaCotres_vs_pt",
258 "cot(#theta) Residual vs p_{T}",
266 h_thetapull.push_back(ibooker.
book1D(
"thetapull",
"#theta Pull", 100, -10., 10.));
267 thetapull_vs_eta.push_back(
269 thetapull_vs_phi.push_back(
272 phires_vs_eta.push_back(ibooker.
book2D(
"phires_vs_eta",
273 "#phi Residual vs #eta",
280 phires_vs_pt.push_back(ibooker.
book2D(
"phires_vs_pt",
281 "#phi Residual vs p_{T}",
289 phires_vs_phi.push_back(ibooker.
book2D(
"phires_vs_phi",
290 "#phi Residual vs #phi",
297 h_phipull.push_back(ibooker.
book1D(
"phipull",
"#phi Pull", 100, -10., 10.));
298 phipull_vs_eta.push_back(
300 phipull_vs_phi.push_back(
303 dxyres_vs_eta.push_back(ibooker.
book2D(
"dxyres_vs_eta",
304 "dxy Residual vs #eta",
311 dxyres_vs_pt.push_back(ibooker.
book2D(
"dxyres_vs_pt",
312 "dxy Residual vs p_{T}",
320 h_dxypull.push_back(ibooker.
book1D(
"dxypull",
"dxy Pull", 100, -10., 10.));
321 dxypull_vs_eta.push_back(
324 dzres_vs_eta.push_back(ibooker.
book2D(
326 dzres_vs_pt.push_back(ibooker.
book2D(
"dzres_vs_pt",
327 "dz Residual vs p_{T}",
335 h_dzpull.push_back(ibooker.
book1D(
"dzpull",
"dz Pull", 100, -10., 10.));
336 dzpull_vs_eta.push_back(
339 nRecHits_vs_nSimHits.push_back(ibooker.
book2D(
343 h_PurityVsQuality.push_back(
344 ibooker.
book2D(
"PurityVsQuality",
"Purity vs Quality (MABH)", 20, 0.01, 1.01, 20, 0.01, 1.01));
348 h_assochi2.push_back(ibooker.
book1D(
"assocChi2",
"track association #chi^{2}", 1000, 0., 100.));
349 h_assochi2_prob.push_back(ibooker.
book1D(
"assocChi2_prob",
"probability of association #chi^{2}", 100, 0., 1.));
350 }
else if (
associators[ww] ==
"trackAssociatorByHits") {
351 h_assocFraction.push_back(ibooker.
book1D(
"assocFraction",
"fraction of shared hits", 22, 0., 1.1));
352 h_assocSharedHit.push_back(ibooker.
book1D(
"assocSharedHit",
"number of shared hits", 41, -0.5, 40.5));
360 using namespace reco;
362 edm::LogInfo(
"MuonTrackValidator") <<
"\n===================================================="
364 <<
"Analyzing new event"
366 <<
"====================================================\n"
370 int PU_NumInteractions(-1);
373 std::unique_ptr<ParametersDefinerForTP> Cosmic_parametersDefinerTP;
379 event.getByToken(pileupinfo_Token, puinfoH);
380 for (std::vector<PileupSummaryInfo>::const_iterator puInfoIt = puinfoH->begin(); puInfoIt != puinfoH->end();
382 if (puInfoIt->getBunchCrossing() == 0) {
383 PU_NumInteractions = puInfoIt->getPU_NumInteractions();
393 Cosmic_parametersDefinerTP = _Cosmic_parametersDefinerTP->
clone();
397 event.getByToken(_simHitTpMapTag, simHitsTPAssoc);
398 Cosmic_parametersDefinerTP->initEvent(simHitsTPAssoc);
399 cosmictpSelector.initEvent(simHitsTPAssoc);
406 event.getByToken(tp_effic_Token, TPCollectionHeff);
410 event.getByToken(tp_fake_Token, TPCollectionHfake);
413 event.getByToken(bsSrc_Token, recoBeamSpotHandle);
416 std::vector<const reco::TrackToTrackingParticleAssociator*>
associator;
426 for (
unsigned int ww = 0; ww <
associators.size(); ww++) {
427 for (
unsigned int www = 0; www <
label.size(); www++) {
432 unsigned int trackCollectionSize = 0;
438 if (!
event.getByToken(track_Collection_Token[www],
trackCollection) && ignoremissingtkcollection_) {
449 <<
"Analyzing " <<
label[www].process() <<
":" <<
label[www].label() <<
":" <<
label[www].instance()
452 LogTrace(
"MuonTrackValidator") <<
"Calling associateRecoToSim method"
455 LogTrace(
"MuonTrackValidator") <<
"Calling associateSimToReco method"
460 <<
"Analyzing " <<
label[www].process() <<
":" <<
label[www].label() <<
":" <<
label[www].instance()
465 event.getByToken(simToRecoCollection_Token, simtorecoCollectionH);
466 simRecColl = *simtorecoCollectionH.
product();
469 event.getByToken(recoToSimCollection_Token, recotosimCollectionH);
470 recSimColl = *recotosimCollectionH.
product();
477 edm::LogVerbatim(
"MuonTrackValidator") <<
"\n# of TrackingParticles: " << tPCeff.size() <<
"\n";
481 bool TP_is_matched =
false;
482 bool isChargeOK =
true;
496 LogTrace(
"MuonTrackValidator") <<
"TrackingParticle " <<
i;
499 momentumTP =
tp->momentum();
500 vertexTP =
tp->vertex();
511 momentumTP = Cosmic_parametersDefinerTP->momentum(
event,
setup, tpr);
512 vertexTP = Cosmic_parametersDefinerTP->vertex(
event,
setup, tpr);
516 edm::LogVerbatim(
"MuonTrackValidator") <<
"--------------------Selected TrackingParticle #" << tpr.
key();
518 <<
"momentumTP: pt = " <<
sqrt(momentumTP.perp2()) <<
", pz = " << momentumTP.z()
519 <<
", \t vertexTP: radius = " <<
sqrt(vertexTP.perp2()) <<
", z = " << vertexTP.z() <<
"\n";
522 double TPeta = momentumTP.eta();
523 double xTPeta = getEta(TPeta);
524 double TPpt =
sqrt(momentumTP.perp2());
525 double xTPpt = getPt(TPpt);
526 double TPphi = momentumTP.phi();
527 double TPrpos =
sqrt(vertexTP.perp2());
528 double TPzpos = vertexTP.z();
533 nSimHits = tpr.
get()->numberOfHits();
535 nSimHits = tpr.
get()->numberOfHits() - tpr.
get()->numberOfTrackerHits();
537 nSimHits = tpr.
get()->numberOfTrackerHits();
539 edm::LogVerbatim(
"MuonTrackValidator") <<
"\t N simhits = " << nSimHits <<
"\n";
541 int assoc_recoTrack_NValidHits = 0;
542 if (simRecColl.
find(tpr) != simRecColl.
end()) {
543 auto const&
rt = simRecColl[tpr];
547 <<
"-----------------------------associated Track #" << assoc_recoTrack.
key();
548 TP_is_matched =
true;
550 if (assoc_recoTrack->
charge() != tpr->charge())
555 <<
"TrackingParticle #" << tpr.
key() <<
" with pt=" <<
sqrt(momentumTP.perp2())
556 <<
" associated with quality:" <<
quality <<
"\n";
560 <<
"TrackingParticle #" << tpr.
key() <<
" with pt,eta,phi: " <<
sqrt(momentumTP.perp2()) <<
" , "
561 << momentumTP.eta() <<
" , " << momentumTP.phi() <<
" , "
562 <<
" NOT associated to any reco::Track"
568 fillPlotNoFlow(h_simuleta[
w], xTPeta);
570 fillPlotNoFlow(h_assoceta[
w], xTPeta);
572 fillPlotNoFlow(h_misideta[
w], xTPeta);
576 fillPlotNoFlow(h_simulphi[
w], TPphi);
578 fillPlotNoFlow(h_assocphi[
w], TPphi);
580 fillPlotNoFlow(h_misidphi[
w], TPphi);
584 fillPlotNoFlow(h_simulpT[
w], xTPpt);
586 fillPlotNoFlow(h_assocpT[
w], xTPpt);
588 fillPlotNoFlow(h_misidpT[
w], xTPpt);
592 fillPlotNoFlow(h_simuldxy[
w], dxySim);
594 fillPlotNoFlow(h_assocdxy[
w], dxySim);
596 fillPlotNoFlow(h_misiddxy[
w], dxySim);
600 fillPlotNoFlow(h_simuldz[
w], dzSim);
602 fillPlotNoFlow(h_assocdz[
w], dzSim);
604 fillPlotNoFlow(h_misiddz[
w], dzSim);
608 fillPlotNoFlow(h_simulRpos[
w], TPrpos);
610 fillPlotNoFlow(h_assocRpos[
w], TPrpos);
613 fillPlotNoFlow(h_simulZpos[
w], TPzpos);
615 fillPlotNoFlow(h_assocZpos[
w], TPzpos);
618 fillPlotNoFlow(h_simulhit[
w], nSimHits);
620 fillPlotNoFlow(h_assochit[
w], nSimHits);
621 nRecHits_vs_nSimHits[
w]->Fill(nSimHits, assoc_recoTrack_NValidHits);
628 fillPlotNoFlow(h_simulpu[
w], PU_NumInteractions);
630 fillPlotNoFlow(h_assocpu[
w], PU_NumInteractions);
632 fillPlotNoFlow(h_misidpu[
w], PU_NumInteractions);
641 <<
"\n# of reco::Tracks with " <<
label[www].process() <<
":" <<
label[www].label() <<
":"
642 <<
label[www].instance() <<
": " << trackCollectionSize <<
"\n";
647 bool Track_is_matched =
false;
648 bool isChargeOK =
true;
652 std::vector<std::pair<TrackingParticleRef, double> >
tp;
657 edm::LogVerbatim(
"MuonTrackValidator") <<
"----------------------------------------Track #" <<
track.key();
662 tpr =
tp.begin()->first;
664 if (simRecColl.
find(tpr) != simRecColl.
end()) {
665 auto const& assoc_track_checkback = simRecColl[tpr].
begin()->first;
667 if (assoc_track_checkback.key() ==
track.key()) {
669 <<
"------------------associated TrackingParticle #" << tpr.
key();
670 Track_is_matched =
true;
672 if (
track->charge() != tpr->charge())
674 double Purity =
tp.begin()->second;
677 <<
" associated with purity:" << Purity <<
"\n";
679 h_PurityVsQuality[
w]->Fill(
Quality, Purity);
685 if (!Track_is_matched)
687 <<
" NOT associated to any TrackingParticle"
695 tpr =
tp.begin()->first;
696 Track_is_matched =
true;
698 if (
track->charge() != tpr->charge())
701 <<
" associated with quality:" <<
tp.begin()->second <<
"\n";
705 <<
" NOT associated to any TrackingParticle"
711 int nRecHits =
track->numberOfValidHits();
712 edm::LogVerbatim(
"MuonTrackValidator") <<
"\t N valid rechits = " << nRecHits <<
"\n";
714 double etaRec =
track->eta();
715 double xetaRec = getEta(etaRec);
717 double ptRec =
track->pt();
718 double xptRec = getPt(ptRec);
720 double qoverpRec =
track->qoverp();
721 double phiRec =
track->phi();
722 double thetaRec =
track->theta();
723 double dxyRec =
track->dxy(
bs.position());
724 double dzRec =
track->dz(
bs.position());
726 double qoverpError =
track->qoverpError();
727 double ptError =
track->ptError();
728 double thetaError =
track->thetaError();
730 double dxyError =
track->dxyError();
731 double dzError =
track->dzError();
734 fillPlotNoFlow(h_recoeta[
w], xetaRec);
735 if (Track_is_matched) {
736 fillPlotNoFlow(h_assoc2eta[
w], xetaRec);
740 fillPlotNoFlow(h_recophi[
w], phiRec);
741 if (Track_is_matched) {
742 fillPlotNoFlow(h_assoc2phi[
w], phiRec);
746 fillPlotNoFlow(h_recopT[
w], xptRec);
747 if (Track_is_matched) {
748 fillPlotNoFlow(h_assoc2pT[
w], xptRec);
752 fillPlotNoFlow(h_recodxy[
w], dxyRec);
753 if (Track_is_matched) {
754 fillPlotNoFlow(h_assoc2dxy[
w], dxyRec);
758 fillPlotNoFlow(h_recodz[
w], dzRec);
759 if (Track_is_matched) {
760 fillPlotNoFlow(h_assoc2dz[
w], dzRec);
764 fillPlotNoFlow(h_recohit[
w], nRecHits);
765 if (Track_is_matched) {
766 fillPlotNoFlow(h_assoc2hit[
w], nRecHits);
769 fillPlotNoFlow(h_misidhit[
w], nRecHits);
773 fillPlotNoFlow(h_recopu[
w], PU_NumInteractions);
774 if (Track_is_matched) {
775 fillPlotNoFlow(h_assoc2pu[
w], PU_NumInteractions);
794 if (!(Track_is_matched && cosmictpSelector(tpr, &
bs,
event,
setup)))
797 momentumTP = Cosmic_parametersDefinerTP->momentum(
event,
setup, tpr);
798 vertexTP = Cosmic_parametersDefinerTP->vertex(
event,
setup, tpr);
804 double assocChi2 = -
tp.begin()->second;
805 h_assochi2[www]->Fill(assocChi2);
806 h_assochi2_prob[www]->Fill(TMath::Prob((assocChi2)*5, 5));
807 }
else if (
associators[ww] ==
"trackAssociatorByHits") {
809 h_assocFraction[www]->Fill(
fraction);
810 h_assocSharedHit[www]->Fill(
fraction * nRecHits);
813 h_charge[
w]->Fill(
track->charge());
816 h_nhits[
w]->Fill(nRecHits);
817 nhits_vs_eta[
w]->Fill(xetaRec, nRecHits);
818 nhits_vs_phi[
w]->Fill(phiRec, nRecHits);
821 nDThits_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().numberOfValidMuonDTHits());
822 nCSChits_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().numberOfValidMuonCSCHits());
823 nRPChits_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().numberOfValidMuonRPCHits());
825 nGEMhits_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().numberOfValidMuonGEMHits());
827 nME0hits_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().numberOfValidMuonME0Hits());
831 nTRK_LayersWithMeas_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().trackerLayersWithMeasurement());
832 nPixel_LayersWithMeas_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().pixelLayersWithMeasurement());
833 h_nlosthits[
w]->Fill(
track->numberOfLostHits());
836 nlosthits_vs_eta[
w]->Fill(xetaRec,
track->numberOfLostHits());
840 h_nchi2[
w]->Fill(
track->normalizedChi2());
841 h_nchi2_prob[
w]->Fill(TMath::Prob(
track->chi2(), (
int)
track->ndof()));
842 chi2_vs_nhits[
w]->Fill(nRecHits,
track->normalizedChi2());
843 chi2_vs_eta[
w]->Fill(xetaRec,
track->normalizedChi2());
844 chi2_vs_phi[
w]->Fill(phiRec,
track->normalizedChi2());
846 double ptSim =
sqrt(momentumTP.perp2());
847 double xptSim = getPt(ptSim);
848 double qoverpSim = tpr->charge() /
sqrt(momentumTP.x() * momentumTP.x() + momentumTP.y() * momentumTP.y() +
849 momentumTP.z() * momentumTP.z());
850 double etaSim = momentumTP.eta();
851 double thetaSim = momentumTP.theta();
852 double phiSim = momentumTP.phi();
856 double etares = etaRec - etaSim;
857 double ptRelRes = (ptRec - ptSim) / ptSim;
858 double ptPull = (ptRec - ptSim) / ptError;
859 double qoverpPull = (qoverpRec - qoverpSim) / qoverpError;
860 double thetaPull = (thetaRec - thetaSim) / thetaError;
861 double phiDiff = phiRec - phiSim;
864 phiDiff = phiDiff - 2. *
M_PI;
866 phiDiff = phiDiff + 2. *
M_PI;
868 double phiPull = phiDiff /
phiError;
869 double dxyPull = (dxyRec - dxySim) / dxyError;
870 double dzPull = (dzRec - dzSim) / dzError;
872 h_etaRes[
w]->Fill(etares);
873 etares_vs_eta[
w]->Fill(xetaRec, etares);
875 ptres_vs_eta[
w]->Fill(xetaRec, ptRelRes);
876 ptres_vs_pt[
w]->Fill(xptSim, ptRelRes);
877 ptres_vs_phi[
w]->Fill(phiRec, ptRelRes);
878 h_ptpull[
w]->Fill(ptPull);
879 ptpull_vs_eta[
w]->Fill(xetaRec, ptPull);
880 ptpull_vs_phi[
w]->Fill(phiRec, ptPull);
881 h_qoverppull[
w]->Fill(qoverpPull);
883 thetaCotres_vs_eta[
w]->Fill(xetaRec,
cos(thetaRec) /
sin(thetaRec) -
cos(thetaSim) /
sin(thetaSim));
884 thetaCotres_vs_pt[
w]->Fill(xptSim,
cos(thetaRec) /
sin(thetaRec) -
cos(thetaSim) /
sin(thetaSim));
885 h_thetapull[
w]->Fill(thetaPull);
886 thetapull_vs_eta[
w]->Fill(xetaRec, thetaPull);
887 thetapull_vs_phi[
w]->Fill(phiRec, thetaPull);
889 phires_vs_eta[
w]->Fill(xetaRec, phiDiff);
890 phires_vs_pt[
w]->Fill(xptSim, phiDiff);
891 phires_vs_phi[
w]->Fill(phiRec, phiDiff);
892 h_phipull[
w]->Fill(phiPull);
893 phipull_vs_eta[
w]->Fill(xetaRec, phiPull);
894 phipull_vs_phi[
w]->Fill(phiRec, phiPull);
896 dxyres_vs_eta[
w]->Fill(xetaRec, dxyRec - dxySim);
897 dxyres_vs_pt[
w]->Fill(xptSim, dxyRec - dxySim);
898 h_dxypull[
w]->Fill(dxyPull);
899 dxypull_vs_eta[
w]->Fill(xetaRec, dxyPull);
901 dzres_vs_eta[
w]->Fill(xetaRec, dzRec - dzSim);
902 dzres_vs_pt[
w]->Fill(xptSim, dzRec - dzSim);
903 h_dzpull[
w]->Fill(dzPull);
904 dzpull_vs_eta[
w]->Fill(xetaRec, dzPull);
906 double contrib_Qoverp = qoverpPull * qoverpPull / 5;
907 double contrib_dxy = dxyPull * dxyPull / 5;
908 double contrib_dz = dzPull * dzPull / 5;
909 double contrib_theta = thetaPull * thetaPull / 5;
910 double contrib_phi = phiPull * phiPull / 5;
911 double assoChi2 = contrib_Qoverp + contrib_dxy + contrib_dz + contrib_theta + contrib_phi;
913 edm::LogVerbatim(
"MuonTrackValidator") <<
"normalized Chi2 (track 5-dofs matching) = " << assoChi2 <<
"\n"
914 <<
"\t contrib_Qoverp = " << contrib_Qoverp <<
"\n"
915 <<
"\t contrib_theta = " << contrib_theta <<
"\n"
916 <<
"\t contrib_phi = " << contrib_phi <<
"\n"
917 <<
"\t contrib_dxy = " << contrib_dxy <<
"\n"
918 <<
"\t contrib_dz = " << contrib_dz <<
"\n";
921 <<
"etaRec = " << etaRec <<
"\n"
922 <<
"qoverpRec = " << qoverpRec <<
"\n"
923 <<
"thetaRec = " << thetaRec <<
"\n"
924 <<
"phiRec = " << phiRec <<
"\n"
925 <<
"dxyRec = " << dxyRec <<
"\n"
926 <<
"dzRec = " << dzRec <<
"\n"
929 <<
"qoverpError = " << qoverpError <<
"\n"
930 <<
"thetaError = " << thetaError <<
"\n"
931 <<
"phiError = " <<
phiError <<
"\n"
932 <<
"dxyError = " << dxyError <<
"\n"
933 <<
"dzError = " << dzError <<
"\n"
936 <<
"ptSim = " << ptSim <<
"\n"
937 <<
"etaSim = " << etaSim <<
"\n"
938 <<
"qoverpSim = " << qoverpSim <<
"\n"
939 <<
"thetaSim = " << thetaSim <<
"\n"
940 <<
"phiSim = " << phiSim <<
"\n"
941 <<
"dxySim = " << dxySim <<
"\n"
942 <<
"dzSim = " << dzSim <<
"\n";
945 h_tracks[
w]->Fill(at);
946 h_fakes[
w]->Fill(rT - at);
948 <<
"Total Associated (simToReco): " << ats <<
"\n"
949 <<
"Total Reconstructed: " << rT <<
"\n"
950 <<
"Total Associated (recoToSim): " << at <<
"\n"
951 <<
"Total Fakes: " << rT - at <<
"\n";