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