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
17 changes: 13 additions & 4 deletions PWGLF/DataModel/LFInJets.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
///
/// \brief Derived Data table for LF in jets analysis
/// \author Francesca Ercolessi (francesca.ercolessi@cern.ch)
/// \author Sara Pucillo (sara.pucillo@cern.ch)

#ifndef PWGLF_DATAMODEL_LFINJETS_H_
#define PWGLF_DATAMODEL_LFINJETS_H_
Expand All @@ -23,20 +24,24 @@
namespace lfinjets
{

DECLARE_SOA_COLUMN(Sign, sign, int);
DECLARE_SOA_COLUMN(Pt, pt, float);
DECLARE_SOA_COLUMN(Sign, sign, int);
DECLARE_SOA_COLUMN(MassLambda, masslambda, float);

Check failure on line 29 in PWGLF/DataModel/LFInJets.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(MassAntiLambda, massantilambda, float);

Check failure on line 30 in PWGLF/DataModel/LFInJets.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(MassK0Short, massk0short, float);

Check failure on line 31 in PWGLF/DataModel/LFInJets.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(V0Radius, v0radius, float);

Check failure on line 32 in PWGLF/DataModel/LFInJets.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(V0CosPA, v0cospa, float);

Check failure on line 33 in PWGLF/DataModel/LFInJets.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(V0DCAPosToPV, v0dcapostopv, float);

Check failure on line 34 in PWGLF/DataModel/LFInJets.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(V0DCANegToPV, v0dcanegtopv, float);

Check failure on line 35 in PWGLF/DataModel/LFInJets.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(V0DCAV0Daughters, v0dcav0daughters, float);

Check failure on line 36 in PWGLF/DataModel/LFInJets.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(NTPCSigmaNegPr, ntpcsigmanegpr, float);

Check failure on line 37 in PWGLF/DataModel/LFInJets.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(NTPCSigmaPosPr, ntpcsigmapospr, float);

Check failure on line 38 in PWGLF/DataModel/LFInJets.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(NTPCSigmaNegPi, ntpcsigmanegpi, float);
DECLARE_SOA_COLUMN(NTPCSigmaPosPi, ntpcsigmapospi, float);
DECLARE_SOA_COLUMN(NTOFSigmaNegPr, ntofsigmanegpr, float);
DECLARE_SOA_COLUMN(NTOFSigmaPosPr, ntofsigmapospr, float);
DECLARE_SOA_COLUMN(NTOFSigmaNegPi, ntofsigmanegpi, float);
DECLARE_SOA_COLUMN(NTOFSigmaPosPi, ntofsigmapospi, float);
DECLARE_SOA_COLUMN(MultFT0M, multft0m, float);
DECLARE_SOA_COLUMN(V0PosTPCCrossedRows, v0postpcCrossedRows, float);
DECLARE_SOA_COLUMN(V0NegTPCCrossedRows, v0negtpcCrossedRows, float);
Expand All @@ -46,14 +51,15 @@
DECLARE_SOA_COLUMN(V0PosITSlayers, v0posITSlayers, int);
DECLARE_SOA_COLUMN(MassXi, massxi, float);
DECLARE_SOA_COLUMN(MassOmega, massomega, float);
DECLARE_SOA_COLUMN(MassLambdaDau, masslambdadau, float);
DECLARE_SOA_COLUMN(CascRadius, cascradius, float);
DECLARE_SOA_COLUMN(CascCosPA, casccospa, float);
DECLARE_SOA_COLUMN(DCABachToPV, dcabachtopv, float);
DECLARE_SOA_COLUMN(DCACascDaughters, dcacascdaughters, float);
DECLARE_SOA_COLUMN(DCAV0ToPV, dcav0topv, float);
DECLARE_SOA_COLUMN(NTPCSigmaBachPi, ntpcsigmabachpi, float);
DECLARE_SOA_COLUMN(NTPCSigmaBachKa, ntpcsigmabachka, float);
DECLARE_SOA_COLUMN(NTOFSigmaBachPi, ntofsigmabachpi, float);
DECLARE_SOA_COLUMN(NTOFSigmaBachKa, ntofsigmabachka, float);
DECLARE_SOA_COLUMN(BachTPCCrossedRows, bachtpcCrossedRows, float);
DECLARE_SOA_COLUMN(BachTPCChi2, bachTPCChi2, float);
DECLARE_SOA_COLUMN(BachITSlayers, bachITSlayers, int);
Expand All @@ -67,17 +73,20 @@
lfinjets::V0Radius, lfinjets::V0CosPA, lfinjets::V0DCAPosToPV,
lfinjets::V0DCANegToPV, lfinjets::V0DCAV0Daughters,
lfinjets::NTPCSigmaNegPr, lfinjets::NTPCSigmaPosPr, lfinjets::NTPCSigmaNegPi, lfinjets::NTPCSigmaPosPi,
lfinjets::NTOFSigmaNegPr, lfinjets::NTOFSigmaPosPr, lfinjets::NTOFSigmaNegPi, lfinjets::NTOFSigmaPosPi,
lfinjets::MultFT0M, lfinjets::V0PosTPCCrossedRows, lfinjets::V0NegTPCCrossedRows,
lfinjets::V0NegTPCChi2, lfinjets::V0NegITSlayers, lfinjets::V0PosTPCChi2, lfinjets::V0PosITSlayers,
lfinjets::IsUE, lfinjets::IsJC);

DECLARE_SOA_TABLE(CascInJets, "AOD", "CASCINJETS",
lfinjets::Pt, lfinjets::Sign, lfinjets::MassXi, lfinjets::MassOmega, lfinjets::MassLambdaDau,
lfinjets::Pt, lfinjets::Sign, lfinjets::MassXi, lfinjets::MassOmega, lfinjets::MassLambda,
lfinjets::CascRadius, lfinjets::CascCosPA, lfinjets::V0Radius, lfinjets::V0CosPA,
lfinjets::V0DCAPosToPV, lfinjets::V0DCANegToPV, lfinjets::DCABachToPV,
lfinjets::DCACascDaughters, lfinjets::V0DCAV0Daughters, lfinjets::DCAV0ToPV,
lfinjets::NTPCSigmaNegPr, lfinjets::NTPCSigmaPosPr, lfinjets::NTPCSigmaNegPi, lfinjets::NTPCSigmaPosPi,
lfinjets::NTPCSigmaBachPi, lfinjets::NTPCSigmaBachKa, lfinjets::MultFT0M,
lfinjets::NTPCSigmaBachPi, lfinjets::NTPCSigmaBachKa,
lfinjets::NTOFSigmaNegPr, lfinjets::NTOFSigmaPosPr, lfinjets::NTOFSigmaNegPi, lfinjets::NTOFSigmaPosPi,
lfinjets::NTOFSigmaBachPi, lfinjets::NTOFSigmaBachKa, lfinjets::MultFT0M,
lfinjets::V0PosTPCCrossedRows, lfinjets::V0NegTPCCrossedRows, lfinjets::BachTPCCrossedRows,
lfinjets::V0NegTPCChi2, lfinjets::V0NegITSlayers, lfinjets::V0PosTPCChi2, lfinjets::V0PosITSlayers,
lfinjets::BachTPCChi2, lfinjets::BachITSlayers,
Expand Down
10 changes: 10 additions & 0 deletions PWGLF/TableProducer/Strangeness/lfinjets.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1149,6 +1149,10 @@ struct LFInJets {
pos.tpcNSigmaPr(),
neg.tpcNSigmaPi(),
pos.tpcNSigmaPi(),
neg.tofNSigmaPr(),
pos.tofNSigmaPr(),
neg.tofNSigmaPi(),
pos.tofNSigmaPi(),
collision.centFT0M(),
pos.tpcNClsCrossedRows(),
neg.tpcNClsCrossedRows(),
Expand Down Expand Up @@ -1229,6 +1233,12 @@ struct LFInJets {
pos.tpcNSigmaPi(),
bach.tpcNSigmaPi(),
bach.tpcNSigmaKa(),
neg.tofNSigmaPr(),
pos.tofNSigmaPr(),
neg.tofNSigmaPi(),
pos.tofNSigmaPi(),
bach.tofNSigmaPi(),
bach.tofNSigmaKa(),
collision.centFT0M(),
pos.tpcNClsCrossedRows(),
neg.tpcNClsCrossedRows(),
Expand Down
162 changes: 153 additions & 9 deletions PWGLF/Tasks/Strangeness/strangenessInJets.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -428,17 +428,17 @@ struct StrangenessInJets {
return false;

// Constants for identifying heavy-flavor (charm and bottom) content from PDG codes
static constexpr int kCharmQuark = 4;
static constexpr int kBottomQuark = 5;
static constexpr int hundreds = 100;
static constexpr int thousands = 1000;
static constexpr int CharmQuark = 4;
static constexpr int BottomQuark = 5;
static constexpr int Hundreds = 100;
static constexpr int Thousands = 1000;

// Check if particle is from heavy-flavor decay
bool fromHF = false;
if (particle.has_mothers()) {
auto mother = mcParticles.iteratorAt(particle.mothersIds()[0]);
int motherPdg = std::abs(mother.pdgCode());
fromHF = (motherPdg / hundreds == kCharmQuark || motherPdg / hundreds == kBottomQuark || motherPdg / thousands == kCharmQuark || motherPdg / thousands == kBottomQuark);
fromHF = (motherPdg / Hundreds == CharmQuark || motherPdg / Hundreds == BottomQuark || motherPdg / Thousands == CharmQuark || motherPdg / Thousands == BottomQuark);
}

// Select only physical primary particles or from heavy-flavor
Expand Down Expand Up @@ -1255,8 +1255,8 @@ struct StrangenessInJets {
continue;

// Build 4-momentum assuming charged pion mass
static constexpr float kMassPionChargedSquared = o2::constants::physics::MassPionCharged * o2::constants::physics::MassPionCharged;
const double energy = std::sqrt(particle.p() * particle.p() + kMassPionChargedSquared);
static constexpr float MassPionChargedSquared = o2::constants::physics::MassPionCharged * o2::constants::physics::MassPionCharged;
const double energy = std::sqrt(particle.p() * particle.p() + MassPionChargedSquared);
fastjet::PseudoJet fourMomentum(particle.px(), particle.py(), particle.pz(), energy);
fourMomentum.set_user_index(particle.pdgCode());
fjParticles.emplace_back(fourMomentum);
Expand Down Expand Up @@ -1773,7 +1773,7 @@ struct StrangenessInJets {
// Postprocessing
void processDerivedAnalysis(aod::V0InJets const& v0s, aod::CascInJets const& cascades)
{
for (auto& v0 : v0s) {
for (const auto& v0 : v0s) {

if (v0.v0negITSlayers() < minITSnCls || v0.v0posITSlayers() < minITSnCls)
continue;
Expand All @@ -1791,6 +1791,45 @@ struct StrangenessInJets {
continue;
if (std::fabs(v0.v0dcanegtopv()) < dcanegtoPVmin)
continue;
// PID selections (TPC) -- K0s
if (v0.ntpcsigmapospi() < nsigmaTPCmin || v0.ntpcsigmapospi() > nsigmaTPCmax)
continue;
if (v0.ntpcsigmanegpi() < nsigmaTPCmin || v0.ntpcsigmanegpi() > nsigmaTPCmax)
continue;

// PID selections (TOF) -- K0s
if (requireTOF) {
if (v0.ntofsigmapospi() < nsigmaTOFmin || v0.ntofsigmapospi() > nsigmaTOFmax)
continue;
if (v0.ntofsigmanegpi() < nsigmaTOFmin || v0.ntofsigmanegpi() > nsigmaTOFmax)
continue;
}
// PID selections (TPC): positive track = proton, negative track = pion -- Lam
if (v0.ntpcsigmapospr() < nsigmaTPCmin || v0.ntpcsigmapospr() > nsigmaTPCmax)
continue;
if (v0.ntpcsigmanegpi() < nsigmaTPCmin || v0.ntpcsigmanegpi() > nsigmaTPCmax)
continue;

// PID selections (TOF): positive track = proton, negative track = pion -- Lam
if (requireTOF) {
if (v0.ntofsigmapospr() < nsigmaTOFmin || v0.ntofsigmapospr() > nsigmaTOFmax)
continue;
if (v0.ntofsigmanegpi() < nsigmaTOFmin || v0.ntofsigmanegpi() > nsigmaTOFmax)
continue;
}
// PID selections (TPC): negative track = proton, positive track = pion --- ALam
if (v0.ntpcsigmapospi() < nsigmaTPCmin || v0.ntpcsigmapospi() > nsigmaTPCmax)
continue;
if (v0.ntpcsigmanegpr() < nsigmaTPCmin || v0.ntpcsigmanegpr() > nsigmaTPCmax)
continue;

// PID selections (TOF): negative track = proton, positive track = pion --- ALam
if (requireTOF) {
if (v0.ntofsigmapospi() < nsigmaTOFmin || v0.ntofsigmapospi() > nsigmaTOFmax)
continue;
if (v0.ntofsigmanegpr() < nsigmaTOFmin || v0.ntofsigmanegpr() > nsigmaTOFmax)
continue;
}

if (v0.isUE()) {
registryData.fill(HIST("K0s_in_ue"), v0.multft0m(), v0.pt(), v0.massk0short());
Expand All @@ -1803,7 +1842,7 @@ struct StrangenessInJets {
}
}

for (auto& casc : cascades) {
for (const auto& casc : cascades) {

if (casc.v0negITSlayers() < minITSnCls || casc.v0posITSlayers() < minITSnCls || casc.bachITSlayers() < minITSnCls)
continue;
Expand All @@ -1828,6 +1867,111 @@ struct StrangenessInJets {
continue;
if (std::fabs(casc.dcabachtopv()) < dcabachtopvMin)
continue;
if (std::fabs(casc.dcav0topv()) < dcaV0topvMin)
continue;
if (std::fabs(casc.dcacascdaughters()) > dcaCascDaughtersMax)
continue;
// Xi
// Xi+ selection (Xi+ -> antiL + pi+)
if (casc.sign() > 0) {
// PID selections (TPC)
if (casc.ntpcsigmanegpr() < nsigmaTPCmin || casc.ntpcsigmanegpr() > nsigmaTPCmax)
continue;
if (casc.ntpcsigmapospi() < nsigmaTPCmin || casc.ntpcsigmapospi() > nsigmaTPCmax)
continue;

// PID selections (TOF)
if (requireTOF) {
if (casc.ntofsigmanegpr() < nsigmaTOFmin || casc.ntofsigmanegpr() > nsigmaTOFmax)
continue;
if (casc.ntofsigmapospi() < nsigmaTOFmin || casc.ntofsigmapospi() > nsigmaTOFmax)
continue;
}
}
// Xi- selection (Xi- -> L + pi-)
if (casc.sign() < 0) {
// PID selections (TPC)
if (casc.ntpcsigmapospr() < nsigmaTPCmin || casc.ntpcsigmapospr() > nsigmaTPCmax)
continue;
if (casc.ntpcsigmanegpi() < nsigmaTPCmin || casc.ntpcsigmanegpi() > nsigmaTPCmax)
continue;

// PID selections (TOF)
if (requireTOF) {
if (casc.ntofsigmapospr() < nsigmaTOFmin || casc.ntofsigmapospr() > nsigmaTOFmax)
continue;
if (casc.ntofsigmanegpi() < nsigmaTOFmin || casc.ntofsigmanegpi() > nsigmaTOFmax)
continue;
}
}

// PID selection on bachelor
if (casc.ntpcsigmabachpi() < nsigmaTPCmin || casc.ntpcsigmabachpi() > nsigmaTPCmax)
continue;

// PID selections (TOF)
if (requireTOF) {
if (casc.ntofsigmabachpi() < nsigmaTOFmin || casc.ntofsigmabachpi() > nsigmaTOFmax)
continue;
}
// V0 mass window
if (std::fabs(casc.masslambda() - o2::constants::physics::MassLambda0) > deltaMassLambda)
continue;
// Reject candidates compatible with Omega
if (std::fabs(casc.massomega() - o2::constants::physics::MassOmegaMinus) < deltaMassOmega)
continue;

// Omega
// Omega+ selection (Omega+ -> antiL + K+)
if (casc.sign() > 0) {
// PID selections (TPC)
if (casc.ntpcsigmanegpr() < nsigmaTPCmin || casc.ntpcsigmanegpr() > nsigmaTPCmax)
continue;
if (casc.ntpcsigmapospi() < nsigmaTPCmin || casc.ntpcsigmapospi() > nsigmaTPCmax)
continue;

// PID selections (TOF)
if (requireTOF) {
if (casc.ntofsigmanegpr() < nsigmaTOFmin || casc.ntofsigmanegpr() > nsigmaTOFmax)
continue;
if (casc.ntofsigmapospi() < nsigmaTOFmin || casc.ntofsigmapospi() > nsigmaTOFmax)
continue;
}
}

// Omega- selection (Omega- -> L + K-)
if (casc.sign() < 0) {
// PID selections (TPC)
if (casc.ntpcsigmapospr() < nsigmaTPCmin || casc.ntpcsigmapospr() > nsigmaTPCmax)
continue;
if (casc.ntpcsigmanegpi() < nsigmaTPCmin || casc.ntpcsigmanegpi() > nsigmaTPCmax)
continue;

// PID selections (TOF)
if (requireTOF) {
if (casc.ntofsigmapospr() < nsigmaTOFmin || casc.ntofsigmapospr() > nsigmaTOFmax)
continue;
if (casc.ntofsigmanegpi() < nsigmaTOFmin || casc.ntofsigmanegpi() > nsigmaTOFmax)
continue;
}
}

// PID selection on bachelor
if (casc.ntpcsigmabachka() < nsigmaTPCmin || casc.ntpcsigmabachka() > nsigmaTPCmax)
continue;

// PID selections (TOF)
if (requireTOF) {
if (casc.ntofsigmabachka() < nsigmaTOFmin || casc.ntofsigmabachka() > nsigmaTOFmax)
continue;
}
// V0 mass window
if (std::fabs(casc.masslambda() - o2::constants::physics::MassLambda0) > deltaMassLambda)
continue;

// Reject candidates compatible with Xi
if (std::fabs(casc.massxi() - o2::constants::physics::MassXiMinus) < deltaMassXi)
continue;

if (casc.isUE()) {
if (casc.sign() < 0) {
Expand Down
Loading