@@ -735,19 +735,24 @@ struct TrackTuner : o2::framework::ConfigurableGroup {
735735 dcaZResMC = evalGraph (ptMC, grDcaZResVsPtPionMC[phiBin].get ());
736736 dcaZResData = evalGraph (ptMC, grDcaZResVsPtPionData[phiBin].get ());
737737
738- // For Q/Pt corrections, files on CCDB will be used if both qOverPtMC and qOverPtData are null
738+ // Local Q/Pt resolution: either the constant configurable value, or evaluated per-track from graphs
739+ double currentQOverPtMC = qOverPtMC;
740+ double currentQOverPtData = qOverPtData;
739741 if (updateCurvature || updateCurvatureIU) {
740- if ((qOverPtMC < 0 ) || (qOverPtData < 0 )) {
741- if (debugInfo) {
742- LOG (info) << " ### q/pt smearing: qOverPtMC=" << qOverPtMC << " , qOverPtData=" << qOverPtData << " . One of them is negative. Retrieving then values from graphs from input .root file" ;
743- }
742+ if ((currentQOverPtMC < 0 ) || (currentQOverPtData < 0 )) {
744743 // / check that input graphs for q/pt smearing are correctly retrieved
745744 if (!grOneOverPtPionData.get () || !grOneOverPtPionMC.get ()) {
746745 LOG (fatal) << " ### q/pt smearing: input graphs not correctly retrieved. Aborting." ;
747746 }
748- qOverPtMC = std::max (0.0 , evalGraph (ptMC, grOneOverPtPionMC.get ()));
749- qOverPtData = std::max (0.0 , evalGraph (ptMC, grOneOverPtPionData.get ()));
750- } // qOverPtMC, qOverPtData block ends here
747+ currentQOverPtMC = std::max (0.0 , evalGraph (ptMC, grOneOverPtPionMC.get ()));
748+ currentQOverPtData = std::max (0.0 , evalGraph (ptMC, grOneOverPtPionData.get ()));
749+ if (debugInfo) {
750+ LOG (info) << " ### q/pt graph-based smearing: pT=" << ptMC
751+ << " sigma(1/pT)_MC=" << currentQOverPtMC
752+ << " sigma(1/pT)_Data=" << currentQOverPtData
753+ << " ratio(Data/MC)=" << (currentQOverPtMC > 0 . ? currentQOverPtData / currentQOverPtMC : -1 .);
754+ }
755+ } // currentQOverPtMC, currentQOverPtData block ends here
751756 } // updateCurvature, updateCurvatureIU block ends here
752757
753758 if (updateTrackDCAs) {
@@ -816,44 +821,44 @@ struct TrackTuner : o2::framework::ConfigurableGroup {
816821 // double dpt1o =pt1o-pt1mc;
817822 deltaQpt = trackParQPtMCRec - trackParQPtMC;
818823 // double dpt1n =dpt1o *(spt1o >0. ? (spt1n /spt1o ) : 1.);
819- deltaQptTuned = deltaQpt * (qOverPtMC > 0 . ? (qOverPtData / qOverPtMC ) : 1 .);
824+ deltaQptTuned = deltaQpt * (currentQOverPtMC > 0 . ? (currentQOverPtData / currentQOverPtMC ) : 1 .);
820825 // double pt1n = pt1mc+dpt1n;
821826 trackParQPtTuned = trackParQPtMC + deltaQptTuned;
822827 trackParCov.setQ2Pt (trackParQPtTuned);
823828
824829 // updating track cov matrix elements for 1/Pt at innermost update point
825830 // if(sd0rpo>0. && spt1o>0.)covar[10]*=(sd0rpn/sd0rpo)*(spt1n/spt1o);//ypt
826831 sigma1PtY = trackParCov.getSigma1PtY ();
827- if (dcaXYResMC > 0 . && qOverPtMC > 0 .) {
828- sigma1PtY *= ((dcaXYResData / dcaXYResMC) * (qOverPtData / qOverPtMC ));
832+ if (dcaXYResMC > 0 . && currentQOverPtMC > 0 .) {
833+ sigma1PtY *= ((dcaXYResData / dcaXYResMC) * (currentQOverPtData / currentQOverPtMC ));
829834 trackParCov.setCov (sigma1PtY, 10 );
830835 }
831836
832837 // if(sd0zo>0. && spt1o>0.) covar[11]*=(sd0zn/sd0zo)*(spt1n/spt1o);//zpt
833838 sigma1PtZ = trackParCov.getSigma1PtZ ();
834- if (dcaZResMC > 0 . && qOverPtMC > 0 .) {
835- sigma1PtZ *= ((dcaZResData / dcaZResMC) * (qOverPtData / qOverPtMC ));
839+ if (dcaZResMC > 0 . && currentQOverPtMC > 0 .) {
840+ sigma1PtZ *= ((dcaZResData / dcaZResMC) * (currentQOverPtData / currentQOverPtMC ));
836841 trackParCov.setCov (sigma1PtZ, 11 );
837842 }
838843
839844 // if(spt1o>0.) covar[12]*=(spt1n/spt1o);//sinPhipt
840845 sigma1PtSnp = trackParCov.getSigma1PtSnp ();
841- if (qOverPtMC > 0 .) {
842- sigma1PtSnp *= (qOverPtData / qOverPtMC );
846+ if (currentQOverPtMC > 0 .) {
847+ sigma1PtSnp *= (currentQOverPtData / currentQOverPtMC );
843848 trackParCov.setCov (sigma1PtSnp, 12 );
844849 }
845850
846851 // if(spt1o>0.) covar[13]*=(spt1n/spt1o);//tanTpt
847852 sigma1PtTgl = trackParCov.getSigma1PtTgl ();
848- if (qOverPtMC > 0 .) {
849- sigma1PtTgl *= (qOverPtData / qOverPtMC );
853+ if (currentQOverPtMC > 0 .) {
854+ sigma1PtTgl *= (currentQOverPtData / currentQOverPtMC );
850855 trackParCov.setCov (sigma1PtTgl, 13 );
851856 }
852857
853858 // if(spt1o>0.) covar[14]*=(spt1n/spt1o)*(spt1n/spt1o);//ptpt
854859 sigma1Pt2 = trackParCov.getSigma1Pt2 ();
855- if (qOverPtMC > 0 .) {
856- sigma1Pt2 *= (qOverPtData / qOverPtMC ) * (qOverPtData / qOverPtMC );
860+ if (currentQOverPtMC > 0 .) {
861+ sigma1Pt2 *= (currentQOverPtData / currentQOverPtMC ) * (currentQOverPtData / currentQOverPtMC );
857862 trackParCov.setCov (sigma1Pt2, 14 );
858863 }
859864 } // updateCurvatureIU block ends here
@@ -949,7 +954,7 @@ struct TrackTuner : o2::framework::ConfigurableGroup {
949954 }
950955 deltaQpt = trackParQPtMCRec - trackParQPtMC;
951956 // double dpt1n =dpt1o *(spt1o >0. ? (spt1n /spt1o ) : 1.);
952- deltaQptTuned = deltaQpt * (qOverPtMC > 0 . ? (qOverPtData / qOverPtMC ) : 1 .);
957+ deltaQptTuned = deltaQpt * (currentQOverPtMC > 0 . ? (currentQOverPtData / currentQOverPtMC ) : 1 .);
953958 // double pt1n = pt1mc+dpt1n;
954959 trackParQPtTuned = trackParQPtMC + deltaQptTuned;
955960 trackParCov.setQ2Pt (trackParQPtTuned);
@@ -1010,36 +1015,36 @@ struct TrackTuner : o2::framework::ConfigurableGroup {
10101015 if ((updateCurvature) && (!updateCurvatureIU)) {
10111016 // if(sd0rpo>0. && spt1o>0.)covar[10]*=(sd0rpn/sd0rpo)*(spt1n/spt1o);//ypt
10121017 sigma1PtY = trackParCov.getSigma1PtY ();
1013- if (dcaXYResMC > 0 . && qOverPtMC > 0 .) {
1014- sigma1PtY *= ((dcaXYResData / dcaXYResMC) * (qOverPtData / qOverPtMC ));
1018+ if (dcaXYResMC > 0 . && currentQOverPtMC > 0 .) {
1019+ sigma1PtY *= ((dcaXYResData / dcaXYResMC) * (currentQOverPtData / currentQOverPtMC ));
10151020 trackParCov.setCov (sigma1PtY, 10 );
10161021 }
10171022
10181023 // if(sd0zo>0. && spt1o>0.) covar[11]*=(sd0zn/sd0zo)*(spt1n/spt1o);//zpt
10191024 sigma1PtZ = trackParCov.getSigma1PtZ ();
1020- if (dcaZResMC > 0 . && qOverPtMC > 0 .) {
1021- sigma1PtZ *= ((dcaZResData / dcaZResMC) * (qOverPtData / qOverPtMC ));
1025+ if (dcaZResMC > 0 . && currentQOverPtMC > 0 .) {
1026+ sigma1PtZ *= ((dcaZResData / dcaZResMC) * (currentQOverPtData / currentQOverPtMC ));
10221027 trackParCov.setCov (sigma1PtZ, 11 );
10231028 }
10241029
10251030 // if(spt1o>0.) covar[12]*=(spt1n/spt1o);//sinPhipt
10261031 sigma1PtSnp = trackParCov.getSigma1PtSnp ();
1027- if (qOverPtMC > 0 .) {
1028- sigma1PtSnp *= (qOverPtData / qOverPtMC );
1032+ if (currentQOverPtMC > 0 .) {
1033+ sigma1PtSnp *= (currentQOverPtData / currentQOverPtMC );
10291034 trackParCov.setCov (sigma1PtSnp, 12 );
10301035 }
10311036
10321037 // if(spt1o>0.) covar[13]*=(spt1n/spt1o);//tanTpt
10331038 sigma1PtTgl = trackParCov.getSigma1PtTgl ();
1034- if (qOverPtMC > 0 .) {
1035- sigma1PtTgl *= (qOverPtData / qOverPtMC );
1039+ if (currentQOverPtMC > 0 .) {
1040+ sigma1PtTgl *= (currentQOverPtData / currentQOverPtMC );
10361041 trackParCov.setCov (sigma1PtTgl, 13 );
10371042 }
10381043
10391044 // if(spt1o>0.) covar[14]*=(spt1n/spt1o)*(spt1n/spt1o);//ptpt
10401045 sigma1Pt2 = trackParCov.getSigma1Pt2 ();
1041- if (qOverPtMC > 0 .) {
1042- sigma1Pt2 *= (qOverPtData / qOverPtMC ) * (qOverPtData / qOverPtMC );
1046+ if (currentQOverPtMC > 0 .) {
1047+ sigma1Pt2 *= (currentQOverPtData / currentQOverPtMC ) * (currentQOverPtData / currentQOverPtMC );
10431048 trackParCov.setCov (sigma1Pt2, 14 );
10441049 }
10451050 } // ---> track cov matrix elements for 1/Pt ends here
0 commit comments