@@ -61,8 +61,8 @@ struct HfCorrelatorDsHadronsSelCollision {
6161 Configurable<float > yCandMax{" yCandMax" , 0.8 , " max. cand. rapidity" };
6262 Configurable<float > ptCandMin{" ptCandMin" , 1 ., " min. cand. pT" };
6363
64- SliceCache cache;
6564 HfHelper hfHelper;
65+ SliceCache cache;
6666
6767 using SelCollisions = soa::Join<aod::Collisions, aod::EvSels>;
6868 using CandDsData = soa::Filtered<soa::Join<aod::HfCand3Prong, aod::HfSelDsToKKPi>>;
@@ -169,15 +169,8 @@ struct HfCorrelatorDsHadrons {
169169 Configurable<std::vector<double >> binsPtHadron{" binsPtHadron" , std::vector<double >{0.3 , 2 ., 4 ., 8 ., 12 ., 50 .}, " pT bin limits for assoc particle" };
170170 Configurable<std::vector<double >> binsPtEfficiencyD{" binsPtEfficiencyD" , std::vector<double >{o2::analysis::hf_cuts_ds_to_k_k_pi::vecBinsPt}, " pT bin limits for efficiency" };
171171 Configurable<std::vector<double >> efficiencyD{" efficiencyD" , {1 ., 1 ., 1 ., 1 ., 1 ., 1 .}, " efficiency values for Ds meson" };
172- ConfigurableAxis zPoolBins{" zPoolBins" , {VARIABLE_WIDTH, -10.0 , -2.5 , 2.5 , 10.0 }, " z vertex position pools" };
173- ConfigurableAxis multPoolBins{" multPoolBins" , {VARIABLE_WIDTH, 0 ., 900 ., 1800 ., 6000 .}, " event multiplicity pools (FT0M)" };
174- ConfigurableAxis binsMassD{" binsMassD" , {200 , 1.7 , 2.25 }, " inv. mass (K^{#pm}K^{-}#pi^{+}) (GeV/#it{c}^{2})" };
175- ConfigurableAxis binsEta{" binsEta" , {50 , -2 ., 2 .}, " #it{#eta}" };
176- ConfigurableAxis binsPhi{" binsPhi" , {64 , -PIHalf, 3 . * PIHalf}, " #it{#varphi}" };
177- ConfigurableAxis binsMultiplicity{" binsMultiplicity" , {200 , 0 ., 800 .}, " Multiplicity" };
178- ConfigurableAxis binsMultFT0M{" binsMultFT0M" , {600 , 0 ., 6000 .}, " Multiplicity as FT0M signal amplitude" };
179- ConfigurableAxis binsPosZ{" binsPosZ" , {100 , -10 ., 10 .}, " primary vertex z coordinate" };
180- ConfigurableAxis binsPoolBin{" binsPoolBin" , {9 , 0 ., 9 .}, " PoolBin" };
172+
173+ int hfcReducedCollisionIndex = 0 ;
181174
182175 HfHelper hfHelper;
183176 SliceCache cache;
@@ -195,6 +188,22 @@ struct HfCorrelatorDsHadrons {
195188 Filter flagDsFilter = ((o2::aod::hf_track_index::hfflag & static_cast <uint8_t >(1 << aod::hf_cand_3prong::DecayType::DsToKKPi)) != static_cast <uint8_t >(0 )) && (aod::hf_sel_candidate_ds::isSelDsToKKPi >= selectionFlagDs || aod::hf_sel_candidate_ds::isSelDsToPiKK >= selectionFlagDs);
196189 Filter trackFilter = (nabs(aod::track::eta) < etaTrackMax) && (aod::track::pt > ptTrackMin) && (aod::track::pt < ptTrackMax) && (nabs(aod::track::dcaXY) < dcaXYTrackMax) && (nabs(aod::track::dcaZ) < dcaZTrackMax);
197190
191+ Preslice<CandDsData> candsDsPerCollision = aod::hf_cand::collisionId;
192+ Preslice<MyTracksData> trackIndicesPerCollision = aod::track::collisionId;
193+ Preslice<CandDsMcGen> perCollisionCandMc = o2::aod::mcparticle::mcCollisionId;
194+ PresliceUnsorted<soa::Join<aod::Collisions, aod::FT0Mults, aod::EvSels, aod::McCollisionLabels>> collPerCollMc = o2::aod::mccollisionlabel::mcCollisionId;
195+
196+ ConfigurableAxis zPoolBins{" zPoolBins" , {VARIABLE_WIDTH, -10.0 , -2.5 , 2.5 , 10.0 }, " z vertex position pools" };
197+ ConfigurableAxis multPoolBins{" multPoolBins" , {VARIABLE_WIDTH, 0 ., 900 ., 1800 ., 6000 .}, " event multiplicity pools (FT0M)" };
198+ ConfigurableAxis binsMassD{" binsMassD" , {200 , 1.7 , 2.25 }, " inv. mass (K^{#pm}K^{-}#pi^{+}) (GeV/#it{c}^{2})" };
199+ ConfigurableAxis binsEta{" binsEta" , {50 , -2 ., 2 .}, " #it{#eta}" };
200+
201+ ConfigurableAxis binsPhi{" binsPhi" , {64 , -PIHalf, 3 . * PIHalf}, " #it{#varphi}" };
202+ ConfigurableAxis binsMultiplicity{" binsMultiplicity" , {200 , 0 ., 800 .}, " Multiplicity" };
203+ ConfigurableAxis binsMultFT0M{" binsMultFT0M" , {600 , 0 ., 6000 .}, " Multiplicity as FT0M signal amplitude" };
204+ ConfigurableAxis binsPosZ{" binsPosZ" , {100 , -10 ., 10 .}, " primary vertex z coordinate" };
205+ ConfigurableAxis binsPoolBin{" binsPoolBin" , {9 , 0 ., 9 .}, " PoolBin" };
206+
198207 HistogramRegistry registry{" registry" , {}, OutputObjHandlingPolicy::AnalysisObject};
199208
200209 void init (InitContext&)
@@ -581,9 +590,6 @@ struct HfCorrelatorDsHadrons {
581590 }
582591 PROCESS_SWITCH (HfCorrelatorDsHadrons, processMcRec, " Process MC Reco mode" , false );
583592
584- Preslice<CandDsMcGen> perCollisionCandMc = o2::aod::mcparticle::mcCollisionId;
585- PresliceUnsorted<soa::Join<aod::Collisions, aod::FT0Mults, aod::EvSels, aod::McCollisionLabels>> collPerCollMc = o2::aod::mccollisionlabel::mcCollisionId;
586-
587593 // / Ds-Hadron correlation pair builder - for MC gen-level analysis (no filter/selection, only true signal)
588594 void processMcGen (SelCollisionsMc const & mcCollisions,
589595 soa::Join<aod::Collisions, aod::FT0Mults, aod::EvSels, aod::McCollisionLabels> const & collisions,
@@ -689,32 +695,75 @@ struct HfCorrelatorDsHadrons {
689695 }
690696 PROCESS_SWITCH (HfCorrelatorDsHadrons, processMcGen, " Process MC Gen mode" , false );
691697
692- void processDerivedDataDs (SelCollisionsWithDs::iterator const & collision ,
698+ void processDerivedDataDs (SelCollisionsWithDs const & collisions ,
693699 CandDsData const & candidates,
694700 MyTracksData const & tracks)
695701 {
696- collReduced (collision.multFT0M (), collision.posZ ());
697702
698- // Ds fill histograms and Ds candidates information stored
699- for (const auto & candidate : candidates) {
700- // candidate selected
701- if (candidate.isSelDsToKKPi () >= selectionFlagDs) {
702- candReduced (collReduced.lastIndex (), candidate.phi (), candidate.eta (), candidate.pt (), hfHelper.invMassDsToKKPi (candidate));
703- } else if (candidate.isSelDsToPiKK () >= selectionFlagDs) {
704- candReduced (collReduced.lastIndex (), candidate.phi (), candidate.eta (), candidate.pt (), hfHelper.invMassDsToPiKK (candidate));
703+ for (const auto & collision : collisions) {
704+ auto thisCollId = collision.globalIndex ();
705+ auto candsDsThisColl = candidates.sliceBy (candsDsPerCollision, thisCollId);
706+ auto tracksThisColl = tracks.sliceBy (trackIndicesPerCollision, thisCollId);
707+
708+ // Ds fill histograms and Ds candidates information stored
709+ for (const auto & candidate : candidates) {
710+ // candidate selected
711+ if (candidate.isSelDsToKKPi () >= selectionFlagDs) {
712+ candReduced (hfcReducedCollisionIndex, candidate.phi (), candidate.eta (), candidate.pt (), hfHelper.invMassDsToKKPi (candidate));
713+ } else if (candidate.isSelDsToPiKK () >= selectionFlagDs) {
714+ candReduced (hfcReducedCollisionIndex, candidate.phi (), candidate.eta (), candidate.pt (), hfHelper.invMassDsToPiKK (candidate));
715+ }
705716 }
706- }
707717
708- // tracks information
709- for (const auto & track : tracks) {
710- if (!track.isGlobalTrackWoDCA ()) {
711- continue ;
718+ // tracks information
719+ for (const auto & track : tracks) {
720+ if (!track.isGlobalTrackWoDCA ()) {
721+ continue ;
722+ }
723+ assocTrackReduced (hfcReducedCollisionIndex, track.phi (), track.eta (), track.pt ());
712724 }
713- assocTrackReduced (collReduced.lastIndex (), track.phi (), track.eta (), track.pt ());
725+
726+ collReduced (collision.multFT0M (), collision.posZ ());
727+ hfcReducedCollisionIndex++;
714728 }
715729 }
716730 PROCESS_SWITCH (HfCorrelatorDsHadrons, processDerivedDataDs, " Process derived data Ds" , false );
717731
732+ void processDerivedDataDsLastIndex (SelCollisionsWithDs const & collisions,
733+ CandDsData const & candidates,
734+ MyTracksData const & tracks)
735+ {
736+
737+ for (const auto & collision : collisions) {
738+ auto thisCollId = collision.globalIndex ();
739+ auto candsDsThisColl = candidates.sliceBy (candsDsPerCollision, thisCollId);
740+ auto tracksThisColl = tracks.sliceBy (trackIndicesPerCollision, thisCollId);
741+
742+ int indexHfcReducedCollision = collReduced.lastIndex () + 1 ;
743+
744+ // Ds fill histograms and Ds candidates information stored
745+ for (const auto & candidate : candidates) {
746+ // candidate selected
747+ if (candidate.isSelDsToKKPi () >= selectionFlagDs) {
748+ candReduced (indexHfcReducedCollision, candidate.phi (), candidate.eta (), candidate.pt (), hfHelper.invMassDsToKKPi (candidate));
749+ } else if (candidate.isSelDsToPiKK () >= selectionFlagDs) {
750+ candReduced (indexHfcReducedCollision, candidate.phi (), candidate.eta (), candidate.pt (), hfHelper.invMassDsToPiKK (candidate));
751+ }
752+ }
753+
754+ // tracks information
755+ for (const auto & track : tracks) {
756+ if (!track.isGlobalTrackWoDCA ()) {
757+ continue ;
758+ }
759+ assocTrackReduced (indexHfcReducedCollision, track.phi (), track.eta (), track.pt ());
760+ }
761+
762+ collReduced (collision.multFT0M (), collision.posZ ());
763+ }
764+ }
765+ PROCESS_SWITCH (HfCorrelatorDsHadrons, processDerivedDataDsLastIndex, " Process derived data Ds w lastIndex" , false );
766+
718767 // Event Mixing
719768 void processDataME (SelCollisionsWithDs const & collisions,
720769 CandDsData const & candidates,
0 commit comments