2323
2424#include " PWGLF/DataModel/LFHStrangeCorrelationTables.h"
2525#include " PWGLF/DataModel/LFStrangenessTables.h"
26+ #include " PWGLF/DataModel/mcCentrality.h"
27+ #include " PWGLF/Utils/inelGt.h"
2628
2729#include " Common/CCDB/EventSelectionParams.h"
2830#include " Common/Core/RecoDecay.h"
@@ -87,6 +89,7 @@ struct HStrangeCorrelation {
8789 Service<o2::ccdb::BasicCCDBManager> ccdb;
8890
8991 Service<o2::framework::O2DatabasePDG> pdgDB;
92+ o2::pwglf::ParticleCounter<o2::framework::O2DatabasePDG> mCounter ;
9093
9194 HistogramRegistry histos{" Histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
9295
@@ -121,6 +124,8 @@ struct HStrangeCorrelation {
121124 Configurable<bool > doMCassociation{" doMCassociation" , false , " fill everything only for MC associated" };
122125 Configurable<bool > doTriggPhysicalPrimary{" doTriggPhysicalPrimary" , false , " require physical primary for trigger particles" };
123126 Configurable<bool > applyNewMCSelection{" applyNewMCSelection" , false , " apply new MC Generated selection" };
127+ Configurable<bool > doSeparateFT0Prediction{" doSeparateFT0Prediction" , false , " separate FT0M to FT0A and FT0C in prediction process" };
128+ Configurable<bool > useCentralityinPrediction{" useCentralityinPrediction" , false , " if true, use centrality instead of multiplisity" };
124129 } masterConfigurations;
125130
126131 // master analysis switches
@@ -154,8 +159,9 @@ struct HStrangeCorrelation {
154159 ConfigurableAxis axisPtAssoc{" axisPtAssoc" , {VARIABLE_WIDTH, 0.5 , 1.0 , 1.5 , 2.0 , 3.0 , 4.0 , 6.0 , 10.0 }, " pt associated axis for histograms" };
155160 ConfigurableAxis axisPtTrigger{" axisPtTrigger" , {VARIABLE_WIDTH, 0.0 , 1.0 , 2.0 , 3.0 , 100 }, " pt associated axis for histograms" };
156161 ConfigurableAxis axisPtQA{" axisPtQA" , {VARIABLE_WIDTH, 0 .0f , 0 .1f , 0 .2f , 0 .3f , 0 .4f , 0 .5f , 0 .6f , 0 .7f , 0 .8f , 0 .9f , 1 .0f , 1 .1f , 1 .2f , 1 .3f , 1 .4f , 1 .5f , 1 .6f , 1 .7f , 1 .8f , 1 .9f , 2 .0f , 2 .2f , 2 .4f , 2 .6f , 2 .8f , 3 .0f , 3 .2f , 3 .4f , 3 .6f , 3 .8f , 4 .0f , 4 .4f , 4 .8f , 5 .2f , 5 .6f , 6 .0f , 6 .5f , 7 .0f , 7 .5f , 8 .0f , 9 .0f , 10 .0f , 11 .0f , 12 .0f , 13 .0f , 14 .0f , 15 .0f , 17 .0f , 19 .0f , 21 .0f , 23 .0f , 25 .0f , 30 .0f , 35 .0f , 40 .0f , 50 .0f }, " pt axis for QA histograms" };
157- ConfigurableAxis axisMultCount{" axisMultCount" , {VARIABLE_WIDTH, 0 , 200 , 400 , 600 , 800 , 1000 , 1400 , 1800 , 2300 , 2800 , 3300 , 4000 , 5000 , 6000 }, " Mixing bins - multiplicity" };
158162 ConfigurableAxis axisMassNSigma{" axisMassNSigma" , {40 , -2 , 2 }, " Axis for mass Nsigma" };
163+ ConfigurableAxis axisMultiplicity{" axisMultiplicity" , {VARIABLE_WIDTH, 0 , 20 , 40 , 60 , 100 , 120 , 140 , 160 , 180 , 200 , 220 , 240 , 260 , 280 , 300 }, " Binning of the Multiplicity axis in model prediction process" };
164+
159165 } axesConfigurations;
160166
161167 // for topo var QA
@@ -253,7 +259,7 @@ struct HStrangeCorrelation {
253259 } cascadeSelections;
254260
255261 struct : ConfigurableGroup {
256- std::string prefix = " ` " ;
262+ std::string prefix = " checks " ;
257263 // cascade selections
258264 // more cascade selections in PbPb
259265 // Configurable<float> bachBaryonCosPA{"bachBaryonCosPA", 0.9999, "Bachelor baryon CosPA"};
@@ -1568,6 +1574,7 @@ struct HStrangeCorrelation {
15681574 const AxisSpec preAxisMult{axesConfigurations.axisMult , " mult percentile" };
15691575 const AxisSpec axisPtLambda{axesConfigurations.axisPtAssoc , " #it{p}_{T}^{#Lambda} (GeV/c)" };
15701576 const AxisSpec axisPtCascade{axesConfigurations.axisPtAssoc , " #it{p}_{T}^{Mother} (GeV/c)" };
1577+ const AxisSpec preAxisMultiplicity{axesConfigurations.axisMultiplicity , " multiplicity" };
15711578
15721579 // store the original axes in specific TH1Cs for completeness
15731580 histos.add (" axes/hDeltaPhiAxis" , " " , kTH1C , {preAxisDeltaPhi});
@@ -1576,34 +1583,39 @@ struct HStrangeCorrelation {
15761583 histos.add (" axes/hPtTriggerAxis" , " " , kTH1C , {preAxisPtTrigger});
15771584 histos.add (" axes/hVertexZAxis" , " " , kTH1C , {preAxisVtxZ});
15781585 histos.add (" axes/hMultAxis" , " " , kTH1C , {preAxisMult});
1586+ histos.add (" axes/hMultiplicityAxis" , " " , kTH1C , {preAxisMultiplicity});
15791587
15801588 std::vector<double > edgesDeltaPhiOrig = preAxisDeltaPhi.binEdges ;
15811589 std::vector<double > edgesDeltaEtaOrig = preAxisDeltaEta.binEdges ;
15821590 std::vector<double > edgesPtAssocOrig = preAxisPtAssoc.binEdges ;
15831591 std::vector<double > edgesPtTriggerOrig = preAxisPtTrigger.binEdges ;
15841592 std::vector<double > edgesVtxZOrig = preAxisVtxZ.binEdges ;
15851593 std::vector<double > edgesMultOrig = preAxisMult.binEdges ;
1594+ std::vector<double > edgesMultiplicityOrig = preAxisMultiplicity.binEdges ;
15861595
15871596 std::vector<float > rangesDeltaPhi = {static_cast <float >(edgesDeltaPhiOrig[0 ]), static_cast <float >(edgesDeltaPhiOrig[edgesDeltaPhiOrig.size () - 1 ])};
15881597 std::vector<float > rangesDeltaEta = {static_cast <float >(edgesDeltaEtaOrig[0 ]), static_cast <float >(edgesDeltaEtaOrig[edgesDeltaEtaOrig.size () - 1 ])};
15891598 std::vector<float > rangesPtAssoc = {static_cast <float >(edgesPtAssocOrig[0 ]), static_cast <float >(edgesPtAssocOrig[edgesPtAssocOrig.size () - 1 ])};
15901599 std::vector<float > rangesPtTrigger = {static_cast <float >(edgesPtTriggerOrig[0 ]), static_cast <float >(edgesPtTriggerOrig[edgesPtTriggerOrig.size () - 1 ])};
15911600 std::vector<float > rangesVtxZ = {static_cast <float >(edgesVtxZOrig[0 ]), static_cast <float >(edgesVtxZOrig[edgesVtxZOrig.size () - 1 ])};
15921601 std::vector<float > rangesMult = {static_cast <float >(edgesMultOrig[0 ]), static_cast <float >(edgesMultOrig[edgesMultOrig.size () - 1 ])};
1602+ std::vector<float > rangesMultiplicity = {static_cast <float >(edgesMultiplicityOrig[0 ]), static_cast <float >(edgesMultiplicityOrig[edgesMultiplicityOrig.size () - 1 ])};
15931603
15941604 axisRanges.emplace_back (rangesDeltaPhi);
15951605 axisRanges.emplace_back (rangesDeltaEta);
15961606 axisRanges.emplace_back (rangesPtAssoc);
15971607 axisRanges.emplace_back (rangesPtTrigger);
15981608 axisRanges.emplace_back (rangesVtxZ);
15991609 axisRanges.emplace_back (rangesMult);
1610+ axisRanges.emplace_back (rangesMultiplicity);
16001611
16011612 std::vector<double > edgesDeltaPhi;
16021613 std::vector<double > edgesDeltaEta;
16031614 std::vector<double > edgesPtAssoc;
16041615 std::vector<double > edgesPtTrigger;
16051616 std::vector<double > edgesVtxZ;
16061617 std::vector<double > edgesMult;
1618+ std::vector<double > edgesMultiplicity;
16071619
16081620 // v--- skipUnderOverflowInTHn ---v
16091621 //
@@ -1688,25 +1700,39 @@ struct HStrangeCorrelation {
16881700 for (int i = offset; i < preAxisMult.nBins .value () + 1 - offset; i++)
16891701 edgesMult.emplace_back (min + static_cast <double >(i) * delta);
16901702 }
1703+ // ===] multiplicity count [===
1704+ if (!preAxisMultiplicity.nBins .has_value ()) {
1705+ // variable binning, use bins provided
1706+ for (int i = offset; i < static_cast <int >(edgesMultiplicityOrig.size ()) - offset; i++)
1707+ edgesMultiplicity.emplace_back (edgesMultiplicityOrig[i]);
1708+ } else {
1709+ // fixed binning, generate the bin edges on-the-spot
1710+ double min = edgesMultiplicityOrig[0 ];
1711+ double delta = (edgesMultiplicityOrig[1 ] - edgesMultiplicityOrig[0 ]) / preAxisMultiplicity.nBins .value ();
1712+ for (int i = offset; i < preAxisMultiplicity.nBins .value () + 1 - offset; i++)
1713+ edgesMultiplicity.emplace_back (min + static_cast <double >(i) * delta);
1714+ }
16911715
16921716 LOGF (info, " Initialized THnF axis delta-phi with %i bins." , edgesDeltaPhi.size () - 1 );
16931717 LOGF (info, " Initialized THnF axis delta-eta with %i bins." , edgesDeltaEta.size () - 1 );
16941718 LOGF (info, " Initialized THnF axis pTassoc with %i bins." , edgesPtAssoc.size () - 1 );
16951719 LOGF (info, " Initialized THnF axis pTtrigger with %i bins." , edgesPtTrigger.size () - 1 );
16961720 LOGF (info, " Initialized THnF axis vertex-Z with %i bins." , edgesVtxZ.size () - 1 );
1697- LOGF (info, " Initialized THnF axis multiplicity with %i bins." , edgesMult.size () - 1 );
1721+ LOGF (info, " Initialized THnF axis mult cent with %i bins." , edgesMult.size () - 1 );
1722+ LOGF (info, " Initialized THnF axis multiplicity with %i bins." , edgesMultiplicity.size () - 1 );
16981723
16991724 const AxisSpec axisDeltaPhiNDim{edgesDeltaPhi, " #Delta#varphi" };
17001725 const AxisSpec axisDeltaEtaNDim{edgesDeltaEta, " #Delta#eta" };
17011726 const AxisSpec axisPtAssocNDim{edgesPtAssoc, " #it{p}_{T}^{assoc} (GeV/c)" };
17021727 const AxisSpec axisPtTriggerNDim{edgesPtTrigger, " #it{p}_{T}^{trigger} (GeV/c)" };
17031728 const AxisSpec axisVtxZNDim{edgesVtxZ, " vertex Z (cm)" };
17041729 const AxisSpec axisMultNDim{edgesMult, " mult percentile" };
1730+ const AxisSpec axisMultiplicityNDim{edgesMultiplicity, " Multiplicity" };
17051731
17061732 if (doprocessMixedEventHV0sInBuffer || doprocessMixedEventHCascadesInBuffer) {
17071733 validCollisions.resize (histos.get <TH1>(HIST (" axes/hMultAxis" ))->GetNbinsX () * histos.get <TH1>(HIST (" axes/hVertexZAxis" ))->GetNbinsX ());
1708- for (std::vector<ValidCollision>& inner_vec : validCollisions) {
1709- inner_vec .reserve (masterConfigurations.mixingParameter );
1734+ for (size_t i = 0 ; i < validCollisions. size (); ++i ) {
1735+ validCollisions[i] .reserve (masterConfigurations.mixingParameter );
17101736 }
17111737 }
17121738 if (!masterConfigurations.doPPAnalysis ) {
@@ -1882,7 +1908,31 @@ struct HStrangeCorrelation {
18821908 histos.add (" GeneratedWithPV/hAntiLambdaFromXiZero" , " " , kTH2F , {axesConfigurations.axisPtQA , axesConfigurations.axisEta });
18831909 histos.add (" GeneratedWithPV/hAntiLambdaFromXiPlus" , " " , kTH2F , {axesConfigurations.axisPtQA , axesConfigurations.axisEta });
18841910 }
1885-
1911+ if (doprocessPrediction) {
1912+ mCounter .mPdgDatabase = pdgDB.service ;
1913+ mCounter .mSelectPrimaries = doAssocPhysicalPrimary.value ;
1914+ histos.add (" Prediction/hEventSelection" , " hEventSelection" , kTH1F , {{3 , 0 , 3 }});
1915+ TString eventSelLabel[] = {" Read" , " INELgt0" , " |Z|<10" };
1916+ for (int i = 1 ; i <= histos.get <TH1>(HIST (" Prediction/hEventSelection" ))->GetNbinsX (); i++) {
1917+ histos.get <TH1>(HIST (" Prediction/hEventSelection" ))->GetXaxis ()->SetBinLabel (i, eventSelLabel[i - 1 ]);
1918+ }
1919+ histos.add (" Prediction/hTrigger" , " Trigger Tracks" , kTH3F , {axesConfigurations.axisPtQA , axesConfigurations.axisEta , axesConfigurations.axisPhi });
1920+ for (int i = 0 ; i < AssocParticleTypes; i++) {
1921+ if (TESTBIT (doCorrelation, i))
1922+ histos.add (fmt::format (" Prediction/h{}" , Particlenames[i]).c_str (), " " , kTH3F , {axesConfigurations.axisPtQA , axesConfigurations.axisEta , axesConfigurations.axisPhi });
1923+ if (masterConfigurations.useCentralityinPrediction ) {
1924+ if (TESTBIT (doCorrelation, i))
1925+ histos.add (fmt::format (" Prediction/sameEvent/{}" , Particlenames[i]).c_str (), " " , kTHnF , {axisDeltaPhiNDim, axisDeltaEtaNDim, axisPtAssocNDim, axisPtTriggerNDim, axisVtxZNDim, axisMultNDim});
1926+ } else {
1927+ if (TESTBIT (doCorrelation, i))
1928+ histos.add (fmt::format (" Prediction/sameEvent/{}" , Particlenames[i]).c_str (), " " , kTHnF , {axisDeltaPhiNDim, axisDeltaEtaNDim, axisPtAssocNDim, axisPtTriggerNDim, axisVtxZNDim, axisMultiplicityNDim});
1929+ }
1930+ }
1931+ if (masterConfigurations.doSeparateFT0Prediction ) {
1932+ histos.addClone (" Prediction/sameEvent/" , " Prediction/sameEventFT0A/" );
1933+ histos.addClone (" Prediction/sameEvent/" , " Prediction/sameEventFT0C/" );
1934+ }
1935+ }
18861936 // visual inspection of sizes
18871937 histos.print ();
18881938
@@ -3226,6 +3276,156 @@ struct HStrangeCorrelation {
32263276 if (masterConfigurations.doFullCorrelationStudy )
32273277 fillCorrelationsCascade (triggerTracks, associatedCascades, true , true , collision.posX (), collision.posY (), collision.posZ (), cent, bField);
32283278 }
3279+ void processPrediction (soa::Join<aod::McCollisions, aod::McCentFT0Ms, aod::McCentFT0Cs, aod::McCentFT0As>::iterator const & mcCollision, aod::McParticles const & mcParticles)
3280+ {
3281+ std::vector<uint32_t > triggerIndices;
3282+ std::vector<std::vector<uint32_t >> associatedIndices;
3283+ std::vector<uint32_t > assocHadronIndices;
3284+ std::vector<uint32_t > piIndices;
3285+ std::vector<uint32_t > k0ShortIndices;
3286+ std::vector<uint32_t > lambdaIndices;
3287+ std::vector<uint32_t > antiLambdaIndices;
3288+ std::vector<uint32_t > xiMinusIndices;
3289+ std::vector<uint32_t > xiPlusIndices;
3290+ std::vector<uint32_t > omegaMinusIndices;
3291+ std::vector<uint32_t > omegaPlusIndices;
3292+ float centMultFT0M = -1 ;
3293+ float centMultFT0A = -1 ;
3294+ float centMultFT0C = -1 ;
3295+ float multFT0M = -1 ;
3296+ float multFT0A = -1 ;
3297+ float multFT0C = -1 ;
3298+ histos.fill (HIST (" Prediction/hEventSelection" ), 0.5 );
3299+ if (masterConfigurations.selectINELgtZERO && !o2::pwglf::isINELgt0mc (mcParticles, pdgDB)) {
3300+ return ;
3301+ }
3302+ histos.fill (HIST (" Prediction/hEventSelection" ), 1.5 );
3303+ if (std::abs (mcCollision.posZ ()) > masterConfigurations.zVertexCut ) {
3304+ return ;
3305+ }
3306+ histos.fill (HIST (" Prediction/hEventSelection" ), 2.5 );
3307+ if (masterConfigurations.useCentralityinPrediction ) {
3308+ centMultFT0M = mcCollision.centFT0M ();
3309+ centMultFT0A = mcCollision.centFT0A ();
3310+ centMultFT0C = mcCollision.centFT0C ();
3311+ } else {
3312+ multFT0M = mCounter .countFT0A (mcParticles) + mCounter .countFT0C (mcParticles);
3313+ multFT0A = mCounter .countFT0A (mcParticles);
3314+ multFT0C = mCounter .countFT0C (mcParticles);
3315+ }
3316+ int iteratorNum = -1 ;
3317+ for (auto const & mcParticle : mcParticles) {
3318+ iteratorNum = iteratorNum + 1 ;
3319+ double geta = mcParticle.eta ();
3320+ double gpt = mcParticle.pt ();
3321+ double gphi = mcParticle.phi ();
3322+ if (std::abs (geta) > etaSel) {
3323+ continue ;
3324+ }
3325+ if (std::abs (mcParticle.pdgCode ()) == PDG_t::kPiPlus || std::abs (mcParticle.pdgCode ()) == PDG_t::kKPlus || std::abs (mcParticle.pdgCode ()) == PDG_t::kProton || std::abs (mcParticle.pdgCode ()) == PDG_t::kElectron || std::abs (mcParticle.pdgCode ()) == PDG_t::kMuonMinus ) {
3326+ if (!masterConfigurations.doTriggPhysicalPrimary || mcParticle.isPhysicalPrimary ()) {
3327+ triggerIndices.emplace_back (iteratorNum);
3328+ histos.fill (HIST (" Prediction/hTrigger" ), gpt, geta, gphi);
3329+ }
3330+ if (masterConfigurations.doCorrelationHadron ) {
3331+ if (!doAssocPhysicalPrimary || mcParticle.isPhysicalPrimary ()) {
3332+ assocHadronIndices.emplace_back (iteratorNum);
3333+ histos.fill (HIST (" Prediction/hHadron" ), gpt, geta, gphi);
3334+ }
3335+ }
3336+ }
3337+ if (!doAssocPhysicalPrimary || mcParticle.isPhysicalPrimary ()) {
3338+ if (std::abs (mcParticle.pdgCode ()) == PDG_t::kPiPlus && masterConfigurations.doCorrelationPion ) {
3339+ piIndices.emplace_back (iteratorNum);
3340+ histos.fill (HIST (" Prediction/hPion" ), gpt, geta, gphi);
3341+ }
3342+ if (mcParticle.pdgCode () == PDG_t::kK0Short && masterConfigurations.doCorrelationK0Short ) {
3343+ k0ShortIndices.emplace_back (iteratorNum);
3344+ histos.fill (HIST (" Prediction/hK0Short" ), gpt, geta, gphi);
3345+ }
3346+ if (mcParticle.pdgCode () == PDG_t::kLambda0 && masterConfigurations.doCorrelationLambda ) {
3347+ lambdaIndices.emplace_back (iteratorNum);
3348+ histos.fill (HIST (" Prediction/hLambda" ), gpt, geta, gphi);
3349+ }
3350+ if (mcParticle.pdgCode () == PDG_t::kLambda0Bar && masterConfigurations.doCorrelationAntiLambda ) {
3351+ antiLambdaIndices.emplace_back (iteratorNum);
3352+ histos.fill (HIST (" Prediction/hAntiLambda" ), gpt, geta, gphi);
3353+ }
3354+ if (mcParticle.pdgCode () == PDG_t::kXiMinus && masterConfigurations.doCorrelationXiMinus ) {
3355+ xiMinusIndices.emplace_back (iteratorNum);
3356+ histos.fill (HIST (" Prediction/hXiMinus" ), gpt, geta, gphi);
3357+ }
3358+ if (mcParticle.pdgCode () == PDG_t::kXiPlusBar && masterConfigurations.doCorrelationXiPlus ) {
3359+ xiPlusIndices.emplace_back (iteratorNum);
3360+ histos.fill (HIST (" Prediction/hXiPlus" ), gpt, geta, gphi);
3361+ }
3362+ if (mcParticle.pdgCode () == PDG_t::kOmegaMinus && masterConfigurations.doCorrelationOmegaMinus ) {
3363+ omegaMinusIndices.emplace_back (iteratorNum);
3364+ histos.fill (HIST (" Prediction/hOmegaMinus" ), gpt, geta, gphi);
3365+ }
3366+ if (mcParticle.pdgCode () == PDG_t::kOmegaPlusBar && masterConfigurations.doCorrelationOmegaPlus ) {
3367+ omegaPlusIndices.emplace_back (iteratorNum);
3368+ histos.fill (HIST (" Prediction/hOmegaPlus" ), gpt, geta, gphi);
3369+ }
3370+ }
3371+ }
3372+
3373+ associatedIndices.emplace_back (k0ShortIndices);
3374+ associatedIndices.emplace_back (lambdaIndices);
3375+ associatedIndices.emplace_back (antiLambdaIndices);
3376+ associatedIndices.emplace_back (xiMinusIndices);
3377+ associatedIndices.emplace_back (xiPlusIndices);
3378+ associatedIndices.emplace_back (omegaMinusIndices);
3379+ associatedIndices.emplace_back (omegaPlusIndices);
3380+ associatedIndices.emplace_back (piIndices);
3381+ associatedIndices.emplace_back (assocHadronIndices);
3382+ for (std::size_t iTrigger = 0 ; iTrigger < triggerIndices.size (); iTrigger++) {
3383+ auto triggerParticle = mcParticles.iteratorAt (triggerIndices[iTrigger]);
3384+ // check range of trigger particle
3385+ if (triggerParticle.pt () > axisRanges[3 ][1 ] || triggerParticle.pt () < axisRanges[3 ][0 ]) {
3386+ continue ;
3387+ }
3388+ double getatrigger = triggerParticle.eta ();
3389+ double gphitrigger = triggerParticle.phi ();
3390+ double pttrigger = triggerParticle.pt ();
3391+ auto const & mother = triggerParticle.mothers_first_as <aod::McParticles>();
3392+ auto globalIndex = mother.globalIndex ();
3393+ static_for<0 , 8 >([&](auto i) { // associated loop
3394+ constexpr int Index = i.value ;
3395+ for (std::size_t iassoc = 0 ; iassoc < associatedIndices[Index].size (); iassoc++) {
3396+ auto assocParticle = mcParticles.iteratorAt (associatedIndices[Index][iassoc]);
3397+ if (triggerIndices[iTrigger] != associatedIndices[Index][iassoc] && globalIndex != assocParticle.globalIndex ()) { // avoid self
3398+ double getaassoc = assocParticle.eta ();
3399+ double gphiassoc = assocParticle.phi ();
3400+ double ptassoc = assocParticle.pt ();
3401+ double deltaphi = computeDeltaPhi (gphitrigger, gphiassoc);
3402+ double deltaeta = getatrigger - getaassoc;
3403+
3404+ // skip if basic ranges not met
3405+ if (deltaphi < axisRanges[0 ][0 ] || deltaphi > axisRanges[0 ][1 ])
3406+ continue ;
3407+ if (deltaeta < axisRanges[1 ][0 ] || deltaeta > axisRanges[1 ][1 ])
3408+ continue ;
3409+ if (ptassoc < axisRanges[2 ][0 ] || ptassoc > axisRanges[2 ][1 ])
3410+ continue ;
3411+ if (TESTBIT (doCorrelation, i)) {
3412+ if (masterConfigurations.useCentralityinPrediction ) {
3413+ histos.fill (HIST (" Prediction/sameEvent/" ) + HIST (Particlenames[Index]), computeDeltaPhi (gphitrigger, gphiassoc), deltaeta, ptassoc, pttrigger, mcCollision.posZ (), centMultFT0M);
3414+ if (masterConfigurations.doSeparateFT0Prediction )
3415+ histos.fill (HIST (" Prediction/sameEventFT0A/" ) + HIST (Particlenames[Index]), computeDeltaPhi (gphitrigger, gphiassoc), deltaeta, ptassoc, pttrigger, mcCollision.posZ (), centMultFT0A);
3416+ histos.fill (HIST (" Prediction/sameEventFT0C/" ) + HIST (Particlenames[Index]), computeDeltaPhi (gphitrigger, gphiassoc), deltaeta, ptassoc, pttrigger, mcCollision.posZ (), centMultFT0C);
3417+ } else {
3418+ histos.fill (HIST (" Prediction/sameEvent/" ) + HIST (Particlenames[Index]), computeDeltaPhi (gphitrigger, gphiassoc), deltaeta, ptassoc, pttrigger, mcCollision.posZ (), multFT0M);
3419+ if (masterConfigurations.doSeparateFT0Prediction )
3420+ histos.fill (HIST (" Prediction/sameEventFT0A/" ) + HIST (Particlenames[Index]), computeDeltaPhi (gphitrigger, gphiassoc), deltaeta, ptassoc, pttrigger, mcCollision.posZ (), multFT0A);
3421+ histos.fill (HIST (" Prediction/sameEventFT0C/" ) + HIST (Particlenames[Index]), computeDeltaPhi (gphitrigger, gphiassoc), deltaeta, ptassoc, pttrigger, mcCollision.posZ (), multFT0C);
3422+ }
3423+ }
3424+ }
3425+ }
3426+ });
3427+ }
3428+ }
32293429 PROCESS_SWITCH (HStrangeCorrelation, processSelectEventWithTrigger, " Select events with trigger only" , true );
32303430 PROCESS_SWITCH (HStrangeCorrelation, processSameEventHV0s, " Process same events, h-V0s" , true );
32313431 PROCESS_SWITCH (HStrangeCorrelation, processSameEventHCascades, " Process same events, h-Cascades" , true );
@@ -3242,6 +3442,7 @@ struct HStrangeCorrelation {
32423442 PROCESS_SWITCH (HStrangeCorrelation, processMCGenerated, " Process MC generated" , false );
32433443 PROCESS_SWITCH (HStrangeCorrelation, processClosureTest, " Process Closure Test" , false );
32443444 PROCESS_SWITCH (HStrangeCorrelation, processFeedDown, " process Feed Down" , false );
3445+ PROCESS_SWITCH (HStrangeCorrelation, processPrediction, " process model prediction" , false );
32453446};
32463447
32473448WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments