@@ -55,7 +55,6 @@ using MultiCharmTracksFull = soa::Join<aod::MCharmCores, aod::MCharmIndices, aod
5555struct Alice3Multicharm {
5656 HistogramRegistry histos{" histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
5757
58- std::map<int , int > pdgToBin;
5958 o2::ml::OnnxModel bdtMCharm;
6059 std::map<std::string, std::string> metadata;
6160 o2::ccdb::CcdbApi ccdbApi;
@@ -83,6 +82,7 @@ struct Alice3Multicharm {
8382 ConfigurableAxis axisDecayLength{" axisDecayLength" , {2000 , 0 , 2000 }, " Decay lenght (#mum)" };
8483 ConfigurableAxis axisDcaDaughters{" axisDcaDaughters" , {200 , 0 , 100 }, " DCA (mum)" };
8584 ConfigurableAxis axisBDTScore{" axisBDTScore" , {100 , 0 , 1 }, " BDT Score" };
85+ ConfigurableAxis axisBDTScoreFine{" axisBDTScoreFine" , {1000 , 0 , 1 }, " BDT Score for 1D histogram" };
8686 ConfigurableAxis axisPt{" axisPt" , {VARIABLE_WIDTH, 0 .0f , 0 .1f , 0 .2f , 0 .3f , 0 .4f , 0 .5f , 0 .6f , 0 .7f , 0 .8f , 0 .9f , 1 .0f , 1 .1f , 1 .2f , 1 .3f , 1 .4f , 1 .5f , 1 .6f , 1 .7f , 1 .8f , 1 .9f , 2 .0f , 2 .2f , 2 .4f , 2 .6f , 2 .8f , 3 .0f , 3 .2f , 3 .4f , 3 .6f , 3 .8f , 4 .0f , 4 .4f , 4 .8f , 5 .2f , 5 .6f , 6 .0f , 6 .5f , 7 .0f , 7 .5f , 8 .0f , 9 .0f , 10 .0f , 11 .0f , 12 .0f , 13 .0f , 14 .0f , 15 .0f , 17 .0f , 19 .0f , 21 .0f , 23 .0f , 25 .0f , 30 .0f , 35 .0f , 40 .0f , 50 .0f }, " pt axis for QA histograms" };
8787
8888 Configurable<float > xiMinDCAxy{" xiMinDCAxy" , -1 , " [0] in |DCAxy| > [0]+[1]/pT" };
@@ -117,6 +117,29 @@ struct Alice3Multicharm {
117117
118118 void init (InitContext&)
119119 {
120+ histos.add (" CandidateQA/hDCAXicDaughters" , " hDCAXicDaughters; DCA between Xic daughters (#mum)" , kTH1D , {axisDcaDaughters});
121+ histos.add (" CandidateQA/hDCAXiccDaughters" , " hDCAXiccDaughters; DCA between Xicc daughters (#mum)" , kTH1D , {axisDcaDaughters});
122+ histos.add (" CandidateQA/hDCAxyXi" , " hDCAxyXi; Xi DCAxy to PV (#mum)" , kTH1D , {axisDCA});
123+ histos.add (" CandidateQA/hDCAzXi" , " hDCAzXi; Xi DCAz to PV (#mum)" , kTH1D , {axisDCA});
124+ histos.add (" CandidateQA/hDCAxyXic" , " hDCAxyXic; Xic DCAxy to PV (#mum)" , kTH1D , {axisDCA});
125+ histos.add (" CandidateQA/hDCAzXic" , " hDCAzXic; Xic DCAz to PV (#mum)" , kTH1D , {axisDCA});
126+ histos.add (" CandidateQA/hDCAxyXicc" , " hDCAxyXicc; Xicc DCAxy to PV (#mum)" , kTH1D , {axisDCA});
127+ histos.add (" CandidateQA/hDCAzXicc" , " hDCAzXicc; Xicc DCAz to PV (#mum)" , kTH1D , {axisDCA});
128+ histos.add (" CandidateQA/hDecayRadiusXic" , " hDecayRadiusXic; Distance (#mum)" , kTH1D , {axisRadius});
129+ histos.add (" CandidateQA/hDecayRadiusXicc" , " hDecayRadiusXicc; Distance (#mum)" , kTH1D , {axisRadius});
130+ histos.add (" CandidateQA/hDecayDistanceFromPVXic" , " hDecayDistanceFromPVXic; Distance (#mum)" , kTH1D , {axisDecayLength});
131+ histos.add (" CandidateQA/hProperLengthXic" , " hProperLengthXic; Distance (#mum)" , kTH1D , {axisDecayLength});
132+ histos.add (" CandidateQA/hProperLengthXicc" , " hProperLengthXicc; Distance (#mum)" , kTH1D , {axisDecayLength});
133+ histos.add (" CandidateQA/hPi1cDCAxy" , " hPi1cDCAxy; Pi1c DCAxy (#mum)" , kTH1D , {axisDCA});
134+ histos.add (" CandidateQA/hPi1cDCAz" , " hPi1cDCAz; Pi1c DCAz (#mum)" , kTH1D , {axisDCA});
135+ histos.add (" CandidateQA/hPi2cDCAxy" , " hPi2cDCAxy; Pi2c DCAxy (#mum)" , kTH1D , {axisDCA});
136+ histos.add (" CandidateQA/hPi2cDCAz" , " hPi2cDCAz; Pi2c DCAz (#mum)" , kTH1D , {axisDCA});
137+ histos.add (" CandidateQA/hPiccDCAxy" , " hPiccDCAxy; Picc DCAxy (#mum)" , kTH1D , {axisDCA});
138+ histos.add (" CandidateQA/hPiccDCAz" , " hPiccDCAz; Picc DCAz (#mum)" , kTH1D , {axisDCA});
139+ histos.add (" CandidateQA/hPi1cPt" , " hPi1cPt; Pi1c pT (Gev/#it(c))" , kTH1D , {axisPt});
140+ histos.add (" CandidateQA/hPi2cPt" , " hPi2cPt; Pi2c pT (Gev/#it(c))" , kTH1D , {axisPt});
141+ histos.add (" CandidateQA/hPiccPt" , " hPiccPt; Picc pT (Gev/#it(c))" , kTH1D , {axisPt});
142+
120143 histos.add (" SelectionQA/hDCAXicDaughters" , " hDCAXicDaughters; DCA between Xic daughters (#mum)" , kTH1D , {axisDcaDaughters});
121144 histos.add (" SelectionQA/hDCAXiccDaughters" , " hDCAXiccDaughters; DCA between Xicc daughters (#mum)" , kTH1D , {axisDcaDaughters});
122145 histos.add (" SelectionQA/hDCAxyXi" , " hDCAxyXi; Xi DCAxy to PV (#mum)" , kTH1D , {axisDCA});
@@ -196,10 +219,17 @@ struct Alice3Multicharm {
196219 bdtMCharm.initModel (bdt.localPath .value , bdt.enableOptimizations .value );
197220 }
198221
199- histos.add (" BDT/hBDTScore" , " hBDTScore" , kTH1D , {axisBDTScore});
200- histos.add (" BDT/hBDTScoreVsXiccMass" , " hBDTScoreVsXiccMass" , kTH2D , {axisXiccMass, axisBDTScore});
201- histos.add (" BDT/hBDTScoreVsXiccPt" , " hBDTScoreVsXiccPt" , kTH2D , {axisPt, axisBDTScore});
202- histos.add (" BDT/h3dBDTScore" , " h3dBDTScore" , kTH3D , {axisPt, axisXiccMass, axisBDTScore});
222+ histos.add (" BDT/hBDTScoreSignalFine" , " hBDTScoreSignalFine" , kTH1D , {axisBDTScoreFine});
223+ histos.add (" BDT/hBDTScoreSignal" , " hBDTScoreSignal" , kTH1D , {axisBDTScore});
224+ histos.add (" BDT/hBDTScoreVsXiccMassSignal" , " hBDTScoreVsXiccMassSignal" , kTH2D , {axisXiccMass, axisBDTScore});
225+ histos.add (" BDT/hBDTScoreVsXiccPtSignal" , " hBDTScoreVsXiccPtSignal" , kTH2D , {axisPt, axisBDTScore});
226+ histos.add (" BDT/h3dBDTScoreSignal" , " h3dBDTScoreSignal" , kTH3D , {axisPt, axisXiccMass, axisBDTScore});
227+ histos.add (" BDT/hBDTScoreBackgroundFine" , " hBDTScoreBackgroundFine" , kTH1D , {axisBDTScoreFine});
228+ histos.add (" BDT/hBDTScoreBackground" , " hBDTScoreBackground" , kTH1D , {axisBDTScore});
229+ histos.add (" BDT/hBDTScoreVsXiccMassBackground" , " hBDTScoreVsXiccMassBackground" , kTH2D , {axisXiccMass, axisBDTScore});
230+ histos.add (" BDT/hBDTScoreVsXiccPtBackground" , " hBDTScoreVsXiccPtBackground" , kTH2D , {axisPt, axisBDTScore});
231+ histos.add (" BDT/h3dBDTScoreBackground" , " h3dBDTScoreBackground" , kTH3D , {axisPt, axisXiccMass, axisBDTScore});
232+
203233 histos.add (" BDT/hDCAXicDaughters" , " hDCAXicDaughters" , kTH2D , {{axisBDTScore, axisDcaDaughters}});
204234 histos.add (" BDT/hDCAXiccDaughters" , " hDCAXiccDaughters" , kTH2D , {{axisBDTScore, axisDcaDaughters}});
205235 histos.add (" BDT/hDCAxyXi" , " hDCAxyXi" , kTH2D , {{axisBDTScore, axisDCA}});
@@ -223,14 +253,40 @@ struct Alice3Multicharm {
223253 histos.add (" BDT/hPi2cPt" , " hPi2cPt" , kTH2D , {{axisBDTScore, axisPt}});
224254 histos.add (" BDT/hPiccPt" , " hPiccPt" , kTH2D , {{axisBDTScore, axisPt}});
225255 }
256+
257+ histos.print ();
226258 }
227259
228260 template <typename TMCharmCands>
229261 void genericProcessXicc (TMCharmCands const & xiccCands)
230262 {
231263 for (const auto & xiccCand : xiccCands) {
232- int icfg = xiccCand.lutConfigId ();
264+ const int icfg = xiccCand.lutConfigId ();
233265 histos.fill (HIST (" hConfigId" ), icfg);
266+
267+ histos.fill (HIST (" CandidateQA/hDCAXicDaughters" ), xiccCand.xicDauDCA () * 1e+4 );
268+ histos.fill (HIST (" CandidateQA/hDCAXiccDaughters" ), xiccCand.xiccDauDCA () * 1e+4 );
269+ histos.fill (HIST (" CandidateQA/hDCAxyXi" ), std::fabs (xiccCand.xiDCAxy () * 1e+4 ));
270+ histos.fill (HIST (" CandidateQA/hDCAzXi" ), std::fabs (xiccCand.xiDCAz () * 1e+4 ));
271+ histos.fill (HIST (" CandidateQA/hDCAxyXic" ), std::fabs (xiccCand.xicDCAxy () * 1e+4 ));
272+ histos.fill (HIST (" CandidateQA/hDCAzXic" ), std::fabs (xiccCand.xicDCAz () * 1e+4 ));
273+ histos.fill (HIST (" CandidateQA/hDCAxyXicc" ), std::fabs (xiccCand.xiccDCAxy () * 1e+4 ));
274+ histos.fill (HIST (" CandidateQA/hDCAzXicc" ), std::fabs (xiccCand.xiccDCAz () * 1e+4 ));
275+ histos.fill (HIST (" CandidateQA/hDecayRadiusXic" ), xiccCand.xicDecayRadius2D () * 1e+4 );
276+ histos.fill (HIST (" CandidateQA/hDecayRadiusXicc" ), xiccCand.xiccDecayRadius2D () * 1e+4 );
277+ histos.fill (HIST (" CandidateQA/hDecayDistanceFromPVXic" ), xiccCand.xicDistanceFromPV () * 1e+4 );
278+ histos.fill (HIST (" CandidateQA/hProperLengthXic" ), xiccCand.xicProperLength () * 1e+4 );
279+ histos.fill (HIST (" CandidateQA/hProperLengthXicc" ), xiccCand.xiccProperLength () * 1e+4 );
280+ histos.fill (HIST (" CandidateQA/hPi1cDCAxy" ), xiccCand.pi1cDCAxy () * 1e+4 );
281+ histos.fill (HIST (" CandidateQA/hPi1cDCAz" ), xiccCand.pi1cDCAz () * 1e+4 );
282+ histos.fill (HIST (" CandidateQA/hPi2cDCAxy" ), xiccCand.pi2cDCAxy () * 1e+4 );
283+ histos.fill (HIST (" CandidateQA/hPi2cDCAz" ), xiccCand.pi2cDCAz () * 1e+4 );
284+ histos.fill (HIST (" CandidateQA/hPiccDCAxy" ), xiccCand.piccDCAxy () * 1e+4 );
285+ histos.fill (HIST (" CandidateQA/hPiccDCAz" ), xiccCand.piccDCAz () * 1e+4 );
286+ histos.fill (HIST (" CandidateQA/hPi1cPt" ), xiccCand.pi1cPt ());
287+ histos.fill (HIST (" CandidateQA/hPi2cPt" ), xiccCand.pi2cPt ());
288+ histos.fill (HIST (" CandidateQA/hPiccPt" ), xiccCand.piccPt ());
289+
234290 if (bdt.enableML ) {
235291 std::vector<float > inputFeatures{
236292 xiccCand.xicDauDCA (),
@@ -254,35 +310,42 @@ struct Alice3Multicharm {
254310 xiccCand.xiccProperLength ()};
255311
256312 float * probabilityMCharm = bdtMCharm.evalModel (inputFeatures);
257- float bdtScore = probabilityMCharm[1 ];
258-
259- histos.fill (HIST (" BDT/hBDTScore" ), bdtScore);
260- histos.fill (HIST (" BDT/hBDTScoreVsXiccMass" ), xiccCand.xiccMass (), bdtScore);
261- histos.fill (HIST (" BDT/hBDTScoreVsXiccPt" ), xiccCand.xiccPt (), bdtScore);
262- histos.fill (HIST (" BDT/h3dBDTScore" ), xiccCand.xiccPt (), xiccCand.xiccMass (), bdtScore);
263-
264- histos.fill (HIST (" BDT/hDCAXicDaughters" ), bdtScore, xiccCand.xicDauDCA () * 1e+4 );
265- histos.fill (HIST (" BDT/hDCAXiccDaughters" ), bdtScore, xiccCand.xiccDauDCA () * 1e+4 );
266- histos.fill (HIST (" BDT/hDCAxyXi" ), bdtScore, std::fabs (xiccCand.xiDCAxy () * 1e+4 ));
267- histos.fill (HIST (" BDT/hDCAzXi" ), bdtScore, std::fabs (xiccCand.xiDCAz () * 1e+4 ));
268- histos.fill (HIST (" BDT/hDCAxyXic" ), bdtScore, std::fabs (xiccCand.xicDCAxy () * 1e+4 ));
269- histos.fill (HIST (" BDT/hDCAzXic" ), bdtScore, std::fabs (xiccCand.xicDCAz () * 1e+4 ));
270- histos.fill (HIST (" BDT/hDCAxyXicc" ), bdtScore, std::fabs (xiccCand.xiccDCAxy () * 1e+4 ));
271- histos.fill (HIST (" BDT/hDCAzXicc" ), bdtScore, std::fabs (xiccCand.xiccDCAz () * 1e+4 ));
272- histos.fill (HIST (" BDT/hDecayRadiusXic" ), bdtScore, xiccCand.xicDecayRadius2D () * 1e+4 );
273- histos.fill (HIST (" BDT/hDecayRadiusXicc" ), bdtScore, xiccCand.xiccDecayRadius2D () * 1e+4 );
274- histos.fill (HIST (" BDT/hDecayDistanceFromPVXic" ), bdtScore, xiccCand.xicDistanceFromPV () * 1e+4 );
275- histos.fill (HIST (" BDT/hProperLengthXic" ), bdtScore, xiccCand.xicProperLength () * 1e+4 );
276- histos.fill (HIST (" BDT/hProperLengthXicc" ), bdtScore, xiccCand.xiccProperLength () * 1e+4 );
277- histos.fill (HIST (" BDT/hPi1cDCAxy" ), bdtScore, xiccCand.pi1cDCAxy () * 1e+4 );
278- histos.fill (HIST (" BDT/hPi1cDCAz" ), bdtScore, xiccCand.pi1cDCAz () * 1e+4 );
279- histos.fill (HIST (" BDT/hPi2cDCAxy" ), bdtScore, xiccCand.pi2cDCAxy () * 1e+4 );
280- histos.fill (HIST (" BDT/hPi2cDCAz" ), bdtScore, xiccCand.pi2cDCAz () * 1e+4 );
281- histos.fill (HIST (" BDT/hPiccDCAxy" ), bdtScore, xiccCand.piccDCAxy () * 1e+4 );
282- histos.fill (HIST (" BDT/hPiccDCAz" ), bdtScore, xiccCand.piccDCAz () * 1e+4 );
283- histos.fill (HIST (" BDT/hPi1cPt" ), bdtScore, xiccCand.pi1cPt ());
284- histos.fill (HIST (" BDT/hPi2cPt" ), bdtScore, xiccCand.pi2cPt ());
285- histos.fill (HIST (" BDT/hPiccPt" ), bdtScore, xiccCand.piccPt ());
313+ const float bdtPredictedBackground = probabilityMCharm[0 ];
314+ const float bdtPredictedSignal = probabilityMCharm[1 ];
315+
316+ histos.fill (HIST (" BDT/hBDTScoreSignal" ), bdtPredictedSignal);
317+ histos.fill (HIST (" BDT/hBDTScoreSignalFine" ), bdtPredictedSignal);
318+ histos.fill (HIST (" BDT/hBDTScoreVsXiccMassSignal" ), xiccCand.xiccMass (), bdtPredictedSignal);
319+ histos.fill (HIST (" BDT/hBDTScoreVsXiccPtSignal" ), xiccCand.xiccPt (), bdtPredictedSignal);
320+ histos.fill (HIST (" BDT/h3dBDTScoreSignal" ), xiccCand.xiccPt (), xiccCand.xiccMass (), bdtPredictedSignal);
321+ histos.fill (HIST (" BDT/hBDTScoreBackground" ), bdtPredictedBackground);
322+ histos.fill (HIST (" BDT/hBDTScoreBackgroundFine" ), bdtPredictedBackground);
323+ histos.fill (HIST (" BDT/hBDTScoreVsXiccMassBackground" ), xiccCand.xiccMass (), bdtPredictedBackground);
324+ histos.fill (HIST (" BDT/hBDTScoreVsXiccPtBackground" ), xiccCand.xiccPt (), bdtPredictedBackground);
325+ histos.fill (HIST (" BDT/h3dBDTScoreBackground" ), xiccCand.xiccPt (), xiccCand.xiccMass (), bdtPredictedBackground);
326+
327+ histos.fill (HIST (" BDT/hDCAXicDaughters" ), bdtPredictedSignal, xiccCand.xicDauDCA () * 1e+4 );
328+ histos.fill (HIST (" BDT/hDCAXiccDaughters" ), bdtPredictedSignal, xiccCand.xiccDauDCA () * 1e+4 );
329+ histos.fill (HIST (" BDT/hDCAxyXi" ), bdtPredictedSignal, std::fabs (xiccCand.xiDCAxy () * 1e+4 ));
330+ histos.fill (HIST (" BDT/hDCAzXi" ), bdtPredictedSignal, std::fabs (xiccCand.xiDCAz () * 1e+4 ));
331+ histos.fill (HIST (" BDT/hDCAxyXic" ), bdtPredictedSignal, std::fabs (xiccCand.xicDCAxy () * 1e+4 ));
332+ histos.fill (HIST (" BDT/hDCAzXic" ), bdtPredictedSignal, std::fabs (xiccCand.xicDCAz () * 1e+4 ));
333+ histos.fill (HIST (" BDT/hDCAxyXicc" ), bdtPredictedSignal, std::fabs (xiccCand.xiccDCAxy () * 1e+4 ));
334+ histos.fill (HIST (" BDT/hDCAzXicc" ), bdtPredictedSignal, std::fabs (xiccCand.xiccDCAz () * 1e+4 ));
335+ histos.fill (HIST (" BDT/hDecayRadiusXic" ), bdtPredictedSignal, xiccCand.xicDecayRadius2D () * 1e+4 );
336+ histos.fill (HIST (" BDT/hDecayRadiusXicc" ), bdtPredictedSignal, xiccCand.xiccDecayRadius2D () * 1e+4 );
337+ histos.fill (HIST (" BDT/hDecayDistanceFromPVXic" ), bdtPredictedSignal, xiccCand.xicDistanceFromPV () * 1e+4 );
338+ histos.fill (HIST (" BDT/hProperLengthXic" ), bdtPredictedSignal, xiccCand.xicProperLength () * 1e+4 );
339+ histos.fill (HIST (" BDT/hProperLengthXicc" ), bdtPredictedSignal, xiccCand.xiccProperLength () * 1e+4 );
340+ histos.fill (HIST (" BDT/hPi1cDCAxy" ), bdtPredictedSignal, xiccCand.pi1cDCAxy () * 1e+4 );
341+ histos.fill (HIST (" BDT/hPi1cDCAz" ), bdtPredictedSignal, xiccCand.pi1cDCAz () * 1e+4 );
342+ histos.fill (HIST (" BDT/hPi2cDCAxy" ), bdtPredictedSignal, xiccCand.pi2cDCAxy () * 1e+4 );
343+ histos.fill (HIST (" BDT/hPi2cDCAz" ), bdtPredictedSignal, xiccCand.pi2cDCAz () * 1e+4 );
344+ histos.fill (HIST (" BDT/hPiccDCAxy" ), bdtPredictedSignal, xiccCand.piccDCAxy () * 1e+4 );
345+ histos.fill (HIST (" BDT/hPiccDCAz" ), bdtPredictedSignal, xiccCand.piccDCAz () * 1e+4 );
346+ histos.fill (HIST (" BDT/hPi1cPt" ), bdtPredictedSignal, xiccCand.pi1cPt ());
347+ histos.fill (HIST (" BDT/hPi2cPt" ), bdtPredictedSignal, xiccCand.pi2cPt ());
348+ histos.fill (HIST (" BDT/hPiccPt" ), bdtPredictedSignal, xiccCand.piccPt ());
286349 }
287350
288351 histos.fill (HIST (" hMCharmBuilding" ), 0 );
0 commit comments