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);
374 std::unique_ptr<ParametersDefinerForTP> Cosmic_parametersDefinerTP;
377 Lhc_parametersDefinerTP =
setup.getHandle(tpDefinerEsToken);
380 event.getByToken(pileupinfo_Token, puinfoH);
381 for (std::vector<PileupSummaryInfo>::const_iterator puInfoIt = puinfoH->begin(); puInfoIt != puinfoH->end();
383 if (puInfoIt->getBunchCrossing() == 0) {
384 PU_NumInteractions = puInfoIt->getPU_NumInteractions();
391 _Cosmic_parametersDefinerTP =
setup.getHandle(cosmictpDefinerEsToken);
394 Cosmic_parametersDefinerTP = _Cosmic_parametersDefinerTP->
clone();
398 event.getByToken(_simHitTpMapTag, simHitsTPAssoc);
399 Cosmic_parametersDefinerTP->initEvent(simHitsTPAssoc);
400 cosmictpSelector.initEvent(simHitsTPAssoc);
412 event.getByToken(tp_refvector_Token, TPCollectionRefVector_H);
413 ptr_TPrefV = TPCollectionRefVector_H.
product();
415 event.getByToken(tp_Token, TPCollection_H);
416 size_t nTP = TPCollection_H->size();
417 for (
size_t i = 0;
i < nTP; ++
i) {
420 ptr_TPrefV = &TPrefV;
425 bool bs_Available =
event.getByToken(bsSrc_Token, recoBeamSpotHandle);
428 bs = *recoBeamSpotHandle;
431 std::vector<const reco::TrackToTrackingParticleAssociator*>
associator;
441 for (
unsigned int ww = 0; ww <
associators.size(); ww++) {
442 for (
unsigned int www = 0; www <
label.size(); www++) {
447 unsigned int trackCollectionSize = 0;
453 if (!
event.getByToken(track_Collection_Token[www],
trackCollection) && ignoremissingtkcollection_) {
464 <<
"Analyzing " <<
label[www].process() <<
":" <<
label[www].label() <<
":" <<
label[www].instance()
467 LogTrace(
"MuonTrackValidator") <<
"Calling associateRecoToSim method"
470 LogTrace(
"MuonTrackValidator") <<
"Calling associateSimToReco method"
475 <<
"Analyzing " <<
label[www].process() <<
":" <<
label[www].label() <<
":" <<
label[www].instance()
480 event.getByToken(simToRecoCollection_Token, simtorecoCollectionH);
481 simRecColl = *simtorecoCollectionH.
product();
484 event.getByToken(recoToSimCollection_Token, recotosimCollectionH);
485 recSimColl = *recotosimCollectionH.
product();
496 for (
size_t i = 0;
i < tPC.
size();
i++) {
497 bool TP_is_matched =
false;
498 bool isChargeOK =
true;
512 LogTrace(
"MuonTrackValidator") <<
"TrackingParticle " <<
i;
515 momentumTP =
tp.momentum();
516 vertexTP =
tp.vertex();
527 momentumTP = Cosmic_parametersDefinerTP->momentum(
event,
setup, tpr);
528 vertexTP = Cosmic_parametersDefinerTP->vertex(
event,
setup, tpr);
536 nSimHits = tpr.
get()->numberOfHits();
538 nSimHits = tpr.
get()->numberOfHits() - tpr.
get()->numberOfTrackerHits();
540 nSimHits = tpr.
get()->numberOfTrackerHits();
543 edm::LogVerbatim(
"MuonTrackValidator") <<
"--------------------Selected TrackingParticle #" << tpr.
key()
544 <<
" (N counted simhits = " << nSimHits <<
")";
546 <<
"momentumTP: pt = " <<
sqrt(momentumTP.perp2()) <<
", pz = " << momentumTP.z()
547 <<
", \t vertexTP: radius = " <<
sqrt(vertexTP.perp2()) <<
", z = " << vertexTP.z();
550 double TPeta = momentumTP.eta();
551 double xTPeta = getEta(TPeta);
552 double TPpt =
sqrt(momentumTP.perp2());
553 double xTPpt = getPt(TPpt);
554 double TPphi = momentumTP.phi();
555 double TPrpos =
sqrt(vertexTP.perp2());
556 double TPzpos = vertexTP.z();
558 int assoc_recoTrack_NValidHits = 0;
559 if (simRecColl.
find(tpr) != simRecColl.
end()) {
560 auto const&
rt = simRecColl[tpr];
563 TP_is_matched =
true;
565 if (assoc_recoTrack->
charge() != tpr->charge())
569 edm::LogVerbatim(
"MuonTrackValidator") <<
"-----------------------------associated to Track #"
570 << assoc_recoTrack.
key() <<
" with quality:" <<
quality <<
"\n";
574 <<
"TrackingParticle #" << tpr.
key() <<
" with pt,eta,phi: " <<
sqrt(momentumTP.perp2()) <<
" , "
575 << momentumTP.eta() <<
" , " << momentumTP.phi() <<
" , "
576 <<
" NOT associated to any reco::Track"
581 fillPlotNoFlow(h_simuleta[
w], xTPeta);
583 fillPlotNoFlow(h_assoceta[
w], xTPeta);
585 fillPlotNoFlow(h_misideta[
w], xTPeta);
589 fillPlotNoFlow(h_simulphi[
w], TPphi);
591 fillPlotNoFlow(h_assocphi[
w], TPphi);
593 fillPlotNoFlow(h_misidphi[
w], TPphi);
597 fillPlotNoFlow(h_simulpT[
w], xTPpt);
599 fillPlotNoFlow(h_assocpT[
w], xTPpt);
601 fillPlotNoFlow(h_misidpT[
w], xTPpt);
605 fillPlotNoFlow(h_simuldxy[
w], dxySim);
607 fillPlotNoFlow(h_assocdxy[
w], dxySim);
609 fillPlotNoFlow(h_misiddxy[
w], dxySim);
613 fillPlotNoFlow(h_simuldz[
w], dzSim);
615 fillPlotNoFlow(h_assocdz[
w], dzSim);
617 fillPlotNoFlow(h_misiddz[
w], dzSim);
621 fillPlotNoFlow(h_simulRpos[
w], TPrpos);
623 fillPlotNoFlow(h_assocRpos[
w], TPrpos);
626 fillPlotNoFlow(h_simulZpos[
w], TPzpos);
628 fillPlotNoFlow(h_assocZpos[
w], TPzpos);
631 fillPlotNoFlow(h_simulhit[
w], nSimHits);
633 fillPlotNoFlow(h_assochit[
w], nSimHits);
634 nRecHits_vs_nSimHits[
w]->Fill(nSimHits, assoc_recoTrack_NValidHits);
641 fillPlotNoFlow(h_simulpu[
w], PU_NumInteractions);
643 fillPlotNoFlow(h_assocpu[
w], PU_NumInteractions);
645 fillPlotNoFlow(h_misidpu[
w], PU_NumInteractions);
654 <<
"\n# of reco::Tracks with " <<
label[www].process() <<
":" <<
label[www].label() <<
":"
655 <<
label[www].instance() <<
": " << trackCollectionSize <<
"\n";
660 bool Track_is_matched =
false;
661 bool isChargeOK =
true;
663 int nRecHits =
track->numberOfValidHits();
666 std::vector<std::pair<TrackingParticleRef, double> >
tp;
671 edm::LogVerbatim(
"MuonTrackValidator") <<
"----------------------------------------Track #" <<
track.key()
672 <<
" (N valid rechits = " << nRecHits <<
")";
677 tpr =
tp.begin()->first;
679 if (simRecColl.
find(tpr) != simRecColl.
end()) {
680 auto const& assoc_track_checkback = simRecColl[tpr].
begin()->first;
682 if (assoc_track_checkback.key() ==
track.key()) {
683 Track_is_matched =
true;
685 if (
track->charge() != tpr->charge())
687 double Purity =
tp.begin()->second;
690 <<
"with pt=" <<
track->pt() <<
" associated with purity:" << Purity <<
" to TrackingParticle #"
691 << tpr.
key() <<
"\n";
693 h_PurityVsQuality[
w]->Fill(
Quality, Purity);
699 if (!Track_is_matched)
701 <<
"with pt=" <<
track->pt() <<
" NOT associated to any TrackingParticle"
709 tpr =
tp.begin()->first;
710 Track_is_matched =
true;
712 if (
track->charge() != tpr->charge())
715 <<
" associated with quality:" <<
tp.begin()->second <<
"\n";
719 <<
" NOT associated to any TrackingParticle"
724 double etaRec =
track->eta();
725 double xetaRec = getEta(etaRec);
727 double ptRec =
track->pt();
728 double xptRec = getPt(ptRec);
730 double qoverpRec =
track->qoverp();
731 double phiRec =
track->phi();
732 double thetaRec =
track->theta();
733 double dxyRec =
track->dxy(
bs.position());
734 double dzRec =
track->dz(
bs.position());
736 double qoverpError =
track->qoverpError();
737 double ptError =
track->ptError();
738 double thetaError =
track->thetaError();
740 double dxyError =
track->dxyError();
741 double dzError =
track->dzError();
744 fillPlotNoFlow(h_recoeta[
w], xetaRec);
745 if (Track_is_matched) {
746 fillPlotNoFlow(h_assoc2eta[
w], xetaRec);
750 fillPlotNoFlow(h_recophi[
w], phiRec);
751 if (Track_is_matched) {
752 fillPlotNoFlow(h_assoc2phi[
w], phiRec);
756 fillPlotNoFlow(h_recopT[
w], xptRec);
757 if (Track_is_matched) {
758 fillPlotNoFlow(h_assoc2pT[
w], xptRec);
762 fillPlotNoFlow(h_recodxy[
w], dxyRec);
763 if (Track_is_matched) {
764 fillPlotNoFlow(h_assoc2dxy[
w], dxyRec);
768 fillPlotNoFlow(h_recodz[
w], dzRec);
769 if (Track_is_matched) {
770 fillPlotNoFlow(h_assoc2dz[
w], dzRec);
774 fillPlotNoFlow(h_recohit[
w], nRecHits);
775 if (Track_is_matched) {
776 fillPlotNoFlow(h_assoc2hit[
w], nRecHits);
779 fillPlotNoFlow(h_misidhit[
w], nRecHits);
783 fillPlotNoFlow(h_recopu[
w], PU_NumInteractions);
784 if (Track_is_matched) {
785 fillPlotNoFlow(h_assoc2pu[
w], PU_NumInteractions);
804 if (!(Track_is_matched && cosmictpSelector(tpr, &
bs,
event,
setup)))
807 momentumTP = Cosmic_parametersDefinerTP->momentum(
event,
setup, tpr);
808 vertexTP = Cosmic_parametersDefinerTP->vertex(
event,
setup, tpr);
814 double assocChi2 = -
tp.begin()->second;
815 h_assochi2[www]->Fill(assocChi2);
816 h_assochi2_prob[www]->Fill(TMath::Prob((assocChi2)*5, 5));
817 }
else if (
associators[ww] ==
"trackAssociatorByHits") {
819 h_assocFraction[www]->Fill(
fraction);
820 h_assocSharedHit[www]->Fill(
fraction * nRecHits);
823 h_charge[
w]->Fill(
track->charge());
826 h_nhits[
w]->Fill(nRecHits);
827 nhits_vs_eta[
w]->Fill(xetaRec, nRecHits);
828 nhits_vs_phi[
w]->Fill(phiRec, nRecHits);
831 nDThits_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().numberOfValidMuonDTHits());
832 nCSChits_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().numberOfValidMuonCSCHits());
833 nRPChits_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().numberOfValidMuonRPCHits());
835 nGEMhits_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().numberOfValidMuonGEMHits());
837 nME0hits_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().numberOfValidMuonME0Hits());
841 nTRK_LayersWithMeas_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().trackerLayersWithMeasurement());
842 nPixel_LayersWithMeas_vs_eta[
w]->Fill(xetaRec,
track->hitPattern().pixelLayersWithMeasurement());
843 h_nlosthits[
w]->Fill(
track->numberOfLostHits());
846 nlosthits_vs_eta[
w]->Fill(xetaRec,
track->numberOfLostHits());
850 h_nchi2[
w]->Fill(
track->normalizedChi2());
851 h_nchi2_prob[
w]->Fill(TMath::Prob(
track->chi2(), (
int)
track->ndof()));
852 chi2_vs_nhits[
w]->Fill(nRecHits,
track->normalizedChi2());
853 chi2_vs_eta[
w]->Fill(xetaRec,
track->normalizedChi2());
854 chi2_vs_phi[
w]->Fill(phiRec,
track->normalizedChi2());
856 double ptSim =
sqrt(momentumTP.perp2());
857 double xptSim = getPt(ptSim);
858 double qoverpSim = tpr->charge() /
sqrt(momentumTP.x() * momentumTP.x() + momentumTP.y() * momentumTP.y() +
859 momentumTP.z() * momentumTP.z());
860 double etaSim = momentumTP.eta();
861 double thetaSim = momentumTP.theta();
862 double phiSim = momentumTP.phi();
866 double etares = etaRec - etaSim;
867 double ptRelRes = (ptRec - ptSim) / ptSim;
868 double ptPull = (ptRec - ptSim) / ptError;
869 double qoverpPull = (qoverpRec - qoverpSim) / qoverpError;
870 double thetaPull = (thetaRec - thetaSim) / thetaError;
871 double phiDiff = phiRec - phiSim;
874 phiDiff = phiDiff - 2. *
M_PI;
876 phiDiff = phiDiff + 2. *
M_PI;
878 double phiPull = phiDiff /
phiError;
879 double dxyPull = (dxyRec - dxySim) / dxyError;
880 double dzPull = (dzRec - dzSim) / dzError;
882 h_etaRes[
w]->Fill(etares);
883 etares_vs_eta[
w]->Fill(xetaRec, etares);
885 ptres_vs_eta[
w]->Fill(xetaRec, ptRelRes);
886 ptres_vs_pt[
w]->Fill(xptSim, ptRelRes);
887 ptres_vs_phi[
w]->Fill(phiRec, ptRelRes);
888 h_ptpull[
w]->Fill(ptPull);
889 ptpull_vs_eta[
w]->Fill(xetaRec, ptPull);
890 ptpull_vs_phi[
w]->Fill(phiRec, ptPull);
891 h_qoverppull[
w]->Fill(qoverpPull);
893 thetaCotres_vs_eta[
w]->Fill(xetaRec,
cos(thetaRec) /
sin(thetaRec) -
cos(thetaSim) /
sin(thetaSim));
894 thetaCotres_vs_pt[
w]->Fill(xptSim,
cos(thetaRec) /
sin(thetaRec) -
cos(thetaSim) /
sin(thetaSim));
895 h_thetapull[
w]->Fill(thetaPull);
896 thetapull_vs_eta[
w]->Fill(xetaRec, thetaPull);
897 thetapull_vs_phi[
w]->Fill(phiRec, thetaPull);
899 phires_vs_eta[
w]->Fill(xetaRec, phiDiff);
900 phires_vs_pt[
w]->Fill(xptSim, phiDiff);
901 phires_vs_phi[
w]->Fill(phiRec, phiDiff);
902 h_phipull[
w]->Fill(phiPull);
903 phipull_vs_eta[
w]->Fill(xetaRec, phiPull);
904 phipull_vs_phi[
w]->Fill(phiRec, phiPull);
906 dxyres_vs_eta[
w]->Fill(xetaRec, dxyRec - dxySim);
907 dxyres_vs_pt[
w]->Fill(xptSim, dxyRec - dxySim);
908 h_dxypull[
w]->Fill(dxyPull);
909 dxypull_vs_eta[
w]->Fill(xetaRec, dxyPull);
911 dzres_vs_eta[
w]->Fill(xetaRec, dzRec - dzSim);
912 dzres_vs_pt[
w]->Fill(xptSim, dzRec - dzSim);
913 h_dzpull[
w]->Fill(dzPull);
914 dzpull_vs_eta[
w]->Fill(xetaRec, dzPull);
916 double contrib_Qoverp = qoverpPull * qoverpPull / 5;
917 double contrib_dxy = dxyPull * dxyPull / 5;
918 double contrib_dz = dzPull * dzPull / 5;
919 double contrib_theta = thetaPull * thetaPull / 5;
920 double contrib_phi = phiPull * phiPull / 5;
921 double assoChi2 = contrib_Qoverp + contrib_dxy + contrib_dz + contrib_theta + contrib_phi;
923 LogTrace(
"MuonTrackValidator") <<
"normalized Chi2 (track 5-dofs matching) = " << assoChi2 <<
"\n"
924 <<
"\t contrib_Qoverp = " << contrib_Qoverp <<
"\n"
925 <<
"\t contrib_theta = " << contrib_theta <<
"\n"
926 <<
"\t contrib_phi = " << contrib_phi <<
"\n"
927 <<
"\t contrib_dxy = " << contrib_dxy <<
"\n"
928 <<
"\t contrib_dz = " << contrib_dz <<
"\n";
930 LogTrace(
"MuonTrackValidator") <<
"ptRec = " << ptRec <<
"\n"
931 <<
"etaRec = " << etaRec <<
"\n"
932 <<
"qoverpRec = " << qoverpRec <<
"\n"
933 <<
"thetaRec = " << thetaRec <<
"\n"
934 <<
"phiRec = " << phiRec <<
"\n"
935 <<
"dxyRec = " << dxyRec <<
"\n"
936 <<
"dzRec = " << dzRec <<
"\n"
939 <<
"qoverpError = " << qoverpError <<
"\n"
940 <<
"thetaError = " << thetaError <<
"\n"
941 <<
"phiError = " <<
phiError <<
"\n"
942 <<
"dxyError = " << dxyError <<
"\n"
943 <<
"dzError = " << dzError <<
"\n"
946 <<
"ptSim = " << ptSim <<
"\n"
947 <<
"etaSim = " << etaSim <<
"\n"
948 <<
"qoverpSim = " << qoverpSim <<
"\n"
949 <<
"thetaSim = " << thetaSim <<
"\n"
950 <<
"phiSim = " << phiSim <<
"\n"
951 <<
"dxySim = " << dxySim <<
"\n"
952 <<
"dzSim = " << dzSim <<
"\n";
955 h_tracks[
w]->Fill(at);
956 h_fakes[
w]->Fill(rT - at);
958 <<
"Total Associated (simToReco): " << ats <<
"\n"
959 <<
"Total Reconstructed: " << rT <<
"\n"
960 <<
"Total Associated (recoToSim): " << at <<
"\n"
961 <<
"Total Fakes: " << rT - at <<
"\n";