Skip to content

Commit 8d73012

Browse files
committed
Add two MC particle variables
1 parent 0939d96 commit 8d73012

File tree

3 files changed

+53
-1
lines changed

3 files changed

+53
-1
lines changed

PWGHF/DataModel/DerivedTables.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ DECLARE_SOA_INDEX_COLUMN(McParticle, mcParticle); //! MC parti
162162
DECLARE_SOA_COLUMN(FlagMcMatchGen, flagMcMatchGen, int8_t); //! flag for generator level matching
163163
DECLARE_SOA_COLUMN(OriginMcGen, originMcGen, int8_t); //! particle origin, generator level
164164
DECLARE_SOA_COLUMN(FlagMcDecayChanGen, flagMcDecayChanGen, int8_t); //! resonant decay channel flag, generator level
165+
DECLARE_SOA_COLUMN(PdgMother, pdgMother, int32_t); //! PDG code of the mother particle
165166
} // namespace hf_mc_particle
166167

167168
// Declares the base table with candidates (Bases).
@@ -492,6 +493,7 @@ DECLARE_SOA_COLUMN(MlScoreBkgCharm, mlScoreBkgCharm, float); //
492493
DECLARE_SOA_COLUMN(MlScorePromptCharm, mlScorePromptCharm, float); //! ML score for prompt class
493494
DECLARE_SOA_COLUMN(MlScoreNonPromptCharm, mlScoreNonPromptCharm, float); //! ML score for non-prompt class
494495
DECLARE_SOA_COLUMN(MlScoresCharm, mlScoresCharm, std::vector<float>); //! vector of ML scores
496+
DECLARE_SOA_COLUMN(FlagMcMatchGenCharm, flagMcMatchGenCharm, int8_t); //! flag for generator level matching
495497
} // namespace hf_cand_mc_charm
496498

497499
// ----------------
@@ -935,6 +937,11 @@ DECLARE_SOA_TABLE_STAGED(HfDstarMcs, "HFDSTMC", //! Table with MC candidate info
935937
hf_cand::NTracksDecayed,
936938
o2::soa::Marker<MarkerDstar>);
937939

940+
DECLARE_SOA_TABLE_STAGED(HfDstarGenMcs, "HFDSTGENMC", //! Table with MC candidate info for generated D*+
941+
hf_cand_mc_charm::FlagMcMatchGenCharm,
942+
hf_mc_particle::PdgMother,
943+
o2::soa::Marker<MarkerDstar>);
944+
938945
// ----------------
939946
// Ξc± → (Ξ∓ → (Λ → p π∓) π∓) π± π±
940947
// ----------------

PWGHF/TableProducer/derivedDataCreatorDstarToD0Pi.cxx

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ struct HfDerivedDataCreatorDstarToD0Pi {
7070
Produces<o2::aod::HfDstarMls> rowCandidateMl;
7171
Produces<o2::aod::HfDstarIds> rowCandidateId;
7272
Produces<o2::aod::HfDstarMcs> rowCandidateMc;
73+
Produces<o2::aod::HfDstarGenMcs> rowCandidateGenMc;
7374

7475
// Switches for filling tables
7576
HfConfigurableDerivedData confDerData;
@@ -79,6 +80,7 @@ struct HfDerivedDataCreatorDstarToD0Pi {
7980
Configurable<bool> fillCandidateMl{"fillCandidateMl", true, "Fill candidate selection ML scores"};
8081
Configurable<bool> fillCandidateId{"fillCandidateId", true, "Fill original indices from the candidate table"};
8182
Configurable<bool> fillCandidateMc{"fillCandidateMc", true, "Fill candidate MC info"};
83+
Configurable<bool> fillCandidateGenMc{"fillCandidateGenMc", true, "Fill candidate generator level MC info"};
8284
// Parameters for production of training samples
8385
Configurable<float> downSampleBkgFactor{"downSampleBkgFactor", 1., "Fraction of background candidates to keep for ML trainings"};
8486
Configurable<float> ptMaxForDownSample{"ptMaxForDownSample", 10., "Maximum pt for the application of the downsampling factor"};
@@ -204,6 +206,42 @@ struct HfDerivedDataCreatorDstarToD0Pi {
204206
}
205207
}
206208

209+
template <typename CollisionType, typename ParticleType, typename MatchMap>
210+
void processGenMc(CollisionType const& mcCollisions,
211+
o2::framework::Preslice<ParticleType> const& mcParticlesPerMcCollision,
212+
ParticleType const& mcParticles,
213+
MatchMap const& matchMap)
214+
{
215+
// Fill MC collision properties
216+
for (const auto& mcCollision : mcCollisions) {
217+
auto thisMcCollId = mcCollision.globalIndex();
218+
auto particlesThisMcColl = mcParticles.sliceBy(mcParticlesPerMcCollision, thisMcCollId);
219+
auto sizeTablePart = particlesThisMcColl.size();
220+
LOGF(debug, "MC collision %d has %d MC particles", thisMcCollId, sizeTablePart);
221+
// Skip MC collisions without HF particles (and without HF candidates in matched reconstructed collisions if saving indices of reconstructed collisions matched to MC collisions)
222+
bool isEmpty = (matchMap.find(thisMcCollId) == matchMap.end()) || matchMap.find(thisMcCollId)->second.empty();
223+
if (sizeTablePart == 0 && isEmpty) {
224+
LOGF(debug, "Skipping MC collision %d", thisMcCollId);
225+
continue;
226+
}
227+
reserveTable(rowCandidateGenMc, fillCandidateGenMc, sizeTablePart);
228+
if (fillCandidateGenMc) {
229+
for (const auto& particle : particlesThisMcColl) {
230+
auto origin = particle.originMcGen();
231+
int pdgMother = 0;
232+
if (origin == RecoDecay::OriginType::NonPrompt) {
233+
auto bHadMother = mcParticles.rawIteratorAt(particle.idxBhadMotherPart() - particlesThisMcColl.offset());
234+
pdgMother = std::abs(bHadMother.pdgCode());
235+
}
236+
rowCandidateGenMc(
237+
particle.flagMcMatchGenD0(),
238+
pdgMother);
239+
}
240+
}
241+
242+
}
243+
}
244+
207245
template <bool isMl, bool isMc, bool onlyBkg, bool onlySig, typename CollType, typename CandType>
208246
void processCandidates(CollType const& collisions,
209247
Partition<CandType>& candidates,
@@ -322,6 +360,7 @@ struct HfDerivedDataCreatorDstarToD0Pi {
322360
rowsCommon.preProcessMcCollisions(mcCollisions, mcParticlesPerMcCollision, mcParticles);
323361
processCandidates<false, true, false, true>(collisions, candidatesMcSig, tracks, bcs);
324362
rowsCommon.processMcParticles(mcCollisions, mcParticlesPerMcCollision, mcParticles, Mass);
363+
processGenMc(mcCollisions, mcParticlesPerMcCollision, mcParticles, rowsCommon.matchedCollisions);
325364
}
326365
PROCESS_SWITCH(HfDerivedDataCreatorDstarToD0Pi, processMcSig, "Process MC only for signals", false);
327366

@@ -335,6 +374,7 @@ struct HfDerivedDataCreatorDstarToD0Pi {
335374
rowsCommon.preProcessMcCollisions(mcCollisions, mcParticlesPerMcCollision, mcParticles);
336375
processCandidates<false, true, true, false>(collisions, candidatesMcBkg, tracks, bcs);
337376
rowsCommon.processMcParticles(mcCollisions, mcParticlesPerMcCollision, mcParticles, Mass);
377+
processGenMc(mcCollisions, mcParticlesPerMcCollision, mcParticles, rowsCommon.matchedCollisions);
338378
}
339379
PROCESS_SWITCH(HfDerivedDataCreatorDstarToD0Pi, processMcBkg, "Process MC only for background", false);
340380

@@ -348,6 +388,7 @@ struct HfDerivedDataCreatorDstarToD0Pi {
348388
rowsCommon.preProcessMcCollisions(mcCollisions, mcParticlesPerMcCollision, mcParticles);
349389
processCandidates<false, true, false, false>(collisions, candidatesMcAll, tracks, bcs);
350390
rowsCommon.processMcParticles(mcCollisions, mcParticlesPerMcCollision, mcParticles, Mass);
391+
processGenMc(mcCollisions, mcParticlesPerMcCollision, mcParticles, rowsCommon.matchedCollisions);
351392
}
352393
PROCESS_SWITCH(HfDerivedDataCreatorDstarToD0Pi, processMcAll, "Process MC", false);
353394

@@ -372,6 +413,7 @@ struct HfDerivedDataCreatorDstarToD0Pi {
372413
rowsCommon.preProcessMcCollisions(mcCollisions, mcParticlesPerMcCollision, mcParticles);
373414
processCandidates<true, true, false, true>(collisions, candidatesMcMlSig, tracks, bcs);
374415
rowsCommon.processMcParticles(mcCollisions, mcParticlesPerMcCollision, mcParticles, Mass);
416+
processGenMc(mcCollisions, mcParticlesPerMcCollision, mcParticles, rowsCommon.matchedCollisions);
375417
}
376418
PROCESS_SWITCH(HfDerivedDataCreatorDstarToD0Pi, processMcMlSig, "Process MC with ML only for signals", false);
377419

@@ -385,6 +427,7 @@ struct HfDerivedDataCreatorDstarToD0Pi {
385427
rowsCommon.preProcessMcCollisions(mcCollisions, mcParticlesPerMcCollision, mcParticles);
386428
processCandidates<true, true, true, false>(collisions, candidatesMcMlBkg, tracks, bcs);
387429
rowsCommon.processMcParticles(mcCollisions, mcParticlesPerMcCollision, mcParticles, Mass);
430+
processGenMc(mcCollisions, mcParticlesPerMcCollision, mcParticles, rowsCommon.matchedCollisions);
388431
}
389432
PROCESS_SWITCH(HfDerivedDataCreatorDstarToD0Pi, processMcMlBkg, "Process MC with ML only for background", false);
390433

@@ -398,13 +441,15 @@ struct HfDerivedDataCreatorDstarToD0Pi {
398441
rowsCommon.preProcessMcCollisions(mcCollisions, mcParticlesPerMcCollision, mcParticles);
399442
processCandidates<true, true, false, false>(collisions, candidatesMcMlAll, tracks, bcs);
400443
rowsCommon.processMcParticles(mcCollisions, mcParticlesPerMcCollision, mcParticles, Mass);
444+
processGenMc(mcCollisions, mcParticlesPerMcCollision, mcParticles, rowsCommon.matchedCollisions);
401445
}
402446
PROCESS_SWITCH(HfDerivedDataCreatorDstarToD0Pi, processMcMlAll, "Process MC with ML", false);
403447

404448
void processMcGenOnly(TypeMcCollisions const& mcCollisions,
405449
MatchedGenCandidatesMc const& mcParticles)
406450
{
407451
rowsCommon.processMcParticles(mcCollisions, mcParticlesPerMcCollision, mcParticles, Mass);
452+
processGenMc(mcCollisions, mcParticlesPerMcCollision, mcParticles, rowsCommon.matchedCollisions);
408453
}
409454
PROCESS_SWITCH(HfDerivedDataCreatorDstarToD0Pi, processMcGenOnly, "Process MC gen. only", false);
410455
};

PWGJE/DataModel/Jet.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ using CandidatesDstarMCD = o2::soa::Join<HfDstarBases, HfDstarPars, HfDstarParD0
237237
using JetTracksSubDstar = JTrackDstarSubs;
238238
using JetParticlesSubDstar = JMcParticleDstarSubs;
239239
using McCollisionsDstar = o2::soa::Join<HfDstarMcCollBases, JDstarMcCollisionIds>;
240-
using CandidatesDstarMCP = o2::soa::Join<HfDstarPBases, JDstarPIds>;
240+
using CandidatesDstarMCP = o2::soa::Join<HfDstarPBases, JDstarPIds, HfDstarGenMcs>;
241241

242242
using CollisionsLc = o2::soa::Join<HfLcCollBases, JLcCollisionIds>;
243243
using CandidatesLcData = o2::soa::Join<HfLcBases, HfLcPars, HfLcParEs, HfLcSels, HfLcMls, JLcIds>;

0 commit comments

Comments
 (0)