Skip to content

Commit cfa9350

Browse files
authored
[PWGLF] Added L* MC information to the sigmaanalysis task (#17657)
1 parent c8c19cb commit cfa9350

4 files changed

Lines changed: 184 additions & 35 deletions

File tree

PWGLF/DataModel/LFSigmaTables.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,22 @@ DECLARE_SOA_DYNAMIC_COLUMN(OPAngle, opAngle,
107107
return v1.Angle(v2);
108108
});
109109

110+
// Armenteros-Podolanski variables (photon = positive daughter, lambda = negative daughter)
111+
DECLARE_SOA_DYNAMIC_COLUMN(LStarAlpha, lStarAlpha, //! Armenteros Alpha
112+
[](float photonPx, float photonPy, float photonPz, float lambdaPx, float lambdaPy, float lambdaPz) -> float {
113+
float momTot = RecoDecay::p(photonPx + lambdaPx, photonPy + lambdaPy, photonPz + lambdaPz);
114+
float lQlNeg = RecoDecay::dotProd(std::array{lambdaPx, lambdaPy, lambdaPz}, std::array{photonPx + lambdaPx, photonPy + lambdaPy, photonPz + lambdaPz}) / momTot;
115+
float lQlPos = RecoDecay::dotProd(std::array{photonPx, photonPy, photonPz}, std::array{photonPx + lambdaPx, photonPy + lambdaPy, photonPz + lambdaPz}) / momTot;
116+
return (lQlPos - lQlNeg) / (lQlPos + lQlNeg);
117+
});
118+
119+
DECLARE_SOA_DYNAMIC_COLUMN(LStarQtArm, lStarQtarm, //! Armenteros Qt
120+
[](float photonPx, float photonPy, float photonPz, float lambdaPx, float lambdaPy, float lambdaPz) -> float {
121+
float momTot = RecoDecay::p2(photonPx + lambdaPx, photonPy + lambdaPy, photonPz + lambdaPz);
122+
float dp = RecoDecay::dotProd(std::array{lambdaPx, lambdaPy, lambdaPz}, std::array{photonPx + lambdaPx, photonPy + lambdaPy, photonPz + lambdaPz});
123+
return std::sqrt(RecoDecay::p2(lambdaPx, lambdaPy, lambdaPz) - dp * dp / momTot); // qtarm
124+
});
125+
110126
// Photon
111127
DECLARE_SOA_DYNAMIC_COLUMN(PhotonPt, photonPt, //! Transverse momentum in GeV/c
112128
[](float photonPx, float photonPy) -> float {
@@ -179,6 +195,8 @@ DECLARE_SOA_TABLE(Sigma0Cores, "AOD", "SIGMA0CORES",
179195
sigma0Core::Eta<sigma0Core::PhotonPx, sigma0Core::PhotonPy, sigma0Core::PhotonPz, sigma0Core::LambdaPx, sigma0Core::LambdaPy, sigma0Core::LambdaPz>,
180196
sigma0Core::Radius<sigma0Core::X, sigma0Core::Y>,
181197
sigma0Core::OPAngle<sigma0Core::PhotonPx, sigma0Core::PhotonPy, sigma0Core::PhotonPz, sigma0Core::LambdaPx, sigma0Core::LambdaPy, sigma0Core::LambdaPz>,
198+
sigma0Core::LStarAlpha<sigma0Core::PhotonPx, sigma0Core::PhotonPy, sigma0Core::PhotonPz, sigma0Core::LambdaPx, sigma0Core::LambdaPy, sigma0Core::LambdaPz>,
199+
sigma0Core::LStarQtArm<sigma0Core::PhotonPx, sigma0Core::PhotonPy, sigma0Core::PhotonPz, sigma0Core::LambdaPx, sigma0Core::LambdaPy, sigma0Core::LambdaPz>,
182200

183201
sigma0Core::PhotonPt<sigma0Core::PhotonPx, sigma0Core::PhotonPy>,
184202
sigma0Core::PhotonP<sigma0Core::PhotonPx, sigma0Core::PhotonPy, sigma0Core::PhotonPz>,
@@ -656,6 +674,12 @@ DECLARE_SOA_DYNAMIC_COLUMN(IsSigma0, isSigma0,
656674
DECLARE_SOA_DYNAMIC_COLUMN(IsAntiSigma0, isAntiSigma0, //! IsASigma0
657675
[](int pdgCode) -> bool { return pdgCode == PDG_t::kSigma0Bar; }); //-3212
658676

677+
DECLARE_SOA_DYNAMIC_COLUMN(IsLambdaStar, isLambdaStar, //! IsLambdaStar
678+
[](int pdgCode) -> bool { return pdgCode == 3124; }); // PYTHIA8 code for Lambda(1520)
679+
680+
DECLARE_SOA_DYNAMIC_COLUMN(IsAntiLambdaStar, isAntiLambdaStar, //! IsAntiLambdaStar
681+
[](int pdgCode) -> bool { return pdgCode == -3124; }); // PYTHIA8 code for AntiLambda(1520)
682+
659683
DECLARE_SOA_DYNAMIC_COLUMN(MCPx, mcpx, //! Sigma0 px
660684
[](float photonMCPx, float lambdaMCPx) -> float { return photonMCPx + lambdaMCPx; });
661685
DECLARE_SOA_DYNAMIC_COLUMN(MCPy, mcpy, //! Sigma0 py
@@ -686,6 +710,11 @@ DECLARE_SOA_DYNAMIC_COLUMN(Sigma0MCY, sigma0MCY,
686710
return RecoDecay::y(std::array{photonMCPx + lambdaMCPx, photonMCPy + lambdaMCPy, photonMCPz + lambdaMCPz}, o2::constants::physics::MassSigma0);
687711
});
688712

713+
DECLARE_SOA_DYNAMIC_COLUMN(LambdaStarMCY, lambdaStarMCY,
714+
[](float photonMCPx, float photonMCPy, float photonMCPz, float lambdaMCPx, float lambdaMCPy, float lambdaMCPz) -> float {
715+
return RecoDecay::y(std::array{photonMCPx + lambdaMCPx, photonMCPy + lambdaMCPy, photonMCPz + lambdaMCPz}, o2::constants::physics::MassLambda1520);
716+
});
717+
689718
DECLARE_SOA_DYNAMIC_COLUMN(MCPhi, mcphi, //! Phi in the range [0, 2pi)
690719
[](float photonMCPx, float photonMCPy, float lambdaMCPx, float lambdaMCPy) -> float { return RecoDecay::phi(photonMCPx + lambdaMCPx, photonMCPy + lambdaMCPy); });
691720

@@ -767,6 +796,8 @@ DECLARE_SOA_TABLE(Sigma0MCCores, "AOD", "SIGMA0MCCORES",
767796
// Dynamic columns
768797
sigma0MCCore::IsSigma0<sigma0MCCore::PDGCode>,
769798
sigma0MCCore::IsAntiSigma0<sigma0MCCore::PDGCode>,
799+
sigma0MCCore::IsLambdaStar<sigma0MCCore::PDGCode>,
800+
sigma0MCCore::IsAntiLambdaStar<sigma0MCCore::PDGCode>,
770801

771802
sigma0MCCore::MCPx<sigma0MCCore::PhotonMCPx, sigma0MCCore::LambdaMCPx>,
772803
sigma0MCCore::MCPy<sigma0MCCore::PhotonMCPy, sigma0MCCore::LambdaMCPy>,
@@ -775,6 +806,7 @@ DECLARE_SOA_TABLE(Sigma0MCCores, "AOD", "SIGMA0MCCORES",
775806
sigma0MCCore::MCP<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::PhotonMCPz, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy, sigma0MCCore::LambdaMCPz>,
776807
sigma0MCCore::Sigma0MCMass<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::PhotonMCPz, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy, sigma0MCCore::LambdaMCPz>,
777808
sigma0MCCore::Sigma0MCY<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::PhotonMCPz, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy, sigma0MCCore::LambdaMCPz>,
809+
sigma0MCCore::LambdaStarMCY<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::PhotonMCPz, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy, sigma0MCCore::LambdaMCPz>,
778810
sigma0MCCore::MCPhi<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy>,
779811
sigma0MCCore::MCEta<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::PhotonMCPz, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy, sigma0MCCore::LambdaMCPz>,
780812
sigma0MCCore::MCOPAngle<sigma0MCCore::PhotonMCPx, sigma0MCCore::PhotonMCPy, sigma0MCCore::PhotonMCPz, sigma0MCCore::LambdaMCPx, sigma0MCCore::LambdaMCPy, sigma0MCCore::LambdaMCPz>,

PWGLF/TableProducer/Strangeness/sigma0builder.cxx

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -841,6 +841,8 @@ struct sigma0builder {
841841
bool IsSigma0 = false;
842842
bool IsAntiSigma0 = false;
843843
bool IsKStar = false;
844+
bool IsLambdaStar = false;
845+
bool IsAntiLambdaStar = false;
844846
bool IsProducedByGenerator = false;
845847
bool IsSterile = false;
846848
int MCProcess = -1;
@@ -914,8 +916,9 @@ struct sigma0builder {
914916
auto v02MC = v02.template v0MCCore_as<soa::Join<aod::V0MCCores, aod::V0MCCollRefs>>();
915917

916918
// Sanity check: Is V0Pair <-> Mother assignment correct?
919+
int expectedPairPDG = doLambdaStar ? 3124 : PDG_t::kSigma0;
917920
bool fIsSigma0 = false;
918-
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()))
921+
if ((v01MC.pdgCode() == PDG_t::kGamma) && (v01MC.pdgCodeMother() == expectedPairPDG) && (v02MC.pdgCode() == PDG_t::kLambda0) && (v02MC.pdgCodeMother() == expectedPairPDG) && (v01.motherMCPartId() == v02.motherMCPartId()))
919922
fIsSigma0 = true;
920923

921924
bool fIsKStar = false;
@@ -1066,11 +1069,11 @@ struct sigma0builder {
10661069
}
10671070
}
10681071
// Check association correctness
1069-
if (fIsSigma0 && (MCinfo.V0PairPDGCode == PDG_t::kSigma0))
1072+
if (fIsSigma0 && (MCinfo.V0PairPDGCode == expectedPairPDG))
10701073
histos.fill(HIST("MCQA/hSigma0MCCheck"), 1); // match
1071-
if (fIsSigma0 && !(MCinfo.V0PairPDGCode == PDG_t::kSigma0))
1074+
if (fIsSigma0 && !(MCinfo.V0PairPDGCode == expectedPairPDG))
10721075
histos.fill(HIST("MCQA/hSigma0MCCheck"), 2); // mismatch
1073-
if (!fIsSigma0 && (MCinfo.V0PairPDGCode == PDG_t::kSigma0))
1076+
if (!fIsSigma0 && (MCinfo.V0PairPDGCode == expectedPairPDG))
10741077
histos.fill(HIST("MCQA/hSigma0MCCheck"), 3); // mismatch
10751078

10761079
// Check association correctness
@@ -1627,6 +1630,8 @@ struct sigma0builder {
16271630
GenInfo.IsSigma0 = mcParticle.pdgCode() == PDG_t::kSigma0; // PDG_t::kSigma0
16281631
GenInfo.IsAntiSigma0 = mcParticle.pdgCode() == PDG_t::kSigma0Bar; //-3212
16291632
GenInfo.IsKStar = std::abs(mcParticle.pdgCode()) == o2::constants::physics::Pdg::kK0Star892; // 313;
1633+
GenInfo.IsLambdaStar = mcParticle.pdgCode() == 3124; // 102134 (PYTHIA8)
1634+
GenInfo.IsAntiLambdaStar = mcParticle.pdgCode() == -3124; // -102134
16301635
GenInfo.IsProducedByGenerator = mcParticle.producedByGenerator();
16311636
GenInfo.MCProcess = mcParticle.getProcess();
16321637
GenInfo.MCPt = mcParticle.pt();
@@ -1637,7 +1642,7 @@ struct sigma0builder {
16371642
GenInfo.MCCollId = mcParticle.mcCollisionId(); // save this reference, please
16381643

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

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

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

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

17121717
// Checking decay mode
1713-
if (GenInfo.IsSigma0 || GenInfo.IsAntiSigma0) {
1718+
if (doLambdaStar ? (GenInfo.IsLambdaStar || GenInfo.IsAntiLambdaStar) : (GenInfo.IsSigma0 || GenInfo.IsAntiSigma0)) {
17141719
histos.fill(HIST("GenQA/hSigma0NDau"), GenInfo.NDaughters);
17151720
histos.fill(HIST("GenQA/h2dSigma0NDauVsProcess"), GenInfo.NDaughters, GenInfo.MCProcess);
17161721

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

17321737
// Fill histograms
1733-
if (GenInfo.IsSigma0) {
1738+
if (doLambdaStar ? GenInfo.IsLambdaStar : GenInfo.IsSigma0) {
17341739
histos.fill(HIST("GenQA/hGenSpecies"), 2);
17351740
histos.fill(HIST("GenQA/hGenSigma0"), GenInfo.MCPt);
17361741
histos.fill(HIST("GenQA/h3dGenSigma0_pTMap"), GenInfo.MCPt, GenInfo.MCDau1Pt, GenInfo.MCDau2Pt);
@@ -1739,7 +1744,7 @@ struct sigma0builder {
17391744
if (GenInfo.IsPrimary)
17401745
histos.fill(HIST("GenQA/hPrimarySigma0s"), 1);
17411746
}
1742-
if (GenInfo.IsAntiSigma0) {
1747+
if (doLambdaStar ? GenInfo.IsAntiLambdaStar : GenInfo.IsAntiSigma0) {
17431748
histos.fill(HIST("GenQA/hGenSpecies"), 3);
17441749
histos.fill(HIST("GenQA/hGenAntiSigma0"), GenInfo.MCPt);
17451750
histos.fill(HIST("GenQA/h3dGenASigma0_pTMap"), GenInfo.MCPt, GenInfo.MCDau1Pt, GenInfo.MCDau2Pt);
@@ -1816,9 +1821,10 @@ struct sigma0builder {
18161821
pi0GenCollRefs(MCGenInfo.MCCollId); // link to stramccollision table
18171822
}
18181823

1819-
// Sigma0/ASigma0
1820-
if (fillSigma0Tables && (MCGenInfo.IsSigma0 || MCGenInfo.IsAntiSigma0)) {
1821-
sigma0Gens(MCGenInfo.IsSigma0, MCGenInfo.IsProducedByGenerator, MCGenInfo.MCPt, mcParticle.y());
1824+
// Sigma0/ASigma0 (Lambda(1520)/ALambda(1520))
1825+
bool fIsGenSigma0Like = doLambdaStar ? (MCGenInfo.IsLambdaStar || MCGenInfo.IsAntiLambdaStar) : (MCGenInfo.IsSigma0 || MCGenInfo.IsAntiSigma0);
1826+
if (fillSigma0Tables && fIsGenSigma0Like) {
1827+
sigma0Gens(doLambdaStar ? MCGenInfo.IsLambdaStar : MCGenInfo.IsSigma0, MCGenInfo.IsProducedByGenerator, MCGenInfo.MCPt, mcParticle.y());
18221828
sigma0GenCollRefs(MCGenInfo.MCCollId); // link to stramccollision table
18231829
}
18241830

0 commit comments

Comments
 (0)