@@ -44,18 +44,35 @@ enum CharmHadronHist {
4444 kMass ,
4545 kSign ,
4646 kPtVsMass ,
47+ kPtVsEta ,
48+ kPtVsPhi ,
49+ kPhiVsEta ,
50+ kMassD0 ,
51+ kMassD0bar ,
52+ kMlBkg ,
53+ kMlPrompt ,
54+ kMlNonPrompt ,
55+ kCpa ,
56+ kCpaXY ,
57+ kDecayLength ,
58+ kDecayLengthXY ,
59+ kImpactParameterProduct ,
60+ kCosThetaStar ,
4761
4862 kCharmHadronHistLast
4963};
5064
5165// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
52- #define CHARMHADRON_DEFAULT_BINNING (defaultMassMin, defaultMassMax ) \
53- o2::framework::ConfigurableAxis pt{" pt" , {{600 , 0 , 6 }}, " Pt" }; \
54- o2::framework::ConfigurableAxis eta{" eta" , {{300 , -1.5 , 1.5 }}, " Eta" }; \
55- o2::framework::ConfigurableAxis phi{" phi" , {{720 , 0 , 1 .f * o2::constants::math::TwoPI}}, " Phi" }; \
56- o2::framework::ConfigurableAxis mass{" mass" , {{200 , (defaultMassMin), (defaultMassMax)}}, " Mass" }; \
57- o2::framework::ConfigurableAxis sign{" sign" , {{3 , -1.5 , 1.5 }}, " Sign" }; \
58- o2::framework::ConfigurableAxis charmHadrons{" charmHadrons" , {{8001 , -4000.5 , 4000.5 }}, " MC ONLY: CharmHadrons codes of reconstructed D0s" };
66+ #define CHARMHADRON_DEFAULT_BINNING (defaultMassMin, defaultMassMax ) \
67+ o2::framework::ConfigurableAxis pt{" pt" , {{600 , 0 , 6 }}, " Pt" }; \
68+ o2::framework::ConfigurableAxis eta{" eta" , {{300 , -1.5 , 1.5 }}, " Eta" }; \
69+ o2::framework::ConfigurableAxis phi{" phi" , {{720 , 0 , 1 .f * o2::constants::math::TwoPI}}, " Phi" }; \
70+ o2::framework::ConfigurableAxis mass{" mass" , {{200 , (defaultMassMin), (defaultMassMax)}}, " Mass" }; \
71+ o2::framework::ConfigurableAxis sign{" sign" , {{3 , -1.5 , 1.5 }}, " Sign" }; \
72+ o2::framework::ConfigurableAxis charmHadrons{" charmHadrons" , {{8001 , -4000.5 , 4000.5 }}, " MC ONLY: CharmHadrons codes of reconstructed D0s" }; \
73+ o2::framework::ConfigurableAxis pt2d{" pt2d" , {{240 , 0 , 6 }}, " Pt for 2D QA" }; \
74+ o2::framework::ConfigurableAxis eta2d{" eta2d" , {{200 , -1.5 , 1.5 }}, " Eta for 2D QA" }; \
75+ o2::framework::ConfigurableAxis phi2d{" phi2d" , {{200 , 0 , 1 .f * o2::constants::math::TwoPI}}, " Phi for 2D QA" };
5976
6077template <auto & Prefix>
6178struct ConfD0Binning : o2::framework::ConfigurableGroup {
@@ -68,6 +85,21 @@ struct ConfD0Binning : o2::framework::ConfigurableGroup {
6885constexpr const char PrefixD0Binning1[] = " D0Binning1" ;
6986using ConfD0Binning1 = ConfD0Binning<PrefixD0Binning1>;
7087
88+ template <auto & Prefix>
89+ struct ConfD0QaBinning : o2::framework::ConfigurableGroup {
90+ std::string prefix = Prefix;
91+ o2::framework::Configurable<bool > plotTopology{" plotTopology" , true , " Generate topological QA plots (cpa, decayLength, impactParameterProduct, cosThetaStar)" };
92+ o2::framework::ConfigurableAxis massD0{" massD0" , {{200 , 1.7 , 2.0 }}, " Mass for D0 (Kpi) hypothesis" };
93+ o2::framework::ConfigurableAxis massD0bar{" massD0bar" , {{200 , 1.7 , 2.0 }}, " Mass for D0bar (piK) hypothesis" };
94+ o2::framework::ConfigurableAxis mlScore{" mlScore" , {{100 , 0 .f , 1 .f }}, " BDT ML score (bkg/prompt/non-prompt)" };
95+ o2::framework::ConfigurableAxis cpa{" cpa" , {{100 , 0 .9f , 1 .f }}, " Cosine of pointing angle" };
96+ o2::framework::ConfigurableAxis decayLength{" decayLength" , {{200 , 0 .f , 0 .2f }}, " Decay length (cm)" };
97+ o2::framework::ConfigurableAxis impactParameterProduct{" impactParameterProduct" , {{200 , -0 .001f , 0 .001f }}, " Product of daughter impact parameters (cm^2)" };
98+ o2::framework::ConfigurableAxis cosThetaStar{" cosThetaStar" , {{100 , -1 .f , 1 .f }}, " Cosine of decay angle in D0 rest frame" };
99+ };
100+
101+ constexpr const char PrefixD0QaBinning1[] = " D0QaBinning1" ;
102+ using ConfD0QaBinning1 = ConfD0QaBinning<PrefixD0QaBinning1>;
71103
72104// must be in sync with enum CharmHadronHist
73105// the enum gives the correct index in the array
@@ -77,17 +109,35 @@ constexpr std::array<histmanager::HistInfo<CharmHadronHist>, kCharmHadronHistLas
77109 {kPhi , o2::framework::HistType::kTH1F , " hPhi" , " Azimuthal angle; #varphi; Entries" },
78110 {kMass , o2::framework::HistType::kTH1F , " hMass" , " Invariant Mass; m_{Inv} (GeV/#it{c}^{2}); Entries" },
79111 {kSign , o2::framework::HistType::kTH1F , " hSign" , " Sign (-1 -> D0bar, +1 -> D0); sign; Entries" },
80- {kPtVsMass , o2::framework::HistType::kTH2F , " hPtVsMass" , " Transverse momentum vs invariant mass; p_{T} (GeV/#it{c}); m_{Inv} (GeV/#it{c}^{2})" }},
112+ {kPtVsMass , o2::framework::HistType::kTH2F , " hPtVsMass" , " Transverse momentum vs invariant mass; p_{T} (GeV/#it{c}); m_{Inv} (GeV/#it{c}^{2})" },
113+ {kPtVsEta , o2::framework::HistType::kTH2F , " hPtVsEta" , " p_{T} vs #eta; p_{T} (GeV/#it{c}); #eta" },
114+ {kPtVsPhi , o2::framework::HistType::kTH2F , " hPtVsPhi" , " p_{T} vs #varphi; p_{T} (GeV/#it{c}); #varphi" },
115+ {kPhiVsEta , o2::framework::HistType::kTH2F , " hPhiVsEta" , " #varphi vs #eta; #varphi; #eta" },
116+ {kMassD0 , o2::framework::HistType::kTH1F , " hMassD0" , " D0 (K#pi) mass; m_{K#pi} (GeV/#it{c}^{2}); Entries" },
117+ {kMassD0bar , o2::framework::HistType::kTH1F , " hMassD0bar" , " #bar{D0} (#piK) mass; m_{#piK} (GeV/#it{c}^{2}); Entries" },
118+ {kMlBkg , o2::framework::HistType::kTH1F , " hMlBkg" , " BDT background score; ML score (bkg); Entries" },
119+ {kMlPrompt , o2::framework::HistType::kTH1F , " hMlPrompt" , " BDT prompt score; ML score (prompt); Entries" },
120+ {kMlNonPrompt , o2::framework::HistType::kTH1F , " hMlNonPrompt" , " BDT non-prompt score; ML score (non-prompt); Entries" },
121+ {kCpa , o2::framework::HistType::kTH1F , " hCpa" , " Cosine of pointing angle; cos(#alpha); Entries" },
122+ {kCpaXY , o2::framework::HistType::kTH1F , " hCpaXY" , " Cosine of pointing angle (XY); cos(#alpha)_{XY}; Entries" },
123+ {kDecayLength , o2::framework::HistType::kTH1F , " hDecayLength" , " Decay length; L (cm); Entries" },
124+ {kDecayLengthXY , o2::framework::HistType::kTH1F , " hDecayLengthXY" , " Decay length (XY); L_{XY} (cm); Entries" },
125+ {kImpactParameterProduct , o2::framework::HistType::kTH1F , " hImpactParameterProduct" , " Product of daughter impact parameters; d_{0}^{K} #times d_{0}^{#pi} (cm^{2}); Entries" },
126+ {kCosThetaStar , o2::framework::HistType::kTH1F , " hCosThetaStar" , " Cosine of decay angle in D0 rest frame; cos(#theta*); Entries" }},
81127};
82128
83129// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
84- #define CHARMHADRON_HIST_ANALYSIS_MAP (conf ) \
85- {kPt , {(conf).pt }}, \
86- {kEta , {(conf).eta }}, \
87- {kPhi , {(conf).phi }}, \
88- {kMass , {(conf).mass }}, \
89- {kSign , {(conf).sign }}, \
90- {kPtVsMass , {(conf).pt , (conf).mass }},
130+ #define CHARMHADRON_HIST_ANALYSIS_MAP (conf ) \
131+ {kPt , {(conf).pt }}, \
132+ {kEta , {(conf).eta }}, \
133+ {kPhi , {(conf).phi }}, \
134+ {kMass , {(conf).mass }}, \
135+ {kSign , {(conf).sign }}, \
136+ {kPtVsMass , {(conf).pt , (conf).mass }}, \
137+ {kPtVsEta , {(conf).pt2d , (conf).eta2d }}, \
138+ {kPtVsPhi , {(conf).pt2d , (conf).phi2d }}, \
139+ {kPhiVsEta , {(conf).phi2d , (conf).eta2d }},
140+
91141
92142template <typename T>
93143auto makeD0HistSpecMap (const T& confBinningAnalysis)
@@ -96,13 +146,37 @@ auto makeD0HistSpecMap(const T& confBinningAnalysis)
96146 CHARMHADRON_HIST_ANALYSIS_MAP (confBinningAnalysis)};
97147}
98148
149+
150+ // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
151+ #define CHARMHADRON_HIST_QA_MAP (conf ) \
152+ {kMassD0 , {(conf).massD0 }}, \
153+ {kMassD0bar , {(conf).massD0bar }}, \
154+ {kMlBkg , {(conf).mlScore }}, \
155+ {kMlPrompt , {(conf).mlScore }}, \
156+ {kMlNonPrompt , {(conf).mlScore }}, \
157+ {kCpa , {(conf).cpa }}, \
158+ {kCpaXY , {(conf).cpa }}, \
159+ {kDecayLength , {(conf).decayLength }}, \
160+ {kDecayLengthXY , {(conf).decayLength }}, \
161+ {kImpactParameterProduct , {(conf).impactParameterProduct }}, \
162+ {kCosThetaStar , {(conf).cosThetaStar }},
163+
164+ template <typename T>
165+ auto makeD0QaHistSpecMap (const T& confBinningQa)
166+ {
167+ return std::map<CharmHadronHist, std::vector<o2::framework::AxisSpec>>{
168+ CHARMHADRON_HIST_QA_MAP (confBinningQa)};
169+ }
170+
99171#undef CHARMHADRON_HIST_ANALYSIS_MAP
172+ #undef CHARMHADRON_HIST_QA_MAP
100173
101174// prefixes for the output directories in the histogram registry
102175constexpr char PrefixD01[] = " D01/" ;
103176constexpr char PrefixD02[] = " D02/" ;
104-
177+ constexpr char PrefixD0Qa[] = " D0QA/ " ;
105178constexpr std::string_view AnalysisDir = " Analysis/" ;
179+ constexpr std::string_view QaDir = " QA/" ;
106180
107181// / \class CharmHadronHistManager
108182// / \brief Class for histogramming charm hadron properties
@@ -160,6 +234,58 @@ class CharmHadronHistManager
160234 }
161235 }
162236
237+ // init for analysis and qa
238+ template <modes::Mode mode, typename T1 , typename T2 , typename T3 , typename T4 >
239+ void init (o2::framework::HistogramRegistry* registry,
240+ std::map<CharmHadronHist, std::vector<o2::framework::AxisSpec>> const & CharmHadronSpecs,
241+ std::map<CharmHadronHist, std::vector<o2::framework::AxisSpec>> const & CharmHadronQaSpecs,
242+ T1 const & ConfCharmHadronSelection,
243+ T2 const & ConfCharmHadronQaBinning,
244+ std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const & Prong0Specs,
245+ T3 const & ConfProng0BinningQa,
246+ std::map<trackhistmanager::TrackHist, std::vector<o2::framework::AxisSpec>> const & Prong1Specs,
247+ T4 const & ConfProng1BinningQa)
248+ {
249+ mHistogramRegistry = registry;
250+ mPdgCode = std::abs (ConfCharmHadronSelection.pdgCodeAbs .value );
251+ this ->enableOptionalHistograms (ConfCharmHadronQaBinning);
252+
253+ // in PWGHF the prong charge is fixed by the reconstruction: prong0 is always the positive
254+ // daughter, prong1 the negative one. The D0/D0bar hypothesis only swaps which prong is the
255+ // pion and which is the kaon, not their charge.
256+ int prong0PdgCodeAbs = 0 ;
257+ int prong1PdgCodeAbs = 0 ;
258+ const int absCharge = 1 ;
259+ const int signPlus = 1 ;
260+ const int signMinus = -1 ;
261+
262+ constexpr int pdgD0 = 421 ; // not defined in ROOT's TPDGCode.h
263+ if (mPdgCode == pdgD0) {
264+ if (ConfCharmHadronSelection.sign .value > 0 ) {
265+ // D0 -> pi+ K-
266+ prong0PdgCodeAbs = std::abs (PDG_t::kPiPlus );
267+ prong1PdgCodeAbs = std::abs (PDG_t::kKMinus );
268+ } else {
269+ // D0bar -> K+ pi-
270+ mPdgCode = -1 * mPdgCode ; // switch sign for D0bar
271+ prong0PdgCodeAbs = std::abs (PDG_t::kKPlus );
272+ prong1PdgCodeAbs = std::abs (PDG_t::kPiMinus );
273+ }
274+ } else {
275+ LOG (fatal) << " PDG code for charm hadron has to be D0 (421)" ;
276+ }
277+
278+ mProng0Manager .template init <mode>(registry, Prong0Specs, absCharge, signPlus, prong0PdgCodeAbs, ConfProng0BinningQa);
279+ mProng1Manager .template init <mode>(registry, Prong1Specs, absCharge, signMinus, prong1PdgCodeAbs, ConfProng1BinningQa);
280+
281+ if constexpr (modes::isFlagSet (mode, modes::Mode::kReco )) {
282+ this ->initAnalysis (CharmHadronSpecs);
283+ }
284+ if constexpr (modes::isFlagSet (mode, modes::Mode::kQa )) {
285+ this ->initQa (CharmHadronQaSpecs);
286+ }
287+ }
288+
163289 template <modes::Mode mode, typename T1 , typename T2 >
164290 void fill (T1 const & charmHadronCandidate, T2 const & tracks)
165291 {
@@ -171,9 +297,18 @@ class CharmHadronHistManager
171297 if constexpr (modes::isFlagSet (mode, modes::Mode::kReco )) {
172298 this ->fillAnalysis (charmHadronCandidate);
173299 }
300+ if constexpr (modes::isFlagSet (mode, modes::Mode::kQa )) {
301+ this ->fillQa (charmHadronCandidate);
302+ }
174303 }
175304
176305 private:
306+ template <typename T>
307+ void enableOptionalHistograms (T const & ConfCharmHadronQaBinning)
308+ {
309+ mPlotTopology = ConfCharmHadronQaBinning.plotTopology .value ;
310+ }
311+
177312 void initAnalysis (std::map<CharmHadronHist, std::vector<o2::framework::AxisSpec>> const & CharmHadronSpecs)
178313 {
179314 std::string analysisDir = std::string (charmHadronPrefix) + std::string (AnalysisDir);
@@ -183,6 +318,9 @@ class CharmHadronHistManager
183318 mHistogramRegistry ->add (analysisDir + getHistNameV2 (kMass , HistTable), getHistDesc (kMass , HistTable), getHistType (kMass , HistTable), {CharmHadronSpecs.at (kMass )});
184319 mHistogramRegistry ->add (analysisDir + getHistNameV2 (kSign , HistTable), getHistDesc (kSign , HistTable), getHistType (kSign , HistTable), {CharmHadronSpecs.at (kSign )});
185320 mHistogramRegistry ->add (analysisDir + getHistNameV2 (kPtVsMass , HistTable), getHistDesc (kPtVsMass , HistTable), getHistType (kPtVsMass , HistTable), {CharmHadronSpecs.at (kPtVsMass )});
321+ mHistogramRegistry ->add (analysisDir + getHistNameV2 (kPtVsEta , HistTable), getHistDesc (kPtVsEta , HistTable), getHistType (kPtVsEta , HistTable), {CharmHadronSpecs.at (kPtVsEta )});
322+ mHistogramRegistry ->add (analysisDir + getHistNameV2 (kPtVsPhi , HistTable), getHistDesc (kPtVsPhi , HistTable), getHistType (kPtVsPhi , HistTable), {CharmHadronSpecs.at (kPtVsPhi )});
323+ mHistogramRegistry ->add (analysisDir + getHistNameV2 (kPhiVsEta , HistTable), getHistDesc (kPhiVsEta , HistTable), getHistType (kPhiVsEta , HistTable), {CharmHadronSpecs.at (kPhiVsEta )});
186324 }
187325
188326 template <typename T>
@@ -194,10 +332,67 @@ class CharmHadronHistManager
194332 mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (AnalysisDir) + HIST (getHistName (kMass , HistTable)), charmHadronCandidate.mass ());
195333 mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (AnalysisDir) + HIST (getHistName (kSign , HistTable)), charmHadronCandidate.sign ());
196334 mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (AnalysisDir) + HIST (getHistName (kPtVsMass , HistTable)), charmHadronCandidate.pt (), charmHadronCandidate.mass ());
335+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (AnalysisDir) + HIST (getHistName (kPtVsEta , HistTable)), charmHadronCandidate.pt (), charmHadronCandidate.eta ());
336+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (AnalysisDir) + HIST (getHistName (kPtVsPhi , HistTable)), charmHadronCandidate.pt (), charmHadronCandidate.phi ());
337+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (AnalysisDir) + HIST (getHistName (kPhiVsEta , HistTable)), charmHadronCandidate.phi (), charmHadronCandidate.eta ());
338+ }
339+
340+ void initQa (std::map<CharmHadronHist, std::vector<o2::framework::AxisSpec>> const & CharmHadronQaSpecs)
341+ {
342+ std::string qaDir = std::string (charmHadronPrefix) + std::string (QaDir);
343+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kMassD0 , HistTable), getHistDesc (kMassD0 , HistTable), getHistType (kMassD0 , HistTable), {CharmHadronQaSpecs.at (kMassD0 )});
344+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kMassD0bar , HistTable), getHistDesc (kMassD0bar , HistTable), getHistType (kMassD0bar , HistTable), {CharmHadronQaSpecs.at (kMassD0bar )});
345+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kMlBkg , HistTable), getHistDesc (kMlBkg , HistTable), getHistType (kMlBkg , HistTable), {CharmHadronQaSpecs.at (kMlBkg )});
346+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kMlPrompt , HistTable), getHistDesc (kMlPrompt , HistTable), getHistType (kMlPrompt , HistTable), {CharmHadronQaSpecs.at (kMlPrompt )});
347+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kMlNonPrompt , HistTable), getHistDesc (kMlNonPrompt , HistTable), getHistType (kMlNonPrompt , HistTable), {CharmHadronQaSpecs.at (kMlNonPrompt )});
348+
349+ if (mPlotTopology ) {
350+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kCpa , HistTable), getHistDesc (kCpa , HistTable), getHistType (kCpa , HistTable), {CharmHadronQaSpecs.at (kCpa )});
351+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kCpaXY , HistTable), getHistDesc (kCpaXY , HistTable), getHistType (kCpaXY , HistTable), {CharmHadronQaSpecs.at (kCpaXY )});
352+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kDecayLength , HistTable), getHistDesc (kDecayLength , HistTable), getHistType (kDecayLength , HistTable), {CharmHadronQaSpecs.at (kDecayLength )});
353+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kDecayLengthXY , HistTable), getHistDesc (kDecayLengthXY , HistTable), getHistType (kDecayLengthXY , HistTable), {CharmHadronQaSpecs.at (kDecayLengthXY )});
354+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kImpactParameterProduct , HistTable), getHistDesc (kImpactParameterProduct , HistTable), getHistType (kImpactParameterProduct , HistTable), {CharmHadronQaSpecs.at (kImpactParameterProduct )});
355+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kCosThetaStar , HistTable), getHistDesc (kCosThetaStar , HistTable), getHistType (kCosThetaStar , HistTable), {CharmHadronQaSpecs.at (kCosThetaStar )});
356+ }
357+ }
358+
359+ template <typename T>
360+ void fillQa (T const & charmHadronCandidate)
361+ {
362+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (QaDir) + HIST (getHistName (kMassD0 , HistTable)), charmHadronCandidate.massD0 ());
363+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (QaDir) + HIST (getHistName (kMassD0bar , HistTable)), charmHadronCandidate.massD0bar ());
364+
365+ // BDT scores of the accepted hypothesis: D0 (sign > 0) uses mlProbD0*, D0bar (sign < 0) uses mlProbD0bar*
366+ float mlBkg = 0 .f ;
367+ float mlPrompt = 0 .f ;
368+ float mlNonPrompt = 0 .f ;
369+ if (charmHadronCandidate.sign () > 0 ) {
370+ mlBkg = charmHadronCandidate.mlProbD0Bkg ();
371+ mlPrompt = charmHadronCandidate.mlProbD0Prompt ();
372+ mlNonPrompt = charmHadronCandidate.mlProbD0NonPrompt ();
373+ } else {
374+ mlBkg = charmHadronCandidate.mlProbD0barBkg ();
375+ mlPrompt = charmHadronCandidate.mlProbD0barPrompt ();
376+ mlNonPrompt = charmHadronCandidate.mlProbD0barNonPrompt ();
377+ }
378+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (QaDir) + HIST (getHistName (kMlBkg , HistTable)), mlBkg);
379+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (QaDir) + HIST (getHistName (kMlPrompt , HistTable)), mlPrompt);
380+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (QaDir) + HIST (getHistName (kMlNonPrompt , HistTable)), mlNonPrompt);
381+
382+ // topological variables (same discriminators PWGHF selects on)
383+ if (mPlotTopology ) {
384+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (QaDir) + HIST (getHistName (kCpa , HistTable)), charmHadronCandidate.cpa ());
385+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (QaDir) + HIST (getHistName (kCpaXY , HistTable)), charmHadronCandidate.cpaXY ());
386+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (QaDir) + HIST (getHistName (kDecayLength , HistTable)), charmHadronCandidate.decayLength ());
387+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (QaDir) + HIST (getHistName (kDecayLengthXY , HistTable)), charmHadronCandidate.decayLengthXY ());
388+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (QaDir) + HIST (getHistName (kImpactParameterProduct , HistTable)), charmHadronCandidate.impactParameterProduct ());
389+ mHistogramRegistry ->fill (HIST (charmHadronPrefix) + HIST (QaDir) + HIST (getHistName (kCosThetaStar , HistTable)), charmHadronCandidate.cosThetaStar ());
390+ }
197391 }
198392
199393 o2::framework::HistogramRegistry* mHistogramRegistry = nullptr ;
200394 int mPdgCode = 0 ;
395+ bool mPlotTopology = true ;
201396
202397 trackhistmanager::TrackHistManager<prong0Prefix> mProng0Manager ;
203398 trackhistmanager::TrackHistManager<prong1Prefix> mProng1Manager ;
0 commit comments