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