@@ -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);
0 commit comments