Skip to content

Commit 029ea3f

Browse files
committed
[PWGCF] Femto: split the charm hadron hist manager init by prong count
1 parent f7d16dd commit 029ea3f

3 files changed

Lines changed: 88 additions & 38 deletions

File tree

PWGCF/Femto/Core/charmHadronHistManager.h

Lines changed: 80 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -313,30 +313,51 @@ class CharmHadronHistManager
313313
CharmHadronHistManager() = default;
314314
~CharmHadronHistManager() = default;
315315

316-
// init for analysis
316+
// init for analysis, two-prong candidates
317317
template <modes::Mode mode, typename T>
318318
void init(o2::framework::HistogramRegistry* registry,
319319
std::map<CharmHadronHist, std::vector<o2::framework::AxisSpec>> const& CharmHadronSpecs,
320320
T const& ConfCharmHadronSelection,
321-
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& Prong0Specs,
322-
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& Prong1Specs,
323-
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& Prong2Specs)
321+
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& PosDauSpecs,
322+
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& NegDauSpecs)
324323
{
324+
static_assert(!charmhadronbuilder::isThreeProng<charmHadron>(), "Use the three-prong init for 3-prong candidates");
325325
mHistogramRegistry = registry;
326326
mPdgCode = std::abs(ConfCharmHadronSelection.pdgCodeAbs.value);
327327

328328
auto prongPdgCodes = this->resolveProngPdgCodes(ConfCharmHadronSelection.sign.value);
329329

330-
if constexpr (charmhadronbuilder::isThreeProng<charmHadron>()) {
331-
constexpr int protonSign = charmhadronbuilder::isParticle<charmHadron>() ? SignPlus : SignMinus;
332-
constexpr int kaonSign = -protonSign;
333-
mProng0Manager.template init<mode>(registry, Prong0Specs, AbsCharge, protonSign, prongPdgCodes[0]);
334-
mProng1Manager.template init<mode>(registry, Prong1Specs, AbsCharge, kaonSign, prongPdgCodes[1]);
335-
mProng2Manager.template init<mode>(registry, Prong2Specs, AbsCharge, protonSign, prongPdgCodes[2]);
336-
} else {
337-
mProng0Manager.template init<mode>(registry, Prong0Specs, AbsCharge, SignPlus, prongPdgCodes[0]);
338-
mProng1Manager.template init<mode>(registry, Prong1Specs, AbsCharge, SignMinus, prongPdgCodes[1]);
330+
mProng0Manager.template init<mode>(registry, PosDauSpecs, AbsCharge, SignPlus, prongPdgCodes[0]);
331+
mProng1Manager.template init<mode>(registry, NegDauSpecs, AbsCharge, SignMinus, prongPdgCodes[1]);
332+
333+
if constexpr (modes::isFlagSet(mode, modes::Mode::kReco)) {
334+
this->initAnalysis(CharmHadronSpecs);
335+
}
336+
if constexpr (modes::isFlagSet(mode, modes::Mode::kMc)) {
337+
this->initMc(CharmHadronSpecs);
339338
}
339+
}
340+
341+
// init for analysis, three-prong candidates
342+
template <modes::Mode mode, typename T>
343+
void init(o2::framework::HistogramRegistry* registry,
344+
std::map<CharmHadronHist, std::vector<o2::framework::AxisSpec>> const& CharmHadronSpecs,
345+
T const& ConfCharmHadronSelection,
346+
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& ProtonDauSpecs,
347+
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& KaonDauSpecs,
348+
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& PionDauSpecs)
349+
{
350+
static_assert(charmhadronbuilder::isThreeProng<charmHadron>(), "Use the two-prong init for 2-prong candidates");
351+
mHistogramRegistry = registry;
352+
mPdgCode = std::abs(ConfCharmHadronSelection.pdgCodeAbs.value);
353+
354+
auto prongPdgCodes = this->resolveProngPdgCodes(ConfCharmHadronSelection.sign.value);
355+
356+
constexpr int ProtonSign = charmhadronbuilder::isParticle<charmHadron>() ? SignPlus : SignMinus;
357+
constexpr int KaonSign = -ProtonSign;
358+
mProng0Manager.template init<mode>(registry, ProtonDauSpecs, AbsCharge, ProtonSign, prongPdgCodes[0]);
359+
mProng1Manager.template init<mode>(registry, KaonDauSpecs, AbsCharge, KaonSign, prongPdgCodes[1]);
360+
mProng2Manager.template init<mode>(registry, PionDauSpecs, AbsCharge, ProtonSign, prongPdgCodes[2]);
340361

341362
if constexpr (modes::isFlagSet(mode, modes::Mode::kReco)) {
342363
this->initAnalysis(CharmHadronSpecs);
@@ -346,36 +367,65 @@ class CharmHadronHistManager
346367
}
347368
}
348369

349-
// init for analysis and qa
350-
template <modes::Mode mode, typename T1, typename T2, typename T3, typename T4, typename T5>
370+
// init for analysis and qa, two-prong candidates
371+
template <modes::Mode mode, typename T1, typename T2, typename T3, typename T4>
351372
void init(o2::framework::HistogramRegistry* registry,
352373
std::map<CharmHadronHist, std::vector<o2::framework::AxisSpec>> const& CharmHadronSpecs,
353374
std::map<CharmHadronHist, std::vector<o2::framework::AxisSpec>> const& CharmHadronQaSpecs,
354375
T1 const& ConfCharmHadronSelection,
355376
T2 const& ConfCharmHadronQaBinning,
356-
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& Prong0Specs,
357-
T3 const& ConfProng0BinningQa,
358-
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& Prong1Specs,
359-
T4 const& ConfProng1BinningQa,
360-
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& Prong2Specs,
361-
T5 const& ConfProng2BinningQa)
377+
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& PosDauSpecs,
378+
T3 const& ConfPosDauBinningQa,
379+
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& NegDauSpecs,
380+
T4 const& ConfNegDauBinningQa)
362381
{
382+
static_assert(!charmhadronbuilder::isThreeProng<charmHadron>(), "Use the three-prong init for 3-prong candidates");
363383
mHistogramRegistry = registry;
364384
mPdgCode = std::abs(ConfCharmHadronSelection.pdgCodeAbs.value);
365385
this->enableOptionalHistograms(ConfCharmHadronQaBinning);
366386

367387
auto prongPdgCodes = this->resolveProngPdgCodes(ConfCharmHadronSelection.sign.value);
368388

369-
if constexpr (charmhadronbuilder::isThreeProng<charmHadron>()) {
370-
constexpr int ProtonSign = charmhadronbuilder::isParticle<charmHadron>() ? SignPlus : SignMinus;
371-
constexpr int KaonSign = -ProtonSign;
372-
mProng0Manager.template init<mode>(registry, Prong0Specs, AbsCharge, ProtonSign, prongPdgCodes[0], ConfProng0BinningQa);
373-
mProng1Manager.template init<mode>(registry, Prong1Specs, AbsCharge, KaonSign, prongPdgCodes[1], ConfProng1BinningQa);
374-
mProng2Manager.template init<mode>(registry, Prong2Specs, AbsCharge, ProtonSign, prongPdgCodes[2], ConfProng2BinningQa);
375-
} else {
376-
mProng0Manager.template init<mode>(registry, Prong0Specs, AbsCharge, SignPlus, prongPdgCodes[0], ConfProng0BinningQa);
377-
mProng1Manager.template init<mode>(registry, Prong1Specs, AbsCharge, SignMinus, prongPdgCodes[1], ConfProng1BinningQa);
389+
mProng0Manager.template init<mode>(registry, PosDauSpecs, AbsCharge, SignPlus, prongPdgCodes[0], ConfPosDauBinningQa);
390+
mProng1Manager.template init<mode>(registry, NegDauSpecs, AbsCharge, SignMinus, prongPdgCodes[1], ConfNegDauBinningQa);
391+
392+
if constexpr (modes::isFlagSet(mode, modes::Mode::kReco)) {
393+
this->initAnalysis(CharmHadronSpecs);
394+
}
395+
if constexpr (modes::isFlagSet(mode, modes::Mode::kQa)) {
396+
this->initQa(CharmHadronQaSpecs);
397+
}
398+
if constexpr (modes::isFlagSet(mode, modes::Mode::kMc)) {
399+
this->initMc(CharmHadronSpecs);
378400
}
401+
}
402+
403+
// init for analysis and qa, three-prong candidates
404+
template <modes::Mode mode, typename T1, typename T2, typename T3, typename T4, typename T5>
405+
void init(o2::framework::HistogramRegistry* registry,
406+
std::map<CharmHadronHist, std::vector<o2::framework::AxisSpec>> const& CharmHadronSpecs,
407+
std::map<CharmHadronHist, std::vector<o2::framework::AxisSpec>> const& CharmHadronQaSpecs,
408+
T1 const& ConfCharmHadronSelection,
409+
T2 const& ConfCharmHadronQaBinning,
410+
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& ProtonDauSpecs,
411+
T3 const& ConfProtonDauBinningQa,
412+
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& KaonDauSpecs,
413+
T4 const& ConfKaonDauBinningQa,
414+
std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const& PionDauSpecs,
415+
T5 const& ConfPionDauBinningQa)
416+
{
417+
static_assert(charmhadronbuilder::isThreeProng<charmHadron>(), "Use the two-prong init for 2-prong candidates");
418+
mHistogramRegistry = registry;
419+
mPdgCode = std::abs(ConfCharmHadronSelection.pdgCodeAbs.value);
420+
this->enableOptionalHistograms(ConfCharmHadronQaBinning);
421+
422+
auto prongPdgCodes = this->resolveProngPdgCodes(ConfCharmHadronSelection.sign.value);
423+
424+
constexpr int ProtonSign = charmhadronbuilder::isParticle<charmHadron>() ? SignPlus : SignMinus;
425+
constexpr int KaonSign = -ProtonSign;
426+
mProng0Manager.template init<mode>(registry, ProtonDauSpecs, AbsCharge, ProtonSign, prongPdgCodes[0], ConfProtonDauBinningQa);
427+
mProng1Manager.template init<mode>(registry, KaonDauSpecs, AbsCharge, KaonSign, prongPdgCodes[1], ConfKaonDauBinningQa);
428+
mProng2Manager.template init<mode>(registry, PionDauSpecs, AbsCharge, ProtonSign, prongPdgCodes[2], ConfPionDauBinningQa);
379429

380430
if constexpr (modes::isFlagSet(mode, modes::Mode::kReco)) {
381431
this->initAnalysis(CharmHadronSpecs);

PWGCF/Femto/Core/pairBuilder.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ class PairD0D0Builder
653653
mD0Cleaner1.init(confD0Cleaner1);
654654
mD0Cleaner2.init(confD0Cleaner2);
655655

656-
mD0HistManager1.template init<modeSe>(registry, D0HistSpec1, confD0Selection1, PosDauHistSpec1, NegDauHistSpec1, NegDauHistSpec1);
656+
mD0HistManager1.template init<modeSe>(registry, D0HistSpec1, confD0Selection1, PosDauHistSpec1, NegDauHistSpec1);
657657

658658
auto prongPdgCodes = [](int sign) -> std::pair<int, int> {
659659
if (sign > 0) {
@@ -672,7 +672,7 @@ class PairD0D0Builder
672672
mPairHistManagerMe.setCharge(1, 1);
673673
mCprMe.init(registry, cprHistSpecPos, cprHistSpecNeg, confCprPos, confCprNeg);
674674
} else {
675-
mD0HistManager2.template init<modeSe>(registry, D0HistSpec2, confD0Selection2, PosDauHistSpec2, NegDauHistSpec2, NegDauHistSpec2);
675+
mD0HistManager2.template init<modeSe>(registry, D0HistSpec2, confD0Selection2, PosDauHistSpec2, NegDauHistSpec2);
676676
auto [posDauPdg2, negDauPdg2] = prongPdgCodes(confD0Selection2.sign.value);
677677

678678
mPairHistManagerSe.setMass(confD0Selection1.pdgCodeAbs.value, posDauPdg1, negDauPdg1, confD0Selection2.pdgCodeAbs.value, posDauPdg2, negDauPdg2);
@@ -826,8 +826,8 @@ class PairD0D0Builder
826826

827827
private:
828828
colhistmanager::CollisionHistManager mColHistManager;
829-
charmhadronhistmanager::CharmHadronHistManager<prefixD01, prefixPosDau1, prefixNegDau1, prefixNegDau1, charmHadronType1> mD0HistManager1;
830-
charmhadronhistmanager::CharmHadronHistManager<prefixD02, prefixPosDau2, prefixNegDau2, prefixNegDau2, charmHadronType2> mD0HistManager2;
829+
charmhadronhistmanager::CharmHadronHistManager<prefixD01, prefixPosDau1, prefixNegDau1, prefixNegDau1, charmHadronType1> mD0HistManager1; // the third prong prefix is unused for 2-prong candidates
830+
charmhadronhistmanager::CharmHadronHistManager<prefixD02, prefixPosDau2, prefixNegDau2, prefixNegDau2, charmHadronType2> mD0HistManager2; // the third prong prefix is unused for 2-prong candidates
831831
particlecleaner::ParticleCleaner mD0Cleaner1;
832832
particlecleaner::ParticleCleaner mD0Cleaner2;
833833
pairhistmanager::PairHistManager<prefixSe, modes::Particle::kCharmHadron, modes::Particle::kCharmHadron> mPairHistManagerSe;
@@ -898,7 +898,7 @@ class PairTrackD0Builder
898898
mColHistManager.template init<modeSe>(registry, colHistSpec, confCollisionBinning);
899899

900900
mTrackHistManager.template init<modeSe>(registry, trackHistSpec, confTrackSelection);
901-
mD0HistManager.template init<modeSe>(registry, d0HistSpec, confD0Selection, posDauHistSpec, negDauHistSpec, negDauHistSpec);
901+
mD0HistManager.template init<modeSe>(registry, d0HistSpec, confD0Selection, posDauHistSpec, negDauHistSpec);
902902

903903
mTrackCleaner.init(confTrackCleaner);
904904
mD0Cleaner.init(confD0Cleaner);
@@ -997,7 +997,7 @@ class PairTrackD0Builder
997997
private:
998998
colhistmanager::CollisionHistManager mColHistManager;
999999
trackhistmanager::TrackHistManager<prefixTrack> mTrackHistManager;
1000-
charmhadronhistmanager::CharmHadronHistManager<prefixD0, prefixPosDau, prefixNegDau, prefixNegDau, charmHadronType> mD0HistManager;
1000+
charmhadronhistmanager::CharmHadronHistManager<prefixD0, prefixPosDau, prefixNegDau, prefixNegDau, charmHadronType> mD0HistManager; // the third prong prefix is unused for 2-prong candidates
10011001
particlecleaner::ParticleCleaner mTrackCleaner;
10021002
particlecleaner::ParticleCleaner mD0Cleaner;
10031003
pairhistmanager::PairHistManager<prefixSe, modes::Particle::kTrack, modes::Particle::kCharmHadron> mPairHistManagerSe;

PWGCF/Femto/Tasks/femtoCharmHadronQa.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ struct FemtoCharmHadronQa {
154154
negDaughterHistSpec = trackhistmanager::makeTrackQaHistSpecMap(confD01NegDaughterBinning, confD01NegDaughterQaBinning);
155155
d0HistSpec = charmhadronhistmanager::makeCharmHadronHistSpecMap(confD0Binning);
156156
d0QaHistSpec = charmhadronhistmanager::makeD0QaHistSpecMap(confD0QaBinning);
157-
d0HistManager.init<modes::Mode::kReco_Qa>(&hRegistry, d0HistSpec, d0QaHistSpec, confD0Selection, confD0QaBinning, posDaughterHistSpec, confD01PosDaughterQaBinning, negDaughterHistSpec, confD01NegDaughterQaBinning, negDaughterHistSpec, confD01NegDaughterQaBinning);
157+
d0HistManager.init<modes::Mode::kReco_Qa>(&hRegistry, d0HistSpec, d0QaHistSpec, confD0Selection, confD0QaBinning, posDaughterHistSpec, confD01PosDaughterQaBinning, negDaughterHistSpec, confD01NegDaughterQaBinning);
158158
}
159159
if (doprocessLc) {
160160
protonHistSpec = trackhistmanager::makeTrackQaHistSpecMap(confLc1ProtonDaughterBinning, confLc1ProtonDaughterQaBinning);
@@ -173,7 +173,7 @@ struct FemtoCharmHadronQa {
173173
negDaughterHistSpec = trackhistmanager::makeTrackMcQaHistSpecMap(confD01NegDaughterBinning, confD01NegDaughterQaBinning);
174174
d0HistSpec = charmhadronhistmanager::makeD0McQaHistSpecMap(confD0Binning, confD0QaBinning);
175175
d0QaHistSpec = charmhadronhistmanager::makeD0QaHistSpecMap(confD0QaBinning);
176-
d0HistManager.init<modes::Mode::kReco_Qa_Mc>(&hRegistry, d0HistSpec, d0QaHistSpec, confD0Selection, confD0QaBinning, posDaughterHistSpec, confD01PosDaughterQaBinning, negDaughterHistSpec, confD01NegDaughterQaBinning, negDaughterHistSpec, confD01NegDaughterQaBinning);
176+
d0HistManager.init<modes::Mode::kReco_Qa_Mc>(&hRegistry, d0HistSpec, d0QaHistSpec, confD0Selection, confD0QaBinning, posDaughterHistSpec, confD01PosDaughterQaBinning, negDaughterHistSpec, confD01NegDaughterQaBinning);
177177
}
178178
if (doprocessLcMc) {
179179
protonHistSpec = trackhistmanager::makeTrackMcQaHistSpecMap(confLc1ProtonDaughterBinning, confLc1ProtonDaughterQaBinning);

0 commit comments

Comments
 (0)