Skip to content

Commit 1e6a10d

Browse files
authored
[Common] Fix stale Q/Pt values in TrackTuner graph-based smearing (#15174)
1 parent cf8090c commit 1e6a10d

File tree

1 file changed

+35
-30
lines changed

1 file changed

+35
-30
lines changed

Common/Tools/TrackTuner.h

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -755,19 +755,24 @@ struct TrackTuner : o2::framework::ConfigurableGroup {
755755
dcaZResMC = evalGraph(ptMC, grDcaZResVsPtPionMC[phiBin].get());
756756
dcaZResData = evalGraph(ptMC, grDcaZResVsPtPionData[phiBin].get());
757757

758-
// For Q/Pt corrections, files on CCDB will be used if both qOverPtMC and qOverPtData are null
758+
// Local Q/Pt resolution: either the constant configurable value, or evaluated per-track from graphs
759+
double smearQOverPtMC = qOverPtMC;
760+
double smearQOverPtData = qOverPtData;
759761
if (updateCurvature || updateCurvatureIU) {
760-
if ((qOverPtMC < 0) || (qOverPtData < 0)) {
761-
if (debugInfo) {
762-
LOG(info) << "### q/pt smearing: qOverPtMC=" << qOverPtMC << ", qOverPtData=" << qOverPtData << ". One of them is negative. Retrieving then values from graphs from input .root file";
763-
}
762+
if ((smearQOverPtMC < 0) || (smearQOverPtData < 0)) {
764763
/// check that input graphs for q/pt smearing are correctly retrieved
765764
if (!grOneOverPtPionData.get() || !grOneOverPtPionMC.get()) {
766765
LOG(fatal) << "### q/pt smearing: input graphs not correctly retrieved. Aborting.";
767766
}
768-
qOverPtMC = std::max(0.0, evalGraph(ptMC, grOneOverPtPionMC.get()));
769-
qOverPtData = std::max(0.0, evalGraph(ptMC, grOneOverPtPionData.get()));
770-
} // qOverPtMC, qOverPtData block ends here
767+
smearQOverPtMC = std::max(0.0, evalGraph(ptMC, grOneOverPtPionMC.get()));
768+
smearQOverPtData = std::max(0.0, evalGraph(ptMC, grOneOverPtPionData.get()));
769+
if (debugInfo) {
770+
LOG(info) << "### q/pt graph-based smearing: pT=" << ptMC
771+
<< " sigma(1/pT)_MC=" << smearQOverPtMC
772+
<< " sigma(1/pT)_Data=" << smearQOverPtData
773+
<< " ratio(Data/MC)=" << (smearQOverPtMC > 0. ? smearQOverPtData / smearQOverPtMC : -1.);
774+
}
775+
} // smearQOverPtMC, smearQOverPtData block ends here
771776
} // updateCurvature, updateCurvatureIU block ends here
772777

773778
if (updateTrackDCAs) {
@@ -836,44 +841,44 @@ struct TrackTuner : o2::framework::ConfigurableGroup {
836841
// double dpt1o =pt1o-pt1mc;
837842
deltaQpt = trackParQPtMCRec - trackParQPtMC;
838843
// double dpt1n =dpt1o *(spt1o >0. ? (spt1n /spt1o ) : 1.);
839-
deltaQptTuned = deltaQpt * (qOverPtMC > 0. ? (qOverPtData / qOverPtMC) : 1.);
844+
deltaQptTuned = deltaQpt * (smearQOverPtMC > 0. ? (smearQOverPtData / smearQOverPtMC) : 1.);
840845
// double pt1n = pt1mc+dpt1n;
841846
trackParQPtTuned = trackParQPtMC + deltaQptTuned;
842847
trackParCov.setQ2Pt(trackParQPtTuned);
843848

844849
// updating track cov matrix elements for 1/Pt at innermost update point
845850
// if(sd0rpo>0. && spt1o>0.)covar[10]*=(sd0rpn/sd0rpo)*(spt1n/spt1o);//ypt
846851
sigma1PtY = trackParCov.getSigma1PtY();
847-
if (dcaXYResMC > 0. && qOverPtMC > 0.) {
848-
sigma1PtY *= ((dcaXYResData / dcaXYResMC) * (qOverPtData / qOverPtMC));
852+
if (dcaXYResMC > 0. && smearQOverPtMC > 0.) {
853+
sigma1PtY *= ((dcaXYResData / dcaXYResMC) * (smearQOverPtData / smearQOverPtMC));
849854
trackParCov.setCov(sigma1PtY, 10);
850855
}
851856

852857
// if(sd0zo>0. && spt1o>0.) covar[11]*=(sd0zn/sd0zo)*(spt1n/spt1o);//zpt
853858
sigma1PtZ = trackParCov.getSigma1PtZ();
854-
if (dcaZResMC > 0. && qOverPtMC > 0.) {
855-
sigma1PtZ *= ((dcaZResData / dcaZResMC) * (qOverPtData / qOverPtMC));
859+
if (dcaZResMC > 0. && smearQOverPtMC > 0.) {
860+
sigma1PtZ *= ((dcaZResData / dcaZResMC) * (smearQOverPtData / smearQOverPtMC));
856861
trackParCov.setCov(sigma1PtZ, 11);
857862
}
858863

859864
// if(spt1o>0.) covar[12]*=(spt1n/spt1o);//sinPhipt
860865
sigma1PtSnp = trackParCov.getSigma1PtSnp();
861-
if (qOverPtMC > 0.) {
862-
sigma1PtSnp *= (qOverPtData / qOverPtMC);
866+
if (smearQOverPtMC > 0.) {
867+
sigma1PtSnp *= (smearQOverPtData / smearQOverPtMC);
863868
trackParCov.setCov(sigma1PtSnp, 12);
864869
}
865870

866871
// if(spt1o>0.) covar[13]*=(spt1n/spt1o);//tanTpt
867872
sigma1PtTgl = trackParCov.getSigma1PtTgl();
868-
if (qOverPtMC > 0.) {
869-
sigma1PtTgl *= (qOverPtData / qOverPtMC);
873+
if (smearQOverPtMC > 0.) {
874+
sigma1PtTgl *= (smearQOverPtData / smearQOverPtMC);
870875
trackParCov.setCov(sigma1PtTgl, 13);
871876
}
872877

873878
// if(spt1o>0.) covar[14]*=(spt1n/spt1o)*(spt1n/spt1o);//ptpt
874879
sigma1Pt2 = trackParCov.getSigma1Pt2();
875-
if (qOverPtMC > 0.) {
876-
sigma1Pt2 *= (qOverPtData / qOverPtMC) * (qOverPtData / qOverPtMC);
880+
if (smearQOverPtMC > 0.) {
881+
sigma1Pt2 *= (smearQOverPtData / smearQOverPtMC) * (smearQOverPtData / smearQOverPtMC);
877882
trackParCov.setCov(sigma1Pt2, 14);
878883
}
879884
} // updateCurvatureIU block ends here
@@ -969,7 +974,7 @@ struct TrackTuner : o2::framework::ConfigurableGroup {
969974
}
970975
deltaQpt = trackParQPtMCRec - trackParQPtMC;
971976
// double dpt1n =dpt1o *(spt1o >0. ? (spt1n /spt1o ) : 1.);
972-
deltaQptTuned = deltaQpt * (qOverPtMC > 0. ? (qOverPtData / qOverPtMC) : 1.);
977+
deltaQptTuned = deltaQpt * (smearQOverPtMC > 0. ? (smearQOverPtData / smearQOverPtMC) : 1.);
973978
// double pt1n = pt1mc+dpt1n;
974979
trackParQPtTuned = trackParQPtMC + deltaQptTuned;
975980
trackParCov.setQ2Pt(trackParQPtTuned);
@@ -1030,36 +1035,36 @@ struct TrackTuner : o2::framework::ConfigurableGroup {
10301035
if ((updateCurvature) && (!updateCurvatureIU)) {
10311036
// if(sd0rpo>0. && spt1o>0.)covar[10]*=(sd0rpn/sd0rpo)*(spt1n/spt1o);//ypt
10321037
sigma1PtY = trackParCov.getSigma1PtY();
1033-
if (dcaXYResMC > 0. && qOverPtMC > 0.) {
1034-
sigma1PtY *= ((dcaXYResData / dcaXYResMC) * (qOverPtData / qOverPtMC));
1038+
if (dcaXYResMC > 0. && smearQOverPtMC > 0.) {
1039+
sigma1PtY *= ((dcaXYResData / dcaXYResMC) * (smearQOverPtData / smearQOverPtMC));
10351040
trackParCov.setCov(sigma1PtY, 10);
10361041
}
10371042

10381043
// if(sd0zo>0. && spt1o>0.) covar[11]*=(sd0zn/sd0zo)*(spt1n/spt1o);//zpt
10391044
sigma1PtZ = trackParCov.getSigma1PtZ();
1040-
if (dcaZResMC > 0. && qOverPtMC > 0.) {
1041-
sigma1PtZ *= ((dcaZResData / dcaZResMC) * (qOverPtData / qOverPtMC));
1045+
if (dcaZResMC > 0. && smearQOverPtMC > 0.) {
1046+
sigma1PtZ *= ((dcaZResData / dcaZResMC) * (smearQOverPtData / smearQOverPtMC));
10421047
trackParCov.setCov(sigma1PtZ, 11);
10431048
}
10441049

10451050
// if(spt1o>0.) covar[12]*=(spt1n/spt1o);//sinPhipt
10461051
sigma1PtSnp = trackParCov.getSigma1PtSnp();
1047-
if (qOverPtMC > 0.) {
1048-
sigma1PtSnp *= (qOverPtData / qOverPtMC);
1052+
if (smearQOverPtMC > 0.) {
1053+
sigma1PtSnp *= (smearQOverPtData / smearQOverPtMC);
10491054
trackParCov.setCov(sigma1PtSnp, 12);
10501055
}
10511056

10521057
// if(spt1o>0.) covar[13]*=(spt1n/spt1o);//tanTpt
10531058
sigma1PtTgl = trackParCov.getSigma1PtTgl();
1054-
if (qOverPtMC > 0.) {
1055-
sigma1PtTgl *= (qOverPtData / qOverPtMC);
1059+
if (smearQOverPtMC > 0.) {
1060+
sigma1PtTgl *= (smearQOverPtData / smearQOverPtMC);
10561061
trackParCov.setCov(sigma1PtTgl, 13);
10571062
}
10581063

10591064
// if(spt1o>0.) covar[14]*=(spt1n/spt1o)*(spt1n/spt1o);//ptpt
10601065
sigma1Pt2 = trackParCov.getSigma1Pt2();
1061-
if (qOverPtMC > 0.) {
1062-
sigma1Pt2 *= (qOverPtData / qOverPtMC) * (qOverPtData / qOverPtMC);
1066+
if (smearQOverPtMC > 0.) {
1067+
sigma1Pt2 *= (smearQOverPtData / smearQOverPtMC) * (smearQOverPtData / smearQOverPtMC);
10631068
trackParCov.setCov(sigma1Pt2, 14);
10641069
}
10651070
} // ---> track cov matrix elements for 1/Pt ends here

0 commit comments

Comments
 (0)