Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion PWGCF/DataModel/CorrelationsDerived.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

namespace cfmcparticle
{
DECLARE_SOA_INDEX_COLUMN(CFMcCollision, cfMcCollision); //! Index to reduced MC collision

Check failure on line 34 in PWGCF/DataModel/CorrelationsDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(Pt, pt, float); //! pT (GeV/c)
DECLARE_SOA_COLUMN(Eta, eta, float); //! Pseudorapidity
DECLARE_SOA_COLUMN(Phi, phi, float); //! Phi angle
Expand All @@ -48,7 +48,7 @@

namespace cfcollision
{
DECLARE_SOA_INDEX_COLUMN(CFMcCollision, cfMcCollision); //! Index to reduced MC collision

Check failure on line 51 in PWGCF/DataModel/CorrelationsDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(Multiplicity, multiplicity, float); //! Centrality/multiplicity value
} // namespace cfcollision
DECLARE_SOA_TABLE(CFCollisions, "AOD", "CFCOLLISION", //! Reduced collision table
Expand All @@ -64,8 +64,8 @@

namespace cftrack
{
DECLARE_SOA_INDEX_COLUMN(CFCollision, cfCollision); //! Index to collision

Check failure on line 67 in PWGCF/DataModel/CorrelationsDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_INDEX_COLUMN(CFMcParticle, cfMCParticle); //! Index to MC particle

Check failure on line 68 in PWGCF/DataModel/CorrelationsDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(Pt, pt, float); //! pT (GeV/c)
DECLARE_SOA_COLUMN(Eta, eta, float); //! Pseudorapidity
DECLARE_SOA_COLUMN(Phi, phi, float); //! Phi angle
Expand Down Expand Up @@ -127,8 +127,8 @@

namespace cf2prongtrack
{
DECLARE_SOA_INDEX_COLUMN_FULL(CFTrackProng0, cfTrackProng0, int, CFTracks, "_0"); //! Index to prong 1 CFTrack

Check failure on line 130 in PWGCF/DataModel/CorrelationsDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_INDEX_COLUMN_FULL(CFTrackProng1, cfTrackProng1, int, CFTracks, "_1"); //! Index to prong 2 CFTrack

Check failure on line 131 in PWGCF/DataModel/CorrelationsDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(Pt, pt, float); //! pT (GeV/c)
DECLARE_SOA_COLUMN(Eta, eta, float); //! Pseudorapidity
DECLARE_SOA_COLUMN(Phi, phi, float); //! Phi angle
Expand All @@ -145,7 +145,13 @@
PhiToKKPID3,
K0stoPiPi,
LambdatoPPi,
AntiLambdatoPiP
AntiLambdatoPiP,
K0stoPiPiLoose,
K0stoPiPiTight,
LambdaToPPiLoose,
LambdaToPPiTight,
AntiLambdaToPiPLoose,
AntiLambdaToPiPTight
};
} // namespace cf2prongtrack
DECLARE_SOA_TABLE(CF2ProngTracks, "AOD", "CF2PRONGTRACK", //! Reduced track table
Expand All @@ -171,8 +177,8 @@

namespace cf2prongmcpart
{
DECLARE_SOA_INDEX_COLUMN_FULL(CFParticleDaugh0, cfParticleDaugh0, int, CFMcParticles, "_0"); //! Index to prong 1 CFMcParticle

Check failure on line 180 in PWGCF/DataModel/CorrelationsDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_INDEX_COLUMN_FULL(CFParticleDaugh1, cfParticleDaugh1, int, CFMcParticles, "_1"); //! Index to prong 2 CFMcParticle

Check failure on line 181 in PWGCF/DataModel/CorrelationsDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(Decay, decay, uint8_t); //! Particle decay and flags
DECLARE_SOA_DYNAMIC_COLUMN(McDecay, mcDecay, [](uint8_t decay) -> uint8_t { return decay & 0x7f; }); //! MC particle decay
enum ParticleDecayFlags {
Expand Down
176 changes: 130 additions & 46 deletions PWGCF/TableProducer/filter2Prong.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -58,28 +58,68 @@
O2_DEFINE_CONFIGURABLE(cfgImSigmaFormula, std::string, "(([p] < 0.5 || [hasTOF] <= 0.0) && abs([sTPC]) < 3.0) || ([p] >= 0.5 && abs([sTPC]) < 2.5 && abs([sTOF]) < 3.0)", "pT dependent daughter track sigma pass condition. Parameters: [p] momentum, [sTPC] sigma TPC, [sTOF] sigma TOF, [hasTOF] has TOF.")

struct : ConfigurableGroup {
O2_DEFINE_CONFIGURABLE(storeLooseTight, bool, false, "Store also loose and tight V0 candidates for systematics");
O2_DEFINE_CONFIGURABLE(tpcNClsCrossedRowsTrackMin, float, 70, "Minimum number of crossed rows in TPC");
O2_DEFINE_CONFIGURABLE(etaTrackMax, float, 0.8, "Maximum pseudorapidity");
O2_DEFINE_CONFIGURABLE(ptTrackMin, float, 0.1, "Minimum transverse momentum");
O2_DEFINE_CONFIGURABLE(minV0DCAPr, float, 0.1, "Min V0 proton DCA");
O2_DEFINE_CONFIGURABLE(minV0DCAPiLambda, float, 0.1, "Min V0 pion DCA for lambda");
O2_DEFINE_CONFIGURABLE(minV0DCAPiK0s, float, 0.1, "Min V0 pion DCA for K0s");
O2_DEFINE_CONFIGURABLE(daughPIDCuts, float, 4.0, "PID nsigma for V0s");
O2_DEFINE_CONFIGURABLE(massK0Min, float, 0.4, "Minimum mass for K0");
O2_DEFINE_CONFIGURABLE(massK0Max, float, 0.6, "Maximum mass for K0");
O2_DEFINE_CONFIGURABLE(massLambdaMin, float, 1.0, "Minimum mass for lambda");
O2_DEFINE_CONFIGURABLE(massLambdaMax, float, 1.3, "Maximum mass for lambda");
O2_DEFINE_CONFIGURABLE(radiusMaxLambda, float, 2.3, "Maximum decay radius (cm) for lambda");
O2_DEFINE_CONFIGURABLE(radiusMinLambda, float, 0.0, "Minimum decay radius (cm) for lambda");
O2_DEFINE_CONFIGURABLE(radiusMaxK0s, float, 2.3, "Maximum decay radius (cm) for K0s");
O2_DEFINE_CONFIGURABLE(radiusMinK0s, float, 0.0, "Minimum decay radius (cm) for K0s");
O2_DEFINE_CONFIGURABLE(cosPaMinLambda, float, 0.98, "Minimum cosine of pointing angle for lambda");
O2_DEFINE_CONFIGURABLE(cosPaMinK0s, float, 0.98, "Minimum cosine of pointing angle for K0s");
O2_DEFINE_CONFIGURABLE(dcaV0DaughtersMaxLambda, float, 0.2, "Maximum DCA among the V0 daughters (cm) for lambda");
O2_DEFINE_CONFIGURABLE(dcaV0DaughtersMaxK0s, float, 0.2, "Maximum DCA among the V0 daughters (cm) for K0s");
O2_DEFINE_CONFIGURABLE(qtArmenterosMinForK0s, float, 0.12, "Minimum Armenteros' qt for K0s");
O2_DEFINE_CONFIGURABLE(maxLambdaLifeTime, float, 30, "Maximum lambda lifetime (in cm)");
O2_DEFINE_CONFIGURABLE(maxK0sLifeTime, float, 30, "Maximum K0s lifetime (in cm)");
O2_DEFINE_CONFIGURABLE(ptTrackMin, float, 0.15, "Minimum transverse momentum");
O2_DEFINE_CONFIGURABLE(minV0DCAPr, std::vector<float>,
(std::vector<float>{0.06f, 0.07f, 0.08f}),
"Maximum DCAxy for daughter tracks (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(minV0DCAPiLambda, std::vector<float>,
(std::vector<float>{0.1f, 0.2f, 0.3f}),
"Min V0 pion DCA for lambda (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(minV0DCAPiK0s, std::vector<float>,
(std::vector<float>{0.05f, 0.1f, 0.2f}),
"Min V0 pion DCA for K0s (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(daughPIDCuts, std::vector<float>,
(std::vector<float>{3.0f, 4.0f, 5.0f}),
"PID nsigma for V0s (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(massK0Min, std::vector<float>,
(std::vector<float>{0.4f, 0.4f, 0.4f}),
"Minimum mass for K0 (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(massK0Max, std::vector<float>,
(std::vector<float>{0.6f, 0.6f, 0.6f}),
"Maximum mass for K0 (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(massLambdaMin, std::vector<float>,
(std::vector<float>{1.07f, 1.07f, 1.07f}),
"Minimum mass for lambda (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(massLambdaMax, std::vector<float>,
(std::vector<float>{1.17f, 1.17f, 1.17f}),
"Maximum mass for lambda (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(radiusMaxLambda, std::vector<float>,
(std::vector<float>{20.f, 30.f, 40.f}),
"Maximum decay radius (cm) for lambda (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(radiusMinLambda, std::vector<float>,
(std::vector<float>{1.0f, 1.2f, 1.4f}),
"Minimum decay radius (cm) for lambda (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(radiusMaxK0s, std::vector<float>,
(std::vector<float>{1.0f, 1.2f, 1.4f}),
"Maximum decay radius (cm) for K0s (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(radiusMinK0s, std::vector<float>,
(std::vector<float>{0.0f, 0.0f, 0.1f}),
"Minimum decay radius (cm) for K0s (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(cosPaMinLambda, std::vector<float>,
(std::vector<float>{0.990f, 0.993f, 0.995f}),
"Minimum cosine of pointing angle for lambda (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(cosPaMinK0s, std::vector<float>,
(std::vector<float>{0.990f, 0.993f, 0.995f}),
"Minimum cosine of pointing angle for K0s (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(dcaV0DaughtersMaxLambda, std::vector<float>,
(std::vector<float>{0.7f, 0.8f, 0.9f}),
"Maximum DCA among the V0 daughters (cm) for lambda (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(dcaV0DaughtersMaxK0s, std::vector<float>,
(std::vector<float>{0.7f, 0.8f, 0.9f}),
"Maximum DCA among the V0 daughters (cm) for K0s (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(qtArmenterosMinForK0s, std::vector<float>,
(std::vector<float>{0.2f, 0.2f, 0.2f}),
"Minimum Armenteros' qt for K0s (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(maxLambdaLifeTime, std::vector<float>,
(std::vector<float>{40.f, 30.f, 25.f}),
"Maximum lambda lifetime (in cm) (Loose, Default, Tight)");
O2_DEFINE_CONFIGURABLE(maxK0sLifeTime, std::vector<float>,
(std::vector<float>{40.f, 30.f, 25.f}),
"Maximum K0s lifetime (in cm) (Loose, Default, Tight)");

} grpV0;

struct : ConfigurableGroup {
Expand Down Expand Up @@ -184,10 +224,10 @@
prongCFId[0], prongCFId[1], c.pt(), c.eta(), c.phi(), hfHelper.invMassD0ToPiK(c), aod::cf2prongtrack::D0ToPiK);
if constexpr (std::experimental::is_detected<HasMLProb, typename HFCandidatesType::iterator>::value) {
mlvecd.clear();
for (const float val : c.mlProbD0())

Check failure on line 227 in PWGCF/TableProducer/filter2Prong.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
mlvecd.push_back(val);
mlvecdbar.clear();
for (const float val : c.mlProbD0bar())

Check failure on line 230 in PWGCF/TableProducer/filter2Prong.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
mlvecdbar.push_back(val);
output2ProngTrackmls(cfcollisions.begin().globalIndex(), mlvecd, mlvecdbar);
}
Expand Down Expand Up @@ -313,74 +353,78 @@
}

template <typename Collision, typename V0Cand>
bool isSelectedV0AsK0s(Collision const& collision, const V0Cand& v0)
bool isSelectedV0AsK0s(Collision const& collision, const V0Cand& v0, bool isLoose, bool isTight)
{
const auto& posTrack = v0.template posTrack_as<PIDTrack>();
const auto& negTrack = v0.template negTrack_as<PIDTrack>();

const int indexCut = isLoose ? 0 : (isTight ? 2 : 1);

float CtauK0s = v0.distovertotmom(collision.posX(), collision.posY(), collision.posZ()) * o2::constants::physics::MassK0;

if (v0.mK0Short() < grpV0.massK0Min || v0.mK0Short() > grpV0.massK0Max) {
if (v0.mK0Short() < grpV0.massK0Min.value[indexCut] || v0.mK0Short() > grpV0.massK0Max.value[indexCut]) {
return false;
}
if ((v0.qtarm() / std::abs(v0.alpha())) < grpV0.qtArmenterosMinForK0s) {
if ((v0.qtarm() / std::abs(v0.alpha())) < grpV0.qtArmenterosMinForK0s.value[indexCut]) {
return false;
}
if (v0.v0radius() > grpV0.radiusMaxK0s || v0.v0radius() < grpV0.radiusMinK0s) {
if (v0.v0radius() > grpV0.radiusMaxK0s.value[indexCut] || v0.v0radius() < grpV0.radiusMinK0s.value[indexCut]) {
return false;
}
if (v0.v0cosPA() < grpV0.cosPaMinK0s) {
if (v0.v0cosPA() < grpV0.cosPaMinK0s.value[indexCut]) {
return false;
}
if (v0.dcaV0daughters() > grpV0.dcaV0DaughtersMaxK0s) {
if (v0.dcaV0daughters() > grpV0.dcaV0DaughtersMaxK0s.value[indexCut]) {
return false;
}
if (std::abs(CtauK0s) > grpV0.maxK0sLifeTime) {
if (std::abs(CtauK0s) > grpV0.maxK0sLifeTime.value[indexCut]) {
return false;
}
if (((std::abs(posTrack.tpcNSigmaPi()) > grpV0.daughPIDCuts) || (std::abs(negTrack.tpcNSigmaPi()) > grpV0.daughPIDCuts))) {
if (((std::abs(posTrack.tpcNSigmaPi()) > grpV0.daughPIDCuts.value[indexCut]) || (std::abs(negTrack.tpcNSigmaPi()) > grpV0.daughPIDCuts.value[indexCut]))) {
return false;
}
if ((TMath::Abs(v0.dcapostopv()) < grpV0.minV0DCAPiK0s || TMath::Abs(v0.dcanegtopv()) < grpV0.minV0DCAPiK0s)) {
if ((TMath::Abs(v0.dcapostopv()) < grpV0.minV0DCAPiK0s.value[indexCut]) || (TMath::Abs(v0.dcanegtopv()) < grpV0.minV0DCAPiK0s.value[indexCut])) {
return false;
}
return true;
}

template <LambdaPid pid, typename Collision, typename V0Cand>
bool isSelectedV0AsLambda(Collision const& collision, const V0Cand& v0)
bool isSelectedV0AsLambda(Collision const& collision, const V0Cand& v0, bool isLoose, bool isTight)
{
const auto& posTrack = v0.template posTrack_as<PIDTrack>();
const auto& negTrack = v0.template negTrack_as<PIDTrack>();

const int indexCut = isLoose ? 0 : (isTight ? 2 : 1);

float CtauLambda = v0.distovertotmom(collision.posX(), collision.posY(), collision.posZ()) * o2::constants::physics::MassLambda;

if ((v0.mLambda() < grpV0.massLambdaMin || v0.mLambda() > grpV0.massLambdaMax) &&
(v0.mAntiLambda() < grpV0.massLambdaMin || v0.mAntiLambda() > grpV0.massLambdaMax)) {
if ((v0.mLambda() < grpV0.massLambdaMin.value[indexCut] || v0.mLambda() > grpV0.massLambdaMax.value[indexCut]) &&
(v0.mAntiLambda() < grpV0.massLambdaMin.value[indexCut] || v0.mAntiLambda() > grpV0.massLambdaMax.value[indexCut])) {
return false;
}
if (v0.v0radius() > grpV0.radiusMaxLambda || v0.v0radius() < grpV0.radiusMinLambda) {
if (v0.v0radius() > grpV0.radiusMaxLambda.value[indexCut] || v0.v0radius() < grpV0.radiusMinLambda.value[indexCut]) {
return false;
}
if (v0.v0cosPA() < grpV0.cosPaMinLambda) {
if (v0.v0cosPA() < grpV0.cosPaMinLambda.value[indexCut]) {
return false;
}
if (v0.dcaV0daughters() > grpV0.dcaV0DaughtersMaxLambda) {
if (v0.dcaV0daughters() > grpV0.dcaV0DaughtersMaxLambda.value[indexCut]) {
return false;
}
if (pid == LambdaPid::kLambda && (TMath::Abs(v0.dcapostopv()) < grpV0.minV0DCAPr || TMath::Abs(v0.dcanegtopv()) < grpV0.minV0DCAPiLambda)) {
if (pid == LambdaPid::kLambda && (TMath::Abs(v0.dcapostopv()) < grpV0.minV0DCAPr.value[indexCut] || TMath::Abs(v0.dcanegtopv()) < grpV0.minV0DCAPiLambda.value[indexCut])) {
return false;
}
if (pid == LambdaPid::kAntiLambda && (TMath::Abs(v0.dcapostopv()) < grpV0.minV0DCAPiLambda || TMath::Abs(v0.dcanegtopv()) < grpV0.minV0DCAPr)) {
if (pid == LambdaPid::kAntiLambda && (TMath::Abs(v0.dcapostopv()) < grpV0.minV0DCAPiLambda.value[indexCut] || TMath::Abs(v0.dcanegtopv()) < grpV0.minV0DCAPr.value[indexCut])) {
return false;
}
if (pid == LambdaPid::kLambda && ((std::abs(posTrack.tpcNSigmaPr()) > grpV0.daughPIDCuts) || (std::abs(negTrack.tpcNSigmaPi()) > grpV0.daughPIDCuts))) {
if (pid == LambdaPid::kLambda && ((std::abs(posTrack.tpcNSigmaPr()) > grpV0.daughPIDCuts.value[indexCut]) || (std::abs(negTrack.tpcNSigmaPi()) > grpV0.daughPIDCuts.value[indexCut]))) {
return false;
}
if (pid == LambdaPid::kAntiLambda && ((std::abs(posTrack.tpcNSigmaPi()) > grpV0.daughPIDCuts) || (std::abs(negTrack.tpcNSigmaPr()) > grpV0.daughPIDCuts))) {
if (pid == LambdaPid::kAntiLambda && ((std::abs(posTrack.tpcNSigmaPi()) > grpV0.daughPIDCuts.value[indexCut]) || (std::abs(negTrack.tpcNSigmaPr()) > grpV0.daughPIDCuts.value[indexCut]))) {
return false;
}
if (std::abs(CtauLambda) > grpV0.maxLambdaLifeTime) {
if (std::abs(CtauLambda) > grpV0.maxLambdaLifeTime.value[indexCut]) {
return false;
}
return true;
Expand Down Expand Up @@ -564,15 +608,28 @@
double massV0 = 0.0;

// K0s
if (isSelectedV0AsK0s(collision, v0)) { // candidate is K0s
if (isSelectedV0AsK0s(collision, v0, false, false)) { // candidate is K0s
output2ProngTracks(cfcollisions.begin().globalIndex(),
posTrack.globalIndex(), negTrack.globalIndex(),
v0.pt(), v0.eta(), v0.phi(), v0.mK0Short(), aod::cf2prongtrack::K0stoPiPi);
}
if (grpV0.storeLooseTight) // store also loose and tight K0s
{
if (isSelectedV0AsK0s(collision, v0, true, false)) { // candidate is loose K0s
output2ProngTracks(cfcollisions.begin().globalIndex(),
posTrack.globalIndex(), negTrack.globalIndex(),
v0.pt(), v0.eta(), v0.phi(), v0.mK0Short(), aod::cf2prongtrack::K0stoPiPiLoose);
}
if (isSelectedV0AsK0s(collision, v0, false, true)) { // candidate is tight K0s
output2ProngTracks(cfcollisions.begin().globalIndex(),
posTrack.globalIndex(), negTrack.globalIndex(),
v0.pt(), v0.eta(), v0.phi(), v0.mK0Short(), aod::cf2prongtrack::K0stoPiPiTight);
}
}

// Lambda and Anti-Lambda
bool LambdaTag = isSelectedV0AsLambda<LambdaPid::kLambda>(collision, v0);
bool aLambdaTag = isSelectedV0AsLambda<LambdaPid::kAntiLambda>(collision, v0);
bool LambdaTag = isSelectedV0AsLambda<LambdaPid::kLambda>(collision, v0, false, false);
bool aLambdaTag = isSelectedV0AsLambda<LambdaPid::kAntiLambda>(collision, v0, false, false);

// Note: candidate compatible with Lambda and Anti-Lambda hypothesis are counted twice (once for each hypothesis)
if (LambdaTag) { // candidate is Lambda
Expand All @@ -584,6 +641,33 @@
massV0 = v0.mAntiLambda();
output2ProngTracks(cfcollisions.begin().globalIndex(), posTrack.globalIndex(), negTrack.globalIndex(),
v0.pt(), v0.eta(), v0.phi(), massV0, aod::cf2prongtrack::AntiLambdatoPiP);
}
if (grpV0.storeLooseTight) { // store also loose and tight Lambdas
bool LambdaLooseTag = isSelectedV0AsLambda<LambdaPid::kLambda>(collision, v0, true, false);
bool aLambdaLooseTag = isSelectedV0AsLambda<LambdaPid::kAntiLambda>(collision, v0, true, false);
bool LambdaTightTag = isSelectedV0AsLambda<LambdaPid::kLambda>(collision, v0, false, true);
bool aLambdaTightTag = isSelectedV0AsLambda<LambdaPid::kAntiLambda>(collision, v0, false, true);

if (LambdaLooseTag) { // candidate is loose Lambda
massV0 = v0.mLambda();
output2ProngTracks(cfcollisions.begin().globalIndex(), posTrack.globalIndex(), negTrack.globalIndex(),
v0.pt(), v0.eta(), v0.phi(), massV0, aod::cf2prongtrack::LambdaToPPiLoose);
}
if (LambdaTightTag) { // candidate is tight Lambda
massV0 = v0.mLambda();
output2ProngTracks(cfcollisions.begin().globalIndex(), posTrack.globalIndex(), negTrack.globalIndex(),
v0.pt(), v0.eta(), v0.phi(), massV0, aod::cf2prongtrack::LambdaToPPiTight);
}
if (aLambdaLooseTag) { // candidate is loose Anti-lambda
massV0 = v0.mAntiLambda();
output2ProngTracks(cfcollisions.begin().globalIndex(), posTrack.globalIndex(), negTrack.globalIndex(),
v0.pt(), v0.eta(), v0.phi(), massV0, aod::cf2prongtrack::AntiLambdaToPiPLoose);
}
if (aLambdaTightTag) { // candidate is tight Anti-lambda
massV0 = v0.mAntiLambda();
output2ProngTracks(cfcollisions.begin().globalIndex(), posTrack.globalIndex(), negTrack.globalIndex(),
v0.pt(), v0.eta(), v0.phi(), massV0, aod::cf2prongtrack::AntiLambdaToPiPTight);
}
} // end of Lambda and Anti-Lambda processing
} // end of loop over V0 candidates

Expand Down Expand Up @@ -675,15 +759,15 @@
double massV0 = 0.0;

// K0s
if (isSelectedV0AsK0s(collision, v0)) { // candidate is K0s
if (isSelectedV0AsK0s(collision, v0, false, false)) { // candidate is K0s
output2ProngTracks(cfcollisions.begin().globalIndex(),
posTrack.globalIndex(), negTrack.globalIndex(),
v0.pt(), v0.eta(), v0.phi(), v0.mK0Short(), aod::cf2prongtrack::K0stoPiPi);
}

// Lambda and Anti-Lambda
bool LambdaTag = isSelectedV0AsLambda<LambdaPid::kLambda>(collision, v0);
bool aLambdaTag = isSelectedV0AsLambda<LambdaPid::kAntiLambda>(collision, v0);
bool LambdaTag = isSelectedV0AsLambda<LambdaPid::kLambda>(collision, v0, false, false);
bool aLambdaTag = isSelectedV0AsLambda<LambdaPid::kAntiLambda>(collision, v0, false, false);

// Note: candidate compatible with Lambda and Anti-Lambda hypothesis are counted twice (once for each hypothesis)
if (LambdaTag) { // candidate is Lambda
Expand Down
Loading