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
32 changes: 32 additions & 0 deletions PWGLF/DataModel/LFSigmaTables.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
DECLARE_SOA_COLUMN(X, x, float);
DECLARE_SOA_COLUMN(Y, y, float);
DECLARE_SOA_COLUMN(Z, z, float);
DECLARE_SOA_COLUMN(DCADaughters, dcadaughters, float);

Check failure on line 41 in PWGLF/DataModel/LFSigmaTables.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(PhotonPx, photonPx, float);
DECLARE_SOA_COLUMN(PhotonPy, photonPy, float);
Expand All @@ -49,7 +49,7 @@
DECLARE_SOA_COLUMN(LambdaPy, lambdaPy, float);
DECLARE_SOA_COLUMN(LambdaPz, lambdaPz, float);
DECLARE_SOA_COLUMN(LambdaMass, lambdaMass, float);
DECLARE_SOA_COLUMN(AntiLambdaMass, antilambdaMass, float);

Check failure on line 52 in PWGLF/DataModel/LFSigmaTables.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.

//______________________________________________________
// DYNAMIC COLUMNS
Expand Down Expand Up @@ -100,20 +100,36 @@
DECLARE_SOA_DYNAMIC_COLUMN(Radius, radius, //! Sigma0 decay radius (2D, centered at zero)
[](float x, float y) -> float { return RecoDecay::sqrtSumOfSquares(x, y); });

DECLARE_SOA_DYNAMIC_COLUMN(OPAngle, opAngle,

Check failure on line 103 in PWGLF/DataModel/LFSigmaTables.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.
[](float photonPx, float photonPy, float photonPz, float lambdaPx, float lambdaPy, float lambdaPz) {
TVector3 v1(photonPx, photonPy, photonPz);
TVector3 v2(lambdaPx, lambdaPy, lambdaPz);
return v1.Angle(v2);
});

// Armenteros-Podolanski variables (photon = positive daughter, lambda = negative daughter)
DECLARE_SOA_DYNAMIC_COLUMN(LStarAlpha, lStarAlpha, //! Armenteros Alpha
[](float photonPx, float photonPy, float photonPz, float lambdaPx, float lambdaPy, float lambdaPz) -> float {
float momTot = RecoDecay::p(photonPx + lambdaPx, photonPy + lambdaPy, photonPz + lambdaPz);
float lQlNeg = RecoDecay::dotProd(std::array{lambdaPx, lambdaPy, lambdaPz}, std::array{photonPx + lambdaPx, photonPy + lambdaPy, photonPz + lambdaPz}) / momTot;
float lQlPos = RecoDecay::dotProd(std::array{photonPx, photonPy, photonPz}, std::array{photonPx + lambdaPx, photonPy + lambdaPy, photonPz + lambdaPz}) / momTot;
return (lQlPos - lQlNeg) / (lQlPos + lQlNeg);
});

DECLARE_SOA_DYNAMIC_COLUMN(LStarQtArm, lStarQtarm, //! Armenteros Qt

Check failure on line 119 in PWGLF/DataModel/LFSigmaTables.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.
[](float photonPx, float photonPy, float photonPz, float lambdaPx, float lambdaPy, float lambdaPz) -> float {
float momTot = RecoDecay::p2(photonPx + lambdaPx, photonPy + lambdaPy, photonPz + lambdaPz);
float dp = RecoDecay::dotProd(std::array{lambdaPx, lambdaPy, lambdaPz}, std::array{photonPx + lambdaPx, photonPy + lambdaPy, photonPz + lambdaPz});
return std::sqrt(RecoDecay::p2(lambdaPx, lambdaPy, lambdaPz) - dp * dp / momTot); // qtarm
});

// Photon
DECLARE_SOA_DYNAMIC_COLUMN(PhotonPt, photonPt, //! Transverse momentum in GeV/c
[](float photonPx, float photonPy) -> float {
return RecoDecay::sqrtSumOfSquares(photonPx, photonPy);
});

DECLARE_SOA_DYNAMIC_COLUMN(PhotonP, photonp, //! Total momentum in GeV/c

Check failure on line 132 in PWGLF/DataModel/LFSigmaTables.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.
[](float photonPx, float photonPy, float photonPz) -> float {
return RecoDecay::sqrtSumOfSquares(photonPx, photonPy, photonPz);
});
Expand All @@ -137,7 +153,7 @@
return RecoDecay::sqrtSumOfSquares(lambdaPx, lambdaPy);
});

DECLARE_SOA_DYNAMIC_COLUMN(LambdaP, lambdap, //! Total momentum in GeV/c

Check failure on line 156 in PWGLF/DataModel/LFSigmaTables.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.
[](float lambdaPx, float lambdaPy, float lambdaPz) -> float {
return RecoDecay::sqrtSumOfSquares(lambdaPx, lambdaPy, lambdaPz);
});
Expand Down Expand Up @@ -179,6 +195,8 @@
sigma0Core::Eta<sigma0Core::PhotonPx, sigma0Core::PhotonPy, sigma0Core::PhotonPz, sigma0Core::LambdaPx, sigma0Core::LambdaPy, sigma0Core::LambdaPz>,
sigma0Core::Radius<sigma0Core::X, sigma0Core::Y>,
sigma0Core::OPAngle<sigma0Core::PhotonPx, sigma0Core::PhotonPy, sigma0Core::PhotonPz, sigma0Core::LambdaPx, sigma0Core::LambdaPy, sigma0Core::LambdaPz>,
sigma0Core::LStarAlpha<sigma0Core::PhotonPx, sigma0Core::PhotonPy, sigma0Core::PhotonPz, sigma0Core::LambdaPx, sigma0Core::LambdaPy, sigma0Core::LambdaPz>,
sigma0Core::LStarQtArm<sigma0Core::PhotonPx, sigma0Core::PhotonPy, sigma0Core::PhotonPz, sigma0Core::LambdaPx, sigma0Core::LambdaPy, sigma0Core::LambdaPz>,

sigma0Core::PhotonPt<sigma0Core::PhotonPx, sigma0Core::PhotonPy>,
sigma0Core::PhotonP<sigma0Core::PhotonPx, sigma0Core::PhotonPy, sigma0Core::PhotonPz>,
Expand Down Expand Up @@ -656,6 +674,12 @@
DECLARE_SOA_DYNAMIC_COLUMN(IsAntiSigma0, isAntiSigma0, //! IsASigma0
[](int pdgCode) -> bool { return pdgCode == PDG_t::kSigma0Bar; }); //-3212

DECLARE_SOA_DYNAMIC_COLUMN(IsLambdaStar, isLambdaStar, //! IsLambdaStar
[](int pdgCode) -> bool { return pdgCode == 3124; }); // PYTHIA8 code for Lambda(1520)

Check failure on line 678 in PWGLF/DataModel/LFSigmaTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.

Check failure on line 678 in PWGLF/DataModel/LFSigmaTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.

DECLARE_SOA_DYNAMIC_COLUMN(IsAntiLambdaStar, isAntiLambdaStar, //! IsAntiLambdaStar
[](int pdgCode) -> bool { return pdgCode == -3124; }); // PYTHIA8 code for AntiLambda(1520)

Check failure on line 681 in PWGLF/DataModel/LFSigmaTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[magic-number]

Avoid magic numbers in expressions. Assign the value to a clearly named variable or constant.

Check failure on line 681 in PWGLF/DataModel/LFSigmaTables.h

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.

DECLARE_SOA_DYNAMIC_COLUMN(MCPx, mcpx, //! Sigma0 px
[](float photonMCPx, float lambdaMCPx) -> float { return photonMCPx + lambdaMCPx; });
DECLARE_SOA_DYNAMIC_COLUMN(MCPy, mcpy, //! Sigma0 py
Expand Down Expand Up @@ -686,6 +710,11 @@
return RecoDecay::y(std::array{photonMCPx + lambdaMCPx, photonMCPy + lambdaMCPy, photonMCPz + lambdaMCPz}, o2::constants::physics::MassSigma0);
});

DECLARE_SOA_DYNAMIC_COLUMN(LambdaStarMCY, lambdaStarMCY,
[](float photonMCPx, float photonMCPy, float photonMCPz, float lambdaMCPx, float lambdaMCPy, float lambdaMCPz) -> float {
return RecoDecay::y(std::array{photonMCPx + lambdaMCPx, photonMCPy + lambdaMCPy, photonMCPz + lambdaMCPz}, o2::constants::physics::MassLambda1520);
});

DECLARE_SOA_DYNAMIC_COLUMN(MCPhi, mcphi, //! Phi in the range [0, 2pi)
[](float photonMCPx, float photonMCPy, float lambdaMCPx, float lambdaMCPy) -> float { return RecoDecay::phi(photonMCPx + lambdaMCPx, photonMCPy + lambdaMCPy); });

Expand Down Expand Up @@ -767,6 +796,8 @@
// Dynamic columns
sigma0MCCore::IsSigma0<sigma0MCCore::PDGCode>,
sigma0MCCore::IsAntiSigma0<sigma0MCCore::PDGCode>,
sigma0MCCore::IsLambdaStar<sigma0MCCore::PDGCode>,
sigma0MCCore::IsAntiLambdaStar<sigma0MCCore::PDGCode>,

sigma0MCCore::MCPx<sigma0MCCore::PhotonMCPx, sigma0MCCore::LambdaMCPx>,
sigma0MCCore::MCPy<sigma0MCCore::PhotonMCPy, sigma0MCCore::LambdaMCPy>,
Expand All @@ -775,6 +806,7 @@
sigma0MCCore::MCP<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::PhotonMCPz, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy, sigma0MCCore::LambdaMCPz>,
sigma0MCCore::Sigma0MCMass<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::PhotonMCPz, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy, sigma0MCCore::LambdaMCPz>,
sigma0MCCore::Sigma0MCY<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::PhotonMCPz, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy, sigma0MCCore::LambdaMCPz>,
sigma0MCCore::LambdaStarMCY<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::PhotonMCPz, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy, sigma0MCCore::LambdaMCPz>,
sigma0MCCore::MCPhi<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy>,
sigma0MCCore::MCEta<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::PhotonMCPz, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy, sigma0MCCore::LambdaMCPz>,
sigma0MCCore::MCOPAngle<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::PhotonMCPz, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy, sigma0MCCore::LambdaMCPz>,
Expand Down
30 changes: 18 additions & 12 deletions PWGLF/TableProducer/Strangeness/sigma0builder.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -841,6 +841,8 @@ struct sigma0builder {
bool IsSigma0 = false;
bool IsAntiSigma0 = false;
bool IsKStar = false;
bool IsLambdaStar = false;
bool IsAntiLambdaStar = false;
bool IsProducedByGenerator = false;
bool IsSterile = false;
int MCProcess = -1;
Expand Down Expand Up @@ -914,8 +916,9 @@ struct sigma0builder {
auto v02MC = v02.template v0MCCore_as<soa::Join<aod::V0MCCores, aod::V0MCCollRefs>>();

// Sanity check: Is V0Pair <-> Mother assignment correct?
int expectedPairPDG = doLambdaStar ? 3124 : PDG_t::kSigma0;
bool fIsSigma0 = false;
if ((v01MC.pdgCode() == PDG_t::kGamma) && (v01MC.pdgCodeMother() == PDG_t::kSigma0) && (v02MC.pdgCode() == PDG_t::kLambda0) && (v02MC.pdgCodeMother() == PDG_t::kSigma0) && (v01.motherMCPartId() == v02.motherMCPartId()))
if ((v01MC.pdgCode() == PDG_t::kGamma) && (v01MC.pdgCodeMother() == expectedPairPDG) && (v02MC.pdgCode() == PDG_t::kLambda0) && (v02MC.pdgCodeMother() == expectedPairPDG) && (v01.motherMCPartId() == v02.motherMCPartId()))
fIsSigma0 = true;

bool fIsKStar = false;
Expand Down Expand Up @@ -1066,11 +1069,11 @@ struct sigma0builder {
}
}
// Check association correctness
if (fIsSigma0 && (MCinfo.V0PairPDGCode == PDG_t::kSigma0))
if (fIsSigma0 && (MCinfo.V0PairPDGCode == expectedPairPDG))
histos.fill(HIST("MCQA/hSigma0MCCheck"), 1); // match
if (fIsSigma0 && !(MCinfo.V0PairPDGCode == PDG_t::kSigma0))
if (fIsSigma0 && !(MCinfo.V0PairPDGCode == expectedPairPDG))
histos.fill(HIST("MCQA/hSigma0MCCheck"), 2); // mismatch
if (!fIsSigma0 && (MCinfo.V0PairPDGCode == PDG_t::kSigma0))
if (!fIsSigma0 && (MCinfo.V0PairPDGCode == expectedPairPDG))
histos.fill(HIST("MCQA/hSigma0MCCheck"), 3); // mismatch

// Check association correctness
Expand Down Expand Up @@ -1627,6 +1630,8 @@ struct sigma0builder {
GenInfo.IsSigma0 = mcParticle.pdgCode() == PDG_t::kSigma0; // PDG_t::kSigma0
GenInfo.IsAntiSigma0 = mcParticle.pdgCode() == PDG_t::kSigma0Bar; //-3212
GenInfo.IsKStar = std::abs(mcParticle.pdgCode()) == o2::constants::physics::Pdg::kK0Star892; // 313;
GenInfo.IsLambdaStar = mcParticle.pdgCode() == 3124; // 102134 (PYTHIA8)
GenInfo.IsAntiLambdaStar = mcParticle.pdgCode() == -3124; // -102134
GenInfo.IsProducedByGenerator = mcParticle.producedByGenerator();
GenInfo.MCProcess = mcParticle.getProcess();
GenInfo.MCPt = mcParticle.pt();
Expand All @@ -1637,7 +1642,7 @@ struct sigma0builder {
GenInfo.MCCollId = mcParticle.mcCollisionId(); // save this reference, please

// Checking decay mode if sigma0 or pi0 (it is easier here)
if (GenInfo.IsSigma0 || GenInfo.IsAntiSigma0 || GenInfo.IsPi0 || GenInfo.IsKStar) {
if (GenInfo.IsSigma0 || GenInfo.IsAntiSigma0 || GenInfo.IsPi0 || GenInfo.IsKStar || GenInfo.IsLambdaStar || GenInfo.IsAntiLambdaStar) {

// This is a costly operation, so we do it only for pi0s and sigma0s
auto const& daughters = mcParticle.template daughters_as<aod::McParticles>();
Expand All @@ -1647,7 +1652,7 @@ struct sigma0builder {
auto const& GenMothersList = mcParticle.template mothers_as<aod::McParticles>();
GenInfo.PDGCodeMother = (!GenMothersList.empty()) ? GenMothersList.front().pdgCode() : 0;

if ((GenInfo.IsSigma0 || GenInfo.IsAntiSigma0) && genSelections.doQA) {
if ((doLambdaStar ? (GenInfo.IsLambdaStar || GenInfo.IsAntiLambdaStar) : (GenInfo.IsSigma0 || GenInfo.IsAntiSigma0)) && genSelections.doQA) {
histos.fill(HIST("GenQA/h2dSigma0MCSourceVsPDGMother"), GenInfo.IsProducedByGenerator, GenInfo.PDGCodeMother);

// Checking decay modes and getting daughter pTs
Expand Down Expand Up @@ -1710,7 +1715,7 @@ struct sigma0builder {
histos.fill(HIST("GenQA/hGenSpeciesKStar"), 0);

// Checking decay mode
if (GenInfo.IsSigma0 || GenInfo.IsAntiSigma0) {
if (doLambdaStar ? (GenInfo.IsLambdaStar || GenInfo.IsAntiLambdaStar) : (GenInfo.IsSigma0 || GenInfo.IsAntiSigma0)) {
histos.fill(HIST("GenQA/hSigma0NDau"), GenInfo.NDaughters);
histos.fill(HIST("GenQA/h2dSigma0NDauVsProcess"), GenInfo.NDaughters, GenInfo.MCProcess);

Expand All @@ -1730,7 +1735,7 @@ struct sigma0builder {
histos.fill(HIST("GenQA/h2DGenSigma0TypeVsProducedByGen"), typeIndex, genIndex);

// Fill histograms
if (GenInfo.IsSigma0) {
if (doLambdaStar ? GenInfo.IsLambdaStar : GenInfo.IsSigma0) {
histos.fill(HIST("GenQA/hGenSpecies"), 2);
histos.fill(HIST("GenQA/hGenSigma0"), GenInfo.MCPt);
histos.fill(HIST("GenQA/h3dGenSigma0_pTMap"), GenInfo.MCPt, GenInfo.MCDau1Pt, GenInfo.MCDau2Pt);
Expand All @@ -1739,7 +1744,7 @@ struct sigma0builder {
if (GenInfo.IsPrimary)
histos.fill(HIST("GenQA/hPrimarySigma0s"), 1);
}
if (GenInfo.IsAntiSigma0) {
if (doLambdaStar ? GenInfo.IsAntiLambdaStar : GenInfo.IsAntiSigma0) {
histos.fill(HIST("GenQA/hGenSpecies"), 3);
histos.fill(HIST("GenQA/hGenAntiSigma0"), GenInfo.MCPt);
histos.fill(HIST("GenQA/h3dGenASigma0_pTMap"), GenInfo.MCPt, GenInfo.MCDau1Pt, GenInfo.MCDau2Pt);
Expand Down Expand Up @@ -1816,9 +1821,10 @@ struct sigma0builder {
pi0GenCollRefs(MCGenInfo.MCCollId); // link to stramccollision table
}

// Sigma0/ASigma0
if (fillSigma0Tables && (MCGenInfo.IsSigma0 || MCGenInfo.IsAntiSigma0)) {
sigma0Gens(MCGenInfo.IsSigma0, MCGenInfo.IsProducedByGenerator, MCGenInfo.MCPt, mcParticle.y());
// Sigma0/ASigma0 (Lambda(1520)/ALambda(1520))
bool fIsGenSigma0Like = doLambdaStar ? (MCGenInfo.IsLambdaStar || MCGenInfo.IsAntiLambdaStar) : (MCGenInfo.IsSigma0 || MCGenInfo.IsAntiSigma0);
if (fillSigma0Tables && fIsGenSigma0Like) {
sigma0Gens(doLambdaStar ? MCGenInfo.IsLambdaStar : MCGenInfo.IsSigma0, MCGenInfo.IsProducedByGenerator, MCGenInfo.MCPt, mcParticle.y());
sigma0GenCollRefs(MCGenInfo.MCCollId); // link to stramccollision table
}

Expand Down
Loading
Loading