Skip to content

Commit da55634

Browse files
ZFedericaalibuild
andauthored
[PWGHF] add ToXiPi process function with tracked cascades (#8216)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 99e0657 commit da55634

File tree

1 file changed

+49
-9
lines changed

1 file changed

+49
-9
lines changed

PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
#define HomogeneousField
1919
#endif
2020

21+
#include <iterator>
22+
#include <memory>
23+
#include <string>
24+
#include <vector>
25+
2126
/// includes KFParticle
2227
#include "KFParticle.h"
2328
#include "KFParticleBase.h"
@@ -112,8 +117,10 @@ struct HfCandidateCreatorXic0Omegac0 {
112117
int runNumber{-1};
113118
double magneticField{0.};
114119

115-
using MyCascTable = soa::Join<aod::CascDatas, aod::CascCovs>; // to use strangeness tracking, use aod::TraCascDatas instead of aod::CascDatas
120+
using MyCascTable = soa::Join<aod::CascDatas, aod::CascCovs>;
121+
using MyTraCascTable = soa::Join<aod::TraCascDatas, aod::TraCascCovs>; // to use strangeness tracking
116122
using CascadesLinked = soa::Join<Cascades, CascDataLink>;
123+
using TraCascadesLinked = soa::Join<Cascades, TraCascDataLink>;
117124
using MyV0Table = soa::Join<aod::V0Datas, aod::V0Covs>;
118125
using MyLFTracksWCov = soa::Join<TracksIU, TracksCovIU>;
119126

@@ -172,12 +179,12 @@ struct HfCandidateCreatorXic0Omegac0 {
172179
} kfOmegac0Candidate;
173180
void init(InitContext const&)
174181
{
175-
std::array<bool, 10> allProcesses = {doprocessNoCentToXiPi, doprocessCentFT0CToXiPi, doprocessCentFT0MToXiPi, doprocessNoCentToOmegaPi, doprocessOmegacToOmegaPiWithKFParticle, doprocessCentFT0CToOmegaPi, doprocessCentFT0MToOmegaPi, doprocessNoCentToOmegaK, doprocessCentFT0CToOmegaK, doprocessCentFT0MToOmegaK};
182+
std::array<bool, 11> allProcesses = {doprocessNoCentToXiPi, doprocessNoCentToXiPiTraCasc, doprocessCentFT0CToXiPi, doprocessCentFT0MToXiPi, doprocessNoCentToOmegaPi, doprocessOmegacToOmegaPiWithKFParticle, doprocessCentFT0CToOmegaPi, doprocessCentFT0MToOmegaPi, doprocessNoCentToOmegaK, doprocessCentFT0CToOmegaK, doprocessCentFT0MToOmegaK};
176183
if (std::accumulate(allProcesses.begin(), allProcesses.end(), 0) == 0) {
177184
LOGP(fatal, "No process function enabled, please select one for at least one channel.");
178185
}
179186

180-
std::array<bool, 3> processesToXiPi = {doprocessNoCentToXiPi, doprocessCentFT0CToXiPi, doprocessCentFT0MToXiPi};
187+
std::array<bool, 4> processesToXiPi = {doprocessNoCentToXiPi, doprocessNoCentToXiPiTraCasc, doprocessCentFT0CToXiPi, doprocessCentFT0MToXiPi};
181188
if (std::accumulate(processesToXiPi.begin(), processesToXiPi.end(), 0) > 1) {
182189
LOGP(fatal, "One and only one ToXiPi process function must be enabled at a time.");
183190
}
@@ -196,7 +203,7 @@ struct HfCandidateCreatorXic0Omegac0 {
196203
LOGP(fatal, "At most one process function for collision monitoring can be enabled at a time.");
197204
}
198205
if (nProcessesCollisions == 1) {
199-
if ((doprocessNoCentToXiPi && !doprocessCollisions) || (doprocessNoCentToOmegaPi && !doprocessCollisions) || (doprocessNoCentToOmegaK && !doprocessCollisions) || (doprocessOmegacToOmegaPiWithKFParticle && !doprocessCollisions)) {
206+
if ((doprocessNoCentToXiPi && !doprocessCollisions) || (doprocessNoCentToXiPiTraCasc && !doprocessCollisions) || (doprocessNoCentToOmegaPi && !doprocessCollisions) || (doprocessNoCentToOmegaK && !doprocessCollisions) || (doprocessOmegacToOmegaPiWithKFParticle && !doprocessCollisions)) {
200207
LOGP(fatal, "Process function for collision monitoring not correctly enabled. Did you enable \"processCollisions\"?");
201208
}
202209
if ((doprocessCentFT0CToXiPi && !doprocessCollisionsCentFT0C) || (doprocessCentFT0CToOmegaPi && !doprocessCollisionsCentFT0C) || (doprocessCentFT0CToOmegaK && !doprocessCollisionsCentFT0C)) {
@@ -253,12 +260,12 @@ struct HfCandidateCreatorXic0Omegac0 {
253260
runNumber = 0;
254261
}
255262

256-
template <o2::hf_centrality::CentralityEstimator centEstimator, int decayChannel, typename Coll, typename Hist>
263+
template <o2::hf_centrality::CentralityEstimator centEstimator, int decayChannel, typename Coll, typename Hist, typename TCascTable, typename TCascLinkTable>
257264
void runXic0Omegac0Creator(Coll const&,
258265
aod::BCsWithTimestamps const& /*bcWithTimeStamps*/,
259266
MyLFTracksWCov const& lfTracks,
260267
TracksWCovDca const& tracks,
261-
MyCascTable const&, CascadesLinked const&,
268+
TCascTable const&, TCascLinkTable const&,
262269
aod::HfCascLf2Prongs const& candidates,
263270
Hist& hInvMassCharmBaryon,
264271
Hist& hFitterStatus,
@@ -312,13 +319,34 @@ struct HfCandidateCreatorXic0Omegac0 {
312319
auto trackCharmBachelorId = cand.prong0Id();
313320
auto trackCharmBachelor = tracks.rawIteratorAt(trackCharmBachelorId);
314321

315-
auto cascAodElement = cand.cascade_as<aod::CascadesLinked>();
322+
auto cascAodElement = cand.template cascade_as<TCascLinkTable>();
316323
hCascadesCounter->Fill(0);
317324
int v0index = cascAodElement.v0Id();
318-
if (!cascAodElement.has_cascData()) {
325+
326+
// check if the cascade from AO2D has data
327+
bool hasData = false;
328+
if constexpr (requires { cascAodElement.cascDataId(); }) { // check if it's the CascDataLink
329+
if (cascAodElement.has_cascData()) {
330+
hasData = true;
331+
}
332+
}
333+
if constexpr (requires { cascAodElement.traCascDataId(); }) { // check if it's the TraCascDataLink
334+
if (cascAodElement.has_traCascData()) {
335+
hasData = true;
336+
}
337+
}
338+
if (!hasData) {
319339
continue;
320340
}
321-
auto casc = cascAodElement.cascData_as<MyCascTable>();
341+
342+
typename TCascTable::iterator casc;
343+
if constexpr (requires { cascAodElement.cascDataId(); }) { // check if it's the CascDataLink
344+
casc = cascAodElement.template cascData_as<TCascTable>();
345+
}
346+
if constexpr (requires { cascAodElement.traCascDataId(); }) { // check if it's the TraCascDataLink
347+
casc = cascAodElement.template traCascData_as<TCascTable>();
348+
}
349+
322350
hCascadesCounter->Fill(1);
323351
auto trackCascDauChargedId = casc.bachelorId(); // pion <- xi track
324352
auto trackV0Dau0Id = casc.posTrackId(); // V0 positive daughter track
@@ -1026,6 +1054,18 @@ struct HfCandidateCreatorXic0Omegac0 {
10261054
}
10271055
PROCESS_SWITCH(HfCandidateCreatorXic0Omegac0, processNoCentToXiPi, "Run candidate creator w/o centrality selections for xi pi decay channel", true);
10281056

1057+
void processNoCentToXiPiTraCasc(soa::Join<aod::Collisions, aod::EvSels> const& collisions,
1058+
aod::BCsWithTimestamps const& bcWithTimeStamps,
1059+
TracksWCovDca const& tracks,
1060+
MyLFTracksWCov const& lfTracks,
1061+
MyTraCascTable const& traCascades,
1062+
TraCascadesLinked const& traCascadeLinks,
1063+
aod::HfCascLf2Prongs const& candidates)
1064+
{
1065+
runXic0Omegac0Creator<CentralityEstimator::None, hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi>(collisions, bcWithTimeStamps, lfTracks, tracks, traCascades, traCascadeLinks, candidates, hInvMassCharmBaryonToXiPi, hFitterStatusToXiPi, hCandidateCounterToXiPi, hCascadesCounterToXiPi);
1066+
}
1067+
PROCESS_SWITCH(HfCandidateCreatorXic0Omegac0, processNoCentToXiPiTraCasc, "Run candidate creator w/o centrality selections for xi pi decay channel with tracked cascades", false);
1068+
10291069
void processNoCentToOmegaPi(soa::Join<aod::Collisions, aod::EvSels> const& collisions,
10301070
aod::BCsWithTimestamps const& bcWithTimeStamps,
10311071
TracksWCovDca const& tracks,

0 commit comments

Comments
 (0)