Skip to content

Commit 729f96c

Browse files
committed
More fixes
1 parent e184680 commit 729f96c

1 file changed

Lines changed: 57 additions & 57 deletions

File tree

PWGDQ/Tasks/muonGlobalAlignment.cxx

Lines changed: 57 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
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>
@@ -79,7 +82,7 @@
7982
#include <unordered_map>
8083
#include <vector>
8184

82-
#include <math.h>
85+
#include <cmath>
8386

8487
using namespace o2;
8588
using namespace o2::mch;
@@ -109,7 +112,7 @@ using MyMFTCovariance = MyMFTCovariances::iterator;
109112
using SMatrix55 = ROOT::Math::SMatrix<double, 5, 5, ROOT::Math::MatRepSym<double, 5>>;
110113
using SMatrix5 = ROOT::Math::SVector<Double_t, 5>;
111114

112-
static o2::globaltracking::MatchGlobalFwd sExtrap;
115+
//static o2::globaltracking::MatchGlobalFwd sExtrap;
113116

114117
using o2::dataformats::GlobalFwdTrack;
115118
using 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

Comments
 (0)