Skip to content

Commit 7faea74

Browse files
Update taskFlowCharmHadrons.cxx
1 parent 7b487e9 commit 7faea74

File tree

1 file changed

+68
-36
lines changed

1 file changed

+68
-36
lines changed

PWGHF/D2H/Tasks/taskFlowCharmHadrons.cxx

Lines changed: 68 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ struct HfTaskFlowCharmHadrons {
121121
Configurable<bool> storeResoOccu{"storeResoOccu", false, "Flag to store Occupancy in resolution ThnSparse"};
122122
Configurable<bool> storeEpCosSin{"storeEpCosSin", false, "Flag to store cos and sin of EP angle in ThnSparse"};
123123
Configurable<bool> storeCandEta{"storeCandEta", false, "Flag to store candidates eta"};
124+
Configurable<bool> storeCandSign{"storeCandSign", false, "Flag to store candidates sign"};
124125
Configurable<int> occEstimator{"occEstimator", 0, "Occupancy estimation (0: None, 1: ITS, 2: FT0C)"};
125126
Configurable<bool> saveEpResoHisto{"saveEpResoHisto", false, "Flag to save event plane resolution histogram"};
126127
Configurable<std::string> ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
@@ -144,6 +145,7 @@ struct HfTaskFlowCharmHadrons {
144145
using CandD0DataWMl = soa::Filtered<soa::Join<aod::HfCand2Prong, aod::HfSelD0, aod::HfMlD0>>;
145146
using CandD0Data = soa::Filtered<soa::Join<aod::HfCand2Prong, aod::HfSelD0>>;
146147
using CollsWithQvecs = soa::Join<aod::Collisions, aod::EvSels, aod::QvectorFT0Cs, aod::QvectorFT0As, aod::QvectorFT0Ms, aod::QvectorFV0As, aod::QvectorBPoss, aod::QvectorBNegs, aod::QvectorBTots, aod::CentFV0As, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs>;
148+
using TracksWithExtra = soa::Join<aod::Tracks, aod::TracksExtra>;
147149

148150
Filter filterSelectDsCandidates = aod::hf_sel_candidate_ds::isSelDsToKKPi >= selectionFlag || aod::hf_sel_candidate_ds::isSelDsToPiKK >= selectionFlag;
149151
Filter filterSelectDplusCandidates = aod::hf_sel_candidate_dplus::isSelDplusToPiKPi >= selectionFlag;
@@ -191,6 +193,7 @@ struct HfTaskFlowCharmHadrons {
191193
ConfigurableAxis thnConfigAxisResoFT0cTPCtot{"thnConfigAxisResoFT0cTPCtot", {160, -8, 8}, ""};
192194
ConfigurableAxis thnConfigAxisResoFV0aTPCtot{"thnConfigAxisResoFV0aTPCtot", {160, -8, 8}, ""};
193195
ConfigurableAxis thnConfigAxisCandidateEta{"thnConfigAxisCandidateEta", {100, -5, 5}, ""};
196+
ConfigurableAxis thnConfigAxisSign{"thnConfigAxisSign", {2, -2.0, 2.0}, ""};
194197

195198
HistogramRegistry registry{"registry", {}};
196199

@@ -212,6 +215,7 @@ struct HfTaskFlowCharmHadrons {
212215
const AxisSpec thnAxisOccupancyITS{thnConfigAxisOccupancyITS, "OccupancyITS"};
213216
const AxisSpec thnAxisOccupancyFT0C{thnConfigAxisOccupancyFT0C, "OccupancyFT0C"};
214217
const AxisSpec thnAxisCandEta{thnConfigAxisCandidateEta, "#eta"};
218+
const AxisSpec thnAxisSign{thnConfigAxisSign, "Sign"};
215219
const AxisSpec thnAxisNoSameBunchPileup{thnConfigAxisNoSameBunchPileup, "NoSameBunchPileup"};
216220
const AxisSpec thnAxisOccupancy{thnConfigAxisOccupancy, "Occupancy"};
217221
const AxisSpec thnAxisNoCollInTimeRangeNarrow{thnConfigAxisNoCollInTimeRangeNarrow, "NoCollInTimeRangeNarrow"};
@@ -232,6 +236,9 @@ struct HfTaskFlowCharmHadrons {
232236
if (storeCandEta) {
233237
axes.insert(axes.end(), {thnAxisCandEta});
234238
}
239+
if (storeCandSign) {
240+
axes.insert(axes.end(), {thnAxisSign});
241+
}
235242
if (occEstimator != 0) {
236243
if (occEstimator == 1) {
237244
axes.insert(axes.end(), {thnAxisOccupancyITS, thnAxisNoSameBunchPileup, thnAxisOccupancy,
@@ -403,6 +410,7 @@ struct HfTaskFlowCharmHadrons {
403410
/// \param mass is the invariant mass of the candidate
404411
/// \param pt is the transverse momentum of the candidate
405412
/// \param eta is the pseudorapidityof the candidate
413+
/// \param sign is the particle charge sign of the candidate
406414
/// \param cent is the centrality of the collision
407415
/// \param cosNPhi is the cosine of the n*phi angle
408416
/// \param sinNPhi is the sine of the n*phi angle
@@ -414,6 +422,7 @@ struct HfTaskFlowCharmHadrons {
414422
void fillThn(const float mass,
415423
const float pt,
416424
const float eta,
425+
const float sign,
417426
const float cent,
418427
const float cosNPhi,
419428
const float sinNPhi,
@@ -448,7 +457,9 @@ struct HfTaskFlowCharmHadrons {
448457
if (storeCandEta) {
449458
values.push_back(eta);
450459
}
451-
460+
if (storeCandSign) {
461+
values.push_back(sign);
462+
}
452463
if (occEstimator != 0) {
453464
auto evtSelFlags = getEventSelectionFlags(hfevselflag);
454465
values.push_back(occupancy);
@@ -492,9 +503,10 @@ struct HfTaskFlowCharmHadrons {
492503
/// Compute the scalar product
493504
/// \param collision is the collision with the Q vector information and event plane
494505
/// \param candidates are the selected candidates
495-
template <DecayChannel Channel, typename T1>
506+
template <DecayChannel Channel, typename T1, typename Trk>
496507
void runFlowAnalysis(CollsWithQvecs::iterator const& collision,
497-
T1 const& candidates)
508+
T1 const& candidates,
509+
Trk const& /*tracks*/)
498510
{
499511
float cent = o2::hf_centrality::getCentralityColl(collision, centEstimator);
500512
if (cent < centralityMin || cent > centralityMax) {
@@ -516,6 +528,7 @@ struct HfTaskFlowCharmHadrons {
516528

517529
for (const auto& candidate : candidates) {
518530
float massCand = 0.;
531+
float sign = 0.;
519532
std::vector<float> outputMl = {-999., -999.};
520533

521534
if constexpr (std::is_same_v<T1, CandDsData> || std::is_same_v<T1, CandDsDataWMl>) {
@@ -618,6 +631,13 @@ struct HfTaskFlowCharmHadrons {
618631
}
619632
}
620633

634+
if constexpr (std::is_same_v<T1, CandXic0Data> || std::is_same_v<T1, CandXic0DataWMl>) {
635+
sign = candidate.signDecay();
636+
} else {
637+
auto trackprong0 = candidate.template prong0_as<Trk>();
638+
sign = trackprong0.sign();
639+
}
640+
621641
float ptCand = 0.;
622642
float phiCand = 0.;
623643
float etaCand = 0.;
@@ -674,130 +694,142 @@ struct HfTaskFlowCharmHadrons {
674694
}
675695
}
676696
if (fillSparse) {
677-
fillThn(massCand, ptCand, etaCand, cent, cosNPhi, sinNPhi, cosDeltaPhi, scalprodCand, outputMl, occupancy, hfevflag);
697+
fillThn(massCand, ptCand, etaCand, sign, cent, cosNPhi, sinNPhi, cosDeltaPhi, scalprodCand, outputMl, occupancy, hfevflag);
678698
}
679699
}
680700
}
681701

682702
// Ds with ML
683703
void processDsMl(CollsWithQvecs::iterator const& collision,
684-
CandDsDataWMl const&)
704+
CandDsDataWMl const&,
705+
TracksWithExtra const& tracks)
685706
{
686707
auto candsDsToKKPiWMl = selectedDsToKKPiWMl->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
687708
auto candsDsToPiKKWMl = selectedDsToPiKKWMl->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
688-
runFlowAnalysis<DecayChannel::DsToKKPi>(collision, candsDsToKKPiWMl);
689-
runFlowAnalysis<DecayChannel::DsToPiKK>(collision, candsDsToPiKKWMl);
709+
runFlowAnalysis<DecayChannel::DsToKKPi>(collision, candsDsToKKPiWMl, tracks);
710+
runFlowAnalysis<DecayChannel::DsToPiKK>(collision, candsDsToPiKKWMl, tracks);
690711
}
691712
PROCESS_SWITCH(HfTaskFlowCharmHadrons, processDsMl, "Process Ds candidates with ML", false);
692713

693714
// Ds with rectangular cuts
694715
void processDs(CollsWithQvecs::iterator const& collision,
695-
CandDsData const&)
716+
CandDsData const& /*candidatesDs*/,
717+
TracksWithExtra const& tracks)
696718
{
697719
auto candsDsToKKPi = selectedDsToKKPi->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
698720
auto candsDsToPiKK = selectedDsToPiKK->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
699-
runFlowAnalysis<DecayChannel::DsToKKPi>(collision, candsDsToKKPi);
700-
runFlowAnalysis<DecayChannel::DsToPiKK>(collision, candsDsToPiKK);
721+
runFlowAnalysis<DecayChannel::DsToKKPi>(collision, candsDsToKKPi, tracks);
722+
runFlowAnalysis<DecayChannel::DsToPiKK>(collision, candsDsToPiKK, tracks);
701723
}
702724
PROCESS_SWITCH(HfTaskFlowCharmHadrons, processDs, "Process Ds candidates", false);
703725

704726
// Dplus with ML
705727
void processDplusMl(CollsWithQvecs::iterator const& collision,
706-
CandDplusDataWMl const& candidatesDplus)
728+
CandDplusDataWMl const& candidatesDplus,
729+
TracksWithExtra const& tracks)
707730
{
708-
runFlowAnalysis<DecayChannel::DplusToPiKPi>(collision, candidatesDplus);
731+
runFlowAnalysis<DecayChannel::DplusToPiKPi>(collision, candidatesDplus, tracks);
709732
}
710733
PROCESS_SWITCH(HfTaskFlowCharmHadrons, processDplusMl, "Process Dplus candidates with ML", false);
711734

712735
// Dplus with rectangular cuts
713736
void processDplus(CollsWithQvecs::iterator const& collision,
714-
CandDplusData const& candidatesDplus)
737+
CandDplusData const& candidatesDplus,
738+
TracksWithExtra const& tracks)
715739
{
716-
runFlowAnalysis<DecayChannel::DplusToPiKPi>(collision, candidatesDplus);
740+
runFlowAnalysis<DecayChannel::DplusToPiKPi>(collision, candidatesDplus, tracks);
717741
}
718742
PROCESS_SWITCH(HfTaskFlowCharmHadrons, processDplus, "Process Dplus candidates", true);
719743

720744
// D0 with ML
721745
void processD0Ml(CollsWithQvecs::iterator const& collision,
722-
CandD0DataWMl const&)
746+
CandD0DataWMl const& /*candidatesD0*/,
747+
TracksWithExtra const& tracks)
723748
{
724749
auto candsD0ToPiKWMl = selectedD0ToPiKWMl->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
725750
auto candsD0ToKPiWMl = selectedD0ToKPiWMl->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
726-
runFlowAnalysis<DecayChannel::D0ToPiK>(collision, candsD0ToPiKWMl);
727-
runFlowAnalysis<DecayChannel::D0ToKPi>(collision, candsD0ToKPiWMl);
751+
runFlowAnalysis<DecayChannel::D0ToPiK>(collision, candsD0ToPiKWMl, tracks);
752+
runFlowAnalysis<DecayChannel::D0ToKPi>(collision, candsD0ToKPiWMl, tracks);
728753
}
729754
PROCESS_SWITCH(HfTaskFlowCharmHadrons, processD0Ml, "Process D0 candidates with ML", false);
730755

731756
// D0 with rectangular cuts
732757
void processD0(CollsWithQvecs::iterator const& collision,
733-
CandD0Data const&)
758+
CandD0Data const&/*candidatesD0*/,
759+
TracksWithExtra const& tracks)
734760
{
735761
auto candsD0ToPiK = selectedD0ToPiK->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
736762
auto candsD0ToKPi = selectedD0ToKPi->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
737-
runFlowAnalysis<DecayChannel::D0ToPiK>(collision, candsD0ToPiK);
738-
runFlowAnalysis<DecayChannel::D0ToKPi>(collision, candsD0ToKPi);
763+
runFlowAnalysis<DecayChannel::D0ToPiK>(collision, candsD0ToPiK, tracks);
764+
runFlowAnalysis<DecayChannel::D0ToKPi>(collision, candsD0ToKPi, tracks);
739765
}
740766
PROCESS_SWITCH(HfTaskFlowCharmHadrons, processD0, "Process D0 candidates", false);
741767

742768
// Lc with ML
743769
void processLcMl(CollsWithQvecs::iterator const& collision,
744-
CandLcDataWMl const&)
770+
CandLcDataWMl const&/*candidatesLc*/,
771+
TracksWithExtra const& tracks)
745772
{
746773
auto candsLcToPKPiWMl = selectedLcToPKPiWMl->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
747774
auto candsLcToPiKPWMl = selectedLcToPiKPWMl->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
748-
runFlowAnalysis<DecayChannel::LcToPKPi>(collision, candsLcToPKPiWMl);
749-
runFlowAnalysis<DecayChannel::LcToPiKP>(collision, candsLcToPiKPWMl);
775+
runFlowAnalysis<DecayChannel::LcToPKPi>(collision, candsLcToPKPiWMl, tracks);
776+
runFlowAnalysis<DecayChannel::LcToPiKP>(collision, candsLcToPiKPWMl, tracks);
750777
}
751778
PROCESS_SWITCH(HfTaskFlowCharmHadrons, processLcMl, "Process Lc candidates with ML", false);
752779

753780
// Lc with rectangular cuts
754781
void processLc(CollsWithQvecs::iterator const& collision,
755-
CandLcData const&)
782+
CandLcData const&/*candidatesLc*/,
783+
TracksWithExtra const& tracks)
756784
{
757785
auto candsLcToPKPi = selectedLcToPKPi->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
758786
auto candsLcToPiKP = selectedLcToPiKP->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
759-
runFlowAnalysis<DecayChannel::LcToPKPi>(collision, candsLcToPKPi);
760-
runFlowAnalysis<DecayChannel::LcToPiKP>(collision, candsLcToPiKP);
787+
runFlowAnalysis<DecayChannel::LcToPKPi>(collision, candsLcToPKPi, tracks);
788+
runFlowAnalysis<DecayChannel::LcToPiKP>(collision, candsLcToPiKP, tracks);
761789
}
762790
PROCESS_SWITCH(HfTaskFlowCharmHadrons, processLc, "Process Lc candidates", false);
763791

764792
// Xic with ML
765793
void processXicMl(CollsWithQvecs::iterator const& collision,
766-
CandXicDataWMl const&)
794+
CandXicDataWMl const&/*candidatesXic*/,
795+
TracksWithExtra const& tracks)
767796
{
768797
auto candsXicToPKPiWMl = selectedXicToPKPiWMl->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
769798
auto candsXicToPiKPWMl = selectedXicToPiKPWMl->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
770-
runFlowAnalysis<DecayChannel::XicToPKPi>(collision, candsXicToPKPiWMl);
771-
runFlowAnalysis<DecayChannel::XicToPiKP>(collision, candsXicToPiKPWMl);
799+
runFlowAnalysis<DecayChannel::XicToPKPi>(collision, candsXicToPKPiWMl, tracks);
800+
runFlowAnalysis<DecayChannel::XicToPiKP>(collision, candsXicToPiKPWMl, tracks);
772801
}
773802
PROCESS_SWITCH(HfTaskFlowCharmHadrons, processXicMl, "Process Xic candidates with ML", false);
774803

775804
// Xic with rectangular cuts
776805
void processXic(CollsWithQvecs::iterator const& collision,
777-
CandXicData const&)
806+
CandXicData const&/*candidatesXic*/,
807+
TracksWithExtra const& tracks)
778808
{
779809
auto candsXicToPKPi = selectedXicToPKPi->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
780810
auto candsXicToPiKP = selectedXicToPiKP->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
781-
runFlowAnalysis<DecayChannel::XicToPKPi>(collision, candsXicToPKPi);
782-
runFlowAnalysis<DecayChannel::XicToPiKP>(collision, candsXicToPiKP);
811+
runFlowAnalysis<DecayChannel::XicToPKPi>(collision, candsXicToPKPi, tracks);
812+
runFlowAnalysis<DecayChannel::XicToPiKP>(collision, candsXicToPiKP, tracks);
783813
}
784814
PROCESS_SWITCH(HfTaskFlowCharmHadrons, processXic, "Process Xic candidates", false);
785815

786816
// Xic0 with ML
787817
void processXic0Ml(CollsWithQvecs::iterator const& collision,
788-
CandXic0DataWMl const&)
818+
CandXic0DataWMl const&/*candidatesXic0*/,
819+
TracksWithExtra const& tracks)
789820
{
790821
auto candsXic0WMl = selectedXic0WMl->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
791-
runFlowAnalysis<DecayChannel::Xic0ToXiPi>(collision, candsXic0WMl);
822+
runFlowAnalysis<DecayChannel::Xic0ToXiPi>(collision, candsXic0WMl, tracks);
792823
}
793824
PROCESS_SWITCH(HfTaskFlowCharmHadrons, processXic0Ml, "Process Xic0 candidates with ML", false);
794825

795826
// Xic0
796827
void processXic0(CollsWithQvecs::iterator const& collision,
797-
CandXic0Data const&)
828+
CandXic0Data const&/*candidatesXic0*/,
829+
TracksWithExtra const& tracks)
798830
{
799831
auto candsXic0 = selectedXic0->sliceByCached(aod::hf_cand::collisionId, collision.globalIndex(), cache);
800-
runFlowAnalysis<DecayChannel::Xic0ToXiPi>(collision, candsXic0);
832+
runFlowAnalysis<DecayChannel::Xic0ToXiPi>(collision, candsXic0, tracks);
801833
}
802834
PROCESS_SWITCH(HfTaskFlowCharmHadrons, processXic0, "Process Xic0 candidates", false);
803835

0 commit comments

Comments
 (0)