@@ -79,6 +79,8 @@ GFWCorrConfigs configs;
7979std::vector<double > multGlobalCorrCutPars;
8080std::vector<double > multPVCorrCutPars;
8181std::vector<double > multGlobalPVCorrCutPars;
82+ std::vector<double > multGlobalV0ACutPars;
83+ std::vector<double > multGlobalT0ACutPars;
8284std::vector<int > firstRunsOfFill;
8385} // namespace o2::analysis::gfw
8486
@@ -134,6 +136,15 @@ struct FlowGfwLightIons {
134136 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" );
135137 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" );
136138 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" );
139+ struct : ConfigurableGroup {
140+ 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" );
141+ 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" };
142+ Configurable<std::vector<double >> cfgMultGlobalT0ACutPars{" cfgMultGlobalT0ACutPars" , std::vector<double >{241.618 , 61.8402 , 0.348049 , -0.00306078 , 6.20357e-06 , 315.235 , 29.1491 , -0.188639 , 0.00044528 , -9.08912e-08 }, " Global vs FT0A multiplicity cut parameter values" };
143+ O2_DEFINE_CONFIGURABLE (cfgGlobalV0ALowSigma, float , -3 , " Number of sigma deviations below expected value in global vs V0A correlation" );
144+ O2_DEFINE_CONFIGURABLE (cfgGlobalV0AHighSigma, float , 4 , " Number of sigma deviations above expected value in global vs V0A correlation" );
145+ O2_DEFINE_CONFIGURABLE (cfgGlobalT0ALowSigma, float , -3 ., " Number of sigma deviations below expected value in global vs T0A correlation" );
146+ O2_DEFINE_CONFIGURABLE (cfgGlobalT0AHighSigma, float , 4 , " Number of sigma deviations above expected value in global vs T0A correlation" );
147+ } cfgGlobalAsideCorrCuts;
137148
138149 Configurable<GFWBinningCuts> cfgGFWBinning{" cfgGFWBinning" , {40 , 16 , 72 , 300 , 0 , 3000 , 0.2 , 10.0 , 0.2 , 3.0 , {0.2 , 0.3 , 0.4 , 0.5 , 0.6 , 0.7 , 0.8 , 0.9 , 1 , 1.25 , 1.5 , 1.75 , 2 , 2.25 , 2.5 , 2.75 , 3 , 3.25 , 3.5 , 3.75 , 4 , 4.5 , 5 , 5.5 , 6 , 7 , 8 , 9 , 10 }, {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 }}, " Configuration for binning" };
139150 Configurable<GFWRegions> cfgRegions{" cfgRegions" , {{" refN" , " refP" , " refFull" }, {-0.8 , 0.4 , -0.8 }, {-0.4 , 0.8 , 0.8 }, {0 , 0 , 0 }, {1 , 1 , 1 }}, " Configurations for GFW regions" };
@@ -241,6 +252,10 @@ struct FlowGfwLightIons {
241252 TF1* fMultCutLow = nullptr ;
242253 TF1* fMultCutHigh = nullptr ;
243254 TF1* fMultPVGlobalCutHigh = nullptr ;
255+ TF1* fMultGlobalV0ACutLow = nullptr ;
256+ TF1* fMultGlobalV0ACutHigh = nullptr ;
257+ TF1* fMultGlobalT0ACutLow = nullptr ;
258+ TF1* fMultGlobalT0ACutHigh = nullptr ;
244259
245260 TF1* fPtDepDCAxy = nullptr ;
246261
@@ -287,6 +302,8 @@ struct FlowGfwLightIons {
287302 o2::analysis::gfw::multGlobalCorrCutPars = cfgMultGlobalCutPars;
288303 o2::analysis::gfw::multPVCorrCutPars = cfgMultPVCutPars;
289304 o2::analysis::gfw::multGlobalPVCorrCutPars = cfgMultGlobalPVCutPars;
305+ o2::analysis::gfw::multGlobalV0ACutPars = cfgGlobalAsideCorrCuts.cfgMultGlobalV0ACutPars ;
306+ o2::analysis::gfw::multGlobalT0ACutPars = cfgGlobalAsideCorrCuts.cfgMultGlobalT0ACutPars ;
290307 o2::analysis::gfw::firstRunsOfFill = cfgFirstRunsOfFill;
291308 if (cfgTimeDependent && !std::is_sorted (o2::analysis::gfw::firstRunsOfFill.begin (), o2::analysis::gfw::firstRunsOfFill.end ())) {
292309 std::sort (o2::analysis::gfw::firstRunsOfFill.begin (), o2::analysis::gfw::firstRunsOfFill.end ());
@@ -479,6 +496,36 @@ struct FlowGfwLightIons {
479496 fMultCutHigh ->SetParameters (&(o2::analysis::gfw::multGlobalCorrCutPars[0 ]));
480497 fMultPVGlobalCutHigh = new TF1 (" fMultPVGlobalCutHigh" , cfgMultGlobalPVCorrCutFunction->c_str (), 0 , nchbinning.back ());
481498 fMultPVGlobalCutHigh ->SetParameters (&(o2::analysis::gfw::multGlobalPVCorrCutPars[0 ]));
499+
500+ LOGF (info, " Global V0A function: %s in range 0-%g" , cfgGlobalAsideCorrCuts.cfgMultGlobalASideCorrCutFunction ->c_str (), v0aAxis.binEdges .back ());
501+ fMultGlobalV0ACutLow = new TF1 (" fMultGlobalV0ACutLow" , cfgGlobalAsideCorrCuts.cfgMultGlobalASideCorrCutFunction ->c_str (), 0 , v0aAxis.binEdges .back ());
502+ for (std::size_t i = 0 ; i < o2::analysis::gfw::multGlobalV0ACutPars.size (); ++i)
503+ fMultGlobalV0ACutLow ->SetParameter (i, o2::analysis::gfw::multGlobalV0ACutPars[i]);
504+ fMultGlobalV0ACutLow ->SetParameter (o2::analysis::gfw::multGlobalV0ACutPars.size (), cfgGlobalAsideCorrCuts.cfgGlobalV0ALowSigma );
505+ for (int i = 0 ; i < fMultGlobalV0ACutLow ->GetNpar (); ++i)
506+ LOGF (info, " fMultGlobalV0ACutLow par %d = %g" , i, fMultGlobalV0ACutLow ->GetParameter (i));
507+
508+ fMultGlobalV0ACutHigh = new TF1 (" fMultGlobalV0ACutHigh" , cfgGlobalAsideCorrCuts.cfgMultGlobalASideCorrCutFunction ->c_str (), 0 , v0aAxis.binEdges .back ());
509+ for (std::size_t i = 0 ; i < o2::analysis::gfw::multGlobalV0ACutPars.size (); ++i)
510+ fMultGlobalV0ACutHigh ->SetParameter (i, o2::analysis::gfw::multGlobalV0ACutPars[i]);
511+ fMultGlobalV0ACutHigh ->SetParameter (o2::analysis::gfw::multGlobalV0ACutPars.size (), cfgGlobalAsideCorrCuts.cfgGlobalV0AHighSigma );
512+ for (int i = 0 ; i < fMultGlobalV0ACutHigh ->GetNpar (); ++i)
513+ LOGF (info, " fMultGlobalV0ACutHigh par %d = %g" , i, fMultGlobalV0ACutHigh ->GetParameter (i));
514+
515+ LOGF (info, " Global T0A function: %s" , cfgGlobalAsideCorrCuts.cfgMultGlobalASideCorrCutFunction ->c_str ());
516+ fMultGlobalT0ACutLow = new TF1 (" fMultGlobalT0ACutLow" , cfgGlobalAsideCorrCuts.cfgMultGlobalASideCorrCutFunction ->c_str (), 0 , t0aAxis.binEdges .back ());
517+ for (std::size_t i = 0 ; i < o2::analysis::gfw::multGlobalT0ACutPars.size (); ++i)
518+ fMultGlobalT0ACutLow ->SetParameter (i, o2::analysis::gfw::multGlobalT0ACutPars[i]);
519+ fMultGlobalT0ACutLow ->SetParameter (o2::analysis::gfw::multGlobalT0ACutPars.size (), cfgGlobalAsideCorrCuts.cfgGlobalT0ALowSigma );
520+ for (int i = 0 ; i < fMultGlobalT0ACutLow ->GetNpar (); ++i)
521+ LOGF (info, " fMultGlobalT0ACutLow par %d = %g" , i, fMultGlobalT0ACutLow ->GetParameter (i));
522+
523+ fMultGlobalT0ACutHigh = new TF1 (" fMultGlobalT0ACutHigh" , cfgGlobalAsideCorrCuts.cfgMultGlobalASideCorrCutFunction ->c_str (), 0 , t0aAxis.binEdges .back ());
524+ for (std::size_t i = 0 ; i < o2::analysis::gfw::multGlobalT0ACutPars.size (); ++i)
525+ fMultGlobalT0ACutHigh ->SetParameter (i, o2::analysis::gfw::multGlobalT0ACutPars[i]);
526+ fMultGlobalT0ACutHigh ->SetParameter (o2::analysis::gfw::multGlobalT0ACutPars.size (), cfgGlobalAsideCorrCuts.cfgGlobalT0AHighSigma );
527+ for (int i = 0 ; i < fMultGlobalT0ACutHigh ->GetNpar (); ++i)
528+ LOGF (info, " fMultGlobalT0ACutHigh par %d = %g" , i, fMultGlobalT0ACutHigh ->GetParameter (i));
482529 }
483530 if (cfgUseDensityDependentCorrection) {
484531 std::vector<double > pTEffBins = {0.2 , 0.3 , 0.4 , 0.5 , 0.6 , 0.7 , 0.8 , 0.9 , 1.0 , 1.4 , 1.8 , 2.2 , 2.6 , 3.0 };
@@ -690,6 +737,15 @@ struct FlowGfwLightIons {
690737 return 0 ;
691738 if (multTrk > fMultPVGlobalCutHigh ->Eval (collision.multNTracksPV ()))
692739 return 0 ;
740+
741+ if (!(cfgGlobalAsideCorrCuts.cfgMultGlobalASideCorrCutFunction ->empty ()) && static_cast <double >(collision.multFV0A ()) < fMultGlobalV0ACutLow ->Eval (multTrk))
742+ return 0 ;
743+ if (!(cfgGlobalAsideCorrCuts.cfgMultGlobalASideCorrCutFunction ->empty ()) && static_cast <double >(collision.multFV0A ()) > fMultGlobalV0ACutHigh ->Eval (multTrk))
744+ return 0 ;
745+ if (!(cfgGlobalAsideCorrCuts.cfgMultGlobalASideCorrCutFunction ->empty ()) && static_cast <double >(collision.multFT0A ()) < fMultGlobalT0ACutLow ->Eval (multTrk))
746+ return 0 ;
747+ if (!(cfgGlobalAsideCorrCuts.cfgMultGlobalASideCorrCutFunction ->empty ()) && static_cast <double >(collision.multFT0A ()) > fMultGlobalT0ACutHigh ->Eval (multTrk))
748+ return 0 ;
693749 registry.fill (HIST (" eventQA/eventSel" ), kMultCuts );
694750 if (cfgRunByRun)
695751 th1sList[run][hEventSel]->Fill (kMultCuts );
0 commit comments