@@ -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 currentQOverPtMC = qOverPtMC;
760+ double currentQOverPtData = 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 ((currentQOverPtMC < 0 ) || (currentQOverPtData < 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+ currentQOverPtMC = std::max (0.0 , evalGraph (ptMC, grOneOverPtPionMC.get ()));
768+ currentQOverPtData = 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=" << currentQOverPtMC
772+ << " sigma(1/pT)_Data=" << currentQOverPtData
773+ << " ratio(Data/MC)=" << (currentQOverPtMC > 0 . ? currentQOverPtData / currentQOverPtMC : -1 .);
774+ }
775+ } // currentQOverPtMC, currentQOverPtData 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 * (currentQOverPtMC > 0 . ? (currentQOverPtData / currentQOverPtMC ) : 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 . && currentQOverPtMC > 0 .) {
853+ sigma1PtY *= ((dcaXYResData / dcaXYResMC) * (currentQOverPtData / currentQOverPtMC ));
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 . && currentQOverPtMC > 0 .) {
860+ sigma1PtZ *= ((dcaZResData / dcaZResMC) * (currentQOverPtData / currentQOverPtMC ));
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 (currentQOverPtMC > 0 .) {
867+ sigma1PtSnp *= (currentQOverPtData / currentQOverPtMC );
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 (currentQOverPtMC > 0 .) {
874+ sigma1PtTgl *= (currentQOverPtData / currentQOverPtMC );
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 (currentQOverPtMC > 0 .) {
881+ sigma1Pt2 *= (currentQOverPtData / currentQOverPtMC ) * (currentQOverPtData / currentQOverPtMC );
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 * (currentQOverPtMC > 0 . ? (currentQOverPtData / currentQOverPtMC ) : 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 . && currentQOverPtMC > 0 .) {
1039+ sigma1PtY *= ((dcaXYResData / dcaXYResMC) * (currentQOverPtData / currentQOverPtMC ));
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 . && currentQOverPtMC > 0 .) {
1046+ sigma1PtZ *= ((dcaZResData / dcaZResMC) * (currentQOverPtData / currentQOverPtMC ));
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 (currentQOverPtMC > 0 .) {
1053+ sigma1PtSnp *= (currentQOverPtData / currentQOverPtMC );
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 (currentQOverPtMC > 0 .) {
1060+ sigma1PtTgl *= (currentQOverPtData / currentQOverPtMC );
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 (currentQOverPtMC > 0 .) {
1067+ sigma1Pt2 *= (currentQOverPtData / currentQOverPtMC ) * (currentQOverPtData / currentQOverPtMC );
10631068 trackParCov.setCov (sigma1Pt2, 14 );
10641069 }
10651070 } // ---> track cov matrix elements for 1/Pt ends here
0 commit comments