99// granted to it by virtue of its status as an Intergovernmental Organization
1010// or submit itself to any jurisdiction.
1111//
12- // / \file muonDCA .cxx
12+ // / \file muonGlobalAlignment .cxx // o2-linter: disable=name/file-cpp,name/workflow-file (legacy workflow executable name)
1313// / \brief Task to compute and evaluate DCA quantities
1414// / \author Nicolas Bizé <nicolas.bize@cern.ch>, SUBATECH
1515//
@@ -151,6 +151,8 @@ struct muonGlobalAlignment {
151151 Configurable<int > cfgTrackNClustMftLow{" cfgTrackNClustMftLow" , 7 , " " };
152152 Configurable<float > cfgTrackChi2MftUp{" cfgTrackChi2MftUp" , 999 .f , " " };
153153
154+ Configurable<float > cfgMftDcaMatchChi2Up{" cfgMftDcaMatchChi2Up" , 10 .f , " " };
155+
154156 Configurable<float > cfgMftMchResidualsPLow{" cfgMftMchResidualsPLow" , 30 .f , " " };
155157 Configurable<float > cfgMftMchResidualsPtLow{" cfgMftMchResidualsPtLow" , 4 .f , " " };
156158
@@ -280,7 +282,7 @@ struct muonGlobalAlignment {
280282 std::map<uint64_t , CollisionInfo>& collisionInfos)
281283 {
282284 // fill collision information for global muon tracks (MFT-MCH-MID matches)
283- for (auto muonTrack : muonTracks) {
285+ for (const auto & muonTrack : muonTracks) {
284286 if (!muonTrack.has_collision ())
285287 continue ;
286288
@@ -1526,11 +1528,13 @@ struct muonGlobalAlignment {
15261528 }
15271529
15281530 if (cfgEnableVertexShiftAnalysis) {
1529- if (mftTrack.chi2 () <= cfgTrackChi2MftUp && std::fabs (collision.posZ ()) < 1 .f && mftNclusters >= 6 ) {
1530- float zshift[21 ] = {// in millimeters
1531+ static constexpr int nMftClustersMin = 6 ;
1532+ if (mftTrack.chi2 () <= cfgTrackChi2MftUp && std::fabs (collision.posZ ()) < 1 .f && mftNclusters >= nMftClustersMin) {
1533+ static constexpr int nPoints = 21 ;
1534+ float zshift[nPoints] = {// in millimeters
15311535 -5.0 , -4.5 , -4.0 , -3.5 , -3.0 , -2.5 , -2.0 , -1.5 , -1.0 , -0.5 , 0.0 ,
15321536 0.5 , 1.0 , 1.5 , 2.0 , 2.5 , 3.0 , 3.5 , 4.0 , 4.5 , 5.0 };
1533- for (int zi = 0 ; zi < 21 ; zi++) {
1537+ for (int zi = 0 ; zi < nPoints ; zi++) {
15341538 auto mftTrackAtDCAshifted = PropagateMFTToDCA (mftTrack, collision, zshift[zi] / 10 .f );
15351539 double dcaxShifted = mftTrackAtDCAshifted.getX () - collision.posX ();
15361540 double dcayShifted = mftTrackAtDCAshifted.getY () - collision.posY ();
@@ -1557,15 +1561,15 @@ struct muonGlobalAlignment {
15571561 const auto & mchTrack = muonTrack.template matchMCHTrack_as <MyMuonsWithCov>();
15581562 const auto & mftTrack = muonTrack.template matchMFTTrack_as <MyMFTs>();
15591563
1560- if (muonTrack.chi2MatchMCHMFT () < 50 ) {
1564+ if (muonTrack.chi2MatchMCHMFT () < cfgMftDcaMatchChi2Up. value ) {
15611565 continue ;
15621566 }
15631567
15641568 if (globalTracksVector.size () > 1 ) {
15651569 auto const & muonTrack2 = muonTracks.rawIteratorAt (globalTracksVector[1 ]);
15661570 double dchi2 = muonTrack2.chi2MatchMCHMFT () - muonTrack.chi2MatchMCHMFT ();
15671571
1568- if (dchi2 < 50 ) {
1572+ if (dchi2 < cfgMftDcaMatchChi2Up. value ) {
15691573 continue ;
15701574 }
15711575 }
@@ -1608,7 +1612,7 @@ struct muonGlobalAlignment {
16081612
16091613 int deId = cluster.deId ();
16101614 int chamber = deId / 100 - 1 ;
1611- if (chamber < 0 || chamber > 9 ) {
1615+ if (chamber < 0 || chamber >= NMchChambers ) {
16121616 continue ;
16131617 }
16141618
@@ -1707,8 +1711,8 @@ struct muonGlobalAlignment {
17071711 if (!isGoodMFT)
17081712 continue ;
17091713
1710- double matchChi2 = muonTrack.chi2MatchMCHMFT () / 5 . f ;
1711- if (matchChi2 > 10 . f )
1714+ double matchChi2 = muonTrack.chi2MatchMCHMFT ();
1715+ if (matchChi2 > cfgMftDcaMatchChi2Up. value )
17121716 continue ;
17131717
17141718 // refit MCH track if enabled
@@ -1731,7 +1735,7 @@ struct muonGlobalAlignment {
17311735 for (auto const & cluster : clustersSliced) {
17321736 int deId = cluster.deId ();
17331737 int chamber = deId / 100 - 1 ;
1734- if (chamber < 0 || chamber > 9 )
1738+ if (chamber < 0 || chamber >= NMchChambers )
17351739 continue ;
17361740 int deIndex = getDEindex (deId);
17371741
@@ -1827,15 +1831,16 @@ struct muonGlobalAlignment {
18271831
18281832 // MFT-MCH track residuals analysis
18291833 if (cfgEnableMftMchMatchingAnalysis && convertedTrackWithCorrOk) {
1830- double refPlaneZ[2 ] = {cfgRefPlaneZMFT, cfgRefPlaneZMCH};
1834+ static constexpr int nRefPlanes = 2 ;
1835+ double refPlaneZ[nRefPlanes] = {cfgRefPlaneZMFT, cfgRefPlaneZMCH};
18311836
18321837 std::shared_ptr<THnSparse> dxPlots[2 ]{registry.get <THnSparse>(HIST (" matching/dxAtMFT" )), registry.get <THnSparse>(HIST (" matching/dxAtMCH" ))};
18331838 std::shared_ptr<THnSparse> dyPlots[2 ]{registry.get <THnSparse>(HIST (" matching/dyAtMFT" )), registry.get <THnSparse>(HIST (" matching/dyAtMCH" ))};
18341839 std::shared_ptr<THnSparse> dsxPlots[2 ]{registry.get <THnSparse>(HIST (" matching/dsxAtMFT" )), registry.get <THnSparse>(HIST (" matching/dsxAtMCH" ))};
18351840 std::shared_ptr<THnSparse> dsyPlots[2 ]{registry.get <THnSparse>(HIST (" matching/dsyAtMFT" )), registry.get <THnSparse>(HIST (" matching/dsyAtMCH" ))};
18361841 std::shared_ptr<THnSparse> dphiPlots[2 ]{registry.get <THnSparse>(HIST (" matching/dphiAtMFT" )), registry.get <THnSparse>(HIST (" matching/dphiAtMCH" ))};
18371842
1838- for (int iRefPlane = 0 ; iRefPlane < 2 ; iRefPlane++) {
1843+ for (int iRefPlane = 0 ; iRefPlane < nRefPlanes ; iRefPlane++) {
18391844 const auto mftTrackAtRefPlane = configRealign.cfgEnableMCHRealign ? PropagateMFTtoMCH (mftTrack, mch::TrackParam (convertedTrackWithCorr.first ()), refPlaneZ[iRefPlane]) : PropagateMFTtoMCH (mftTrack, FwdtoMCH (FwdToTrackPar (mchTrack)), refPlaneZ[iRefPlane]);
18401845 const auto mchTrackAtRefPlane = configRealign.cfgEnableMCHRealign ? PropagateMCHRealigned (convertedTrackWithCorr, refPlaneZ[iRefPlane]) : PropagateMCH (mchTrack, refPlaneZ[iRefPlane]);
18411846 const auto & refTrackAtRefPlane = (iRefPlane == 0 ) ? mftTrackAtRefPlane : mchTrackAtRefPlane;
0 commit comments