Skip to content

Commit 3cb7d47

Browse files
authored
Add files via upload
1 parent bf1dbbb commit 3cb7d47

File tree

1 file changed

+197
-66
lines changed

1 file changed

+197
-66
lines changed

PWGHF/D2H/Tasks/taskXic0ToXiPi.cxx

Lines changed: 197 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
// or submit itself to any jurisdiction.
1111

1212
/// \file taskXic0ToXiPi.cxx
13-
/// \brief Task for Ξc^0 → Ξ∓ π± Kf analysis
13+
/// \brief Task for Ξc^0 → Ξ∓ π± analysis
1414
/// \author Tao Fang <tao.fang@cern.ch>, Central China Normal University
1515
/// \author Ran Tu <ran.tu@cern.ch>, Fudan University
1616

@@ -62,10 +62,14 @@ struct HfTaskXic0ToXiPi {
6262

6363
using TracksMc = soa::Join<aod::Tracks, aod::TracksIU, aod::McTrackLabels>;
6464

65+
using Xic0Cands = soa::Filtered<soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi>>;
6566
using Xic0CandsKF = soa::Filtered<soa::Join<aod::HfCandToXiPiKf, aod::HfSelToXiPiKf>>;
67+
using Xic0CandsMc = soa::Filtered<soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfXicToXiPiMCRec>>;
6668
using Xic0CandsMcKF = soa::Filtered<soa::Join<aod::HfCandToXiPiKf, aod::HfSelToXiPiKf, aod::HfXicToXiPiMCRec>>;
6769

70+
using Xic0CandsMl = soa::Filtered<soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfMlToXiPi>>;
6871
using Xic0CandsMlKF = soa::Filtered<soa::Join<aod::HfCandToXiPiKf, aod::HfSelToXiPiKf, aod::HfMlToXiPiKf>>;
72+
using Xic0CandsMlMc = soa::Filtered<soa::Join<aod::HfCandToXiPi, aod::HfSelToXiPi, aod::HfMlToXiPi, aod::HfXicToXiPiMCRec>>;
6973
using Xic0CandsMlMcKF = soa::Filtered<soa::Join<aod::HfCandToXiPiKf, aod::HfSelToXiPiKf, aod::HfMlToXiPiKf, aod::HfXicToXiPiMCRec>>;
7074

7175
using Xic0Gen = soa::Filtered<soa::Join<aod::McParticles, aod::HfXicToXiPiMCGen>>;
@@ -78,7 +82,9 @@ struct HfTaskXic0ToXiPi {
7882
Filter filterSelectXic0Candidates = aod::hf_sel_toxipi::resultSelections == true;
7983
Filter filterXicMatchedRec = nabs(aod::hf_cand_xic0_omegac0::flagMcMatchRec) == static_cast<int8_t>(BIT(aod::hf_cand_xic0_omegac0::DecayType::XiczeroToXiPi));
8084
Filter filterXicMatchedGen = nabs(aod::hf_cand_xic0_omegac0::flagMcMatchGen) == static_cast<int8_t>(BIT(aod::hf_cand_xic0_omegac0::DecayType::XiczeroToXiPi));
85+
Preslice<Xic0Cands> candXicPerCollision = aod::hf_cand_xic0_omegac0::collisionId;
8186
Preslice<Xic0CandsKF> candXicKFPerCollision = aod::hf_cand_xic0_omegac0::collisionId;
87+
Preslice<Xic0CandsMl> candXicMlPerCollision = aod::hf_cand_xic0_omegac0::collisionId;
8288
Preslice<Xic0CandsMlKF> candXicKFMlPerCollision = aod::hf_cand_xic0_omegac0::collisionId;
8389

8490
PresliceUnsorted<CollisionsWithMcLabels> colPerMcCollision = aod::mccollisionlabel::mcCollisionId;
@@ -100,7 +106,10 @@ struct HfTaskXic0ToXiPi {
100106

101107
void init(InitContext&)
102108
{
103-
std::array<bool, 8> doprocess{doprocessDataWithKFParticle, doprocessMcWithKFParticle, doprocessDataWithKFParticleMl, doprocessMcWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0M};
109+
std::array<bool, 16> doprocess{doprocessDataWithDCAFitter, doprocessDataWithDCAFitterMl, doprocessDataWithDCAFitterFT0C, doprocessDataWithDCAFitterFT0M, doprocessDataWithDCAFitterMlFT0C, doprocessDataWithDCAFitterMlFT0M, \
110+
doprocessDataWithKFParticle, doprocessDataWithKFParticleMl, doprocessDataWithKFParticleFT0C, doprocessDataWithKFParticleFT0M, doprocessDataWithKFParticleMlFT0C, doprocessDataWithKFParticleMlFT0M, \
111+
doprocessMcWithKFParticle, doprocessMcWithKFParticleMl,doprocessMcWithDCAFitter, doprocessMcWithDCAFitterMl
112+
};
104113
if ((std::accumulate(doprocess.begin(), doprocess.end(), 0)) != 1) {
105114
LOGP(fatal, "One and only one process function should be enabled at a time.");
106115
}
@@ -162,59 +171,47 @@ struct HfTaskXic0ToXiPi {
162171
}
163172

164173
if constexpr (applyMl) {
165-
registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), candidate.kfptXic(), candidate.kfRapXic());
174+
registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.mlProbToXiPi()[0], candidate.invMassCharmBaryon(), candidate.ptXic(), candidate.kfRapXic());
166175
} else {
167-
registry.fill(HIST("hMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.invMassCharmBaryon(), candidate.kfptXic(), candidate.kfRapXic());
176+
registry.fill(HIST("hMassVsPtVsPtBVsYVsOriginVsXic0Type"), candidate.invMassCharmBaryon(), candidate.ptXic(), candidate.kfRapXic());
168177
}
169178
}
170179
}
171180

172-
template <bool useCentrality, bool applyMl, typename CandType, typename CollType>
173-
void processDataCent(const CandType& candidates, CollType const& collisions)
181+
template < bool useCentrality, bool applyMl, typename CandType, typename CollType>
182+
void processDataCent(const CandType& candidate, CollType const& collision)
174183
{
175-
for (const auto& collision : collisions) {
176-
177-
auto thisCollId = collision.globalIndex();
178-
auto groupedXicCandidates = applyMl
179-
? candidates.sliceBy(candXicKFMlPerCollision, thisCollId)
180-
: candidates.sliceBy(candXicKFPerCollision, thisCollId);
181-
// auto numPvContributors = collision.numContrib();
184+
if (candidate.resultSelections() != true) {
185+
return;
186+
}
187+
if (yCandRecMax >= 0. && std::abs(candidate.etaCharmBaryon()) > yCandRecMax) {
188+
return;
189+
}
182190

183-
for (const auto& candidate : groupedXicCandidates) {
184-
if (candidate.resultSelections() != true) {
185-
continue;
186-
}
187-
if (yCandRecMax >= 0. && std::abs(candidate.kfRapXic()) > yCandRecMax) {
188-
continue;
189-
}
190-
191-
auto numPvContributors = candidate.template collision_as<CollType>().numContrib();
192-
float centrality = -999.f;
193-
if constexpr (useCentrality) {
194-
auto const& collision = candidate.template collision_as<CollType>();
195-
centrality = o2::hf_centrality::getCentralityColl(collision);
196-
}
197-
double kfptXic = RecoDecay::sqrtSumOfSquares(candidate.pxCharmBaryon(), candidate.pyCharmBaryon());
198-
double kfptPiFromXic = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon());
199-
if constexpr (applyMl) {
200-
registry.fill(HIST("hBdtScoreVsMassVsPtVsYVsCentVsPtPion"),
201-
candidate.mlProbToXiPi()[0],
202-
candidate.invMassCharmBaryon(),
203-
kfptXic,
204-
candidate.kfRapXic(),
205-
centrality,
206-
kfptPiFromXic,
207-
numPvContributors);
208-
} else {
209-
registry.fill(HIST("hMassVsPtVsYVsCentVsPtPion"),
210-
candidate.invMassCharmBaryon(),
211-
kfptXic,
212-
candidate.kfRapXic(),
213-
centrality,
214-
kfptPiFromXic,
215-
numPvContributors);
216-
}
217-
}
191+
auto numPvContributors = collision.numContrib();
192+
float centrality = -999.f;
193+
if constexpr (useCentrality) {
194+
centrality = o2::hf_centrality::getCentralityColl(collision);
195+
}
196+
double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon());
197+
double kfptPiFromXic = RecoDecay::pt(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon());
198+
if constexpr (applyMl) {
199+
registry.fill(HIST("hBdtScoreVsMassVsPtVsYVsCentVsPtPion"),
200+
candidate.mlProbToXiPi()[0],
201+
candidate.invMassCharmBaryon(),
202+
ptXic,
203+
candidate.etaCharmBaryon(),
204+
centrality,
205+
kfptPiFromXic,
206+
numPvContributors);
207+
} else {
208+
registry.fill(HIST("hMassVsPtVsYVsCentVsPtPion"),
209+
candidate.invMassCharmBaryon(),
210+
ptXic,
211+
candidate.etaCharmBaryon(),
212+
centrality,
213+
kfptPiFromXic,
214+
numPvContributors);
218215
}
219216
}
220217

@@ -230,27 +227,27 @@ struct HfTaskXic0ToXiPi {
230227
if (candidate.resultSelections() != true) {
231228
continue;
232229
}
233-
if (yCandRecMax >= 0. && std::abs(candidate.kfRapXic()) > yCandRecMax) {
230+
if (yCandRecMax >= 0. && std::abs(candidate.etaCharmBaryon()) > yCandRecMax) {
234231
continue;
235232
}
236233

237234
auto numPvContributors = candidate.template collision_as<CollType>().numContrib();
238-
double kfptXic = RecoDecay::sqrtSumOfSquares(candidate.pxCharmBaryon(), candidate.pyCharmBaryon());
235+
double ptXic = RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon());
239236
if constexpr (applyMl) {
240237
registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsXic0Type"),
241238
candidate.mlProbToXiPi()[0],
242239
candidate.invMassCharmBaryon(),
243-
kfptXic,
244-
candidate.kfRapXic(),
240+
ptXic,
241+
candidate.etaCharmBaryon(),
245242
candidate.ptBhadMotherPart(),
246243
candidate.originMcRec(),
247244
candidate.flagMcMatchRec(),
248245
numPvContributors);
249246
} else {
250247
registry.fill(HIST("hMassVsPtVsPtBVsYVsOriginVsXic0Type"),
251248
candidate.invMassCharmBaryon(),
252-
kfptXic,
253-
candidate.kfRapXic(),
249+
ptXic,
250+
candidate.etaCharmBaryon(),
254251
candidate.ptBhadMotherPart(),
255252
candidate.originMcRec(),
256253
candidate.flagMcMatchRec(),
@@ -291,48 +288,172 @@ struct HfTaskXic0ToXiPi {
291288
}
292289
}
293290
}
291+
292+
void processDataWithDCAFitter(Xic0Cands const& candidates,
293+
CollisionsWithEvSels const& collisions)
294+
{
295+
for (const auto& collision : collisions) {
296+
auto thisCollId = collision.globalIndex();
297+
auto groupedXicCandidates = candidates.sliceBy(candXicPerCollision, thisCollId);
298+
for (const auto& candidate : groupedXicCandidates) {
299+
processDataCent<false, false>(candidate, collision);
300+
}
301+
}
302+
}
303+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitter, "process HfTaskXic0ToXiPi with DCAFitter", true);
294304

295305
void processDataWithKFParticle(Xic0CandsKF const& candidates,
296306
CollisionsWithEvSels const& collisions)
297307
{
298-
processDataCent<false, false>(candidates, collisions);
308+
for (const auto& collision : collisions) {
309+
auto thisCollId = collision.globalIndex();
310+
auto groupedXicCandidates = candidates.sliceBy(candXicKFPerCollision, thisCollId);
311+
for (const auto& candidate : groupedXicCandidates) {
312+
processDataCent<false, false>(candidate, collision);
313+
}
314+
}
299315
}
300-
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticle, "process HfTaskXic0ToXiPi with KFParticle", true);
316+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticle, "process HfTaskXic0ToXiPi with KFParticle", true);
317+
318+
void processDataWithDCAFitterMl(Xic0CandsMl const& candidates,
319+
CollisionsWithEvSels const& collisions)
320+
{
321+
for (const auto& collision : collisions) {
322+
auto thisCollId = collision.globalIndex();
323+
auto groupedXicCandidates = candidates.sliceBy(candXicMlPerCollision, thisCollId);
324+
for (const auto& candidate : groupedXicCandidates) {
325+
processDataCent<false, true>(candidate, collision);
326+
}
327+
}
328+
}
329+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMl, "process HfTaskXic0ToXiPi with DCAFitter and ML selections", false);
301330

302331
void processDataWithKFParticleMl(Xic0CandsMlKF const& candidates,
303332
CollisionsWithEvSels const& collisions)
304333
{
305-
processDataCent<false, true>(candidates, collisions);
334+
for (const auto& collision : collisions) {
335+
auto thisCollId = collision.globalIndex();
336+
auto groupedXicCandidates = candidates.sliceBy(candXicKFMlPerCollision, thisCollId);
337+
for (const auto& candidate : groupedXicCandidates) {
338+
processDataCent<false, true>(candidate, collision);
339+
}
340+
}
341+
}
342+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMl, "process HfTaskXic0ToXiPi with KFParticle and ML selections", false);
343+
344+
void processDataWithDCAFitterFT0C(Xic0Cands const& candidates,
345+
CollisionsWithFT0C const& collisions)
346+
{
347+
for (const auto& collision : collisions) {
348+
auto thisCollId = collision.globalIndex();
349+
auto groupedXicCandidates = candidates.sliceBy(candXicPerCollision, thisCollId);
350+
for (const auto& candidate : groupedXicCandidates) {
351+
processDataCent<true, false>(candidate, collision);
352+
}
353+
}
306354
}
307-
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMl, "process HfTaskXic0ToXiPi with KFParticle and ML selections", false);
355+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterFT0C, "process HfTaskXic0ToXiPi with DCAFitter and with FT0C centrality", false);
308356

309357
void processDataWithKFParticleFT0C(Xic0CandsKF const& candidates,
310358
CollisionsWithFT0C const& collisions)
311359
{
312-
processDataCent<true, false>(candidates, collisions);
360+
for (const auto& collision : collisions) {
361+
auto thisCollId = collision.globalIndex();
362+
auto groupedXicCandidates = candidates.sliceBy(candXicKFPerCollision, thisCollId);
363+
for (const auto& candidate : groupedXicCandidates) {
364+
processDataCent<true, false>(candidate, collision);
365+
}
366+
}
367+
}
368+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0C, "process HfTaskXic0ToXiPi with KFParticle and with FT0C centrality", false);
369+
370+
void processDataWithDCAFitterFT0M(Xic0Cands const& candidates,
371+
CollisionsWithFT0M const& collisions)
372+
{
373+
for (const auto& collision : collisions) {
374+
auto thisCollId = collision.globalIndex();
375+
auto groupedXicCandidates = candidates.sliceBy(candXicPerCollision, thisCollId);
376+
for (const auto& candidate : groupedXicCandidates) {
377+
processDataCent<true, false>(candidate, collision);
378+
}
379+
}
313380
}
314-
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0C, "process HfTaskXic0ToXiPi with KFParticle and with FT0C centrality", false);
381+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterFT0M, "process HfTaskXic0ToXiPi with DCAFitter and with FT0M centrality", false);
315382

316383
void processDataWithKFParticleFT0M(Xic0CandsKF const& candidates,
317384
CollisionsWithFT0M const& collisions)
318385
{
319-
processDataCent<true, false>(candidates, collisions);
386+
for (const auto& collision : collisions) {
387+
auto thisCollId = collision.globalIndex();
388+
auto groupedXicCandidates = candidates.sliceBy(candXicKFPerCollision, thisCollId);
389+
for (const auto& candidate : groupedXicCandidates) {
390+
processDataCent<true, false>(candidate, collision);
391+
}
392+
}
320393
}
321-
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0M, "process HfTaskXic0ToXiPi with KFParticle and with FT0M centrality", false);
394+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleFT0M, "process HfTaskXic0ToXiPi with KFParticle and with FT0M centrality", false);
322395

396+
void processDataWithDCAFitterMlFT0C(Xic0CandsMl const& candidates,
397+
CollisionsWithFT0C const& collisions)
398+
{
399+
for (const auto& collision : collisions) {
400+
auto thisCollId = collision.globalIndex();
401+
auto groupedXicCandidates = candidates.sliceBy(candXicMlPerCollision, thisCollId);
402+
for (const auto& candidate : groupedXicCandidates) {
403+
processDataCent<true, true>(candidate, collision);
404+
}
405+
}
406+
}
407+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0C, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0C centrality", false);
408+
323409
void processDataWithKFParticleMlFT0C(Xic0CandsMlKF const& candidates,
324410
CollisionsWithFT0C const& collisions)
325411
{
326-
processDataCent<true, true>(candidates, collisions);
412+
for (const auto& collision : collisions) {
413+
auto thisCollId = collision.globalIndex();
414+
auto groupedXicCandidates = candidates.sliceBy(candXicKFMlPerCollision, thisCollId);
415+
for (const auto& candidate : groupedXicCandidates) {
416+
processDataCent<true, true>(candidate, collision);
417+
}
418+
}
327419
}
328-
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0C, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0C centrality", false);
420+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0C, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0C centrality", false);
421+
422+
void processDataWithDCAFitterMlFT0M(Xic0CandsMl const& candidates,
423+
CollisionsWithFT0M const& collisions)
424+
{
425+
for (const auto& collision : collisions) {
426+
auto thisCollId = collision.globalIndex();
427+
auto groupedXicCandidates = candidates.sliceBy(candXicMlPerCollision, thisCollId);
428+
for (const auto& candidate : groupedXicCandidates) {
429+
processDataCent<true, true>(candidate, collision);
430+
}
431+
}
432+
}
433+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithDCAFitterMlFT0M, "process HfTaskXic0ToXiPi with DCAFitter and ML selections and with FT0M centrality", false);
329434

330435
void processDataWithKFParticleMlFT0M(Xic0CandsMlKF const& candidates,
331436
CollisionsWithFT0M const& collisions)
332437
{
333-
processDataCent<true, true>(candidates, collisions);
438+
for (const auto& collision : collisions) {
439+
auto thisCollId = collision.globalIndex();
440+
auto groupedXicCandidates = candidates.sliceBy(candXicKFMlPerCollision, thisCollId);
441+
for (const auto& candidate : groupedXicCandidates) {
442+
processDataCent<true, true>(candidate, collision);
443+
}
444+
}
445+
}
446+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0M, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0M centrality", false);
447+
448+
void processMcWithDCAFitter(Xic0CandsMc const& Xic0CandidatesMc,
449+
Xic0Gen const& mcParticles,
450+
TracksMc const& tracks,
451+
CollisionsWithMcLabels const& collisions,
452+
aod::McCollisions const& mcCollisions)
453+
{
454+
processMc<false>(Xic0CandidatesMc, mcParticles, tracks, collisions, mcCollisions);
334455
}
335-
PROCESS_SWITCH(HfTaskXic0ToXiPi, processDataWithKFParticleMlFT0M, "process HfTaskXic0ToXiPi with KFParticle and ML selections and with FT0M centrality", false);
456+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithDCAFitter, "Process MC with KFParticle", false);
336457

337458
void processMcWithKFParticle(Xic0CandsMcKF const& Xic0CandidatesMcKF,
338459
Xic0Gen const& mcParticles,
@@ -344,6 +465,16 @@ struct HfTaskXic0ToXiPi {
344465
}
345466
PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithKFParticle, "Process MC with KFParticle", false);
346467

468+
void processMcWithDCAFitterMl(Xic0CandsMlMc const& Xic0CandidatesMlMc,
469+
Xic0Gen const& mcParticles,
470+
TracksMc const& tracks,
471+
CollisionsWithMcLabels const& collisions,
472+
aod::McCollisions const& mcCollisions)
473+
{
474+
processMc<true>(Xic0CandidatesMlMc, mcParticles, tracks, collisions, mcCollisions);
475+
}
476+
PROCESS_SWITCH(HfTaskXic0ToXiPi, processMcWithDCAFitterMl, "Process MC with KFParticle and ML selections", false);
477+
347478
void processMcWithKFParticleMl(Xic0CandsMlMcKF const& Xic0CandidatesMlMcKF,
348479
Xic0Gen const& mcParticles,
349480
TracksMc const& tracks,

0 commit comments

Comments
 (0)