3838#include " Framework/OutputObjHeader.h"
3939#include " Framework/runDataProcessing.h"
4040
41- #include < string>
4241#include < vector>
4342
4443using namespace o2 ;
@@ -51,15 +50,21 @@ using namespace o2::analysis::femto;
5150struct FemtoPairTrackCascade {
5251
5352 // setup tables
54- using Collisions = Join<FCols, FColMasks>;
55- using Collision = Collisions::iterator;
53+ using FemtoCollisions = Join<FCols, FColMasks>;
54+ using FilteredFemtoCollisions = o2::soa::Filtered<FemtoCollisions>;
55+ using FilteredFemtoCollision = FilteredFemtoCollisions::iterator;
5656
57- using FilteredCollisions = o2::soa::Filtered<Collisions>;
58- using FilteredCollision = FilteredCollisions::iterator;
57+ using FemtoCollisionsWithLabel = o2::soa::Join<FemtoCollisions, FColLabels>;
58+ using FilteredFemtoCollisionsWithLabel = o2::soa::Filtered<FemtoCollisionsWithLabel>;
59+ using FilteredFemtoCollisionWithLabel = FilteredFemtoCollisionsWithLabel::iterator;
5960
60- using Tracks = o2::soa::Join<FTracks, FTrackMasks>;
61- using Xis = o2::soa::Join<FXis, FXiMasks>;
62- using Omegas = o2::soa::Join<FOmegas, FOmegaMasks>;
61+ using FemtoTracks = o2::soa::Join<FTracks, FTrackMasks>;
62+ using FemtoXis = o2::soa::Join<FXis, FXiMasks>;
63+ using FemtoOmegas = o2::soa::Join<FOmegas, FOmegaMasks>;
64+
65+ using FemtoTracksWithLabel = o2::soa::Join<FemtoTracks, FTrackLabels>;
66+ using FemtoXisWithLabel = o2::soa::Join<FemtoXis, FLambdaLabels>;
67+ using FemtoOmegasWithLabel = o2::soa::Join<FemtoOmegas, FK0shortLabels>;
6368
6469 SliceCache cache;
6570
@@ -72,8 +77,12 @@ struct FemtoPairTrackCascade {
7277 trackbuilder::ConfTrackSelection1 confTrackSelection;
7378 trackhistmanager::ConfTrackBinning1 confTrackBinning;
7479 particlecleaner::ConfTrackCleaner1 confTrackCleaner;
75- Partition<Tracks> trackPartition = MAKE_TRACK_PARTITION(confTrackSelection);
76- Preslice<Tracks> perColTracks = aod::femtobase::stored::fColId ;
80+
81+ Partition<FemtoTracks> trackPartition = MAKE_TRACK_PARTITION(confTrackSelection);
82+ Preslice<FemtoTracks> perColTracks = aod::femtobase::stored::fColId ;
83+
84+ Partition<FemtoTracksWithLabel> trackWithLabelPartition = MAKE_TRACK_PARTITION(confTrackSelection);
85+ Preslice<FemtoTracksWithLabel> perColtracksWithLabel = aod::femtobase::stored::fColId ;
7786
7887 // setup for daughters/bachelor
7988 trackhistmanager::ConfCascadePosDauBinning confPosDauBinning;
@@ -84,15 +93,23 @@ struct FemtoPairTrackCascade {
8493 cascadebuilder::ConfXiSelection confXiSelection;
8594 cascadehistmanager::ConfXiBinning confXiBinning;
8695 particlecleaner::ConfXiCleaner1 confXiCleaner;
87- Partition<Xis> xiPartition = MAKE_CASCADE_PARTITION(confXiSelection);
88- Preslice<Xis> perColXis = aod::femtobase::stored::fColId ;
96+
97+ Partition<FemtoXis> xiPartition = MAKE_CASCADE_PARTITION(confXiSelection);
98+ Preslice<FemtoXis> perColXis = aod::femtobase::stored::fColId ;
99+
100+ Partition<FemtoXisWithLabel> xiWithLabelPartition = MAKE_CASCADE_PARTITION(confXiSelection);
101+ Preslice<FemtoXisWithLabel> perColXisWithLabel = aod::femtobase::stored::fColId ;
89102
90103 // setup omegas
91104 cascadebuilder::ConfOmegaSelection confOmegaSelection;
92105 cascadehistmanager::ConfOmegaBinning confOmegaBinning;
93106 particlecleaner::ConfOmegaCleaner1 confOmegaCleaner;
94- Partition<Omegas> omegaPartition = MAKE_CASCADE_PARTITION(confOmegaSelection);
95- Preslice<Omegas> perColOmegas = aod::femtobase::stored::fColId ;
107+
108+ Partition<FemtoOmegas> omegaPartition = MAKE_CASCADE_PARTITION(confOmegaSelection);
109+ Preslice<FemtoOmegas> perColOmegas = aod::femtobase::stored::fColId ;
110+
111+ Partition<FemtoOmegasWithLabel> omegaWithLabelPartition = MAKE_CASCADE_PARTITION(confOmegaSelection);
112+ Preslice<FemtoOmegasWithLabel> perColOmegasWithLabel = aod::femtobase::stored::fColId ;
96113
97114 // setup pairs
98115 pairhistmanager::ConfPairBinning confPairBinning;
@@ -145,65 +162,111 @@ struct FemtoPairTrackCascade {
145162
146163 void init (InitContext&)
147164 {
165+ bool processData = doprocessXiSameEvent || doprocessXiMixedEvent || doprocessOmegaSameEvent || doprocessOmegaMixedEvent;
166+ bool processMc = doprocessXiSameEventMc || doprocessXiMixedEventMc || doprocessOmegaSameEventMc || doprocessOmegaMixedEventMc;
167+
168+ if (processData && processMc) {
169+ LOG (fatal) << " Both data and mc processing is enabled. Breaking..." ;
170+ }
171+
172+ bool processXi = doprocessXiSameEvent || doprocessXiSameEventMc || doprocessXiMixedEvent || doprocessXiMixedEventMc;
173+ bool processOmega = doprocessOmegaSameEvent || doprocessOmegaSameEventMc || doprocessOmegaMixedEvent || doprocessOmegaMixedEventMc;
174+
175+ if (processXi && processOmega) {
176+ LOG (fatal) << " Both xi-track and omega-track processing is enabled. Breaking..." ;
177+ }
148178
149179 // setup columnpolicy for binning
150180 // default values are used during instantiation, so we need to explicity update them here
151181 mixBinsVtxMult = {{confMixing.vtxBins , confMixing.multBins .value }, true };
152182 mixBinsVtxCent = {{confMixing.vtxBins .value , confMixing.centBins .value }, true };
153183 mixBinsVtxMultCent = {{confMixing.vtxBins .value , confMixing.multBins .value , confMixing.centBins .value }, true };
154184
155- // setup histograms
156- auto colHistSpec = colhistmanager::makeColHistSpecMap (confCollisionBinning);
157- auto trackHistSpec = trackhistmanager::makeTrackHistSpecMap (confTrackBinning);
158- auto bachelorHistSpec = trackhistmanager::makeTrackHistSpecMap (confBachelorBinning);
159- auto posDauSpec = trackhistmanager::makeTrackHistSpecMap (confPosDauBinning);
160- auto negDauSpec = trackhistmanager::makeTrackHistSpecMap (confNegDauBinning);
161- auto pairHistSpec = pairhistmanager::makePairHistSpecMap (confPairBinning);
162185 auto cprHistSpecBachelor = closepairrejection::makeCprHistSpecMap (confCprBachelor);
163186 auto cprHistSpecV0Daughter = closepairrejection::makeCprHistSpecMap (confCprV0Daughter);
164187
165- // setup for xis
166- if (doprocessXiSameEvent || doprocessXiMixedEvent) {
167- auto xiHistSpec = cascadehistmanager::makeCascadeHistSpecMap (confXiBinning);
168- auto pairTrackXiHistSpec = pairhistmanager::makePairHistSpecMap (confPairBinning);
169- pairTrackXiBuilder.init <modes::Mode::kAnalysis >(&hRegistry, confTrackSelection, confTrackCleaner, confXiSelection, confXiCleaner, confCprBachelor, confCprV0Daughter, confMixing, confPairBinning, confPairCuts, colHistSpec, trackHistSpec, xiHistSpec, bachelorHistSpec, posDauSpec, negDauSpec, pairTrackXiHistSpec, cprHistSpecBachelor, cprHistSpecV0Daughter);
170- }
171-
172- // setup for omegas
173- if (doprocessOmegaSameEvent || doprocessOmegaMixedEvent) {
174- auto omegaHistSpec = cascadehistmanager::makeCascadeHistSpecMap (confOmegaBinning);
175- auto pairTrackOmegaHistSpec = pairhistmanager::makePairHistSpecMap (confPairBinning);
176- pairTrackOmegaBuilder.init <modes::Mode::kAnalysis >(&hRegistry, confTrackSelection, confTrackCleaner, confOmegaSelection, confOmegaCleaner, confCprBachelor, confCprV0Daughter, confMixing, confPairBinning, confPairCuts, colHistSpec, trackHistSpec, omegaHistSpec, bachelorHistSpec, posDauSpec, negDauSpec, pairTrackOmegaHistSpec, cprHistSpecBachelor, cprHistSpecV0Daughter);
177- }
178-
179- if (((doprocessXiSameEvent || doprocessXiMixedEvent) + (doprocessOmegaSameEvent || doprocessOmegaMixedEvent)) > 1 ) {
180- LOG (fatal) << " Can only process xi-tracks Or omega-tracks" ;
188+ if (processData) {
189+ auto colHistSpec = colhistmanager::makeColHistSpecMap (confCollisionBinning);
190+ auto trackHistSpec = trackhistmanager::makeTrackHistSpecMap (confTrackBinning);
191+ auto bachelorHistSpec = trackhistmanager::makeTrackHistSpecMap (confBachelorBinning);
192+ auto posDauSpec = trackhistmanager::makeTrackHistSpecMap (confPosDauBinning);
193+ auto negDauSpec = trackhistmanager::makeTrackHistSpecMap (confNegDauBinning);
194+ auto pairHistSpec = pairhistmanager::makePairHistSpecMap (confPairBinning);
195+ if (processXi) {
196+ auto xiHistSpec = cascadehistmanager::makeCascadeHistSpecMap (confXiBinning);
197+ auto pairTrackXiHistSpec = pairhistmanager::makePairHistSpecMap (confPairBinning);
198+ pairTrackXiBuilder.init <modes::Mode::kAnalysis >(&hRegistry, confTrackSelection, confTrackCleaner, confXiSelection, confXiCleaner, confCprBachelor, confCprV0Daughter, confMixing, confPairBinning, confPairCuts, colHistSpec, trackHistSpec, xiHistSpec, bachelorHistSpec, posDauSpec, negDauSpec, pairTrackXiHistSpec, cprHistSpecBachelor, cprHistSpecV0Daughter);
199+ } else {
200+ auto omegaHistSpec = cascadehistmanager::makeCascadeHistSpecMap (confOmegaBinning);
201+ auto pairTrackOmegaHistSpec = pairhistmanager::makePairHistSpecMap (confPairBinning);
202+ pairTrackOmegaBuilder.init <modes::Mode::kAnalysis >(&hRegistry, confTrackSelection, confTrackCleaner, confOmegaSelection, confOmegaCleaner, confCprBachelor, confCprV0Daughter, confMixing, confPairBinning, confPairCuts, colHistSpec, trackHistSpec, omegaHistSpec, bachelorHistSpec, posDauSpec, negDauSpec, pairTrackOmegaHistSpec, cprHistSpecBachelor, cprHistSpecV0Daughter);
203+ }
204+ } else {
205+ auto colHistSpec = colhistmanager::makeColMcHistSpecMap (confCollisionBinning);
206+ auto trackHistSpec = trackhistmanager::makeTrackMcHistSpecMap (confTrackBinning);
207+ auto bachelorHistSpec = trackhistmanager::makeTrackMcHistSpecMap (confBachelorBinning);
208+ auto posDauSpec = trackhistmanager::makeTrackMcHistSpecMap (confPosDauBinning);
209+ auto negDauSpec = trackhistmanager::makeTrackMcHistSpecMap (confNegDauBinning);
210+ auto pairHistSpec = pairhistmanager::makePairMcHistSpecMap (confPairBinning);
211+ if (processXi) {
212+ auto xiHistSpec = cascadehistmanager::makeCascadeMcHistSpecMap (confXiBinning);
213+ auto pairTrackXiHistSpec = pairhistmanager::makePairMcHistSpecMap (confPairBinning);
214+ pairTrackXiBuilder.init <modes::Mode::kAnalysis_Mc >(&hRegistry, confTrackSelection, confTrackCleaner, confXiSelection, confXiCleaner, confCprBachelor, confCprV0Daughter, confMixing, confPairBinning, confPairCuts, colHistSpec, trackHistSpec, xiHistSpec, bachelorHistSpec, posDauSpec, negDauSpec, pairTrackXiHistSpec, cprHistSpecBachelor, cprHistSpecV0Daughter);
215+ } else {
216+ auto omegaHistSpec = cascadehistmanager::makeCascadeMcHistSpecMap (confOmegaBinning);
217+ auto pairTrackOmegaHistSpec = pairhistmanager::makePairHistSpecMap (confPairBinning);
218+ pairTrackOmegaBuilder.init <modes::Mode::kAnalysis_Mc >(&hRegistry, confTrackSelection, confTrackCleaner, confOmegaSelection, confOmegaCleaner, confCprBachelor, confCprV0Daughter, confMixing, confPairBinning, confPairCuts, colHistSpec, trackHistSpec, omegaHistSpec, bachelorHistSpec, posDauSpec, negDauSpec, pairTrackOmegaHistSpec, cprHistSpecBachelor, cprHistSpecV0Daughter);
219+ }
181220 }
182221 };
183222
184- void processXiSameEvent (FilteredCollision const & col, Tracks const & tracks, Xis const & xis)
223+ void processXiSameEvent (FilteredFemtoCollision const & col, FemtoTracks const & tracks, FemtoXis const & xis)
185224 {
186225 pairTrackXiBuilder.processSameEvent <modes::Mode::kAnalysis >(col, tracks, trackPartition, xis, xiPartition, cache);
187226 }
188227 PROCESS_SWITCH (FemtoPairTrackCascade, processXiSameEvent, " Enable processing same event processing for tracks and xis" , true );
189228
190- void processXiMixedEvent (FilteredCollisions const & cols, Tracks const & tracks, Xis const & /* xis*/ )
229+ void processXiSameEventMc (FilteredFemtoCollisionWithLabel const & col, FMcCols const & mcCols, FemtoTracksWithLabel const & tracks, FemtoXisWithLabel const & xis, FMcParticles const & mcParticles, FMcMothers const & mcMothers, FMcPartMoths const & mcPartonicMothers)
230+ {
231+ pairTrackXiBuilder.processSameEvent <modes::Mode::kAnalysis_Mc >(col, mcCols, tracks, trackWithLabelPartition, xis, xiWithLabelPartition, mcParticles, mcMothers, mcPartonicMothers, cache);
232+ }
233+ PROCESS_SWITCH (FemtoPairTrackCascade, processXiSameEventMc, " Enable processing same event processing for tracks and xis with mc information" , false );
234+
235+ void processXiMixedEvent (FilteredFemtoCollisions const & cols, FemtoTracks const & tracks, FemtoXis const & /* xis*/ )
191236 {
192237 pairTrackXiBuilder.processMixedEvent <modes::Mode::kAnalysis >(cols, tracks, trackPartition, xiPartition, cache, mixBinsVtxMult, mixBinsVtxCent, mixBinsVtxMultCent);
193238 }
194239 PROCESS_SWITCH (FemtoPairTrackCascade, processXiMixedEvent, " Enable processing mixed event processing for tracks and xis" , true );
195240
196- void processOmegaSameEvent (FilteredCollision const & col, Tracks const & tracks, Omegas const & omegas)
241+ void processXiMixedEventMc (FilteredFemtoCollisionsWithLabel const & cols, FMcCols const & mcCols, FemtoTracksWithLabel const & tracks, FemtoXisWithLabel const & /* xis*/ , FMcParticles const & mcParticles, FMcMothers const & mcMothers, FMcPartMoths const & mcPartonicMothers)
242+ {
243+ pairTrackXiBuilder.processMixedEvent <modes::Mode::kAnalysis_Mc >(cols, mcCols, tracks, trackWithLabelPartition, xiWithLabelPartition, mcParticles, mcMothers, mcPartonicMothers, cache, mixBinsVtxMult, mixBinsVtxCent, mixBinsVtxMultCent);
244+ }
245+ PROCESS_SWITCH (FemtoPairTrackCascade, processXiMixedEventMc, " Enable processing mixed event processing for tracks and xis with mc information" , false );
246+
247+ void processOmegaSameEvent (FilteredFemtoCollision const & col, FemtoTracks const & tracks, FemtoOmegas const & omegas)
197248 {
198249 pairTrackOmegaBuilder.processSameEvent <modes::Mode::kAnalysis >(col, tracks, trackPartition, omegas, omegaPartition, cache);
199250 }
200251 PROCESS_SWITCH (FemtoPairTrackCascade, processOmegaSameEvent, " Enable processing same event processing for tracks and omegas" , false );
201252
202- void processOmegaMixedEvent (FilteredCollisions const & cols, Tracks const & tracks, Omegas const & /* omegas*/ )
253+ void processOmegaSameEventMc (FilteredFemtoCollisionWithLabel const & col, FMcCols const & mcCols, FemtoTracksWithLabel const & tracks, FemtoOmegasWithLabel const & omegas, FMcParticles const & mcParticles, FMcMothers const & mcMothers, FMcPartMoths const & mcPartonicMothers)
254+ {
255+ pairTrackOmegaBuilder.processSameEvent <modes::Mode::kAnalysis_Mc >(col, mcCols, tracks, trackWithLabelPartition, omegas, omegaWithLabelPartition, mcParticles, mcMothers, mcPartonicMothers, cache);
256+ }
257+ PROCESS_SWITCH (FemtoPairTrackCascade, processOmegaSameEventMc, " Enable processing same event processing for tracks and omegas with mc information" , false );
258+
259+ void processOmegaMixedEvent (FilteredFemtoCollisions const & cols, FemtoTracks const & tracks, FemtoOmegas const & /* omegas*/ )
203260 {
204261 pairTrackOmegaBuilder.processMixedEvent <modes::Mode::kAnalysis >(cols, tracks, trackPartition, omegaPartition, cache, mixBinsVtxMult, mixBinsVtxCent, mixBinsVtxMultCent);
205262 }
206263 PROCESS_SWITCH (FemtoPairTrackCascade, processOmegaMixedEvent, " Enable processing mixed event processing for tracks and omegas" , false );
264+
265+ void processOmegaMixedEventMc (FilteredFemtoCollisionsWithLabel const & cols, FMcCols const & mcCols, FemtoTracksWithLabel const & tracks, FemtoXisWithLabel const & /* xis*/ , FMcParticles const & mcParticles, FMcMothers const & mcMothers, FMcPartMoths const & mcPartonicMothers)
266+ {
267+ pairTrackOmegaBuilder.processMixedEvent <modes::Mode::kAnalysis_Mc >(cols, mcCols, tracks, trackWithLabelPartition, omegaWithLabelPartition, mcParticles, mcMothers, mcPartonicMothers, cache, mixBinsVtxMult, mixBinsVtxCent, mixBinsVtxMultCent);
268+ }
269+ PROCESS_SWITCH (FemtoPairTrackCascade, processOmegaMixedEventMc, " Enable processing mixed event processing for tracks and omegas with mc information" , false );
207270};
208271
209272WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments