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;
@@ -211,7 +214,7 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
211214
212215 int mRunNumber {0 }; // needed to detect if the run changed and trigger update of magnetic field
213216
214- Service<o2::ccdb::BasicCCDBManager> ccdbManager;
217+ Service<o2::ccdb::BasicCCDBManager> ccdbManager{} ;
215218 o2::field::MagneticField* fieldB{nullptr };
216219 o2::ccdb::CcdbApi ccdbApi;
217220
@@ -379,8 +382,8 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
379382 TrackExtrap::setField ();
380383 TrackExtrap::useExtrapV2 ();
381384 fieldB = static_cast <o2::field::MagneticField*>(TGeoGlobalMagField::Instance ()->GetField ()); // for MFT
382- double centerMFT[ 3 ] = {0 , 0 , -61.4 }; // or use middle point between Vtx and MFT?
383- mBzAtMftCenter = fieldB->getBz (centerMFT);
385+ std::array< double , 3 > centerMFT {0 , 0 , -61.4 }; // or use middle point between Vtx and MFT?
386+ mBzAtMftCenter = fieldB->getBz (centerMFT. data () );
384387 } else {
385388 LOGF (fatal, " GRP object is not available in CCDB at timestamp=%llu" , bc.timestamp ());
386389 }
@@ -451,10 +454,10 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
451454 LOG (info) << " y: " << it->value [" y" ].GetDouble ();
452455 LOG (info) << " z: " << it->value [" z" ].GetDouble ();
453456
454- mMchAlignmentCorrections [std::stoi (it->name .GetString ())] = {
455- it->value [" x" ].GetDouble (),
456- it->value [" y" ].GetDouble (),
457- it->value [" z" ].GetDouble ()};
457+ mMchAlignmentCorrections [std::stoi (it->name .GetString ())] = AlignmentCorrections {
458+ . x = it->value [" x" ].GetDouble (),
459+ . y = it->value [" y" ].GetDouble (),
460+ . z = it->value [" z" ].GetDouble ()};
458461 }
459462 } else {
460463 LOG (error) << " JSON parse error: " << rapidjson::GetParseErrorFunc (jsonOk.Code ()) << " (" << jsonOk.Offset () << " )" ;
@@ -624,13 +627,13 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
624627
625628 int GetDetElemId (int iDetElemNumber)
626629 {
627- const int fgNCh = 10 ;
628- const int fgNDetElemCh[ fgNCh] = {4 , 4 , 4 , 4 , 18 , 18 , 26 , 26 , 26 , 26 };
629- const int fgSNDetElemCh[ fgNCh + 1 ] = {0 , 4 , 8 , 12 , 16 , 34 , 52 , 78 , 104 , 130 , 156 };
630+ constexpr int fgNCh = 10 ;
631+ const std::array< int , fgNCh> fgNDetElemCh {4 , 4 , 4 , 4 , 18 , 18 , 26 , 26 , 26 , 26 };
632+ const std::array< int , fgNCh + 1 > fgSNDetElemCh {0 , 4 , 8 , 12 , 16 , 34 , 52 , 78 , 104 , 130 , 156 };
630633
631634 // make sure detector number is valid
632- if (!( iDetElemNumber >= fgSNDetElemCh[0 ] &&
633- iDetElemNumber < fgSNDetElemCh[10 ]) ) {
635+ if (iDetElemNumber < fgSNDetElemCh[0 ] ||
636+ iDetElemNumber >= fgSNDetElemCh[10 ]) {
634637 LOGF (fatal, " Invalid detector element number: %d" , iDetElemNumber);
635638 }
636639 // / get det element number from ID
@@ -646,7 +649,7 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
646649 }
647650
648651 // make sure detector index is valid
649- if (!( iCh > 0 && iCh <= NMchChambers && iDet < fgNDetElemCh[iCh - 1 ]) ) {
652+ if (iCh <= 0 || iCh > NMchChambers || iDet >= fgNDetElemCh[iCh - 1 ]) {
650653 LOGF (fatal, " Invalid detector element id: %d" , 100 * iCh + iDet);
651654 }
652655
@@ -753,18 +756,18 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
753756 // MCH track format.
754757
755758 // Parameter conversion
756- double alpha1, alpha3, alpha4, x2, x3, x4;
759+ // double alpha1, alpha3, alpha4, x2, x3, x4;
757760
758- x2 = fwdtrack.getPhi ();
759- x3 = fwdtrack.getTanl ();
760- x4 = fwdtrack.getInvQPt ();
761+ double x2 = fwdtrack.getPhi ();
762+ double x3 = fwdtrack.getTanl ();
763+ double x4 = fwdtrack.getInvQPt ();
761764
762765 auto sinx2 = TMath::Sin (x2);
763766 auto cosx2 = TMath::Cos (x2);
764767
765- alpha1 = cosx2 / x3;
766- alpha3 = sinx2 / x3;
767- alpha4 = x4 / TMath::Sqrt (x3 * x3 + sinx2 * sinx2);
768+ double alpha1 = cosx2 / x3;
769+ double alpha3 = sinx2 / x3;
770+ double alpha4 = x4 / TMath::Sqrt (x3 * x3 + sinx2 * sinx2);
768771
769772 auto K = TMath::Sqrt (x3 * x3 + sinx2 * sinx2);
770773 auto K3 = K * K * K;
@@ -809,11 +812,11 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
809812 // jacobian*covariances*jacobian^T
810813 covariances = ROOT::Math::Similarity (jacobian, covariances);
811814
812- 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 )};
813- double param[] = {fwdtrack.getX (), alpha1, fwdtrack.getY (), alpha3, alpha4};
815+ 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 )};
816+ const double param[5 ] {fwdtrack.getX (), alpha1, fwdtrack.getY (), alpha3, alpha4};
814817
815818 o2::mch::TrackParam convertedTrack (fwdtrack.getZ (), param, cov);
816- return o2::mch::TrackParam ( convertedTrack) ;
819+ return { convertedTrack} ;
817820 }
818821
819822 static o2::dataformats::GlobalFwdTrack MCHtoFwd (const o2::mch::TrackParam& mchParam)
@@ -827,15 +830,15 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
827830 o2::dataformats::GlobalFwdTrack convertedTrack;
828831
829832 // Parameter conversion
830- double alpha1, alpha3, alpha4, x2, x3, x4;
833+ // double alpha1, alpha3, alpha4, x2, x3, x4;
831834
832- alpha1 = mchParam.getNonBendingSlope ();
833- alpha3 = mchParam.getBendingSlope ();
834- alpha4 = mchParam.getInverseBendingMomentum ();
835+ double alpha1 = mchParam.getNonBendingSlope ();
836+ double alpha3 = mchParam.getBendingSlope ();
837+ double alpha4 = mchParam.getInverseBendingMomentum ();
835838
836- x2 = TMath::ATan2 (-alpha3, -alpha1);
837- x3 = -1 . / TMath::Sqrt (alpha3 * alpha3 + alpha1 * alpha1);
838- x4 = alpha4 * -x3 * TMath::Sqrt (1 + alpha3 * alpha3);
839+ double x2 = TMath::ATan2 (-alpha3, -alpha1);
840+ double x3 = -1 . / TMath::Sqrt (alpha3 * alpha3 + alpha1 * alpha1);
841+ double x4 = alpha4 * -x3 * TMath::Sqrt (1 + alpha3 * alpha3);
839842
840843 auto K = alpha1 * alpha1 + alpha3 * alpha3;
841844 auto K32 = K * TMath::Sqrt (K);
@@ -947,14 +950,14 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
947950 if (track.getNClusters () < NMchChambers) {
948951 removeTrack = true ;
949952 break ;
950- } else {
951- while (itNextToNextParam != track.end ()) {
952- if (itNextToNextParam->getClusterPtr ()->getChamberId () != itNextParam->getClusterPtr ()->getChamberId ()) {
953- itStartingParam = std::make_reverse_iterator (++itNextParam);
954- break ;
955- }
956- ++itNextToNextParam;
953+ }
954+
955+ while (itNextToNextParam != track.end ()) {
956+ if (itNextToNextParam->getClusterPtr ()->getChamberId () != itNextParam->getClusterPtr ()->getChamberId ()) {
957+ itStartingParam = std::make_reverse_iterator (++itNextParam);
958+ break ;
957959 }
960+ ++itNextToNextParam;
958961 }
959962 }
960963
@@ -1012,11 +1015,8 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
10121015 double pResEffect = sigmaPDCA / (1 . - nrp / (1 . + nrp));
10131016 double slopeResEffect = SlopeResolutionZ * slopeRes * p;
10141017 double sigmaPDCAWithRes = TMath::Sqrt (pResEffect * pResEffect + slopeResEffect * slopeResEffect);
1015- if (pDCA > nSigmaPDCA * sigmaPDCAWithRes) {
1016- return false ;
1017- }
10181018
1019- return true ;
1019+ return (pDCA <= nSigmaPDCA * sigmaPDCAWithRes) ;
10201020 }
10211021
10221022 template <class T , class C >
@@ -1110,7 +1110,7 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
11101110
11111111 TransformMFTPar (mchTrack);
11121112
1113- auto transformedTrack = sExtrap . MCHtoFwd (mchTrack);
1113+ auto transformedTrack = MCHtoFwd (mchTrack);
11141114 track.setParameters (transformedTrack.getParameters ());
11151115 track.setZ (transformedTrack.getZ ());
11161116 track.setCovariances (transformedTrack.getCovariances ());
@@ -1127,7 +1127,7 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
11271127
11281128 TransformMFTPar (mchTrack);
11291129
1130- auto transformedTrack = sExtrap . MCHtoFwd (mchTrack);
1130+ auto transformedTrack = MCHtoFwd (mchTrack);
11311131 fwdtrack.setParameters (transformedTrack.getParameters ());
11321132 fwdtrack.setZ (transformedTrack.getZ ());
11331133 fwdtrack.setCovariances (transformedTrack.getCovariances ());
@@ -1474,9 +1474,9 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
14741474 double chi2NDF = static_cast <double >(mftNclusters) * 2 - 5 ;
14751475
14761476 const int nMftLayers = 10 ;
1477- std::array<bool , 10 > firedLayers;
1477+ std::array<bool , 10 > firedLayers{ false } ;
14781478 for (int layer = 0 ; layer < nMftLayers; layer++) {
1479- if ((mftTrack.mftClusterSizesAndTrackFlags () >> (layer * 6 )) & 0x3F ) {
1479+ if ((( mftTrack.mftClusterSizesAndTrackFlags () >> (layer * 6 )) & 0x3F ) != 0 ) {
14801480 firedLayers[layer] = true ;
14811481 } else {
14821482 firedLayers[layer] = false ;
@@ -1530,9 +1530,9 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
15301530 static constexpr int nMftClustersMin = 6 ;
15311531 if (mftTrack.chi2 () <= cfgTrackChi2MftUp && std::fabs (collision.posZ ()) < 1 .f && mftNclusters >= nMftClustersMin) {
15321532 static constexpr int nPoints = 21 ;
1533- float zshift[ nPoints] = {// in millimeters
1534- -5.0 , -4.5 , -4.0 , -3.5 , -3.0 , -2.5 , -2.0 , -1.5 , -1.0 , -0.5 , 0.0 ,
1535- 0.5 , 1.0 , 1.5 , 2.0 , 2.5 , 3.0 , 3.5 , 4.0 , 4.5 , 5.0 };
1533+ const std::array< float , nPoints> zshift {// in millimeters
1534+ -5.0 , -4.5 , -4.0 , -3.5 , -3.0 , -2.5 , -2.0 , -1.5 , -1.0 , -0.5 , 0.0 ,
1535+ 0.5 , 1.0 , 1.5 , 2.0 , 2.5 , 3.0 , 3.5 , 4.0 , 4.5 , 5.0 };
15361536 for (int zi = 0 ; zi < nPoints; zi++) {
15371537 auto mftTrackAtDCAshifted = PropagateMFTToDCA (mftTrack, collision, zshift[zi] / 10 .f );
15381538 double dcaxShifted = mftTrackAtDCAshifted.getX () - collision.posX ();
@@ -1642,7 +1642,7 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
16421642 }
16431643
16441644 // realigned MCH cluster
1645- mch::Cluster* clusterMCH = new mch::Cluster ();
1645+ auto clusterMCH = new mch::Cluster ();
16461646 clusterMCH->x = master.x ();
16471647 clusterMCH->y = master.y ();
16481648 clusterMCH->z = master.z ();
@@ -1831,13 +1831,13 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
18311831 // MFT-MCH track residuals analysis
18321832 if (cfgEnableMftMchMatchingAnalysis && convertedTrackWithCorrOk) {
18331833 static constexpr int nRefPlanes = 2 ;
1834- const double refPlaneZ[ nRefPlanes] = {cfgRefPlaneZMFT, cfgRefPlaneZMCH};
1834+ const std::array< double , nRefPlanes> refPlaneZ {cfgRefPlaneZMFT, cfgRefPlaneZMCH};
18351835
1836- std::shared_ptr<THnSparse> dxPlots[ 2 ] {registry.get <THnSparse>(HIST (" matching/dxAtMFT" )), registry.get <THnSparse>(HIST (" matching/dxAtMCH" ))};
1837- std::shared_ptr<THnSparse> dyPlots[ 2 ] {registry.get <THnSparse>(HIST (" matching/dyAtMFT" )), registry.get <THnSparse>(HIST (" matching/dyAtMCH" ))};
1838- std::shared_ptr<THnSparse> dsxPlots[ 2 ] {registry.get <THnSparse>(HIST (" matching/dsxAtMFT" )), registry.get <THnSparse>(HIST (" matching/dsxAtMCH" ))};
1839- std::shared_ptr<THnSparse> dsyPlots[ 2 ] {registry.get <THnSparse>(HIST (" matching/dsyAtMFT" )), registry.get <THnSparse>(HIST (" matching/dsyAtMCH" ))};
1840- std::shared_ptr<THnSparse> dphiPlots[ 2 ] {registry.get <THnSparse>(HIST (" matching/dphiAtMFT" )), registry.get <THnSparse>(HIST (" matching/dphiAtMCH" ))};
1836+ std::array<std:: shared_ptr<THnSparse>, 2 > dxPlots {registry.get <THnSparse>(HIST (" matching/dxAtMFT" )), registry.get <THnSparse>(HIST (" matching/dxAtMCH" ))};
1837+ std::array<std:: shared_ptr<THnSparse>, 2 > dyPlots {registry.get <THnSparse>(HIST (" matching/dyAtMFT" )), registry.get <THnSparse>(HIST (" matching/dyAtMCH" ))};
1838+ std::array<std:: shared_ptr<THnSparse>, 2 > dsxPlots {registry.get <THnSparse>(HIST (" matching/dsxAtMFT" )), registry.get <THnSparse>(HIST (" matching/dsxAtMCH" ))};
1839+ std::array<std:: shared_ptr<THnSparse>, 2 > dsyPlots {registry.get <THnSparse>(HIST (" matching/dsyAtMFT" )), registry.get <THnSparse>(HIST (" matching/dsyAtMCH" ))};
1840+ std::array<std:: shared_ptr<THnSparse>, 2 > dphiPlots {registry.get <THnSparse>(HIST (" matching/dphiAtMFT" )), registry.get <THnSparse>(HIST (" matching/dphiAtMCH" ))};
18411841
18421842 for (int iRefPlane = 0 ; iRefPlane < nRefPlanes; iRefPlane++) {
18431843 const auto mftTrackAtRefPlane = configRealign.cfgEnableMCHRealign ? PropagateMFTtoMCH (mftTrack, mch::TrackParam (convertedTrackWithCorr.first ()), refPlaneZ[iRefPlane]) : PropagateMFTtoMCH (mftTrack, FwdtoMCH (FwdToTrackPar (mchTrack)), refPlaneZ[iRefPlane]);
0 commit comments