@@ -123,11 +123,12 @@ struct HfTaskD0 {
123123 using CollisionsWithMcLabels = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels>;
124124 using CollisionsWithMcLabelsCent = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs>;
125125 using TracksSelQuality = soa::Join<aod::TracksExtra, aod::TracksWMc>;
126- using TracksWPid = soa::Join<aod::Tracks , aod::TracksPidPi, aod::PidTpcTofFullPi, aod::TracksPidKa, aod::PidTpcTofFullKa>;
127-
126+ using TracksWPid = soa::Join<o2:: aod::FullTracks , aod::TracksDCA, o2::aod::TrackSelection, aod:: TracksPidPi, aod::PidTpcTofFullPi, aod::TracksPidKa, aod::PidTpcTofFullKa, aod::TracksPidPr, aod::PidTpcTofFullPr >;
127+ // using TracksWithExtra = o2::soa::Join<o2::aod::FullTracks, o2::aod::TrackSelection>;
128128 Filter filterD0Flag = (o2::aod::hf_track_index::hfflag & static_cast <uint8_t >(BIT(aod::hf_cand_2prong::DecayType::D0ToPiK))) != static_cast <uint8_t >(0 );
129-
129+ Preslice<TracksWPid> perCol = aod::track::collisionId;
130130 Preslice<aod::HfCand2Prong> candD0PerCollision = aod::hf_cand::collisionId;
131+
131132 PresliceUnsorted<CollisionsWithMcLabels> colPerMcCollision = aod::mccollisionlabel::mcCollisionId;
132133 PresliceUnsorted<CollisionsWithMcLabelsCent> colPerMcCollisionCent = aod::mccollisionlabel::mcCollisionId;
133134
@@ -396,11 +397,13 @@ struct HfTaskD0 {
396397 }
397398
398399 registry.add (" Data/fitInfo/ampFT0A_vs_ampFT0C" , " FT0-A vs FT0-C amplitude;FT0-A amplitude (a.u.);FT0-C amplitude (a.u.)" , {HistType::kTH2F , {{2500 , 0 ., 250 }, {2500 , 0 ., 250 }}});
399- registry.add (" Data/zdc/energyZNA_vs_energyZNC" , " ZNA vs ZNC common energy;E_{ZNA}^{common} (a.u.);E_{ZNC}^{common} (a.u.)" , {HistType::kTH2F , {{200 , 0 ., 200 }, {1000 , 0 ., 2000 }}});
400- registry.add (" Data/zdc/timeZNA_vs_timeZNC" , " ZNA vs ZNC time;ZNA Time;ZNC time" , {HistType::kTH2F , {{700 , -35 ., 35 .}, {700 , -35 ., 35 .}}});
400+ registry.add (" Data/zdc/energyZNA_vs_energyZNC" , " ZNA vs ZNC common energy;E_{ZNA}^{common} (a.u.);E_{ZNC}^{common} (a.u.)" , {HistType::kTH2F , {{1000 , 0 ., 20000 }, {1000 , 0 ., 20000 }}});
401+ registry.add (" Data/zdc/timeZNA_vs_timeZNC" , " ZNA vs ZNC time;ZNA Time;ZNC time" , {HistType::kTH2F , {{200 , -10 ., 10 .}, {200 , -10 ., 10 .}}});
401402 registry.add (" Data/hUpcGapAfterSelection" , " UPC gap type after selection;Gap type;Counts" , {HistType::kTH1F , {{7 , -1.5 , 5.5 }}});
402403 registry.add (" Data/hGapVsEtaTrack0" , " UPC gap vs Eta;Gap type;Eta" , {HistType::kTH2F , {{7 , -1.5 , 5.5 }, {50 , -1 ., 1 .}}});
403404 registry.add (" Data/hGapVsEtaTrack1" , " UPC gap vs Eta;Gap type;Eta" , {HistType::kTH2F , {{7 , -1.5 , 5.5 }, {50 , -1 ., 1 .}}});
405+ registry.add (" QAtracks/hEtaTrackVsGap" , " " , {HistType::kTH2F , {{7 , -1.5 , 5.5 }, {100 , -1.8 , 1.8 }}});
406+ registry.add (" QAtracks/hPtTrackVsGap" , " " , {HistType::kTH2F , {{7 , -1.5 , 5.5 }, {100 , 0 , 50 }}});
404407
405408 registry.add (" Data/hTPCnSigProng0Pion_GapA" , " Gap A Prong 0;P (GeV/c) ;TPC nSigma Pion" , {HistType::kTH2F , {{100 , 0 , 50 }, {120 , -6 ., 6 .}}});
406409 registry.add (" Data/hTPCnSigProng1Kaon_GapA" , " Gap A Prong 1;P (GeV/c) ;TPC nSigma Kaon" , {HistType::kTH2F , {{100 , 0 , 50 }, {120 , -6 ., 6 .}}});
@@ -428,8 +431,49 @@ struct HfTaskD0 {
428431 registry.add (" Data/hTpcTofnSigProng1Kaon_GapC" , " Gap C Prong 1;P (GeV/c) ;TpcTof nSigma Kaon" , {HistType::kTH2F , {{100 , 0 , 50 }, {50 , 0 ., 10 .}}});
429432 registry.add (" Data/hTpcTofnSigProng0Kaon_GapC" , " Gap C Prong 0;P (GeV/c) ;TpcTof nSigma Pion" , {HistType::kTH2F , {{100 , 0 , 50 }, {50 , 0 ., 10 .}}});
430433 registry.add (" Data/hTpcTofnSigProng1Pion_GapC" , " Gap C Prong 1;P (GeV/c) ;TpcTof nSigma Kaon" , {HistType::kTH2F , {{100 , 0 , 50 }, {50 , 0 ., 10 .}}});
431-
432434 registry.add (" Data/hGapVsRap" , " UPC gap vs Eta;Gap type;Eta" , {HistType::kTH2F , {{7 , -1.5 , 5.5 }, {50 , -1 ., 1 .}}});
435+ // QA histograms for Event level info
436+ registry.add (" QAevents/hPVcontrVsGap" , " ;Gap ; N PV contributors" , {HistType::kTH2F , {{7 , -1.5 , 5.5 }, {800 , 0 ., 200 .}}});
437+ registry.add (" QAevents/ampFT0AVsC_GapA" , " FT0-A vs FT0-C amplitude;FT0-A amplitude (a.u.);FT0-C amplitude (a.u.) Gap A" , {HistType::kTH2F , {{2500 , 0 ., 250 }, {2500 , 0 ., 250 }}});
438+ registry.add (" QAevents/ampFT0AVsC_GapC" , " FT0-A vs FT0-C amplitude;FT0-A amplitude (a.u.);FT0-C amplitude (a.u.) Gap C" , {HistType::kTH2F , {{2500 , 0 ., 250 }, {2500 , 0 ., 250 }}});
439+ registry.add (" QAevents/energyZNAvsC_GapA" , " ZNA vs ZNC common energy;E_{ZNA}^{common} (a.u.);E_{ZNC}^{common} (a.u.) Gap A" , {HistType::kTH2F , {{1000 , 0 ., 20000 }, {1000 , 0 ., 20000 }}});
440+ registry.add (" QAevents/energyZNAvsC_GapC" , " ZNA vs ZNC common energy;E_{ZNA}^{common} (a.u.);E_{ZNC}^{common} (a.u.) Gap A" , {HistType::kTH2F , {{1000 , 0 ., 20000 }, {1000 , 0 ., 20000 }}});
441+ registry.add (" QAevents/timeZNAvsC_GapA" , " ZNA vs ZNC time;ZNA Time;ZNC time Gap A" , {HistType::kTH2F , {{200 , -10 ., 10 .}, {200 , -10 ., 10 .}}});
442+ registry.add (" QAevents/timeZNAvsC_GapC" , " ZNA vs ZNC time;ZNA Time;ZNC time Gap C" , {HistType::kTH2F , {{200 , -10 ., 10 .}, {200 , -10 ., 10 .}}});
443+ // QA histograms for tracks
444+ // A side gap
445+ registry.add (" QAtracks/hTPCnSigmaPi_GapA" , " Gap A;P (GeV/c) ;TPC nSigma Pi" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , -6 ., 6 .}}});
446+ registry.add (" QAtracks/hTPCnSigmaKa_GapA" , " Gap A;P (GeV/c) ;TPC nSigma Ka" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , -6 ., 6 .}}});
447+ registry.add (" QAtracks/hTPCnSigmaPr_GapA" , " Gap A;P (GeV/c) ;TPC nSigma Pr" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , -6 ., 6 .}}});
448+ registry.add (" QAtracks/hTOFnSigmaPi_GapA" , " Gap A;P (GeV/c) ;TOF nSigma Pi" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , -6 ., 6 .}}});
449+ registry.add (" QAtracks/hTOFnSigmaKa_GapA" , " Gap A;P (GeV/c) ;TOF nSigma Ka" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , -6 ., 6 .}}});
450+ registry.add (" QAtracks/hTOFnSigmaPr_GapA" , " Gap A;P (GeV/c) ;TOF nSigma Pr" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , -6 ., 6 .}}});
451+ registry.add (" QAtracks/hTPCTOFnSigmaPi_GapA" , " Gap A;P (GeV/c) ;TPCTOF nSigma Pi" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , 0 ., 6 .}}});
452+ registry.add (" QAtracks/hTPCTOFnSigmaKa_GapA" , " Gap A;P (GeV/c) ;TPCTOF nSigma Ka" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , 0 ., 6 .}}});
453+ registry.add (" QAtracks/hTPCTOFnSigmaPr_GapA" , " Gap A;P (GeV/c) ;TPCTOF nSigma Pr" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , 0 ., 6 .}}});
454+
455+ registry.add (" QAtracks/hTPCNCls_GapA" , " Gap A; TPC Cls" , {HistType::kTH1F , {{160 , 0 ., 160 .}}});
456+ registry.add (" QAtracks/hTPCChi2_GapA" , " Gap A; TPC chi2" , {HistType::kTH1F , {{24 , 0 ., 6 .}}});
457+ registry.add (" QAtracks/hITSNCls_GapA" , " Gap A; TPC Cls" , {HistType::kTH1F , {{8 , -1 ., 7 .}}});
458+ registry.add (" QAtracks/hDCAxy_GapA" , " Gap A; DCA xy" , {HistType::kTH1F , {{400 , -2 , 2 .}}});
459+ registry.add (" QAtracks/hDCAz_GapA" , " Gap A; DCA z" , {HistType::kTH1F , {{400 , -4 , 4 .}}});
460+
461+ // C side gap
462+ registry.add (" QAtracks/hTPCnSigmaPi_GapC" , " Gap C;P (GeV/c) ;TPC nSigma Pi" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , -6 ., 6 .}}});
463+ registry.add (" QAtracks/hTPCnSigmaKa_GapC" , " Gap C;P (GeV/c) ;TPC nSigma Ka" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , -6 ., 6 .}}});
464+ registry.add (" QAtracks/hTPCnSigmaPr_GapC" , " Gap C;P (GeV/c) ;TPC nSigma Pr" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , -6 ., 6 .}}});
465+ registry.add (" QAtracks/hTOFnSigmaPi_GapC" , " Gap C;P (GeV/c) ;TOF nSigma Pi" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , -6 ., 6 .}}});
466+ registry.add (" QAtracks/hTOFnSigmaKa_GapC" , " Gap C;P (GeV/c) ;TOF nSigma Ka" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , -6 ., 6 .}}});
467+ registry.add (" QAtracks/hTOFnSigmaPr_GapC" , " Gap C;P (GeV/c) ;TOF nSigma Pr" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , -6 ., 6 .}}});
468+ registry.add (" QAtracks/hTPCTOFnSigmaPi_GapC" , " Gap C;P (GeV/c) ;TPCTOF nSigma Pi" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , 0 , 6 .}}});
469+ registry.add (" QAtracks/hTPCTOFnSigmaKa_GapC" , " Gap C;P (GeV/c) ;TPCTOF nSigma Ka" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , 0 ., 6 .}}});
470+ registry.add (" QAtracks/hTPCTOFnSigmaPr_GapC" , " Gap C;P (GeV/c) ;TPCTOF nSigma Pr" , {HistType::kTH2F , {{360 , 0 , 36 }, {120 , 0 ., 6 .}}});
471+
472+ registry.add (" QAtracks/hTPCNCls_GapC" , " Gap C; TPC Cls" , {HistType::kTH1F , {{160 , 0 ., 160 .}}});
473+ registry.add (" QAtracks/hTPCChi2_GapC" , " Gap C; TPC chi2" , {HistType::kTH1F , {{24 , 0 ., 6 .}}});
474+ registry.add (" QAtracks/hITSNCls_GapC" , " Gap C; TPC Cls" , {HistType::kTH1F , {{8 , -1 ., 7 .}}});
475+ registry.add (" QAtracks/hDCAxy_GapC" , " Gap C; DCA xy" , {HistType::kTH1F , {{400 , -2 , 2 .}}});
476+ registry.add (" QAtracks/hDCAz_GapC" , " Gap C; DCA z" , {HistType::kTH1F , {{400 , -4 , 4 .}}});
433477
434478 hfEvSel.addHistograms (registry);
435479
@@ -625,7 +669,7 @@ struct HfTaskD0 {
625669 aod::FT0s const & ft0s,
626670 aod::FV0As const & fv0as,
627671 aod::FDDs const & fdds,
628- TracksWPid const &)
672+ TracksWPid const & tracks )
629673 {
630674 for (const auto & collision : collisions) {
631675 float centrality{-1 .f };
@@ -667,6 +711,19 @@ struct HfTaskD0 {
667711 }
668712 registry.fill (HIST (" Data/fitInfo/ampFT0A_vs_ampFT0C" ), fitInfo.ampFT0A , fitInfo.ampFT0C );
669713 registry.fill (HIST (" Data/hUpcGapAfterSelection" ), gap);
714+ registry.fill (HIST (" QAevents/hPVcontrVsGap" ), gap, collision.numContrib ());
715+
716+ if (gap == 0 ) {
717+ registry.fill (HIST (" QAevents/ampFT0AVsC_GapA" ), fitInfo.ampFT0A , fitInfo.ampFT0C );
718+ registry.fill (HIST (" QAevents/energyZNAvsC_GapA" ), zdcEnergyZNA, zdcEnergyZNC);
719+ registry.fill (HIST (" QAevents/timeZNAvsC_GapA" ), zdcTimeZNA, zdcTimeZNC);
720+ }
721+
722+ if (gap == 1 ) {
723+ registry.fill (HIST (" QAevents/ampFT0AVsC_GapC" ), fitInfo.ampFT0A , fitInfo.ampFT0C );
724+ registry.fill (HIST (" QAevents/energyZNAvsC_GapC" ), zdcEnergyZNA, zdcEnergyZNC);
725+ registry.fill (HIST (" QAevents/timeZNAvsC_GapC" ), zdcTimeZNA, zdcTimeZNC);
726+ }
670727
671728 const auto thisCollId = collision.globalIndex ();
672729 const auto & groupedD0Candidates = candidates.sliceBy (candD0PerCollision, thisCollId);
@@ -679,6 +736,50 @@ struct HfTaskD0 {
679736 ir = mRateFetcher .fetch (ccdb.service , bc.timestamp (), bc.runNumber (), irSource, true ) * 1 .e -3 ; // kHz
680737 }
681738
739+ auto tracksample = tracks.sliceBy (perCol, collision.globalIndex ());
740+ if (collision.numContrib () > 1 ) {
741+ for (const auto & track : tracksample) {
742+ if (!track.isGlobalTrack ()) {
743+ continue ;
744+ }
745+ registry.fill (HIST (" QAtracks/hEtaTrackVsGap" ), gap, track.eta ());
746+ registry.fill (HIST (" QAtracks/hPtTrackVsGap" ), gap, track.pt ());
747+
748+ if (gap == 0 ) { // QA for Gap A
749+ registry.fill (HIST (" QAtracks/hTPCnSigmaPi_GapA" ), track.p (), track.tpcNSigmaPi ());
750+ registry.fill (HIST (" QAtracks/hTPCnSigmaKa_GapA" ), track.p (), track.tpcNSigmaKa ());
751+ registry.fill (HIST (" QAtracks/hTPCnSigmaPr_GapA" ), track.p (), track.tpcNSigmaPr ());
752+ registry.fill (HIST (" QAtracks/hTOFnSigmaPi_GapA" ), track.p (), track.tofNSigmaPi ());
753+ registry.fill (HIST (" QAtracks/hTOFnSigmaKa_GapA" ), track.p (), track.tofNSigmaKa ());
754+ registry.fill (HIST (" QAtracks/hTOFnSigmaPr_GapA" ), track.p (), track.tofNSigmaPr ());
755+ registry.fill (HIST (" QAtracks/hTPCTOFnSigmaPi_GapA" ), track.p (), track.tpcTofNSigmaPi ());
756+ registry.fill (HIST (" QAtracks/hTPCTOFnSigmaKa_GapA" ), track.p (), track.tpcTofNSigmaKa ());
757+ registry.fill (HIST (" QAtracks/hTPCTOFnSigmaPr_GapA" ), track.p (), track.tpcTofNSigmaPr ());
758+ registry.fill (HIST (" QAtracks/hTPCNCls_GapA" ), track.tpcNClsFound ());
759+ registry.fill (HIST (" QAtracks/hTPCChi2_GapA" ), track.tpcChi2NCl ());
760+ registry.fill (HIST (" QAtracks/hITSNCls_GapA" ), track.itsNCls ());
761+ registry.fill (HIST (" QAtracks/hDCAxy_GapA" ), track.dcaXY ());
762+ registry.fill (HIST (" QAtracks/hDCAz_GapA" ), track.dcaZ ());
763+ }
764+ if (gap == 1 ) { // QA for Gap C
765+ registry.fill (HIST (" QAtracks/hTPCnSigmaPi_GapC" ), track.p (), track.tpcNSigmaPi ());
766+ registry.fill (HIST (" QAtracks/hTPCnSigmaKa_GapC" ), track.p (), track.tpcNSigmaKa ());
767+ registry.fill (HIST (" QAtracks/hTPCnSigmaPr_GapC" ), track.p (), track.tpcNSigmaPr ());
768+ registry.fill (HIST (" QAtracks/hTOFnSigmaPi_GapC" ), track.p (), track.tofNSigmaPi ());
769+ registry.fill (HIST (" QAtracks/hTOFnSigmaKa_GapC" ), track.p (), track.tofNSigmaKa ());
770+ registry.fill (HIST (" QAtracks/hTOFnSigmaPr_GapC" ), track.p (), track.tofNSigmaPr ());
771+ registry.fill (HIST (" QAtracks/hTPCTOFnSigmaPi_GapC" ), track.p (), track.tpcTofNSigmaPi ());
772+ registry.fill (HIST (" QAtracks/hTPCTOFnSigmaKa_GapC" ), track.p (), track.tpcTofNSigmaKa ());
773+ registry.fill (HIST (" QAtracks/hTPCTOFnSigmaPr_GapC" ), track.p (), track.tpcTofNSigmaPr ());
774+ registry.fill (HIST (" QAtracks/hTPCNCls_GapC" ), track.tpcNClsFound ());
775+ registry.fill (HIST (" QAtracks/hTPCChi2_GapC" ), track.tpcChi2NCl ());
776+ registry.fill (HIST (" QAtracks/hITSNCls_GapC" ), track.itsNCls ());
777+ registry.fill (HIST (" QAtracks/hDCAxy_GapC" ), track.dcaXY ());
778+ registry.fill (HIST (" QAtracks/hDCAz_GapC" ), track.dcaZ ());
779+ }
780+ }
781+ }
782+
682783 for (const auto & candidate : groupedD0Candidates) {
683784 if (yCandRecoMax >= 0 . && std::abs (HfHelper::yD0 (candidate)) > yCandRecoMax) {
684785 continue ;
@@ -761,7 +862,7 @@ struct HfTaskD0 {
761862 valuesToFill.push_back (static_cast <double >(ptCandidate));
762863 if constexpr (FillMl) {
763864 auto const & mlScores = candidate.mlProbD0 ();
764- if (mlScores.size () == 3 ) {
865+ if (mlScores.size () == NAxesMl ) {
765866 valuesToFill.push_back (mlScores[0 ]);
766867 valuesToFill.push_back (mlScores[1 ]);
767868 valuesToFill.push_back (mlScores[2 ]);
0 commit comments