Skip to content

Commit 3d30cc5

Browse files
committed
Feat: finish mc processing for track-v0/kink
1 parent 4a10163 commit 3d30cc5

File tree

14 files changed

+514
-702
lines changed

14 files changed

+514
-702
lines changed

PWGCF/Femto/Core/collisionBuilder.h

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ struct ConfCcdb : o2::framework::ConfigurableGroup {
8989
o2::framework::Configurable<std::string> ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "URL to ccdb"};
9090
o2::framework::Configurable<std::string> grpPath{"grpPath", "GLO/Config/GRPMagField", "Path to GRP object (Run3 -> GLO/Config/GRPMagField, Run2 -> GLO/GRP/GRP"};
9191
o2::framework::Configurable<std::string> triggerPath{"triggerPath", "EventFiltering/Zorro/", "CCDB path for trigger information"};
92+
o2::framework::Configurable<int> magFieldForced{"magFieldForced", 0, "Force value for magnetic field (kG). This will skip calls to the ccdb. Deactivate by setting value to 0"};
9293
};
9394

9495
struct ConfCollisionRctFlags : o2::framework::ConfigurableGroup {
@@ -390,6 +391,7 @@ class CollisionBuilder
390391
mUseRctFlags = true;
391392
mRctFlagsChecker.init(confRct.label.value, confRct.useZdc.value, confRct.treatLimitedAcceptanceAsBad.value);
392393
}
394+
mMagFieldForced = confCcdb.magFieldForced.value;
393395
mGrpPath = confCcdb.grpPath.value;
394396
mSubGeneratorId = confFilter.subGeneratorId.value;
395397

@@ -403,12 +405,16 @@ class CollisionBuilder
403405
{
404406
if (mRunNumber != bc.runNumber()) {
405407
mRunNumber = bc.runNumber();
406-
static o2::parameters::GRPMagField* grpo = nullptr;
407-
grpo = ccdb->template getForRun<o2::parameters::GRPMagField>(mGrpPath, mRunNumber);
408-
if (grpo == nullptr) {
409-
LOG(fatal) << "GRP object not found for Run " << mRunNumber;
408+
if (mMagFieldForced == 0) {
409+
static o2::parameters::GRPMagField* grpo = nullptr;
410+
grpo = ccdb->template getForRun<o2::parameters::GRPMagField>(mGrpPath, mRunNumber);
411+
if (grpo == nullptr) {
412+
LOG(fatal) << "GRP object not found for Run " << mRunNumber;
413+
}
414+
mMagField = static_cast<int>(grpo->getNominalL3Field()); // get magnetic field in kG
415+
} else {
416+
mMagField = mMagFieldForced;
410417
}
411-
mMagField = static_cast<int>(grpo->getNominalL3Field()); // get magnetic field in kG
412418

413419
if (mUseTrigger) {
414420
mZorro.initCCDB(ccdb.service, mRunNumber, bc.timestamp(), mTriggerNames);
@@ -534,6 +540,7 @@ class CollisionBuilder
534540
bool mUseTrigger = false;
535541
int mRunNumber = -1;
536542
std::string mGrpPath = std::string("");
543+
int mMagFieldForced = 0;
537544
int mMagField = 0;
538545
aod::rctsel::RCTFlagsChecker mRctFlagsChecker;
539546
bool mUseRctFlags = false;

PWGCF/Femto/Core/collisionHistManager.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ enum ColHist {
5252
kCentVsSphericity,
5353
kMultVsSphericity,
5454
// mc
55-
kMcCent,
56-
kMcMult,
55+
kTrueCentVsCent,
56+
kTrueMultVsMult,
5757
kColHistLast
5858
};
5959

@@ -80,8 +80,8 @@ constexpr std::array<histmanager::HistInfo<ColHist>, kColHistLast> HistTable = {
8080
{kMultVsSphericity, o2::framework::kTH2F, "hMultVsSphericity", "Multiplicity vs Sphericity; Multiplicity; Sphericity"},
8181
{kCentVsSphericity, o2::framework::kTH2F, "hCentVsSphericity", "Centrality vs Sphericity; Centrality (%); Sphericity"},
8282
// mc
83-
{kMcCent, o2::framework::kTH1F, "hMcCent", "Monte Carlo Centrality; Centrality (%); Entries"},
84-
{kMcMult, o2::framework::kTH1F, "hMcMult", "Monte Carlo Multiplicity; Multiplicity; Entries"},
83+
{kTrueCentVsCent, o2::framework::kTH2F, "hTrueCentVsCent", "True centrality vs centrality; Centrality_{True} (%); Centrality (%)"},
84+
{kTrueMultVsMult, o2::framework::kTH2F, "hTrueMultVsMult", "True multiplicity vs multiplicity; Multiplicity_{True}; Multiplicity"},
8585
}};
8686

8787
#define COL_HIST_ANALYSIS_MAP(conf) \
@@ -102,9 +102,9 @@ constexpr std::array<histmanager::HistInfo<ColHist>, kColHistLast> HistTable = {
102102
{kMultVsSphericity, {confAnalysis.mult, confQa.sphericity}}, \
103103
{kCentVsSphericity, {confBinningAnalysis.cent, confQa.sphericity}},
104104

105-
#define COL_HIST_MC_MAP(conf) \
106-
{kMcMult, {conf.mult}}, \
107-
{kMcCent, {conf.cent}},
105+
#define COL_HIST_MC_MAP(conf) \
106+
{kTrueMultVsMult, {conf.mult, conf.mult}}, \
107+
{kTrueCentVsCent, {conf.cent, conf.cent}},
108108

109109
template <typename T>
110110
auto makeColHistSpecMap(const T& confBinningAnalysis)
@@ -248,8 +248,8 @@ class CollisionHistManager
248248
void initMc(std::map<ColHist, std::vector<o2::framework::AxisSpec>> const& Specs)
249249
{
250250
std::string mcDir = std::string(ColMcDir);
251-
mHistogramRegistry->add(mcDir + getHistNameV2(kMcMult, HistTable), getHistDesc(kMcMult, HistTable), getHistType(kMcMult, HistTable), {Specs.at(kMcMult)});
252-
mHistogramRegistry->add(mcDir + getHistNameV2(kMcCent, HistTable), getHistDesc(kMcCent, HistTable), getHistType(kMcCent, HistTable), {Specs.at(kMcCent)});
251+
mHistogramRegistry->add(mcDir + getHistNameV2(kTrueMultVsMult, HistTable), getHistDesc(kTrueMultVsMult, HistTable), getHistType(kTrueMultVsMult, HistTable), {Specs.at(kTrueMultVsMult)});
252+
mHistogramRegistry->add(mcDir + getHistNameV2(kTrueCentVsCent, HistTable), getHistDesc(kTrueCentVsCent, HistTable), getHistType(kTrueCentVsCent, HistTable), {Specs.at(kTrueCentVsCent)});
253253
}
254254

255255
template <typename T>
@@ -284,9 +284,9 @@ class CollisionHistManager
284284
if (!col.has_fMcCol()) {
285285
return;
286286
}
287-
auto genCol = col.template fMcCol_as<T2>();
288-
mHistogramRegistry->fill(HIST(ColMcDir) + HIST(getHistName(kMcMult, HistTable)), genCol.mult());
289-
mHistogramRegistry->fill(HIST(ColMcDir) + HIST(getHistName(kMcCent, HistTable)), genCol.cent());
287+
auto mcCol = col.template fMcCol_as<T2>();
288+
mHistogramRegistry->fill(HIST(ColMcDir) + HIST(getHistName(kTrueMultVsMult, HistTable)), mcCol.mult(), col.mult());
289+
mHistogramRegistry->fill(HIST(ColMcDir) + HIST(getHistName(kTrueCentVsCent, HistTable)), mcCol.cent(), col.cent());
290290
}
291291

292292
o2::framework::HistogramRegistry* mHistogramRegistry = nullptr;

PWGCF/Femto/Core/kinkBuilder.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -94,16 +94,16 @@ struct ConfSigmaPlusBits : o2::framework::ConfigurableGroup {
9494
#undef KINK_DEFAULT_BITS
9595

9696
// base selection for analysis task for kinks
97-
#define KINK_DEFAULT_SELECTIONS(defaultMassMin, defaultMassMax, defaultPdgCode) \
98-
o2::framework::Configurable<int> pdgCodeAbs{"pdgCodeAbs", defaultPdgCode, "PDG code. Set sign to -1 for antiparticle"}; \
99-
o2::framework::Configurable<float> ptMin{"ptMin", 0.f, "Minimum pT"}; \
100-
o2::framework::Configurable<float> ptMax{"ptMax", 999.f, "Maximum pT"}; \
101-
o2::framework::Configurable<float> etaMin{"etaMin", -10.f, "Minimum eta"}; \
102-
o2::framework::Configurable<float> etaMax{"etaMax", 10.f, "Maximum eta"}; \
103-
o2::framework::Configurable<float> phiMin{"phiMin", 0.f, "Minimum phi"}; \
104-
o2::framework::Configurable<float> phiMax{"phiMax", 1.f * o2::constants::math::TwoPI, "Maximum phi"}; \
105-
o2::framework::Configurable<float> massMin{"massMin", defaultMassMin, "Minimum invariant mass for Sigma"}; \
106-
o2::framework::Configurable<float> massMax{"massMax", defaultMassMax, "Maximum invariant mass for Sigma"}; \
97+
#define KINK_DEFAULT_SELECTIONS(defaultMassMin, defaultMassMax, defaultPdgCode) \
98+
o2::framework::Configurable<int> pdgCodeAbs{"pdgCodeAbs", defaultPdgCode, "PDG code. Select antipartilce via sign"}; \
99+
o2::framework::Configurable<float> ptMin{"ptMin", 0.f, "Minimum pT"}; \
100+
o2::framework::Configurable<float> ptMax{"ptMax", 999.f, "Maximum pT"}; \
101+
o2::framework::Configurable<float> etaMin{"etaMin", -10.f, "Minimum eta"}; \
102+
o2::framework::Configurable<float> etaMax{"etaMax", 10.f, "Maximum eta"}; \
103+
o2::framework::Configurable<float> phiMin{"phiMin", 0.f, "Minimum phi"}; \
104+
o2::framework::Configurable<float> phiMax{"phiMax", 1.f * o2::constants::math::TwoPI, "Maximum phi"}; \
105+
o2::framework::Configurable<float> massMin{"massMin", defaultMassMin, "Minimum invariant mass for Sigma"}; \
106+
o2::framework::Configurable<float> massMax{"massMax", defaultMassMax, "Maximum invariant mass for Sigma"}; \
107107
o2::framework::Configurable<o2::aod::femtodatatypes::KinkMaskType> mask{"mask", 0x0, "Bitmask for kink selection"};
108108

109109
// base selection for analysis task for sigmas
@@ -498,11 +498,11 @@ class KinkBuilder
498498

499499
if constexpr (modes::isEqual(kinkType, modes::Kink::kSigma)) {
500500
fillSigma(collisionProducts, kinkProducts, kink, daughterIndex);
501-
mcBuilder.template fillMcSigmaWithLabel<system>(col, mcCols, kink, daughter, mcParticles, mcProducts);
501+
mcBuilder.template fillMcSigmaWithLabel<system>(col, mcCols, daughter, mcParticles, mcProducts);
502502
}
503503
if constexpr (modes::isEqual(kinkType, modes::Kink::kSigmaPlus)) {
504504
fillSigmaPlus(collisionProducts, kinkProducts, kink, daughterIndex);
505-
mcBuilder.template fillMcSigmaPlusWithLabel<system>(col, mcCols, kink, daughter, mcParticles, mcProducts);
505+
mcBuilder.template fillMcSigmaPlusWithLabel<system>(col, mcCols, daughter, mcParticles, mcProducts);
506506
}
507507
}
508508
}

PWGCF/Femto/Core/kinkHistManager.h

Lines changed: 61 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,14 @@ auto makeKinkHistSpecMap(const T& confBinningAnalysis)
214214
KINK_HIST_ANALYSIS_MAP(confBinningAnalysis)};
215215
}
216216

217+
template <typename T>
218+
auto makeKinkMcHistSpecMap(const T& confBinningAnalysis)
219+
{
220+
return std::map<KinkHist, std::vector<framework::AxisSpec>>{
221+
KINK_HIST_ANALYSIS_MAP(confBinningAnalysis)
222+
KINK_HIST_MC_MAP(confBinningAnalysis)};
223+
}
224+
217225
template <typename T1, typename T2>
218226
std::map<KinkHist, std::vector<framework::AxisSpec>> makeKinkQaHistSpecMap(T1 const& confBinningAnalysis, T2 const& confBinningQa)
219227
{
@@ -295,13 +303,13 @@ class KinkHistManager
295303

296304
mChaDauManager.template init<mode>(registry, ChaDauSpecs, absCharge, chaDauCharge, chaDauPdgCodeAbs);
297305
if constexpr (isFlagSet(mode, modes::Mode::kAnalysis)) {
298-
initAnalysis(KinkSpecs);
306+
this->initAnalysis(KinkSpecs);
299307
}
300308
if constexpr (isFlagSet(mode, modes::Mode::kQa)) {
301-
initQa(KinkSpecs);
309+
this->initQa(KinkSpecs);
302310
}
303311
if constexpr (isFlagSet(mode, modes::Mode::kMc)) {
304-
initMc(KinkSpecs);
312+
this->initMc(KinkSpecs);
305313
}
306314
}
307315

@@ -344,13 +352,13 @@ class KinkHistManager
344352

345353
mChaDauManager.template init<mode>(registry, ChaDauSpecs, absCharge, chaDauCharge, chaDauPdgCodeAbs, ConfChaDauBinningQa);
346354
if constexpr (isFlagSet(mode, modes::Mode::kAnalysis)) {
347-
initAnalysis(KinkSpecs);
355+
this->initAnalysis(KinkSpecs);
348356
}
349357
if constexpr (isFlagSet(mode, modes::Mode::kQa)) {
350-
initQa(KinkSpecs);
358+
this->initQa(KinkSpecs);
351359
}
352360
if constexpr (isFlagSet(mode, modes::Mode::kMc)) {
353-
initMc(KinkSpecs);
361+
this->initMc(KinkSpecs);
354362
}
355363
}
356364

@@ -362,10 +370,10 @@ class KinkHistManager
362370
auto chaDaughter = tracks.rawIteratorAt(kinkCandidate.chaDauId() - tracks.offset());
363371
mChaDauManager.template fill<mode>(chaDaughter, tracks);
364372
if constexpr (isFlagSet(mode, modes::Mode::kAnalysis)) {
365-
fillAnalysis(kinkCandidate);
373+
this->fillAnalysis(kinkCandidate);
366374
}
367375
if constexpr (isFlagSet(mode, modes::Mode::kQa)) {
368-
fillQa(kinkCandidate);
376+
this->fillQa(kinkCandidate);
369377
}
370378
}
371379

@@ -375,13 +383,13 @@ class KinkHistManager
375383
auto chaDaughter = tracks.rawIteratorAt(kinkCandidate.chaDauId() - tracks.offset());
376384
mChaDauManager.template fill<mode>(chaDaughter, tracks, mcParticles, mcMothers, mcPartonicMothers);
377385
if constexpr (modes::isFlagSet(mode, modes::Mode::kAnalysis)) {
378-
fillAnalysis(kinkCandidate);
386+
this->fillAnalysis(kinkCandidate);
379387
}
380388
if constexpr (modes::isFlagSet(mode, modes::Mode::kQa)) {
381-
fillQa(kinkCandidate);
389+
this->fillQa(kinkCandidate);
382390
}
383391
if constexpr (modes::isFlagSet(mode, modes::Mode::kMc)) {
384-
fillMc(kinkCandidate, mcParticles, mcMothers, mcPartonicMothers);
392+
this->template fillMc<mode>(kinkCandidate, mcParticles, mcMothers, mcPartonicMothers);
385393
}
386394
}
387395

@@ -513,15 +521,17 @@ class KinkHistManager
513521
}
514522
}
515523

516-
template <typename T1, typename T2, typename T3, typename T4>
524+
template <modes::Mode mode, typename T1, typename T2, typename T3, typename T4>
517525
void fillMc(T1 const& kinkCandidate, T2 const& /*mcParticles*/, T3 const& /*mcMothers*/, T4 const& /*mcPartonicMothers*/)
518526
{
519527
// No MC Particle
520528
if (!kinkCandidate.has_fMcParticle()) {
521529
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kPdg, HistTable)), 0);
522530
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kOrigin, HistTable)), static_cast<float>(modes::McOrigin::kNoMcParticle));
523-
if (mPlotOrigins) {
524-
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kNoMcParticle, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
531+
if constexpr (modes::isFlagSet(mode, modes::Mode::kQa)) {
532+
if (mPlotOrigins) {
533+
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kNoMcParticle, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
534+
}
525535
}
526536
return;
527537
}
@@ -559,43 +569,44 @@ class KinkHistManager
559569
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kPdgPartonicMother, HistTable)), 0);
560570
}
561571

562-
// Plot origins
563-
if (mPlotOrigins) {
564-
// check first if particle is missidentified
565-
if (isMissidentified) {
566-
// if it is, we fill it as such
567-
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kMissidentified, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
568-
} else {
569-
// if not, we fill it acccoridng to its origin
570-
switch (static_cast<modes::McOrigin>(mcParticle.origin())) {
571-
case modes::McOrigin::kPhysicalPrimary:
572-
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kPrimary, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
573-
break;
574-
case modes::McOrigin::kFromWrongCollision:
575-
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kFromWrongCollision, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
576-
break;
577-
case modes::McOrigin::kFromMaterial:
578-
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kFromMaterial, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
579-
break;
580-
case modes::McOrigin::kFromSecondaryDecay:
581-
if (kinkCandidate.has_fMcMother()) {
582-
auto mother = kinkCandidate.template fMcMother_as<T3>();
583-
int motherPdgCode = std::abs(mother.pdgCode());
584-
// Switch on PDG of the mother
585-
if (mPlotNSecondaries >= histmanager::kSecondaryPlotLevel1 && motherPdgCode == mPdgCodesSecondaryMother[0]) {
586-
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kSecondary1, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
587-
} else if (mPlotNSecondaries >= histmanager::kSecondaryPlotLevel2 && motherPdgCode == mPdgCodesSecondaryMother[1]) {
588-
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kSecondary2, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
589-
} else if (mPlotNSecondaries >= histmanager::kSecondaryPlotLevel3 && motherPdgCode == mPdgCodesSecondaryMother[2]) {
590-
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kSecondary3, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
591-
} else {
592-
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kSecondaryOther, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
572+
if constexpr (modes::isFlagSet(mode, modes::Mode::kQa)) {
573+
if (mPlotOrigins) {
574+
// check first if particle is missidentified
575+
if (isMissidentified) {
576+
// if it is, we fill it as such
577+
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kMissidentified, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
578+
} else {
579+
// if not, we fill it acccoridng to its origin
580+
switch (static_cast<modes::McOrigin>(mcParticle.origin())) {
581+
case modes::McOrigin::kPhysicalPrimary:
582+
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kPrimary, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
583+
break;
584+
case modes::McOrigin::kFromWrongCollision:
585+
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kFromWrongCollision, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
586+
break;
587+
case modes::McOrigin::kFromMaterial:
588+
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kFromMaterial, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
589+
break;
590+
case modes::McOrigin::kFromSecondaryDecay:
591+
if (kinkCandidate.has_fMcMother()) {
592+
auto mother = kinkCandidate.template fMcMother_as<T3>();
593+
int motherPdgCode = std::abs(mother.pdgCode());
594+
// Switch on PDG of the mother
595+
if (mPlotNSecondaries >= histmanager::kSecondaryPlotLevel1 && motherPdgCode == mPdgCodesSecondaryMother[0]) {
596+
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kSecondary1, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
597+
} else if (mPlotNSecondaries >= histmanager::kSecondaryPlotLevel2 && motherPdgCode == mPdgCodesSecondaryMother[1]) {
598+
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kSecondary2, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
599+
} else if (mPlotNSecondaries >= histmanager::kSecondaryPlotLevel3 && motherPdgCode == mPdgCodesSecondaryMother[2]) {
600+
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kSecondary3, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
601+
} else {
602+
mHistogramRegistry->fill(HIST(kinkPrefix) + HIST(McDir) + HIST(getHistName(kSecondaryOther, HistTable)), kinkCandidate.pt(), kinkCandidate.kinkAngle());
603+
}
593604
}
594-
}
595-
break;
596-
default:
597-
LOG(warn) << "Encounted partilce with unknown origin!";
598-
break;
605+
break;
606+
default:
607+
LOG(warn) << "Encounted partilce with unknown origin!";
608+
break;
609+
}
599610
}
600611
}
601612
}

0 commit comments

Comments
 (0)