1919#include " Common/CCDB/RCTSelectionFlags.h"
2020#include " Common/DataModel/EventSelection.h"
2121#include " Common/DataModel/TrackSelectionTables.h"
22+ #include < CommonUtils/ConfigurableParam.h>
23+ #include < CommonConstants/MathConstants.h>
24+ #include " Common/Core/RecoDecay.h"
2225
2326#include < CCDB/BasicCCDBManager.h>
2427#include < CCDB/CcdbApi.h>
7982#include < unordered_map>
8083#include < vector>
8184
82- #include < math.h >
85+ #include < cmath >
8386
8487using namespace o2 ;
8588using namespace o2 ::mch;
@@ -109,7 +112,7 @@ using MyMFTCovariance = MyMFTCovariances::iterator;
109112using SMatrix55 = ROOT ::Math::SMatrix<double , 5 , 5 , ROOT ::Math::MatRepSym<double , 5 >>;
110113using SMatrix5 = ROOT ::Math::SVector<Double_t, 5 >;
111114
112- static o2::globaltracking::MatchGlobalFwd sExtrap ;
115+ // static o2::globaltracking::MatchGlobalFwd sExtrap;
113116
114117using o2::dataformats::GlobalFwdTrack;
115118using o2::track::TrackParCovFwd;
@@ -218,7 +221,7 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
218221
219222 int mRunNumber {0 }; // needed to detect if the run changed and trigger update of magnetic field
220223
221- Service<o2::ccdb::BasicCCDBManager> ccdbManager;
224+ Service<o2::ccdb::BasicCCDBManager> ccdbManager{} ;
222225 o2::field::MagneticField* fieldB{nullptr };
223226 o2::ccdb::CcdbApi ccdbApi;
224227
@@ -386,8 +389,8 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
386389 TrackExtrap::setField ();
387390 TrackExtrap::useExtrapV2 ();
388391 fieldB = static_cast <o2::field::MagneticField*>(TGeoGlobalMagField::Instance ()->GetField ()); // for MFT
389- double centerMFT[ 3 ] = {0 , 0 , -61.4 }; // or use middle point between Vtx and MFT?
390- mBzAtMftCenter = fieldB->getBz (centerMFT);
392+ std::array< double , 3 > centerMFT {0 , 0 , -61.4 }; // or use middle point between Vtx and MFT?
393+ mBzAtMftCenter = fieldB->getBz (centerMFT. data () );
391394 } else {
392395 LOGF (fatal, " GRP object is not available in CCDB at timestamp=%llu" , bc.timestamp ());
393396 }
@@ -459,10 +462,10 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
459462 LOG (info) << " y: " << it->value [" y" ].GetDouble ();
460463 LOG (info) << " z: " << it->value [" z" ].GetDouble ();
461464
462- mMchAlignmentCorrections [std::stoi (it->name .GetString ())] = {
463- it->value [" x" ].GetDouble (),
464- it->value [" y" ].GetDouble (),
465- it->value [" z" ].GetDouble ()};
465+ mMchAlignmentCorrections [std::stoi (it->name .GetString ())] = AlignmentCorrections {
466+ . x = it->value [" x" ].GetDouble (),
467+ . y = it->value [" y" ].GetDouble (),
468+ . z = it->value [" z" ].GetDouble ()};
466469 }
467470 } else {
468471 LOG (error) << " JSON parse error: " << rapidjson::GetParseErrorFunc (jsonOk.Code ()) << " (" << jsonOk.Offset () << " )" ;
@@ -632,13 +635,13 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
632635
633636 int GetDetElemId (int iDetElemNumber)
634637 {
635- const int fgNCh = 10 ;
636- const int fgNDetElemCh[ fgNCh] = {4 , 4 , 4 , 4 , 18 , 18 , 26 , 26 , 26 , 26 };
637- const int fgSNDetElemCh[ fgNCh + 1 ] = {0 , 4 , 8 , 12 , 16 , 34 , 52 , 78 , 104 , 130 , 156 };
638+ constexpr int fgNCh = 10 ;
639+ const std::array< int , fgNCh> fgNDetElemCh {4 , 4 , 4 , 4 , 18 , 18 , 26 , 26 , 26 , 26 };
640+ const std::array< int , fgNCh + 1 > fgSNDetElemCh {0 , 4 , 8 , 12 , 16 , 34 , 52 , 78 , 104 , 130 , 156 };
638641
639642 // make sure detector number is valid
640- if (!( iDetElemNumber >= fgSNDetElemCh[0 ] &&
641- iDetElemNumber < fgSNDetElemCh[10 ]) ) {
643+ if (iDetElemNumber < fgSNDetElemCh[0 ] ||
644+ iDetElemNumber >= fgSNDetElemCh[10 ]) {
642645 LOGF (fatal, " Invalid detector element number: %d" , iDetElemNumber);
643646 }
644647 // / get det element number from ID
@@ -654,7 +657,7 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
654657 }
655658
656659 // make sure detector index is valid
657- if (!( iCh > 0 && iCh <= NMchChambers && iDet < fgNDetElemCh[iCh - 1 ]) ) {
660+ if (iCh <= 0 || iCh > NMchChambers || iDet >= fgNDetElemCh[iCh - 1 ]) {
658661 LOGF (fatal, " Invalid detector element id: %d" , 100 * iCh + iDet);
659662 }
660663
@@ -761,18 +764,18 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
761764 // MCH track format.
762765
763766 // Parameter conversion
764- double alpha1, alpha3, alpha4, x2, x3, x4;
767+ // double alpha1, alpha3, alpha4, x2, x3, x4;
765768
766- x2 = fwdtrack.getPhi ();
767- x3 = fwdtrack.getTanl ();
768- x4 = fwdtrack.getInvQPt ();
769+ double x2 = fwdtrack.getPhi ();
770+ double x3 = fwdtrack.getTanl ();
771+ double x4 = fwdtrack.getInvQPt ();
769772
770773 auto sinx2 = TMath::Sin (x2);
771774 auto cosx2 = TMath::Cos (x2);
772775
773- alpha1 = cosx2 / x3;
774- alpha3 = sinx2 / x3;
775- alpha4 = x4 / TMath::Sqrt (x3 * x3 + sinx2 * sinx2);
776+ double alpha1 = cosx2 / x3;
777+ double alpha3 = sinx2 / x3;
778+ double alpha4 = x4 / TMath::Sqrt (x3 * x3 + sinx2 * sinx2);
776779
777780 auto K = TMath::Sqrt (x3 * x3 + sinx2 * sinx2);
778781 auto K3 = K * K * K;
@@ -817,11 +820,11 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
817820 // jacobian*covariances*jacobian^T
818821 covariances = ROOT::Math::Similarity (jacobian, covariances);
819822
820- double cov[] = {covariances (0 , 0 ), covariances (1 , 0 ), covariances (1 , 1 ), covariances (2 , 0 ), covariances (2 , 1 ), covariances (2 , 2 ), covariances (3 , 0 ), covariances (3 , 1 ), covariances (3 , 2 ), covariances (3 , 3 ), covariances (4 , 0 ), covariances (4 , 1 ), covariances (4 , 2 ), covariances (4 , 3 ), covariances (4 , 4 )};
821- double param[] = {fwdtrack.getX (), alpha1, fwdtrack.getY (), alpha3, alpha4};
823+ const double cov[15 ] {covariances (0 , 0 ), covariances (1 , 0 ), covariances (1 , 1 ), covariances (2 , 0 ), covariances (2 , 1 ), covariances (2 , 2 ), covariances (3 , 0 ), covariances (3 , 1 ), covariances (3 , 2 ), covariances (3 , 3 ), covariances (4 , 0 ), covariances (4 , 1 ), covariances (4 , 2 ), covariances (4 , 3 ), covariances (4 , 4 )};
824+ const double param[5 ] {fwdtrack.getX (), alpha1, fwdtrack.getY (), alpha3, alpha4};
822825
823826 o2::mch::TrackParam convertedTrack (fwdtrack.getZ (), param, cov);
824- return o2::mch::TrackParam ( convertedTrack) ;
827+ return { convertedTrack} ;
825828 }
826829
827830 static o2::dataformats::GlobalFwdTrack MCHtoFwd (const o2::mch::TrackParam& mchParam)
@@ -835,15 +838,15 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
835838 o2::dataformats::GlobalFwdTrack convertedTrack;
836839
837840 // Parameter conversion
838- double alpha1, alpha3, alpha4, x2, x3, x4;
841+ // double alpha1, alpha3, alpha4, x2, x3, x4;
839842
840- alpha1 = mchParam.getNonBendingSlope ();
841- alpha3 = mchParam.getBendingSlope ();
842- alpha4 = mchParam.getInverseBendingMomentum ();
843+ double alpha1 = mchParam.getNonBendingSlope ();
844+ double alpha3 = mchParam.getBendingSlope ();
845+ double alpha4 = mchParam.getInverseBendingMomentum ();
843846
844- x2 = TMath::ATan2 (-alpha3, -alpha1);
845- x3 = -1 . / TMath::Sqrt (alpha3 * alpha3 + alpha1 * alpha1);
846- x4 = alpha4 * -x3 * TMath::Sqrt (1 + alpha3 * alpha3);
847+ double x2 = TMath::ATan2 (-alpha3, -alpha1);
848+ double x3 = -1 . / TMath::Sqrt (alpha3 * alpha3 + alpha1 * alpha1);
849+ double x4 = alpha4 * -x3 * TMath::Sqrt (1 + alpha3 * alpha3);
847850
848851 auto K = alpha1 * alpha1 + alpha3 * alpha3;
849852 auto K32 = K * TMath::Sqrt (K);
@@ -955,14 +958,14 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
955958 if (track.getNClusters () < NMchChambers) {
956959 removeTrack = true ;
957960 break ;
958- } else {
959- while (itNextToNextParam != track.end ()) {
960- if (itNextToNextParam->getClusterPtr ()->getChamberId () != itNextParam->getClusterPtr ()->getChamberId ()) {
961- itStartingParam = std::make_reverse_iterator (++itNextParam);
962- break ;
963- }
964- ++itNextToNextParam;
961+ }
962+
963+ while (itNextToNextParam != track.end ()) {
964+ if (itNextToNextParam->getClusterPtr ()->getChamberId () != itNextParam->getClusterPtr ()->getChamberId ()) {
965+ itStartingParam = std::make_reverse_iterator (++itNextParam);
966+ break ;
965967 }
968+ ++itNextToNextParam;
966969 }
967970 }
968971
@@ -1020,11 +1023,8 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
10201023 double pResEffect = sigmaPDCA / (1 . - nrp / (1 . + nrp));
10211024 double slopeResEffect = SlopeResolutionZ * slopeRes * p;
10221025 double sigmaPDCAWithRes = TMath::Sqrt (pResEffect * pResEffect + slopeResEffect * slopeResEffect);
1023- if (pDCA > nSigmaPDCA * sigmaPDCAWithRes) {
1024- return false ;
1025- }
10261026
1027- return true ;
1027+ return (pDCA <= nSigmaPDCA * sigmaPDCAWithRes) ;
10281028 }
10291029
10301030 template <class T , class C >
@@ -1118,7 +1118,7 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
11181118
11191119 TransformMFTPar (mchTrack);
11201120
1121- auto transformedTrack = sExtrap . MCHtoFwd (mchTrack);
1121+ auto transformedTrack = MCHtoFwd (mchTrack);
11221122 track.setParameters (transformedTrack.getParameters ());
11231123 track.setZ (transformedTrack.getZ ());
11241124 track.setCovariances (transformedTrack.getCovariances ());
@@ -1135,7 +1135,7 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
11351135
11361136 TransformMFTPar (mchTrack);
11371137
1138- auto transformedTrack = sExtrap . MCHtoFwd (mchTrack);
1138+ auto transformedTrack = MCHtoFwd (mchTrack);
11391139 fwdtrack.setParameters (transformedTrack.getParameters ());
11401140 fwdtrack.setZ (transformedTrack.getZ ());
11411141 fwdtrack.setCovariances (transformedTrack.getCovariances ());
@@ -1482,9 +1482,9 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
14821482 double chi2NDF = static_cast <double >(mftNclusters) * 2 - 5 ;
14831483
14841484 const int nMftLayers = 10 ;
1485- std::array<bool , 10 > firedLayers;
1485+ std::array<bool , 10 > firedLayers{ false } ;
14861486 for (int layer = 0 ; layer < nMftLayers; layer++) {
1487- if ((mftTrack.mftClusterSizesAndTrackFlags () >> (layer * 6 )) & 0x3F ) {
1487+ if ((( mftTrack.mftClusterSizesAndTrackFlags () >> (layer * 6 )) & 0x3F ) != 0 ) {
14881488 firedLayers[layer] = true ;
14891489 } else {
14901490 firedLayers[layer] = false ;
@@ -1538,9 +1538,9 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
15381538 static constexpr int nMftClustersMin = 6 ;
15391539 if (mftTrack.chi2 () <= cfgTrackChi2MftUp && std::fabs (collision.posZ ()) < 1 .f && mftNclusters >= nMftClustersMin) {
15401540 static constexpr int nPoints = 21 ;
1541- float zshift[ nPoints] = {// in millimeters
1542- -5.0 , -4.5 , -4.0 , -3.5 , -3.0 , -2.5 , -2.0 , -1.5 , -1.0 , -0.5 , 0.0 ,
1543- 0.5 , 1.0 , 1.5 , 2.0 , 2.5 , 3.0 , 3.5 , 4.0 , 4.5 , 5.0 };
1541+ const std::array< float , nPoints> zshift {// in millimeters
1542+ -5.0 , -4.5 , -4.0 , -3.5 , -3.0 , -2.5 , -2.0 , -1.5 , -1.0 , -0.5 , 0.0 ,
1543+ 0.5 , 1.0 , 1.5 , 2.0 , 2.5 , 3.0 , 3.5 , 4.0 , 4.5 , 5.0 };
15441544 for (int zi = 0 ; zi < nPoints; zi++) {
15451545 auto mftTrackAtDCAshifted = PropagateMFTToDCA (mftTrack, collision, zshift[zi] / 10 .f );
15461546 double dcaxShifted = mftTrackAtDCAshifted.getX () - collision.posX ();
@@ -1650,7 +1650,7 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
16501650 }
16511651
16521652 // realigned MCH cluster
1653- mch::Cluster* clusterMCH = new mch::Cluster ();
1653+ auto clusterMCH = new mch::Cluster ();
16541654 clusterMCH->x = master.x ();
16551655 clusterMCH->y = master.y ();
16561656 clusterMCH->z = master.z ();
@@ -1839,13 +1839,13 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
18391839 // MFT-MCH track residuals analysis
18401840 if (cfgEnableMftMchMatchingAnalysis && convertedTrackWithCorrOk) {
18411841 static constexpr int nRefPlanes = 2 ;
1842- const double refPlaneZ[ nRefPlanes] = {cfgRefPlaneZMFT, cfgRefPlaneZMCH};
1842+ const std::array< double , nRefPlanes> refPlaneZ {cfgRefPlaneZMFT, cfgRefPlaneZMCH};
18431843
1844- std::shared_ptr<THnSparse> dxPlots[ 2 ] {registry.get <THnSparse>(HIST (" matching/dxAtMFT" )), registry.get <THnSparse>(HIST (" matching/dxAtMCH" ))};
1845- std::shared_ptr<THnSparse> dyPlots[ 2 ] {registry.get <THnSparse>(HIST (" matching/dyAtMFT" )), registry.get <THnSparse>(HIST (" matching/dyAtMCH" ))};
1846- std::shared_ptr<THnSparse> dsxPlots[ 2 ] {registry.get <THnSparse>(HIST (" matching/dsxAtMFT" )), registry.get <THnSparse>(HIST (" matching/dsxAtMCH" ))};
1847- std::shared_ptr<THnSparse> dsyPlots[ 2 ] {registry.get <THnSparse>(HIST (" matching/dsyAtMFT" )), registry.get <THnSparse>(HIST (" matching/dsyAtMCH" ))};
1848- std::shared_ptr<THnSparse> dphiPlots[ 2 ] {registry.get <THnSparse>(HIST (" matching/dphiAtMFT" )), registry.get <THnSparse>(HIST (" matching/dphiAtMCH" ))};
1844+ std::array<std:: shared_ptr<THnSparse>, 2 > dxPlots {registry.get <THnSparse>(HIST (" matching/dxAtMFT" )), registry.get <THnSparse>(HIST (" matching/dxAtMCH" ))};
1845+ std::array<std:: shared_ptr<THnSparse>, 2 > dyPlots {registry.get <THnSparse>(HIST (" matching/dyAtMFT" )), registry.get <THnSparse>(HIST (" matching/dyAtMCH" ))};
1846+ std::array<std:: shared_ptr<THnSparse>, 2 > dsxPlots {registry.get <THnSparse>(HIST (" matching/dsxAtMFT" )), registry.get <THnSparse>(HIST (" matching/dsxAtMCH" ))};
1847+ std::array<std:: shared_ptr<THnSparse>, 2 > dsyPlots {registry.get <THnSparse>(HIST (" matching/dsyAtMFT" )), registry.get <THnSparse>(HIST (" matching/dsyAtMCH" ))};
1848+ std::array<std:: shared_ptr<THnSparse>, 2 > dphiPlots {registry.get <THnSparse>(HIST (" matching/dphiAtMFT" )), registry.get <THnSparse>(HIST (" matching/dphiAtMCH" ))};
18491849
18501850 for (int iRefPlane = 0 ; iRefPlane < nRefPlanes; iRefPlane++) {
18511851 const auto mftTrackAtRefPlane = configRealign.cfgEnableMCHRealign ? PropagateMFTtoMCH (mftTrack, mch::TrackParam (convertedTrackWithCorr.first ()), refPlaneZ[iRefPlane]) : PropagateMFTtoMCH (mftTrack, FwdtoMCH (FwdToTrackPar (mchTrack)), refPlaneZ[iRefPlane]);
0 commit comments