Skip to content

Commit 4337382

Browse files
authored
Refactor V0 daughter selection criteria
1 parent 6662d5c commit 4337382

1 file changed

Lines changed: 28 additions & 22 deletions

File tree

PWGHF/HFC/TableProducer/correlatorXicHadrons.cxx

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -647,65 +647,71 @@ struct HfCorrelatorXicHadrons {
647647
}
648648

649649
template <typename Tracktype, typename V0Type>
650-
bool isSelectedV0Daughter(Tracktype const& track, V0Type v0, int pid)
650+
bool isSelectedV0Daughter(Tracktype const& track, V0Type const& v0, int pid)
651651
{
652-
if (std::abs(track.eta()) > cfgXicCand.etaTrackMax) {
652+
if (std::abs(track.eta()) > cfgCharmCand.etaTrackMax) {
653653
return false;
654654
}
655+
655656
// ---------------------------------------------------------
656657
// 1. Proton PID Selection
657658
// ---------------------------------------------------------
658659
if (std::abs(pid) == kProton) {
660+
bool hasTOFProton = (pid > 0) ? v0.positiveHasTOF() : v0.negativeHasTOF();
659661
bool passTOF = false;
660662

661-
if (track.pt() > cfgV0.cfgDaughPrPtMax || track.pt() < cfgV0.cfgDaughPrPtMin) {
663+
if (track.pt() > cfgV0.cfgV0DaughPrPtMax || track.pt() < cfgV0.cfgV0DaughPrPtMin) {
662664
return false;
663665
}
664-
if (track.hasTOF()) {
666+
667+
if (hasTOFProton && (track.pt() > cfgCharmCand.tofPIDThreshold)) {
665668
if constexpr (std::experimental::is_detected<HasStrangeTOFinV0, V0Type>::value) {
666669
// pid > 0: Proton from Lambda (LaPr)
667670
// pid < 0: Antiproton from Anti-Lambda (ALaPr)
668671
double strangeTOF = (pid > 0) ? v0.tofNSigmaLaPr() : v0.tofNSigmaALaPr();
669-
passTOF = std::abs(strangeTOF) > cfgV0.cfgDaughPIDCutsTOFPr;
672+
passTOF = strangeTOF > cfgV0.cfgV0DaughPIDCutsTOFPr;
673+
670674
} else {
671675
// if strange TOF is unavailable
672-
passTOF = std::abs(track.tofNSigmaPr()) > cfgV0.cfgDaughPIDCutsTOFPr;
676+
passTOF = track.tofNSigmaPr() > cfgV0.cfgV0DaughPIDCutsTOFPr;
673677
}
678+
674679
}
675680

676-
if ((std::abs(track.tpcNSigmaPr()) > cfgV0.cfgDaughPIDCutsTPCPr) || passTOF) {
681+
if ((std::abs(track.tpcNSigmaPr()) > cfgV0.cfgV0DaughPIDCutsTPCPr) && !passTOF) {
677682
return false;
678683
}
679684
}
680685

681686
// ---------------------------------------------------------
682687
// 2. Pion PID Selection
683688
// ---------------------------------------------------------
684-
if (std::abs(pid) == kPiPlus) {
689+
if (std::abs(pid) == kPiPlus && cfgV0.checkTOFForPion) {
690+
bool hasTOFPion = (pid < 0) ? v0.negativeHasTOF() : v0.positiveHasTOF();
685691
bool passTOF = false;
686692

687-
if (track.pt() > cfgV0.cfgDaughPiPtMax || track.pt() < cfgV0.cfgDaughPiPtMin) {
693+
if (track.pt() > cfgV0.cfgV0DaughPiPtMax || track.pt() < cfgV0.cfgV0DaughPiPtMin) {
688694
return false;
689695
}
690696

691-
if (track.hasTOF()) {
697+
if (hasTOFPion && (track.pt() > cfgCharmCand.tofPIDThreshold)) {
692698
if constexpr (std::experimental::is_detected<HasStrangeTOFinV0, V0Type>::value) {
693699
// A pion can belong to either a Lambda/Anti-Lambda decay or a K0s decay.
694700
// We evaluate both applicable hypotheses based on charge sign and pick the best match.
695701
double tofLa = (pid > 0) ? v0.tofNSigmaALaPi() : v0.tofNSigmaLaPi();
696702

697-
passTOF = tofLa > cfgV0.cfgDaughPIDCutsTOFPi;
703+
passTOF = std::abs(tofLa) > cfgV0.cfgV0DaughPIDCutsTOFPi;
698704
} else {
699705
// Fallback to standard track TOF
700-
passTOF = std::abs(track.tofNSigmaPi()) > cfgV0.cfgDaughPIDCutsTOFPi;
706+
passTOF = std::abs(track.tofNSigmaPi()) > cfgV0.cfgV0DaughPIDCutsTOFPi;
701707
}
708+
702709
}
703710

704-
if ((std::abs(track.tpcNSigmaPi()) > cfgV0.cfgDaughPIDCutsTPCPi) || passTOF) {
711+
if ((std::abs(track.tpcNSigmaPi()) > cfgV0.cfgV0DaughPIDCutsTPCPi) && !passTOF) {
705712
return false;
706713
}
707714
}
708-
709715
return true;
710716
}
711717

@@ -730,7 +736,7 @@ struct HfCorrelatorXicHadrons {
730736
}
731737

732738
// Process Lambda (proton + pion)
733-
if (passV0Sel && std::abs(o2::constants::physics::MassLambda - v0.mLambda()) < cfgV0.cfgHypMassWindow) {
739+
if (passV0Sel && std::abs(o2::constants::physics::MassLambda - v0.mLambda()) < cfgV0.cfgHypMassWindow && v0.alpha() > 0) {
734740
entryHadron(v0.mLambda(), trackV0Pos.eta(), trackV0Pos.pt() * trackV0Pos.sign(), 0, 0, v0.pt());
735741
entryTrkPID(trackV0Pos.tpcNSigmaPr(), trackV0Pos.tpcNSigmaKa(), trackV0Pos.tpcNSigmaPi(), trackV0Pos.tofNSigmaPr(), trackV0Pos.tofNSigmaKa(), trackV0Pos.tofNSigmaPi());
736742

@@ -754,7 +760,7 @@ struct HfCorrelatorXicHadrons {
754760
}
755761
}
756762

757-
if (passV0Sel && std::abs(o2::constants::physics::MassLambda - v0.mAntiLambda()) < cfgV0.cfgHypMassWindow) {
763+
if (passV0Sel && std::abs(o2::constants::physics::MassLambda - v0.mAntiLambda()) < cfgV0.cfgHypMassWindow && v0.alpha() < 0) {
758764
entryHadron(v0.mAntiLambda(), trackV0Neg.eta(), trackV0Neg.pt() * trackV0Neg.sign(), 0, 0, v0.pt());
759765
entryTrkPID(trackV0Neg.tpcNSigmaPr(), trackV0Neg.tpcNSigmaKa(), trackV0Neg.tpcNSigmaPi(), trackV0Neg.tofNSigmaPr(), trackV0Neg.tofNSigmaKa(), trackV0Neg.tofNSigmaPi());
760766

@@ -787,7 +793,7 @@ struct HfCorrelatorXicHadrons {
787793
auto const& partV0Pos = trackV0Pos.mcParticle();
788794
auto const& partV0Neg = trackV0Neg.mcParticle();
789795

790-
if (passV0Sel && v0Mc.pdgCode() == kLambda0) {
796+
if (passV0Sel && v0Mc.pdgCode() == kLambda0 && v0.alpha() > 0) {
791797
if (isSelectedV0Daughter(trackV0Pos, v0, kProton) && isSelectedV0Daughter(trackV0Neg, v0, kPiMinus)) {
792798
registry.fill(HIST("hV0LambdaMcRec"), v0.mLambda(), v0.pt(), partV0Pos.pt());
793799
registry.fill(HIST("hV0LambdaReflMcRec"), v0.mAntiLambda(), v0.pt(), partV0Neg.pt());
@@ -802,7 +808,7 @@ struct HfCorrelatorXicHadrons {
802808
}
803809
}
804810
}
805-
if (passV0Sel && v0Mc.pdgCode() == kLambda0Bar) {
811+
if (passV0Sel && v0Mc.pdgCode() == kLambda0Bar && v0.alpha() < 0) {
806812
if (isSelectedV0Daughter(trackV0Neg, v0, kProtonBar) && isSelectedV0Daughter(trackV0Pos, v0, kPiPlus)) {
807813
registry.fill(HIST("hV0LambdaMcRec"), v0.mAntiLambda(), v0.pt(), partV0Neg.pt());
808814
registry.fill(HIST("hV0LambdaReflMcRec"), v0.mLambda(), v0.pt(), partV0Pos.pt());
@@ -1032,7 +1038,7 @@ struct HfCorrelatorXicHadrons {
10321038
}
10331039

10341040
// Process Lambda (proton-pion)
1035-
if (std::abs(o2::constants::physics::MassLambda - v0.mLambda()) < cfgV0.cfgHypMassWindow) {
1041+
if (std::abs(o2::constants::physics::MassLambda - v0.mLambda()) < cfgV0.cfgHypMassWindow && v0.alpha() > 0) {
10361042
if (isSelectedV0Daughter(trackV0Pos, v0, kProton) && isSelectedV0Daughter(trackV0Neg, v0, kPiMinus)) {
10371043

10381044
if (selXicCand) {
@@ -1050,7 +1056,7 @@ struct HfCorrelatorXicHadrons {
10501056
}
10511057

10521058
// Process anti-Lambda (anti-proton-pion)
1053-
if (std::abs(o2::constants::physics::MassLambda - v0.mAntiLambda()) < cfgV0.cfgHypMassWindow) {
1059+
if (std::abs(o2::constants::physics::MassLambda - v0.mAntiLambda()) < cfgV0.cfgHypMassWindow && v0.alpha() < 0) {
10541060
if (isSelectedV0Daughter(trackV0Neg, v0, kProtonBar) && isSelectedV0Daughter(trackV0Pos, v0, kPiPlus)) {
10551061

10561062
if (selXicCand) {
@@ -1484,14 +1490,14 @@ struct HfCorrelatorXicHadrons {
14841490
auto const& trackV0Pos = assocParticle.template posTrack_as<TrackType>();
14851491
auto const& trackV0Neg = assocParticle.template negTrack_as<TrackType>();
14861492

1487-
if (std::abs(o2::constants::physics::MassLambda - assocParticle.mLambda()) < cfgV0.cfgHypMassWindow) {
1493+
if (std::abs(o2::constants::physics::MassLambda - assocParticle.mLambda()) < cfgV0.cfgHypMassWindow && v0.alpha() > 0) {
14881494
if (isSelectedV0Daughter(trackV0Pos, assocParticle, kProton) && isSelectedV0Daughter(trackV0Neg, assocParticle, kPiPlus)) {
14891495

14901496
fillCorrelationTable<IsMcRec, V0LambdaType::Lambda>(cfgXicCand.fillTrkPID, assocParticle, ptCand, etaCand, phiCand, outputMlXic, poolBin, correlationStatus, yCand, massCand, *mcParticles);
14911497
}
14921498
}
14931499

1494-
if (std::abs(o2::constants::physics::MassLambda - assocParticle.mAntiLambda()) < cfgV0.cfgHypMassWindow) {
1500+
if (std::abs(o2::constants::physics::MassLambda - assocParticle.mAntiLambda()) < cfgV0.cfgHypMassWindow && v0.alpha() < 0) {
14951501
if (isSelectedV0Daughter(trackV0Neg, assocParticle, -kProton) && isSelectedV0Daughter(trackV0Pos, assocParticle, -kPiPlus)) {
14961502
fillCorrelationTable<IsMcRec, V0LambdaType::AntiLambda>(cfgXicCand.fillTrkPID, assocParticle, ptCand, etaCand, phiCand, outputMlXic, poolBin, correlationStatus, yCand, massCand, *mcParticles);
14971503
}

0 commit comments

Comments
 (0)