Skip to content

Commit ebabcdb

Browse files
committed
Add process functions with centrality (FT0M) information
1 parent 0a18212 commit ebabcdb

File tree

1 file changed

+164
-30
lines changed

1 file changed

+164
-30
lines changed

PWGHF/TableProducer/treeCreatorOmegac0ToOmegaPi.cxx

Lines changed: 164 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@
1818
/// \author Fabio Catalano <fabio.catalano@cern.ch>, University of Houston
1919
/// \author Ruiqi Yin <ruiqi.yin@cern.ch>, Fudan University
2020

21+
#include "PWGHF/Core/CentralityEstimation.h"
2122
#include "PWGHF/DataModel/CandidateReconstructionTables.h"
2223
#include "PWGHF/DataModel/CandidateSelectionTables.h"
24+
#include "PWGLF/DataModel/mcCentrality.h"
2325

2426
#include "Common/Core/RecoDecay.h"
27+
#include "Common/DataModel/Centrality.h"
2528
#include "Common/DataModel/EventSelection.h"
2629
#include "Common/DataModel/TrackSelectionTables.h"
2730

@@ -169,7 +172,7 @@ DECLARE_SOA_TABLE(HfToOmegaPiEvs, "AOD", "HFTOOMEPIEV",
169172
full::IsEventSel8, full::IsEventSelZ);
170173

171174
DECLARE_SOA_TABLE(HfOmegac0ToOmegaPiLites, "AOD", "HFTOOMEPILITE",
172-
full::XPv, full::YPv, full::ZPv, collision::NumContrib, collision::Chi2, , cent::CentFT0M,
175+
full::XPv, full::YPv, full::ZPv, collision::NumContrib, collision::Chi2, cent::CentFT0M,
173176
full::XDecayVtxCharmBaryon, full::YDecayVtxCharmBaryon, full::ZDecayVtxCharmBaryon,
174177
full::XDecayVtxCascade, full::YDecayVtxCascade, full::ZDecayVtxCascade,
175178
full::XDecayVtxV0, full::YDecayVtxV0, full::ZDecayVtxV0,
@@ -228,6 +231,15 @@ DECLARE_SOA_TABLE(HfKfOmegacLites, "AOD", "HFKFOMEGACLITE",
228231
full::FlagMcMatchRec, full::OriginMcRec, full::CollisionMatched, hf_track_index::HFflag, collision::NumContrib, cent::CentFT0M);
229232
} // namespace o2::aod
230233

234+
/// Evaluate centrality/multiplicity percentile (centrality estimator is automatically selected based on the used table)
235+
/// \param candidate is candidate
236+
/// \return centrality/multiplicity percentile of the collision
237+
template <typename Coll>
238+
float evaluateCentralityColl(const Coll& collision)
239+
{
240+
return o2::hf_centrality::getCentralityColl<Coll>(collision);
241+
}
242+
231243
/// Writes the full information in an output TTree
232244
struct HfTreeCreatorOmegac0ToOmegaPi {
233245

@@ -240,24 +252,31 @@ struct HfTreeCreatorOmegac0ToOmegaPi {
240252
Configurable<bool> keepOnlyMcSignal{"keepOnlyMcSignal", true, "Fill MC tree only with signal candidates"};
241253

242254
using Tracks = soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksExtra>;
243-
using Colls = soa::Join<aod::Collisions, aod::EvSels>;
255+
256+
using CandSel = soa::Filtered<soa::Join<aod::HfCandToOmegaPi, aod::HfSelToOmegaPi>>;
244257
using CandKfSel = soa::Filtered<soa::Join<aod::HfCandToOmegaPi, aod::HfOmegacKf, aod::HfSelToOmegaPi>>;
245-
using CascKfMcSel = soa::Filtered<soa::Join<aod::HfCandToOmegaPi, aod::HfOmegacKf, aod::HfSelToOmegaPi, aod::HfToOmegaPiMCRec>>;
258+
using CandMcSel = soa::Filtered<soa::Join<aod::HfCandToOmegaPi, aod::HfSelToOmegaPi, aod::HfToOmegaPiMCRec>>;
259+
using CandKfMcSel = soa::Filtered<soa::Join<aod::HfCandToOmegaPi, aod::HfOmegacKf, aod::HfSelToOmegaPi, aod::HfToOmegaPiMCRec>>;
260+
261+
using Colls = soa::Join<aod::Collisions, aod::EvSels>;
262+
using CollsWithFT0M = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>;
263+
using CollsWithMcLabels = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels>;
264+
using McCollsWithFT0M = soa::Join<aod::McCollisions, aod::McCentFT0Ms>;
246265

247266
Filter filterOmegaCToOmegaPiFlag = (o2::aod::hf_track_index::hfflag & static_cast<uint8_t>(BIT(aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi))) != static_cast<uint8_t>(0);
248267

249268
void init(InitContext const&)
250269
{
251270
}
252271

253-
template <typename T>
254-
void fillEvent(const T& collision, float cutZPv)
272+
template <typename Colls>
273+
void fillEvent(const Colls& collision, float cutZPv)
255274
{
256275
rowEv(collision.sel8(), std::abs(collision.posZ()) < cutZPv);
257276
}
258277

259-
template <typename T>
260-
void fillCandidateLite(const T& candidate, int8_t flagMc, int8_t originMc, bool collisionMatched, float centFt0m)
278+
template <typename Cands, typename Colls>
279+
void fillCandidateLite(const Cands& candidate, const Colls&, int8_t flagMc, int8_t originMc, bool collisionMatched, float centFt0m)
261280
{
262281
if (candidate.resultSelections() && candidate.statusPidCharmBaryon() && candidate.statusInvMassLambda() && candidate.statusInvMassCascade() && candidate.statusInvMassCharmBaryon()) {
263282

@@ -332,8 +351,8 @@ struct HfTreeCreatorOmegac0ToOmegaPi {
332351
}
333352
}
334353

335-
template <typename T>
336-
void fillKfCandidate(const T& candidate, int8_t flagMc, int8_t originMc, bool collisionMatched, float centFt0m)
354+
template <typename Cands, typename Colls>
355+
void fillKfCandidate(const Cands& candidate, const Colls&, int8_t flagMc, int8_t originMc, bool collisionMatched, float centFt0m)
337356
{
338357
if (candidate.resultSelections() && candidate.statusPidCharmBaryon() && candidate.statusInvMassLambda() && candidate.statusInvMassCascade() && candidate.statusInvMassCharmBaryon()) {
339358

@@ -403,8 +422,8 @@ struct HfTreeCreatorOmegac0ToOmegaPi {
403422
}
404423
}
405424

406-
template <typename T>
407-
void fillKfCandidateLite(const T& candidate, int8_t flagMc, int8_t originMc, bool collisionMatched, float centFt0m)
425+
template <typename Cands, typename Colls>
426+
void fillKfCandidateLite(const Cands& candidate, const Colls&, int8_t flagMc, int8_t originMc, bool collisionMatched, float centFt0m)
408427
{
409428
if (candidate.resultSelections() && candidate.statusPidCharmBaryon() && candidate.statusInvMassLambda() && candidate.statusInvMassCascade() && candidate.statusInvMassCharmBaryon()) {
410429

@@ -448,8 +467,7 @@ struct HfTreeCreatorOmegac0ToOmegaPi {
448467
}
449468
} // fillKfCandidateLite end
450469

451-
void processDataLite(Colls const& collisions, Tracks const&,
452-
soa::Filtered<soa::Join<aod::HfCandToOmegaPi, aod::HfSelToOmegaPi>> const& candidates)
470+
void processData(Colls const& collisions, CandSel const& candidates, Tracks const&)
453471
{
454472
// Filling event properties
455473
rowEv.reserve(collisions.size());
@@ -460,12 +478,12 @@ struct HfTreeCreatorOmegac0ToOmegaPi {
460478
// Filling candidate properties
461479
rowCandidateLite.reserve(candidates.size());
462480
for (const auto& candidate : candidates) {
463-
fillCandidateLite(candidate, -7, RecoDecay::OriginType::None, false, -1.);
481+
fillCandidateLite(candidate, collisions, -7, RecoDecay::OriginType::None, false, -1.);
464482
}
465483
}
466-
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processDataLite, "Process data", false);
484+
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processData, "Process data", false);
467485

468-
void processKfDataFull(Colls const& collisions, Tracks const&, CandKfSel const& candidates)
486+
void processKfData(Colls const& collisions, CandKfSel const& candidates)
469487
{
470488
// Filling event properties
471489
rowEv.reserve(collisions.size());
@@ -476,12 +494,12 @@ struct HfTreeCreatorOmegac0ToOmegaPi {
476494
// Filling candidate properties
477495
rowKfCandidateFull.reserve(candidates.size());
478496
for (const auto& candidate : candidates) {
479-
fillKfCandidate(candidate, -7, RecoDecay::OriginType::None, false), -1.;
497+
fillKfCandidate(candidate, collisions, -7, RecoDecay::OriginType::None, false, -1.);
480498
}
481499
}
482-
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processKfDataFull, "Process KF data", false);
500+
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processKfData, "Process KF data", false);
483501

484-
void processKfDataLite(Colls const& collisions, Tracks const&, CandKfSel const& candidates)
502+
void processKfDataLite(Colls const& collisions, CandKfSel const& candidates)
485503
{
486504
// Filling event properties
487505
rowEv.reserve(collisions.size());
@@ -492,13 +510,66 @@ struct HfTreeCreatorOmegac0ToOmegaPi {
492510
// Filling candidate properties
493511
rowKfCandidateFull.reserve(candidates.size());
494512
for (const auto& candidate : candidates) {
495-
fillKfCandidateLite(candidate, -7, RecoDecay::OriginType::None, false, -1.);
513+
fillKfCandidateLite(candidate, collisions, -7, RecoDecay::OriginType::None, false, -1.);
496514
}
497515
}
498-
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processKfDataLite, "Process KF data Lite", false);
516+
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processKfDataLite, "Process KF data lite", false);
499517

500-
void processMcLite(Colls const& collisions, Tracks const&,
501-
soa::Filtered<soa::Join<aod::HfCandToOmegaPi, aod::HfSelToOmegaPi, aod::HfToOmegaPiMCRec>> const& candidates)
518+
void processDataCent(CollsWithFT0M const& collisions, CandSel const& candidates, Tracks const&)
519+
{
520+
// Filling event properties
521+
rowEv.reserve(collisions.size());
522+
for (const auto& collision : collisions) {
523+
fillEvent(collision, zPvCut);
524+
}
525+
526+
// Filling candidate properties
527+
rowCandidateLite.reserve(candidates.size());
528+
for (const auto& candidate : candidates) {
529+
auto collision = candidate.collision_as<CollsWithFT0M>();
530+
float centFt0m = evaluateCentralityColl(collision);
531+
fillCandidateLite(candidate, collisions, -7, RecoDecay::OriginType::None, false, centFt0m);
532+
}
533+
}
534+
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processDataCent, "Process data with FT0M info", false);
535+
536+
void processKfDataCent(CollsWithFT0M const& collisions, CandKfSel const& candidates)
537+
{
538+
// Filling event properties
539+
rowEv.reserve(collisions.size());
540+
for (const auto& collision : collisions) {
541+
fillEvent(collision, zPvCut);
542+
}
543+
544+
// Filling candidate properties
545+
rowKfCandidateFull.reserve(candidates.size());
546+
for (const auto& candidate : candidates) {
547+
auto collision = candidate.collision_as<CollsWithFT0M>();
548+
float centFt0m = evaluateCentralityColl(collision);
549+
fillKfCandidate(candidate, collisions, -7, RecoDecay::OriginType::None, false, centFt0m);
550+
}
551+
}
552+
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processKfDataCent, "Process KF data with FT0M info", false);
553+
554+
void processKfDataCentLite(CollsWithFT0M const& collisions, CandKfSel const& candidates)
555+
{
556+
// Filling event properties
557+
rowEv.reserve(collisions.size());
558+
for (const auto& collision : collisions) {
559+
fillEvent(collision, zPvCut);
560+
}
561+
562+
// Filling candidate properties
563+
rowKfCandidateFull.reserve(candidates.size());
564+
for (const auto& candidate : candidates) {
565+
auto collision = candidate.collision_as<CollsWithFT0M>();
566+
float centFt0m = evaluateCentralityColl(collision);
567+
fillKfCandidateLite(candidate, collisions, -7, RecoDecay::OriginType::None, false, centFt0m);
568+
}
569+
}
570+
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processKfDataCentLite, "Process KF data lite with FT0M info", false);
571+
572+
void processMc(Colls const& collisions, CandMcSel const& candidates, Tracks const&)
502573
{
503574
// Filling event properties
504575
rowEv.reserve(collisions.size());
@@ -512,12 +583,12 @@ struct HfTreeCreatorOmegac0ToOmegaPi {
512583
if (keepOnlyMcSignal && candidate.originMcRec() == 0) {
513584
continue;
514585
}
515-
fillCandidateLite(candidate, candidate.flagMcMatchRec(), candidate.originMcRec(), candidate.collisionMatched(), -1.);
586+
fillCandidateLite(candidate, collisions, candidate.flagMcMatchRec(), candidate.originMcRec(), candidate.collisionMatched(), -1.);
516587
}
517588
}
518-
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processMcLite, "Process MC", false);
589+
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processMc, "Process MC", false);
519590

520-
void processKFMcFull(Colls const& collisions, Tracks const&, CascKfMcSel const& candidates)
591+
void processKFMc(Colls const& collisions, CandKfMcSel const& candidates)
521592
{
522593
// Filling event properties
523594
rowEv.reserve(collisions.size());
@@ -531,12 +602,12 @@ struct HfTreeCreatorOmegac0ToOmegaPi {
531602
if (keepOnlyMcSignal && candidate.originMcRec() == 0) {
532603
continue;
533604
}
534-
fillKfCandidate(candidate, candidate.flagMcMatchRec(), candidate.originMcRec(), candidate.collisionMatched(), -1.);
605+
fillKfCandidate(candidate, collisions, candidate.flagMcMatchRec(), candidate.originMcRec(), candidate.collisionMatched(), -1.);
535606
}
536607
}
537-
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processKFMcFull, "Process KF MC", false);
608+
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processKFMc, "Process KF MC", false);
538609

539-
void processKFMcLite(Colls const& collisions, Tracks const&, CascKfMcSel const& candidates)
610+
void processKFMcLite(Colls const& collisions, CandKfMcSel const& candidates)
540611
{
541612
// Filling event properties
542613
rowEv.reserve(collisions.size());
@@ -550,11 +621,74 @@ struct HfTreeCreatorOmegac0ToOmegaPi {
550621
if (keepOnlyMcSignal && candidate.originMcRec() == 0) {
551622
continue;
552623
}
553-
fillKfCandidateLite(candidate, candidate.flagMcMatchRec(), candidate.originMcRec(), candidate.collisionMatched(), -1.);
624+
fillKfCandidateLite(candidate, collisions, candidate.flagMcMatchRec(), candidate.originMcRec(), candidate.collisionMatched(), -1.);
554625
}
555626
}
556627
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processKFMcLite, "Process KF MC Lite", false);
557628

629+
void processMcCent(CollsWithMcLabels const& collisions, CandMcSel const& candidates, Tracks const&, McCollsWithFT0M const&)
630+
{
631+
// Filling event properties
632+
rowEv.reserve(collisions.size());
633+
for (const auto& collision : collisions) {
634+
fillEvent(collision, zPvCut);
635+
}
636+
637+
// Filling candidate properties
638+
rowCandidateLite.reserve(candidates.size());
639+
for (const auto& candidate : candidates) {
640+
if (keepOnlyMcSignal && candidate.originMcRec() == 0) {
641+
continue;
642+
}
643+
auto mcCollision = candidate.collision_as<CollsWithMcLabels>().mcCollision_as<McCollsWithFT0M>();
644+
float centFt0m = evaluateCentralityColl(mcCollision);
645+
fillCandidateLite(candidate, collisions, candidate.flagMcMatchRec(), candidate.originMcRec(), candidate.collisionMatched(), centFt0m);
646+
}
647+
}
648+
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processMcCent, "Process MC with FT0M info", false);
649+
650+
void processKFMcCent(CollsWithMcLabels const& collisions, CandKfMcSel const& candidates, McCollsWithFT0M const&)
651+
{
652+
// Filling event properties
653+
rowEv.reserve(collisions.size());
654+
for (const auto& collision : collisions) {
655+
fillEvent(collision, zPvCut);
656+
}
657+
658+
// Filling candidate properties
659+
rowCandidateLite.reserve(candidates.size());
660+
for (const auto& candidate : candidates) {
661+
if (keepOnlyMcSignal && candidate.originMcRec() == 0) {
662+
continue;
663+
}
664+
auto mcCollision = candidate.collision_as<CollsWithMcLabels>().mcCollision_as<McCollsWithFT0M>();
665+
float centFt0m = evaluateCentralityColl(mcCollision);
666+
fillKfCandidate(candidate, collisions, candidate.flagMcMatchRec(), candidate.originMcRec(), candidate.collisionMatched(), centFt0m);
667+
}
668+
}
669+
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processKFMcCent, "Process KF MC with FT0M info", false);
670+
671+
void processKFMcCentLite(CollsWithMcLabels const& collisions, CandKfMcSel const& candidates, McCollsWithFT0M const&)
672+
{
673+
// Filling event properties
674+
rowEv.reserve(collisions.size());
675+
for (const auto& collision : collisions) {
676+
fillEvent(collision, zPvCut);
677+
}
678+
679+
// Filling candidate properties
680+
rowCandidateLite.reserve(candidates.size());
681+
for (const auto& candidate : candidates) {
682+
if (keepOnlyMcSignal && candidate.originMcRec() == 0) {
683+
continue;
684+
}
685+
auto mcCollision = candidate.collision_as<CollsWithMcLabels>().mcCollision_as<McCollsWithFT0M>();
686+
float centFt0m = evaluateCentralityColl(mcCollision);
687+
fillKfCandidateLite(candidate, collisions, candidate.flagMcMatchRec(), candidate.originMcRec(), candidate.collisionMatched(), centFt0m);
688+
}
689+
}
690+
PROCESS_SWITCH(HfTreeCreatorOmegac0ToOmegaPi, processKFMcCentLite, "Process KF MC Lite with FT0M info", false);
691+
558692
}; // end of struct
559693

560694
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)