Skip to content

Commit 83452af

Browse files
fmazzascFrancesco Mazzaschi
andauthored
[PWGLF] 3Body MC task - add primary deuteron information (AliceO2Group#10189)
Co-authored-by: Francesco Mazzaschi <[email protected]>
1 parent e26f3d2 commit 83452af

File tree

2 files changed

+41
-48
lines changed

2 files changed

+41
-48
lines changed

PWGLF/DataModel/Vtx3BodyTables.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,10 +424,10 @@ DECLARE_SOA_COLUMN(GenBachP, genbachp, float); //! generated momentum b
424424
DECLARE_SOA_COLUMN(GenBachPt, genbachpt, float); //! generated transverse momentum bachelor daughter particle
425425
DECLARE_SOA_COLUMN(IsTrueH3L, istrueh3l, bool); //! flag for true hypertriton candidate
426426
DECLARE_SOA_COLUMN(IsTrueAntiH3L, istrueantih3l, bool); //! flag for true anti-hypertriton candidate
427-
DECLARE_SOA_COLUMN(PdgCode, pdgcode, int); //! MC particle mother PDG code
428427
DECLARE_SOA_COLUMN(PdgCodeDau0, pdgcodedau0, int); //! MC particle daughter 0 PDG code
429428
DECLARE_SOA_COLUMN(PdgCodeDau1, pdgcodedau1, int); //! MC particle daughter 1 PDG code
430429
DECLARE_SOA_COLUMN(PdgCodeDau2, pdgcodedau2, int); //! MC particle daughter 2 PDG code
430+
DECLARE_SOA_COLUMN(IsBachPrimary, isbachprimary, bool); //! flag for bachelor daughter primary
431431
DECLARE_SOA_COLUMN(SurvEvSel, survevsel, int); //! flag if reco collision survived event selection
432432
DECLARE_SOA_COLUMN(IsReco, isreco, int); //! flag if candidate was reconstructed
433433

@@ -584,7 +584,8 @@ DECLARE_SOA_TABLE(McKFVtx3BodyDatas, "AOD", "MCKF3BODYDATAS",
584584
kfvtx3body::GenNegP, kfvtx3body::GenNegPt,
585585
kfvtx3body::GenBachP, kfvtx3body::GenBachPt,
586586
kfvtx3body::IsTrueH3L, kfvtx3body::IsTrueAntiH3L,
587-
kfvtx3body::PdgCode, kfvtx3body::PdgCodeDau0, kfvtx3body::PdgCodeDau1, kfvtx3body::PdgCodeDau2,
587+
kfvtx3body::PdgCodeDau0, kfvtx3body::PdgCodeDau1, kfvtx3body::PdgCodeDau2,
588+
kfvtx3body::IsBachPrimary,
588589
kfvtx3body::IsReco,
589590
kfvtx3body::SurvEvSel);
590591

PWGLF/TableProducer/Nuspex/threebodyKFTask.cxx

Lines changed: 38 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,8 @@ struct threebodyKFTask {
9797

9898
// helper function to check if a mother track is a true H3L/Anti-H3L
9999
template <typename MCTrack3B>
100-
int checkH3LTruth(MCTrack3B const& trackPr, MCTrack3B const& trackPi, MCTrack3B const& trackDe, bool& isMuonReco)
100+
int checkH3LTruth(MCTrack3B const& mcParticlePr, MCTrack3B const& mcParticlePi, MCTrack3B const& mcParticleDe, bool& isMuonReco)
101101
{
102-
if (!trackPi.has_mcParticle() || !trackPr.has_mcParticle() || !trackDe.has_mcParticle()) {
103-
return -1;
104-
}
105-
auto mcParticlePr = trackPr.template mcParticle_as<aod::McParticles>();
106-
auto mcParticlePi = trackPi.template mcParticle_as<aod::McParticles>();
107-
auto mcParticleDe = trackDe.template mcParticle_as<aod::McParticles>();
108-
109102
if (abs(mcParticlePr.pdgCode()) != 2212 || abs(mcParticleDe.pdgCode()) != 1000010020) {
110103
return -1;
111104
}
@@ -126,17 +119,18 @@ struct threebodyKFTask {
126119
return -1;
127120
}
128121
// check if the pion track is a muon coming from a pi -> mu + vu decay, if yes, take the mother pi
129-
if (std::abs(mcParticlePi.pdgCode()) == 13) {
130-
for (const auto& motherPi : mcParticlePi.template mothers_as<aod::McParticles>()) {
122+
auto mcParticlePiTmp = mcParticlePi;
123+
if (std::abs(mcParticlePiTmp.pdgCode()) == 13) {
124+
for (const auto& motherPi : mcParticlePiTmp.template mothers_as<aod::McParticles>()) {
131125
if (std::abs(motherPi.pdgCode()) == 211) {
132-
mcParticlePi = motherPi;
126+
mcParticlePiTmp = motherPi;
133127
isMuonReco = true;
134128
break;
135129
}
136130
}
137131
}
138132
// now loop over the pion mother
139-
for (const auto& motherPi : mcParticlePi.template mothers_as<aod::McParticles>()) {
133+
for (const auto& motherPi : mcParticlePiTmp.template mothers_as<aod::McParticles>()) {
140134
if (motherPi.globalIndex() == prDeMomID) {
141135
return motherPi.globalIndex();
142136
}
@@ -215,6 +209,29 @@ struct threebodyKFTask {
215209
// fill QA histograms for all reco candidates
216210
fillQAPlots(vtx3bodydata);
217211

212+
auto track0 = vtx3bodydata.track0_as<MCLabeledTracksIU>();
213+
auto track1 = vtx3bodydata.track1_as<MCLabeledTracksIU>();
214+
auto track2 = vtx3bodydata.track2_as<MCLabeledTracksIU>();
215+
216+
if (!track0.has_mcParticle() || !track1.has_mcParticle() || !track2.has_mcParticle()) {
217+
continue;
218+
}
219+
220+
auto mcTrack0 = track0.mcParticle_as<aod::McParticles>();
221+
auto mcTrack1 = track1.mcParticle_as<aod::McParticles>();
222+
auto mcTrack2 = track2.mcParticle_as<aod::McParticles>();
223+
224+
float genPosPt = mcTrack0.pt();
225+
float genPosP = mcTrack0.p();
226+
int daughter0PDGcode = mcTrack0.pdgCode();
227+
float genNegPt = mcTrack1.pt();
228+
float genNegP = mcTrack1.p();
229+
int daughter1PDGcode = mcTrack1.pdgCode();
230+
float genBachPt = mcTrack2.pt();
231+
float genBachP = mcTrack2.p();
232+
int daughter2PDGcode = mcTrack2.pdgCode();
233+
bool isBachPrimary = mcTrack2.isPhysicalPrimary();
234+
218235
double MClifetime = -1.;
219236
bool isTrueH3L = false;
220237
bool isTrueAntiH3L = false;
@@ -224,48 +241,22 @@ struct threebodyKFTask {
224241
float genP = -1.;
225242
float genPt = -1.;
226243
std::array<float, 3> genDecVtx{-1.f};
227-
int vtx3bodyPDGcode = -1;
228-
int daughter0PDGcode = -1;
229-
int daughter1PDGcode = -1;
230-
int daughter2PDGcode = -1;
231-
double MCmassPrPi = -1.;
232-
float genPosP = -1.;
233-
float genPosPt = -1.;
234-
float genNegP = -1.;
235-
float genNegPt = -1.;
236-
float genBachP = -1.;
237-
float genBachPt = -1.;
238-
239-
auto track0 = vtx3bodydata.track0_as<MCLabeledTracksIU>();
240-
auto track1 = vtx3bodydata.track1_as<MCLabeledTracksIU>();
241-
auto track2 = vtx3bodydata.track2_as<MCLabeledTracksIU>();
242-
auto& trackPr = vtx3bodydata.track2sign() > 0 ? track0 : track1;
243-
auto& trackPi = vtx3bodydata.track2sign() > 0 ? track1 : track0;
244-
auto& trackDe = track2;
245-
246244
bool isMuonReco = false;
247-
int motherID = checkH3LTruth(trackPr, trackPi, trackDe, isMuonReco);
245+
auto& mcTrackPr = vtx3bodydata.sign() > 0 ? mcTrack0 : mcTrack1;
246+
auto& mcTrackPi = vtx3bodydata.sign() > 0 ? mcTrack1 : mcTrack0;
247+
auto& mcTrackDe = mcTrack2;
248+
int motherID = checkH3LTruth(mcTrackPr, mcTrackPi, mcTrackDe, isMuonReco);
248249
if (motherID > 0) {
249-
int chargeFactor = vtx3bodydata.track2sign() > 0 ? 1 : -1;
250250
auto mcTrackHyp = particlesMC.rawIteratorAt(motherID);
251-
auto mcTrackPr = trackPr.mcParticle_as<aod::McParticles>();
252-
auto mcTrackPi = trackPi.mcParticle_as<aod::McParticles>();
253-
auto mcTrackDe = trackDe.mcParticle_as<aod::McParticles>();
254-
genPosPt = chargeFactor > 0 ? mcTrackPr.pt() : mcTrackPi.pt();
255-
genPosP = chargeFactor > 0 ? mcTrackPr.p() : mcTrackPi.p();
256-
genNegPt = chargeFactor < 0 ? mcTrackPr.pt() : mcTrackPi.pt();
257-
genNegP = chargeFactor < 0 ? mcTrackPr.p() : mcTrackPi.p();
258-
genBachPt = mcTrackDe.pt();
259-
genBachP = mcTrackDe.p();
260-
261251
genPhi = mcTrackHyp.phi();
262252
genEta = mcTrackHyp.eta();
263253
genPt = mcTrackHyp.pt();
254+
int chargeFactor = mcTrackHyp.pdgCode() > 0 ? 1 : -1;
264255
isTrueH3L = chargeFactor > 0;
265256
isTrueAntiH3L = chargeFactor < 0;
266257
MClifetime = RecoDecay::sqrtSumOfSquares(mcTrackPr.vx() - mcTrackHyp.vx(), mcTrackPr.vy() - mcTrackHyp.vy(), mcTrackPr.vz() - mcTrackHyp.vz()) * o2::constants::physics::MassHyperTriton / mcTrackHyp.p();
267258
double MCMass = RecoDecay::m(array{array{mcTrackPr.px(), mcTrackPr.py(), mcTrackPr.pz()}, array{mcTrackPi.px(), mcTrackPi.py(), mcTrackPi.pz()}, array{mcTrackDe.px(), mcTrackDe.py(), mcTrackDe.pz()}}, array{o2::constants::physics::MassProton, o2::constants::physics::MassPionCharged, o2::constants::physics::MassDeuteron});
268-
MCmassPrPi = RecoDecay::m(array{array{mcTrackPr.px(), mcTrackPr.py(), mcTrackPr.pz()}, array{mcTrackPi.px(), mcTrackPi.py(), mcTrackPi.pz()}}, array{o2::constants::physics::MassProton, o2::constants::physics::MassPionCharged});
259+
float MCmassPrPi = RecoDecay::m(array{array{mcTrackPr.px(), mcTrackPr.py(), mcTrackPr.pz()}, array{mcTrackPi.px(), mcTrackPi.py(), mcTrackPi.pz()}}, array{o2::constants::physics::MassProton, o2::constants::physics::MassPionCharged});
269260
registry.fill(HIST("hLabelCounter"), 2.5);
270261
registry.fill(HIST("hTrueHypertritonMCPt"), mcTrackHyp.pt() * chargeFactor);
271262
registry.fill(HIST("hTrueHypertritonMCCTau"), MClifetime);
@@ -322,7 +313,7 @@ struct threebodyKFTask {
322313
genRap,
323314
genPosP, genPosPt, genNegP, genNegPt, genBachP, genBachPt,
324315
isTrueH3L, isTrueAntiH3L,
325-
vtx3bodyPDGcode, daughter0PDGcode, daughter1PDGcode, daughter2PDGcode,
316+
daughter0PDGcode, daughter1PDGcode, daughter2PDGcode, isBachPrimary,
326317
true, // is reconstructed
327318
true); // reco event passed event selection
328319
} // end vtx3bodydatas loop
@@ -480,7 +471,8 @@ struct threebodyKFTask {
480471
mcparticle.y(),
481472
genPPos, genPtPos, genPNeg, genPtNeg, genPBach, genPtBach,
482473
isTrueGenH3L, isTrueGenAntiH3L,
483-
mcparticle.pdgCode(), posDauPdgCode, negDauPdgCode, bachDauPdgCode,
474+
posDauPdgCode, negDauPdgCode, bachDauPdgCode,
475+
false, // isBachPrimary
484476
false, // is reconstructed
485477
survEvSel);
486478
} // end mcparticles loop

0 commit comments

Comments
 (0)