Skip to content

Commit e579b1d

Browse files
committed
Feat: add MC processing to track cascade task
1 parent 5625380 commit e579b1d

File tree

1 file changed

+104
-41
lines changed

1 file changed

+104
-41
lines changed

PWGCF/Femto/Tasks/femtoPairTrackCascade.cxx

Lines changed: 104 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
#include "Framework/OutputObjHeader.h"
3939
#include "Framework/runDataProcessing.h"
4040

41-
#include <string>
4241
#include <vector>
4342

4443
using namespace o2;
@@ -51,15 +50,21 @@ using namespace o2::analysis::femto;
5150
struct 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

209272
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)