@@ -528,8 +528,8 @@ struct muonGlobalAlignment {
528528 }
529529
530530 if (fEnableMftMchResidualsAnalysis ) {
531- AxisSpec dxAxis = {600 , -30 .0 , 30 .0 , " #Delta x (cm)" };
532- AxisSpec dyAxis = {600 , -30 .0 , 30 .0 , " #Delta y (cm)" };
531+ AxisSpec dxAxis = {400 , -20 .0 , 20 .0 , " #Delta x (cm)" };
532+ AxisSpec dyAxis = {400 , -20 .0 , 20 .0 , " #Delta y (cm)" };
533533
534534 registry.add (" DCA/MCH/DCA_y_vs_x" , std::format (" DCA y vs. x" ).c_str (), {HistType::kTH2F , {dcaxMCHAxis, dcayMCHAxis}});
535535 registry.add (" DCA/MCH/DCA_x_vs_sign_vs_quadrant_vs_mom" , std::format (" DCA(x) vs. p, quadrant, chargeSign" ).c_str (), {HistType::kTHnSparseF , {{20 , 0 , 100.0 , " p (GeV/c)" }, {4 , 0 , 4 , " quadrant" }, {2 , 0 , 2 , " sign" }, dcaxMCHAxis}});
@@ -543,20 +543,20 @@ struct muonGlobalAlignment {
543543 registry.add (" residuals/dy_vs_chamber" , " Cluster y residual vs. chamber, quadrant, chargeSign" ,
544544 {HistType::kTHnSparseF , {{10 , 1 , 11 , " chamber" }, {4 , 0 , 4 , " quadrant" }, {2 , 0 , 2 , " sign" }, dyAxis}});
545545
546- registry.add (" residuals/dx_vs_de" , " Cluster x residual vs. DE, quadrant, chargeSign, momentum" ,
547- {HistType::kTHnSparseF , {dxAxis, {getNumDE (), 0 , static_cast <double >(getNumDE ()), " DE" }, {4 , 0 , 4 , " quadrant" }, {2 , 0 , 2 , " sign" }, {20 , 0 , 100.0 , " p (GeV/c)" }}});
548- registry.add (" residuals/dy_vs_de" , " Cluster y residual vs. DE, quadrant, chargeSign, momentum" ,
549- {HistType::kTHnSparseF , {dyAxis, {getNumDE (), 0 , static_cast <double >(getNumDE ()), " DE" }, {4 , 0 , 4 , " quadrant" }, {2 , 0 , 2 , " sign" }, {20 , 0 , 100.0 , " p (GeV/c)" }}});
546+ registry.add (" residuals/dx_vs_de" , " Cluster x residual vs. DE, quadrant, chargeSign, momentum, xslope " ,
547+ {HistType::kTHnSparseF , {dxAxis, {getNumDE (), 0 , static_cast <double >(getNumDE ()), " DE" }, {4 , 0 , 4 , " quadrant" }, {2 , 0 , 2 , " sign" }, {20 , 0 , 100.0 , " p (GeV/c)" }, sxAxis }});
548+ registry.add (" residuals/dy_vs_de" , " Cluster y residual vs. DE, quadrant, chargeSign, momentum, yslope " ,
549+ {HistType::kTHnSparseF , {dyAxis, {getNumDE (), 0 , static_cast <double >(getNumDE ()), " DE" }, {4 , 0 , 4 , " quadrant" }, {2 , 0 , 2 , " sign" }, {20 , 0 , 100.0 , " p (GeV/c)" }, syAxis }});
550550
551551 registry.add (" residuals/dx_vs_chamber_corr" , " Cluster x residual vs. chamber, quadrant, chargeSign (with corrections)" ,
552552 {HistType::kTHnSparseF , {{10 , 1 , 11 , " chamber" }, {4 , 0 , 4 , " quadrant" }, {2 , 0 , 2 , " sign" }, dxAxis}});
553553 registry.add (" residuals/dy_vs_chamber_corr" , " Cluster y residual vs. chamber, quadrant, chargeSign (with corrections)" ,
554554 {HistType::kTHnSparseF , {{10 , 1 , 11 , " chamber" }, {4 , 0 , 4 , " quadrant" }, {2 , 0 , 2 , " sign" }, dyAxis}});
555555
556- registry.add (" residuals/dx_vs_de_corr" , " Cluster x residual vs. DE, quadrant, chargeSign, momentum (with corrections)" ,
557- {HistType::kTHnSparseF , {dxAxis, {getNumDE (), 0 , static_cast <double >(getNumDE ()), " DE" }, {4 , 0 , 4 , " quadrant" }, {2 , 0 , 2 , " sign" }, {20 , 0 , 100.0 , " p (GeV/c)" }}});
558- registry.add (" residuals/dy_vs_de_corr" , " Cluster y residual vs. DE, quadrant, chargeSign, momentum (with corrections)" ,
559- {HistType::kTHnSparseF , {dyAxis, {getNumDE (), 0 , static_cast <double >(getNumDE ()), " DE" }, {4 , 0 , 4 , " quadrant" }, {2 , 0 , 2 , " sign" }, {20 , 0 , 100.0 , " p (GeV/c)" }}});
556+ registry.add (" residuals/dx_vs_de_corr" , " Cluster x residual vs. DE, quadrant, chargeSign, momentum, xslope (with corrections)" ,
557+ {HistType::kTHnSparseF , {dxAxis, {getNumDE (), 0 , static_cast <double >(getNumDE ()), " DE" }, {4 , 0 , 4 , " quadrant" }, {2 , 0 , 2 , " sign" }, {20 , 0 , 100.0 , " p (GeV/c)" }, sxAxis }});
558+ registry.add (" residuals/dy_vs_de_corr" , " Cluster y residual vs. DE, quadrant, chargeSign, momentum, yslope (with corrections)" ,
559+ {HistType::kTHnSparseF , {dyAxis, {getNumDE (), 0 , static_cast <double >(getNumDE ()), " DE" }, {4 , 0 , 4 , " quadrant" }, {2 , 0 , 2 , " sign" }, {20 , 0 , 100.0 , " p (GeV/c)" }, syAxis }});
560560
561561 registry.add (" residuals/de_alignment_corrections_x" , " DE alignment corrections - X coordinate" ,
562562 {HistType::kTH1F , {{getNumDE (), 0 , static_cast <double >(getNumDE ()), " DE" }}});
@@ -1656,7 +1656,8 @@ struct muonGlobalAlignment {
16561656 auto const & muonTrack = muonTracks.rawIteratorAt (globalTracksVector[0 ]);
16571657 const auto & mchTrack = muonTrack.template matchMCHTrack_as <MyMuonsWithCov>();
16581658 const auto & mftTrack = muonTrack.template matchMFTTrack_as <MyMFTs>();
1659- int quadrantMch = GetQuadrant (mchTrack);
1659+ // int quadrant = GetQuadrant(mchTrack);
1660+ int quadrant = GetQuadrant (mftTrack);
16601661 int posNeg = (mchTrack.sign () >= 0 ) ? 0 : 1 ;
16611662
16621663 bool isGoodMuon = IsGoodMuon (mchTrack, collision, fTrackChi2MchUp , fMftMchResidualsPLow , fMftMchResidualsPtLow , {fEtaMftLow , fEtaMftUp }, {fRabsLow , fRabsUp }, fSigmaPdcaUp );
@@ -1667,6 +1668,10 @@ struct muonGlobalAlignment {
16671668 if (!isGoodMFT)
16681669 continue ;
16691670
1671+ double matchChi2 = muonTrack.chi2MatchMCHMFT () / 5 .f ;
1672+ if (matchChi2 > 10 .f )
1673+ continue ;
1674+
16701675 // refit MCH track if enabled
16711676 TrackRealigned convertedTrack;
16721677 bool convertedTrackOk = false ;
@@ -1722,15 +1727,16 @@ struct muonGlobalAlignment {
17221727 // by taking the momentum from the MCH track refitted with the new alignment
17231728 if (!configRealign.fEnableMCHRealign || convertedTrackOk) {
17241729 auto mftTrackAtCluster = configRealign.fEnableMCHRealign ? PropagateMFTtoMCH (mftTrack, mch::TrackParam (convertedTrack.first ()), master.z ()) : PropagateMFTtoMCH (mftTrack, FwdtoMCH (FwdToTrackPar (mchTrack)), master.z ());
1730+ auto mftTrackParamAtCluster = FwdtoMCH (mftTrackAtCluster);
17251731
17261732 std::array<double , 2 > xPos{master.x (), mftTrackAtCluster.getX ()};
17271733 std::array<double , 2 > yPos{master.y (), mftTrackAtCluster.getY ()};
17281734
1729- registry.get <THnSparse>(HIST (" residuals/dx_vs_chamber" ))->Fill (chamber + 1 , quadrantMch , posNeg, xPos[0 ] - xPos[1 ]);
1730- registry.get <THnSparse>(HIST (" residuals/dy_vs_chamber" ))->Fill (chamber + 1 , quadrantMch , posNeg, yPos[0 ] - yPos[1 ]);
1735+ registry.get <THnSparse>(HIST (" residuals/dx_vs_chamber" ))->Fill (chamber + 1 , quadrant , posNeg, xPos[0 ] - xPos[1 ]);
1736+ registry.get <THnSparse>(HIST (" residuals/dy_vs_chamber" ))->Fill (chamber + 1 , quadrant , posNeg, yPos[0 ] - yPos[1 ]);
17311737
1732- registry.get <THnSparse>(HIST (" residuals/dx_vs_de" ))->Fill (xPos[0 ] - xPos[1 ], deIndex, quadrantMch , posNeg, mchTrack.p ());
1733- registry.get <THnSparse>(HIST (" residuals/dy_vs_de" ))->Fill (yPos[0 ] - yPos[1 ], deIndex, quadrantMch , posNeg, mchTrack.p ());
1738+ registry.get <THnSparse>(HIST (" residuals/dx_vs_de" ))->Fill (xPos[0 ] - xPos[1 ], deIndex, quadrant , posNeg, mchTrack.p (), mftTrackParamAtCluster. getNonBendingSlope ());
1739+ registry.get <THnSparse>(HIST (" residuals/dy_vs_de" ))->Fill (yPos[0 ] - yPos[1 ], deIndex, quadrant , posNeg, mchTrack.p (), mftTrackParamAtCluster. getBendingSlope ());
17341740 }
17351741
17361742 // MFT-MCH residuals with realigned and/or corrected MCH clusters
@@ -1739,15 +1745,16 @@ struct muonGlobalAlignment {
17391745 // alignment (if realignment is enabled)
17401746 if (convertedTrackWithCorrOk) {
17411747 auto mftTrackAtClusterWithCorr = PropagateMFTtoMCH (mftTrack, mch::TrackParam (convertedTrackWithCorr.first ()), masterWithCorr.z ());
1748+ auto mftTrackParamAtClusterWithCorr = FwdtoMCH (mftTrackAtClusterWithCorr);
17421749
17431750 std::array<double , 2 > xPos{masterWithCorr.x (), mftTrackAtClusterWithCorr.getX ()};
17441751 std::array<double , 2 > yPos{masterWithCorr.y (), mftTrackAtClusterWithCorr.getY ()};
17451752
1746- registry.get <THnSparse>(HIST (" residuals/dx_vs_chamber_corr" ))->Fill (chamber + 1 , quadrantMch , posNeg, xPos[0 ] - xPos[1 ]);
1747- registry.get <THnSparse>(HIST (" residuals/dy_vs_chamber_corr" ))->Fill (chamber + 1 , quadrantMch , posNeg, yPos[0 ] - yPos[1 ]);
1753+ registry.get <THnSparse>(HIST (" residuals/dx_vs_chamber_corr" ))->Fill (chamber + 1 , quadrant , posNeg, xPos[0 ] - xPos[1 ]);
1754+ registry.get <THnSparse>(HIST (" residuals/dy_vs_chamber_corr" ))->Fill (chamber + 1 , quadrant , posNeg, yPos[0 ] - yPos[1 ]);
17481755
1749- registry.get <THnSparse>(HIST (" residuals/dx_vs_de_corr" ))->Fill (xPos[0 ] - xPos[1 ], deIndex, quadrantMch , posNeg, mchTrack.p ());
1750- registry.get <THnSparse>(HIST (" residuals/dy_vs_de_corr" ))->Fill (yPos[0 ] - yPos[1 ], deIndex, quadrantMch , posNeg, mchTrack.p ());
1756+ registry.get <THnSparse>(HIST (" residuals/dx_vs_de_corr" ))->Fill (xPos[0 ] - xPos[1 ], deIndex, quadrant , posNeg, mchTrack.p (), mftTrackParamAtClusterWithCorr. getNonBendingSlope ());
1757+ registry.get <THnSparse>(HIST (" residuals/dy_vs_de_corr" ))->Fill (yPos[0 ] - yPos[1 ], deIndex, quadrant , posNeg, mchTrack.p (), mftTrackParamAtClusterWithCorr. getBendingSlope ());
17511758 }
17521759 }
17531760
@@ -1757,12 +1764,12 @@ struct muonGlobalAlignment {
17571764 auto dcay = mchTrackAtDCA.getY () - collision.posY ();
17581765
17591766 registry.get <TH2>(HIST (" DCA/MCH/DCA_y_vs_x" ))->Fill (dcax, dcay);
1760- registry.get <THnSparse>(HIST (" DCA/MCH/DCA_x_vs_sign_vs_quadrant_vs_mom" ))->Fill (mchTrack.p (), quadrantMch , posNeg, dcax);
1761- registry.get <THnSparse>(HIST (" DCA/MCH/DCA_y_vs_sign_vs_quadrant_vs_mom" ))->Fill (mchTrack.p (), quadrantMch , posNeg, dcay);
1767+ registry.get <THnSparse>(HIST (" DCA/MCH/DCA_x_vs_sign_vs_quadrant_vs_mom" ))->Fill (mchTrack.p (), quadrant , posNeg, dcax);
1768+ registry.get <THnSparse>(HIST (" DCA/MCH/DCA_y_vs_sign_vs_quadrant_vs_mom" ))->Fill (mchTrack.p (), quadrant , posNeg, dcay);
17621769
17631770 if (fEnableMftMchResidualsExtraPlots ) {
1764- registry.get <THnSparse>(HIST (" DCA/MCH/DCA_x_vs_sign_vs_quadrant_vs_vz" ))->Fill (collision.posZ (), quadrantMch , posNeg, dcax);
1765- registry.get <THnSparse>(HIST (" DCA/MCH/DCA_y_vs_sign_vs_quadrant_vs_vz" ))->Fill (collision.posZ (), quadrantMch , posNeg, dcay);
1771+ registry.get <THnSparse>(HIST (" DCA/MCH/DCA_x_vs_sign_vs_quadrant_vs_vz" ))->Fill (collision.posZ (), quadrant , posNeg, dcax);
1772+ registry.get <THnSparse>(HIST (" DCA/MCH/DCA_y_vs_sign_vs_quadrant_vs_vz" ))->Fill (collision.posZ (), quadrant , posNeg, dcay);
17661773 auto mchTrackAtMFT = configRealign.fEnableMCHRealign ? PropagateMCHRealigned (convertedTrack, mftTrack.z ()) : PropagateMCH (mchTrack, mftTrack.z ());
17671774 double deltaPhi = mchTrackAtMFT.getPhi () - mftTrack.phi ();
17681775 registry.get <THnSparse>(HIST (" residuals/dphi_at_mft" ))->Fill (deltaPhi, mftTrack.x (), mftTrack.y (), posNeg, mchTrackAtMFT.getP ());
@@ -1774,8 +1781,8 @@ struct muonGlobalAlignment {
17741781 auto dcax = mchTrackAtDCA.getX () - collision.posX ();
17751782 auto dcay = mchTrackAtDCA.getY () - collision.posY ();
17761783
1777- registry.get <THnSparse>(HIST (" DCA/MCH/DCA_x_vs_sign_vs_quadrant_vs_mom_corr" ))->Fill (mchTrack.p (), quadrantMch , posNeg, dcax);
1778- registry.get <THnSparse>(HIST (" DCA/MCH/DCA_y_vs_sign_vs_quadrant_vs_mom_corr" ))->Fill (mchTrack.p (), quadrantMch , posNeg, dcay);
1784+ registry.get <THnSparse>(HIST (" DCA/MCH/DCA_x_vs_sign_vs_quadrant_vs_mom_corr" ))->Fill (mchTrack.p (), quadrant , posNeg, dcax);
1785+ registry.get <THnSparse>(HIST (" DCA/MCH/DCA_y_vs_sign_vs_quadrant_vs_mom_corr" ))->Fill (mchTrack.p (), quadrant , posNeg, dcay);
17791786 }
17801787 }
17811788
@@ -1795,25 +1802,25 @@ struct muonGlobalAlignment {
17951802 const auto & refTrackAtRefPlane = (iRefPlane == 0 ) ? mftTrackAtRefPlane : mchTrackAtRefPlane;
17961803
17971804 auto dx = mchTrackAtRefPlane.getX () - mftTrackAtRefPlane.getX ();
1798- dxPlots[iRefPlane]->Fill (dx, refTrackAtRefPlane.getX (), refTrackAtRefPlane.getY (), quadrantMch , posNeg, mchTrack.p ());
1805+ dxPlots[iRefPlane]->Fill (dx, refTrackAtRefPlane.getX (), refTrackAtRefPlane.getY (), quadrant , posNeg, mchTrack.p ());
17991806 auto dy = mchTrackAtRefPlane.getY () - mftTrackAtRefPlane.getY ();
1800- dyPlots[iRefPlane]->Fill (dy, refTrackAtRefPlane.getX (), refTrackAtRefPlane.getY (), quadrantMch , posNeg, mchTrack.p ());
1807+ dyPlots[iRefPlane]->Fill (dy, refTrackAtRefPlane.getX (), refTrackAtRefPlane.getY (), quadrant , posNeg, mchTrack.p ());
18011808
18021809 auto mftParamAtRefPlane = FwdtoMCH (mftTrackAtRefPlane);
18031810 auto mchParamAtRefPlane = FwdtoMCH (mchTrackAtRefPlane);
18041811
18051812 auto dsx = mchParamAtRefPlane.getNonBendingSlope () - mftParamAtRefPlane.getNonBendingSlope ();
1806- dsxPlots[iRefPlane]->Fill (dsx, refTrackAtRefPlane.getX (), refTrackAtRefPlane.getY (), quadrantMch , posNeg, mchTrack.p ());
1813+ dsxPlots[iRefPlane]->Fill (dsx, refTrackAtRefPlane.getX (), refTrackAtRefPlane.getY (), quadrant , posNeg, mchTrack.p ());
18071814 auto dsy = mchParamAtRefPlane.getBendingSlope () - mftParamAtRefPlane.getBendingSlope ();
1808- dsyPlots[iRefPlane]->Fill (dsy, refTrackAtRefPlane.getX (), refTrackAtRefPlane.getY (), quadrantMch , posNeg, mchTrack.p ());
1815+ dsyPlots[iRefPlane]->Fill (dsy, refTrackAtRefPlane.getX (), refTrackAtRefPlane.getY (), quadrant , posNeg, mchTrack.p ());
18091816
18101817 auto dphi = mchTrackAtRefPlane.getPhi () - mftTrackAtRefPlane.getPhi ();
18111818 if (dphi < -TMath::Pi ()) {
18121819 dphi += TMath::Pi () * 2.0 ;
18131820 } else if (dphi > TMath::Pi ()) {
18141821 dphi -= TMath::Pi () * 2.0 ;
18151822 }
1816- dphiPlots[iRefPlane]->Fill (dphi, refTrackAtRefPlane.getX (), refTrackAtRefPlane.getY (), quadrantMch , posNeg, mchTrack.p ());
1823+ dphiPlots[iRefPlane]->Fill (dphi, refTrackAtRefPlane.getX (), refTrackAtRefPlane.getY (), quadrant , posNeg, mchTrack.p ());
18171824 }
18181825 }
18191826 }
0 commit comments