@@ -111,7 +111,9 @@ struct FlowGfwLightIons {
111111 O2_DEFINE_CONFIGURABLE (cfgPtmin, float , 0.2 , " minimum pt (GeV/c)" );
112112 O2_DEFINE_CONFIGURABLE (cfgPtmax, float , 10 , " maximum pt (GeV/c)" );
113113 O2_DEFINE_CONFIGURABLE (cfgEta, float , 0.8 , " eta cut" );
114- O2_DEFINE_CONFIGURABLE (cfgEtaPtPt, float , 0.4 , " eta cut for pt-pt correlations" );
114+ O2_DEFINE_CONFIGURABLE (cfgEtaPtPt, float , 0.4 , " eta cut for pt-pt correlations used in subevent vn-pt" );
115+ O2_DEFINE_CONFIGURABLE (cfgEtaPtPtGap, float , 0.4 , " eta gap for subevent pt-pt correlations" );
116+ O2_DEFINE_CONFIGURABLE (cfgEtaPtPtFull, float , 0.8 , " eta cut for pure pt-pt correlations" );
115117 O2_DEFINE_CONFIGURABLE (cfgVtxZ, float , 10 , " vertex cut (cm)" );
116118 O2_DEFINE_CONFIGURABLE (cfgOccupancySelection, int , 2000 , " Max occupancy selection, -999 to disable" );
117119 O2_DEFINE_CONFIGURABLE (cfgNoSameBunchPileupCut, bool , true , " kNoSameBunchPileupCut" );
@@ -130,12 +132,14 @@ struct FlowGfwLightIons {
130132 O2_DEFINE_CONFIGURABLE (cfgUseDensityDependentCorrection, bool , false , " Use density dependent efficiency correction based on Run 2 measurements" );
131133 Configurable<std::vector<double >> cfgTrackDensityP0{" cfgTrackDensityP0" , std::vector<double >{0.7217476707 , 0.7384792571 , 0.7542625668 , 0.7640680200 , 0.7701951667 , 0.7755299053 , 0.7805901710 , 0.7849446786 , 0.7957356586 , 0.8113039262 , 0.8211968966 , 0.8280558878 , 0.8329342135 }, " parameter 0 for track density efficiency correction" };
132134 Configurable<std::vector<double >> cfgTrackDensityP1{" cfgTrackDensityP1" , std::vector<double >{-2.169488e-05 , -2.191913e-05 , -2.295484e-05 , -2.556538e-05 , -2.754463e-05 , -2.816832e-05 , -2.846502e-05 , -2.843857e-05 , -2.705974e-05 , -2.477018e-05 , -2.321730e-05 , -2.203315e-05 , -2.109474e-05 }, " parameter 1 for track density efficiency correction" };
133- Configurable<std::vector<double >> cfgMultGlobalCutPars{" cfgMultGlobalCutPars" , std::vector<double >{2272.16 , -76.6932 , 1.01204 , -0.00631545 , 1.59868e-05 , 136.336 , -4.97006 , 0.121199 , -0.0015921 , 7.66197e-06 }, " Global vs FT0C multiplicity cut parameter values" };
134- Configurable<std::vector<double >> cfgMultPVCutPars{" cfgMultPVCutPars" , std::vector<double >{3074.43 , -106.192 , 1.46176 , -0.00968364 , 2.61923e-05 , 182.128 , -7.43492 , 0.193901 , -0.00256715 , 1.22594e-05 }, " PV vs FT0C multiplicity cut parameter values" };
135- Configurable<std::vector<double >> cfgMultGlobalPVCutPars{" cfgMultGlobalPVCutPars" , std::vector<double >{-0.223013 , 0.715849 , 0.664242 , 0.0829653 , -0.000503733 , 1.21185e-06 }, " Global vs PV multiplicity cut parameter values" };
136- O2_DEFINE_CONFIGURABLE (cfgMultCorrHighCutFunction, std::string, " [0] + [1]*x + [2]*x*x + [3]*x*x*x + [4]*x*x*x*x + 3.*([5] + [6]*x + [7]*x*x + [8]*x*x*x + [9]*x*x*x*x)" , " Functional for multiplicity correlation cut" );
137- O2_DEFINE_CONFIGURABLE (cfgMultCorrLowCutFunction, std::string, " [0] + [1]*x + [2]*x*x + [3]*x*x*x + [4]*x*x*x*x - 3.*([5] + [6]*x + [7]*x*x + [8]*x*x*x + [9]*x*x*x*x)" , " Functional for multiplicity correlation cut" );
138- O2_DEFINE_CONFIGURABLE (cfgMultGlobalPVCorrCutFunction, std::string, " [0] + [1]*x + 3*([2] + [3]*x + [4]*x*x + [5]*x*x*x)" , " Functional for global vs pv multiplicity correlation cut" );
135+ struct : ConfigurableGroup {
136+ Configurable<std::vector<double >> cfgMultGlobalCutPars{" cfgMultGlobalCutPars" , std::vector<double >{2272.16 , -76.6932 , 1.01204 , -0.00631545 , 1.59868e-05 , 136.336 , -4.97006 , 0.121199 , -0.0015921 , 7.66197e-06 }, " Global vs FT0C multiplicity cut parameter values" };
137+ Configurable<std::vector<double >> cfgMultPVCutPars{" cfgMultPVCutPars" , std::vector<double >{3074.43 , -106.192 , 1.46176 , -0.00968364 , 2.61923e-05 , 182.128 , -7.43492 , 0.193901 , -0.00256715 , 1.22594e-05 }, " PV vs FT0C multiplicity cut parameter values" };
138+ Configurable<std::vector<double >> cfgMultGlobalPVCutPars{" cfgMultGlobalPVCutPars" , std::vector<double >{-0.223013 , 0.715849 , 0.664242 , 0.0829653 , -0.000503733 , 1.21185e-06 }, " Global vs PV multiplicity cut parameter values" };
139+ O2_DEFINE_CONFIGURABLE (cfgMultCorrHighCutFunction, std::string, " [0] + [1]*x + [2]*x*x + [3]*x*x*x + [4]*x*x*x*x + 3.*([5] + [6]*x + [7]*x*x + [8]*x*x*x + [9]*x*x*x*x)" , " Functional for multiplicity correlation cut" );
140+ O2_DEFINE_CONFIGURABLE (cfgMultCorrLowCutFunction, std::string, " [0] + [1]*x + [2]*x*x + [3]*x*x*x + [4]*x*x*x*x - 3.*([5] + [6]*x + [7]*x*x + [8]*x*x*x + [9]*x*x*x*x)" , " Functional for multiplicity correlation cut" );
141+ O2_DEFINE_CONFIGURABLE (cfgMultGlobalPVCorrCutFunction, std::string, " [0] + [1]*x + 3*([2] + [3]*x + [4]*x*x + [5]*x*x*x)" , " Functional for global vs pv multiplicity correlation cut" );
142+ } cfgMultCorrCuts;
139143 struct : ConfigurableGroup {
140144 O2_DEFINE_CONFIGURABLE (cfgMultGlobalASideCorrCutFunction, std::string, " [0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x + [10]*([5]+[6]*x+[7]*x*x+[8]*x*x*x+[9]*x*x*x*x)" , " Functional for global vs V0A multiplicity low correlation cut" );
141145 Configurable<std::vector<double >> cfgMultGlobalV0ACutPars{" cfgMultGlobalV0ACutPars" , std::vector<double >{567.785 , 172.715 , 0.77888 , -0.00693466 , 1.40564e-05 , 679.853 , 66.8068 , -0.444332 , 0.00115002 , -4.92064e-07 }, " Global vs FV0A multiplicity cut parameter values" };
@@ -163,8 +167,10 @@ struct FlowGfwLightIons {
163167 // Define output
164168 OutputObj<FlowContainer> fFC {FlowContainer (" FlowContainer" )};
165169 OutputObj<FlowPtContainer> fFCpt {FlowPtContainer (" FlowPtContainer" )};
170+ OutputObj<FlowPtContainer> fFCptFull {FlowPtContainer (" FlowPtContainerFull" )};
166171 OutputObj<FlowContainer> fFCgen {FlowContainer (" FlowContainer_gen" )};
167172 OutputObj<FlowPtContainer> fFCptgen {FlowPtContainer (" FlowPtContainer_gen" )};
173+ OutputObj<FlowPtContainer> fFCptgenFull {FlowPtContainer (" FlowPtContainer_gen" )};
168174 HistogramRegistry registry{" registry" };
169175
170176 // QA outputs
@@ -198,6 +204,8 @@ struct FlowGfwLightIons {
198204 kCentNGlobal ,
199205 kCentMFT
200206 };
207+ std::map<int , std::string> centNamesMap = {{kCentFT0C , " FT0C" }, {kCentFT0CVariant1 , " FT0C variant1" }, {kCentFT0M , " FT0M" }, {kCentFV0A , " FV0A" }, {kCentNTPV , " NTPV" }, {kCentNGlobal , " NGlobal" }, {kCentMFT , " MFT" }};
208+
201209 enum EventSelFlags {
202210 kFilteredEvent = 1 ,
203211 kSel8 ,
@@ -299,9 +307,9 @@ struct FlowGfwLightIons {
299307 o2::analysis::gfw::nchup = cfgGFWBinning->GetNchMax ();
300308 o2::analysis::gfw::centbinning = cfgGFWBinning->GetCentBinning ();
301309 cfgGFWBinning->Print ();
302- o2::analysis::gfw::multGlobalCorrCutPars = cfgMultGlobalCutPars;
303- o2::analysis::gfw::multPVCorrCutPars = cfgMultPVCutPars;
304- o2::analysis::gfw::multGlobalPVCorrCutPars = cfgMultGlobalPVCutPars;
310+ o2::analysis::gfw::multGlobalCorrCutPars = cfgMultCorrCuts. cfgMultGlobalCutPars ;
311+ o2::analysis::gfw::multPVCorrCutPars = cfgMultCorrCuts. cfgMultPVCutPars ;
312+ o2::analysis::gfw::multGlobalPVCorrCutPars = cfgMultCorrCuts. cfgMultGlobalPVCutPars ;
305313 o2::analysis::gfw::multGlobalV0ACutPars = cfgGlobalAsideCorrCuts.cfgMultGlobalV0ACutPars ;
306314 o2::analysis::gfw::multGlobalT0ACutPars = cfgGlobalAsideCorrCuts.cfgMultGlobalT0ACutPars ;
307315 o2::analysis::gfw::firstRunsOfFill = cfgFirstRunsOfFill;
@@ -314,34 +322,7 @@ struct FlowGfwLightIons {
314322 AxisSpec etaAxis = {o2::analysis::gfw::etabins, -cfgEta, cfgEta, " #eta" };
315323 AxisSpec vtxAxis = {o2::analysis::gfw::vtxZbins, -cfgVtxZ, cfgVtxZ, " Vtx_{z} (cm)" };
316324 AxisSpec ptAxis = {o2::analysis::gfw::ptbinning, " #it{p}_{T} GeV/#it{c}" };
317- std::string sCentralityEstimator ;
318- switch (cfgCentEstimator) {
319- case kCentFT0C :
320- sCentralityEstimator = " FT0C" ;
321- break ;
322- case kCentFT0CVariant1 :
323- sCentralityEstimator = " FT0C variant 1" ;
324- break ;
325- case kCentFT0M :
326- sCentralityEstimator = " FT0M" ;
327- break ;
328- case kCentFV0A :
329- sCentralityEstimator = " FV0A" ;
330- break ;
331- case kCentNTPV :
332- sCentralityEstimator = " NTPV" ;
333- break ;
334- case kCentNGlobal :
335- sCentralityEstimator = " NGlobals" ;
336- break ;
337- case kCentMFT :
338- sCentralityEstimator = " MFT" ;
339- break ;
340- default :
341- sCentralityEstimator = " FT0C" ;
342- break ;
343- }
344- sCentralityEstimator += " centrality (%)" ;
325+ std::string sCentralityEstimator = centNamesMap[cfgCentEstimator] + " centrality (%)" ;
345326 AxisSpec centAxis = {o2::analysis::gfw::centbinning, sCentralityEstimator .c_str ()};
346327 std::vector<double > nchbinning;
347328 int nchskip = (o2::analysis::gfw::nchup - o2::analysis::gfw::nchlow) / o2::analysis::gfw::nchbins;
@@ -478,23 +459,31 @@ struct FlowGfwLightIons {
478459 fFCpt ->setUseCentralMoments (cfgUseCentralMoments);
479460 fFCpt ->setUseGapMethod (true );
480461 fFCpt ->initialise (multAxis, cfgMpar, o2::analysis::gfw::configs, cfgNbootstrap);
462+ fFCptFull ->setUseCentralMoments (cfgUseCentralMoments);
463+ fFCptFull ->setUseGapMethod (true );
464+ fFCptFull ->initialise (multAxis, cfgMpar, o2::analysis::gfw::configs, cfgNbootstrap);
465+ fFCptFull ->initialiseSubevent (multAxis, cfgMpar, cfgNbootstrap);
481466 fFCptgen ->setUseCentralMoments (cfgUseCentralMoments);
482467 fFCptgen ->setUseGapMethod (true );
483468 fFCptgen ->initialise (multAxis, cfgMpar, o2::analysis::gfw::configs, cfgNbootstrap);
469+ fFCptgenFull ->setUseCentralMoments (cfgUseCentralMoments);
470+ fFCptgenFull ->setUseGapMethod (true );
471+ fFCptgenFull ->initialise (multAxis, cfgMpar, o2::analysis::gfw::configs, cfgNbootstrap);
472+ fFCptgenFull ->initialiseSubevent (multAxis, cfgMpar, cfgNbootstrap);
484473
485474 fPtDepDCAxy = new TF1 (" ptDepDCAxy" , Form (" [0]*%s" , cfgDCAxy->c_str ()), 0.001 , 100 );
486475 fPtDepDCAxy ->SetParameter (0 , cfgDCAxyNSigma);
487476 LOGF (info, " DCAxy pt-dependence function: %s" , Form (" [0]*%s" , cfgDCAxy->c_str ()));
488477 if (cfgUseAdditionalEventCut) {
489- fMultPVCutLow = new TF1 (" fMultPVCutLow" , cfgMultCorrLowCutFunction->c_str (), 0 , 100 );
478+ fMultPVCutLow = new TF1 (" fMultPVCutLow" , cfgMultCorrCuts. cfgMultCorrLowCutFunction ->c_str (), 0 , 100 );
490479 fMultPVCutLow ->SetParameters (&(o2::analysis::gfw::multPVCorrCutPars[0 ]));
491- fMultPVCutHigh = new TF1 (" fMultPVCutHigh" , cfgMultCorrHighCutFunction->c_str (), 0 , 100 );
480+ fMultPVCutHigh = new TF1 (" fMultPVCutHigh" , cfgMultCorrCuts. cfgMultCorrHighCutFunction ->c_str (), 0 , 100 );
492481 fMultPVCutHigh ->SetParameters (&(o2::analysis::gfw::multPVCorrCutPars[0 ]));
493- fMultCutLow = new TF1 (" fMultCutLow" , cfgMultCorrLowCutFunction->c_str (), 0 , 100 );
482+ fMultCutLow = new TF1 (" fMultCutLow" , cfgMultCorrCuts. cfgMultCorrLowCutFunction ->c_str (), 0 , 100 );
494483 fMultCutLow ->SetParameters (&(o2::analysis::gfw::multGlobalCorrCutPars[0 ]));
495- fMultCutHigh = new TF1 (" fMultCutHigh" , cfgMultCorrHighCutFunction->c_str (), 0 , 100 );
484+ fMultCutHigh = new TF1 (" fMultCutHigh" , cfgMultCorrCuts. cfgMultCorrHighCutFunction ->c_str (), 0 , 100 );
496485 fMultCutHigh ->SetParameters (&(o2::analysis::gfw::multGlobalCorrCutPars[0 ]));
497- fMultPVGlobalCutHigh = new TF1 (" fMultPVGlobalCutHigh" , cfgMultGlobalPVCorrCutFunction->c_str (), 0 , nchbinning.back ());
486+ fMultPVGlobalCutHigh = new TF1 (" fMultPVGlobalCutHigh" , cfgMultCorrCuts. cfgMultGlobalPVCorrCutFunction ->c_str (), 0 , nchbinning.back ());
498487 fMultPVGlobalCutHigh ->SetParameters (&(o2::analysis::gfw::multGlobalPVCorrCutPars[0 ]));
499488
500489 LOGF (info, " Global V0A function: %s in range 0-%g" , cfgGlobalAsideCorrCuts.cfgMultGlobalASideCorrCutFunction ->c_str (), v0aAxis.binEdges .back ());
@@ -816,9 +805,28 @@ struct FlowGfwLightIons {
816805 template <DataType dt>
817806 void fillOutputContainers (const float & centmult, const double & rndm, const int & run = 0 )
818807 {
819- (dt == kGen ) ? fFCptgen ->calculateCorrelations () : fFCpt ->calculateCorrelations ();
820- (dt == kGen ) ? fFCptgen ->fillPtProfiles (centmult, rndm) : fFCpt ->fillPtProfiles (centmult, rndm);
821- (dt == kGen ) ? fFCptgen ->fillCMProfiles (centmult, rndm) : fFCpt ->fillCMProfiles (centmult, rndm);
808+ if (dt == kGen ) {
809+ fFCptgen ->calculateCorrelations ();
810+ fFCptgenFull ->calculateCorrelations ();
811+ fFCptgenFull ->calculateSubeventCorrelations ();
812+ } else {
813+ fFCpt ->calculateCorrelations ();
814+ fFCptFull ->calculateCorrelations ();
815+ fFCptFull ->calculateSubeventCorrelations ();
816+ }
817+ if (dt == kGen ) {
818+ fFCptgen ->fillPtProfiles (centmult, rndm);
819+ fFCptgen ->fillCMProfiles (centmult, rndm);
820+ fFCptgenFull ->fillPtProfiles (centmult, rndm);
821+ fFCptgenFull ->fillCMProfiles (centmult, rndm);
822+ fFCptgenFull ->fillSubeventPtProfiles (centmult, rndm);
823+ } else {
824+ fFCpt ->fillPtProfiles (centmult, rndm);
825+ fFCpt ->fillCMProfiles (centmult, rndm);
826+ fFCptFull ->fillPtProfiles (centmult, rndm);
827+ fFCptFull ->fillSubeventPtProfiles (centmult, rndm);
828+ fFCptFull ->fillCMProfiles (centmult, rndm);
829+ }
822830 for (uint l_ind = 0 ; l_ind < corrconfigs.size (); ++l_ind) {
823831 if (!corrconfigs.at (l_ind).pTDif ) {
824832 auto dnx = fGFW ->Calculate (corrconfigs.at (l_ind), 0 , kTRUE ).real ();
@@ -883,7 +891,13 @@ struct FlowGfwLightIons {
883891 th1sList[run][hCent]->Fill (xaxis.centrality );
884892 }
885893 fGFW ->Clear ();
886- (dt == kGen ) ? fFCptgen ->clearVector () : fFCpt ->clearVector ();
894+ if (dt == kGen ) {
895+ fFCptgen ->clearVector ();
896+ fFCptgenFull ->clearVector ();
897+ } else {
898+ fFCpt ->clearVector ();
899+ fFCptFull ->clearVector ();
900+ }
887901
888902 float lRandom = fRndm ->Rndm ();
889903
@@ -1081,12 +1095,32 @@ struct FlowGfwLightIons {
10811095 template <DataType dt, typename TTrack>
10821096 inline void fillPtSums (TTrack track)
10831097 {
1098+ if (track.pt () < o2::analysis::gfw::ptreflow || track.pt () > o2::analysis::gfw::ptrefup)
1099+ return ;
1100+
10841101 double weff = (dt == kGen ) ? 1 . : getEfficiency (track);
10851102 if (weff < 0 )
10861103 return ;
1087- if (std::abs (track.eta ()) < cfgEtaPtPt && track.pt () > o2::analysis::gfw::ptreflow && track.pt () < o2::analysis::gfw::ptrefup) {
1088- (dt == kGen ) ? fFCptgen ->fill (1 ., track.pt ()) : fFCpt ->fill (weff, track.pt ());
1104+
1105+ // Fill pt-pt correlations used in vn-pt correlations (gapped)
1106+ if (std::abs (track.eta ()) < cfgEtaPtPt) {
1107+ if (dt == kGen ) {
1108+ fFCptgen ->fill (1 ., track.pt ());
1109+ } else {
1110+ fFCpt ->fill (weff, track.pt ());
1111+ }
10891112 }
1113+
1114+ // Fill pt-pt correlations for entire eta range
1115+ if (std::abs (track.eta ()) < cfgEtaPtPtFull)
1116+ (dt == kGen ) ? fFCptgenFull ->fill (1 ., track.pt ()) : fFCptFull ->fill (weff, track.pt ());
1117+
1118+ // Fill pt-pt correlations in subevents
1119+ if (track.eta () < -cfgEtaPtPtGap && track.eta () > -cfgEtaPtPtFull)
1120+ (dt == kGen ) ? fFCptgenFull ->fillSub1 (weff, track.pt ()) : fFCptFull ->fillSub1 (weff, track.pt ());
1121+ if (track.eta () > cfgEtaPtPtGap && track.eta () < cfgEtaPtPtFull)
1122+ (dt == kGen ) ? fFCptgenFull ->fillSub2 (weff, track.pt ()) : fFCptFull ->fillSub2 (weff, track.pt ());
1123+ return ;
10901124 }
10911125
10921126 template <DataType dt, QAFillTime ft, typename TTrack>
0 commit comments