Skip to content

Commit ef61028

Browse files
authored
Add PID and ZDC time info
1 parent 7e219fc commit ef61028

File tree

1 file changed

+108
-14
lines changed

1 file changed

+108
-14
lines changed

PWGHF/D2H/Tasks/taskD0.cxx

Lines changed: 108 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ struct HfTaskD0 {
121121
using CollisionsWithMcLabels = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels>;
122122
using CollisionsWithMcLabelsCent = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs>;
123123
using TracksSelQuality = soa::Join<aod::TracksExtra, aod::TracksWMc>;
124+
using TracksWPid = soa::Join<aod::Tracks, aod::TracksPidPi, aod::PidTpcTofFullPi, aod::TracksPidKa, aod::PidTpcTofFullKa>;
124125

125126
Filter filterD0Flag = (o2::aod::hf_track_index::hfflag & static_cast<uint8_t>(BIT(aod::hf_cand_2prong::DecayType::D0ToPiK))) != static_cast<uint8_t>(0);
126127

@@ -161,6 +162,7 @@ struct HfTaskD0 {
161162
ConfigurableAxis thnConfigAxisFV0A{"thnConfigAxisFV0A", {2001, -1.5, 1999.5}, "axis for FV0-A amplitude (a.u.)"};
162163
ConfigurableAxis thnConfigAxisFDD{"thnConfigAxisFDD", {200, 0., 4000.}, "axis for FDD amplitude (a.u.)"};
163164
ConfigurableAxis thnConfigAxisZN{"thnConfigAxisZN", {510, -1.5, 49.5}, "axis for ZN energy (a.u.)"};
165+
ConfigurableAxis thnConfigAxisTimeZN{"thnConfigAxisTimeZN", {700, -35., 35.}, "axis for ZN energy (a.u.)"};
164166

165167
HistogramRegistry registry{
166168
"registry",
@@ -311,6 +313,8 @@ struct HfTaskD0 {
311313
const AxisSpec thnAxisFDDC{thnConfigAxisFDD, "FDD-C amplitude"};
312314
const AxisSpec thnAxisZNA{thnConfigAxisZN, "ZNA energy"};
313315
const AxisSpec thnAxisZNC{thnConfigAxisZN, "ZNC energy"};
316+
const AxisSpec thnAxisTimeZNA{thnConfigAxisTimeZN, "ZNA Time"};
317+
const AxisSpec thnAxisTimeZNC{thnConfigAxisTimeZN, "ZNC Time"};
314318

315319
if (doprocessMcWithDCAFitterN || doprocessMcWithDCAFitterNCent || doprocessMcWithKFParticle || doprocessMcWithDCAFitterNMl || doprocessMcWithDCAFitterNMlCent || doprocessMcWithKFParticleMl) {
316320
std::vector<AxisSpec> axesAcc = {thnAxisGenPtD, thnAxisGenPtB, thnAxisY, thnAxisOrigin, thnAxisNumPvContr};
@@ -367,9 +371,11 @@ struct HfTaskD0 {
367371
axes.push_back(thnAxisFV0A);
368372
axes.push_back(thnAxisFDDA);
369373
axes.push_back(thnAxisFDDC);
370-
axes.push_back(thnAxisZNA);
371-
axes.push_back(thnAxisZNC);
374+
// axes.push_back(thnAxisZNA);
375+
// axes.push_back(thnAxisZNC);
372376
axes.push_back(thnAxisNumPvContr);
377+
axes.push_back(thnAxisTimeZNA);
378+
axes.push_back(thnAxisTimeZNC);
373379
}
374380

375381
if (applyMl) {
@@ -381,9 +387,39 @@ struct HfTaskD0 {
381387
}
382388

383389
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}}});
384-
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., 20}, {200, 0., 20}}});
390+
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}}});
391+
registry.add("Data/zdc/timeZNA_vs_timeZNC", "ZNA vs ZNC time;ZNA Time;ZNC time", {HistType::kTH2F, {{700, -35., 35.}, {700, -35., 35.}}});
385392
registry.add("Data/hUpcGapAfterSelection", "UPC gap type after selection;Gap type;Counts", {HistType::kTH1F, {{7, -1.5, 5.5}}});
386-
registry.add("Data/hGapVsEta", "UPC gap vs Eta;Gap type;Eta", {HistType::kTH2F, {{7, -1.5, 5.5}, {50, -1., 1.}}});
393+
registry.add("Data/hGapVsEtaTrack0", "UPC gap vs Eta;Gap type;Eta", {HistType::kTH2F, {{7, -1.5, 5.5}, {50, -1., 1.}}});
394+
registry.add("Data/hGapVsEtaTrack1", "UPC gap vs Eta;Gap type;Eta", {HistType::kTH2F, {{7, -1.5, 5.5}, {50, -1., 1.}}});
395+
396+
registry.add("Data/hTPCnSigProng0Pion_GapA", "Gap A Prong 0;P (GeV/c) ;TPC nSigma Pion", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
397+
registry.add("Data/hTPCnSigProng1Kaon_GapA", "Gap A Prong 1;P (GeV/c) ;TPC nSigma Kaon", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
398+
registry.add("Data/hTPCnSigProng0Kaon_GapA", "Gap A Prong 0;P (GeV/c) ;TPC nSigma Pion", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
399+
registry.add("Data/hTPCnSigProng1Pion_GapA", "Gap A Prong 1;P (GeV/c) ;TPC nSigma Kaon", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
400+
registry.add("Data/hTPCnSigProng0Pion_GapC", "Gap C Prong 0;P (GeV/c) ;TPC nSigma Pion", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
401+
registry.add("Data/hTPCnSigProng1Kaon_GapC", "Gap C Prong 1;P (GeV/c) ;TPC nSigma Kaon", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
402+
registry.add("Data/hTPCnSigProng0Kaon_GapC", "Gap C Prong 0;P (GeV/c) ;TPC nSigma Pion", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
403+
registry.add("Data/hTPCnSigProng1Pion_GapC", "Gap C Prong 1;P (GeV/c) ;TPC nSigma Kaon", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
404+
405+
registry.add("Data/hTOFnSigProng0Pion_GapA", "Gap A Prong 0;P (GeV/c) ;TOF nSigma Pion", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
406+
registry.add("Data/hTOFnSigProng1Kaon_GapA", "Gap A Prong 1;P (GeV/c) ;TOF nSigma Kaon", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
407+
registry.add("Data/hTOFnSigProng0Kaon_GapA", "Gap A Prong 0;P (GeV/c) ;TOF nSigma Pion", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
408+
registry.add("Data/hTOFnSigProng1Pion_GapA", "Gap A Prong 1;P (GeV/c) ;TOF nSigma Kaon", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
409+
registry.add("Data/hTOFnSigProng0Pion_GapC", "Gap C Prong 0;P (GeV/c) ;TOF nSigma Pion", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
410+
registry.add("Data/hTOFnSigProng1Kaon_GapC", "Gap C Prong 1;P (GeV/c) ;TOF nSigma Kaon", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
411+
registry.add("Data/hTOFnSigProng0Kaon_GapC", "Gap C Prong 0;P (GeV/c) ;TOF nSigma Pion", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
412+
registry.add("Data/hTOFnSigProng1Pion_GapC", "Gap C Prong 1;P (GeV/c) ;TOF nSigma Kaon", {HistType::kTH2F, {{100, 0, 50}, {120, -6., 6.}}});
413+
414+
registry.add("Data/hTpcTofnSigProng0Pion_GapA", "Gap A Prong 0;P (GeV/c) ;TpcTof nSigma Pion", {HistType::kTH2F, {{100, 0, 50}, {50, 0., 10.}}});
415+
registry.add("Data/hTpcTofnSigProng1Kaon_GapA", "Gap A Prong 1;P (GeV/c) ;TpcTof nSigma Kaon", {HistType::kTH2F, {{100, 0, 50}, {50, 0., 10.}}});
416+
registry.add("Data/hTpcTofnSigProng0Kaon_GapA", "Gap A Prong 0;P (GeV/c) ;TpcTof nSigma Pion", {HistType::kTH2F, {{100, 0, 50}, {50, 0., 10.}}});
417+
registry.add("Data/hTpcTofnSigProng1Pion_GapA", "Gap A Prong 1;P (GeV/c) ;TpcTof nSigma Kaon", {HistType::kTH2F, {{100, 0, 50}, {50, 0., 10.}}});
418+
registry.add("Data/hTpcTofnSigProng0Pion_GapC", "Gap C Prong 0;P (GeV/c) ;TpcTof nSigma Pion", {HistType::kTH2F, {{100, 0, 50}, {50, 0., 10.}}});
419+
registry.add("Data/hTpcTofnSigProng1Kaon_GapC", "Gap C Prong 1;P (GeV/c) ;TpcTof nSigma Kaon", {HistType::kTH2F, {{100, 0, 50}, {50, 0., 10.}}});
420+
registry.add("Data/hTpcTofnSigProng0Kaon_GapC", "Gap C Prong 0;P (GeV/c) ;TpcTof nSigma Pion", {HistType::kTH2F, {{100, 0, 50}, {50, 0., 10.}}});
421+
registry.add("Data/hTpcTofnSigProng1Pion_GapC", "Gap C Prong 1;P (GeV/c) ;TpcTof nSigma Kaon", {HistType::kTH2F, {{100, 0, 50}, {50, 0., 10.}}});
422+
387423
registry.add("Data/hGapVsRap", "UPC gap vs Eta;Gap type;Eta", {HistType::kTH2F, {{7, -1.5, 5.5}, {50, -1., 1.}}});
388424

389425
hfEvSel.addHistograms(registry);
@@ -579,7 +615,9 @@ struct HfTaskD0 {
579615
BCsType const& bcs,
580616
aod::FT0s const& ft0s,
581617
aod::FV0As const& fv0as,
582-
aod::FDDs const& fdds)
618+
aod::FDDs const& fdds,
619+
TracksWPid const& tracks
620+
)
583621
{
584622
for (const auto& collision : collisions) {
585623
float centrality{-1.f};
@@ -599,7 +637,6 @@ struct HfTaskD0 {
599637
if (gapResult.bc) {
600638
bcForUPC = *(gapResult.bc);
601639
}
602-
603640
// Get FIT information from the UPC BC
604641
upchelpers::FITInfo fitInfo{};
605642
udhelpers::getFITinfo(fitInfo, bcForUPC, bcs, ft0s, fv0as, fdds);
@@ -608,11 +645,18 @@ struct HfTaskD0 {
608645
const bool hasZdc = bcForUPC.has_zdc();
609646
float zdcEnergyZNA = -1.f;
610647
float zdcEnergyZNC = -1.f;
648+
float zdcTimeZNA = -1.f;
649+
float zdcTimeZNC = -1.f;
650+
611651
if (hasZdc) {
612652
const auto& zdc = bcForUPC.zdc();
613653
zdcEnergyZNA = zdc.energyCommonZNA();
614654
zdcEnergyZNC = zdc.energyCommonZNC();
655+
zdcTimeZNA = zdc.timeZNA();
656+
zdcTimeZNC = zdc.timeZNC();
657+
615658
registry.fill(HIST("Data/zdc/energyZNA_vs_energyZNC"), zdcEnergyZNA, zdcEnergyZNC);
659+
registry.fill(HIST("Data/zdc/timeZNA_vs_timeZNC"), zdcTimeZNA, zdcTimeZNC);
616660
}
617661

618662
registry.fill(HIST("Data/fitInfo/ampFT0A_vs_ampFT0C"), fitInfo.ampFT0A, fitInfo.ampFT0C);
@@ -637,9 +681,55 @@ struct HfTaskD0 {
637681
const float massD0 = HfHelper::invMassD0ToPiK(candidate);
638682
const float massD0bar = HfHelper::invMassD0barToKPi(candidate);
639683
const auto ptCandidate = candidate.pt();
640-
registry.fill(HIST("Data/hGapVsEta"), gap, candidate.eta());
684+
685+
auto track0 = candidate.template prong0_as<TracksWPid>();
686+
auto track1 = candidate.template prong1_as<TracksWPid>();
687+
688+
// 4. Fill your track eta histogram [3, 4]
689+
// hTrackEta->Fill(track0.eta());
690+
// hTrackEta->Fill(track1.eta());
691+
692+
registry.fill(HIST("Data/hGapVsEtaTrack0"), gap, track0.eta());
693+
registry.fill(HIST("Data/hGapVsEtaTrack1"), gap, track1.eta());
694+
// registry.fill(HIST("Data/timeZNA_vs_timeZNC"), gap, track1.eta());
641695
registry.fill(HIST("Data/hGapVsRap"), gap, HfHelper::yD0(candidate));
642696

697+
if (gap==0 & candidate.isSelD0() >= selectionFlagD0) { // A side // D0 --> K-Pi+
698+
registry.fill(HIST("Data/hTPCnSigProng0Pion_GapA"), track0.p(), track0.tpcNSigmaPi());
699+
registry.fill(HIST("Data/hTPCnSigProng1Kaon_GapA"), track1.p(), track1.tpcNSigmaKa());
700+
registry.fill(HIST("Data/hTOFnSigProng0Pion_GapA"), track0.p(), track0.tofNSigmaPi());
701+
registry.fill(HIST("Data/hTOFnSigProng1Kaon_GapA"), track1.p(), track1.tofNSigmaKa());
702+
registry.fill(HIST("Data/hTpcTofnSigProng0Pion_GapA"), track0.p(), track0.tpcTofNSigmaPi());
703+
registry.fill(HIST("Data/hTpcTofnSigProng1Kaon_GapA"), track1.p(), track1.tpcTofNSigmaKa());
704+
}
705+
706+
if (gap==0 & candidate.isSelD0bar() >= selectionFlagD0) { // A side // D0-bar --> K+Pi-
707+
registry.fill(HIST("Data/hTPCnSigProng0Kaon_GapA"), track0.p(), track0.tpcNSigmaKa());
708+
registry.fill(HIST("Data/hTPCnSigProng1Pion_GapA"), track1.p(), track1.tpcNSigmaPi());
709+
registry.fill(HIST("Data/hTOFnSigProng0Kaon_GapA"), track0.p(), track0.tofNSigmaKa());
710+
registry.fill(HIST("Data/hTOFnSigProng1Pion_GapA"), track1.p(), track1.tofNSigmaPi());
711+
registry.fill(HIST("Data/hTpcTofnSigProng0Kaon_GapA"), track0.p(), track0.tpcTofNSigmaKa());
712+
registry.fill(HIST("Data/hTpcTofnSigProng1Pion_GapA"), track1.p(), track1.tpcTofNSigmaPi());
713+
}
714+
715+
if (gap==1 & candidate.isSelD0() >= selectionFlagD0) { // C side // D0 --> K-Pi+
716+
registry.fill(HIST("Data/hTPCnSigProng0Pion_GapC"), track0.p(), track0.tpcNSigmaPi());
717+
registry.fill(HIST("Data/hTPCnSigProng1Kaon_GapC"), track1.p(), track1.tpcNSigmaKa());
718+
registry.fill(HIST("Data/hTOFnSigProng0Pion_GapC"), track0.p(), track0.tofNSigmaPi());
719+
registry.fill(HIST("Data/hTOFnSigProng1Kaon_GapC"), track1.p(), track1.tofNSigmaKa());
720+
registry.fill(HIST("Data/hTpcTofnSigProng0Pion_GapC"), track0.p(), track0.tpcTofNSigmaPi());
721+
registry.fill(HIST("Data/hTpcTofnSigProng1Kaon_GapC"), track1.p(), track1.tpcTofNSigmaKa());
722+
}
723+
724+
if (gap==1 & candidate.isSelD0bar() >= selectionFlagD0) { // C side // D0-bar --> K+Pi-
725+
registry.fill(HIST("Data/hTPCnSigProng0Kaon_GapC"), track0.p(), track0.tpcNSigmaKa());
726+
registry.fill(HIST("Data/hTPCnSigProng1Pion_GapC"), track1.p(), track1.tpcNSigmaPi());
727+
registry.fill(HIST("Data/hTOFnSigProng0Kaon_GapC"), track0.p(), track0.tofNSigmaKa());
728+
registry.fill(HIST("Data/hTOFnSigProng1Pion_GapC"), track1.p(), track1.tofNSigmaPi());
729+
registry.fill(HIST("Data/hTpcTofnSigProng0Kaon_GapC"), track0.p(), track0.tpcTofNSigmaKa());
730+
registry.fill(HIST("Data/hTpcTofnSigProng1Pion_GapC"), track1.p(), track1.tpcTofNSigmaPi());
731+
}
732+
643733
if (candidate.isSelD0() >= selectionFlagD0) {
644734
registry.fill(HIST("hMass"), massD0, ptCandidate);
645735
registry.fill(HIST("hMassFinerBinning"), massD0, ptCandidate);
@@ -689,10 +779,11 @@ struct HfTaskD0 {
689779
valuesToFill.push_back(static_cast<double>(fitInfo.ampFV0A));
690780
valuesToFill.push_back(static_cast<double>(fitInfo.ampFDDA));
691781
valuesToFill.push_back(static_cast<double>(fitInfo.ampFDDC));
692-
valuesToFill.push_back(static_cast<double>(zdcEnergyZNA));
693-
valuesToFill.push_back(static_cast<double>(zdcEnergyZNC));
782+
// valuesToFill.push_back(static_cast<double>(zdcEnergyZNA));
783+
// valuesToFill.push_back(static_cast<double>(zdcEnergyZNC));
694784
valuesToFill.push_back(static_cast<double>(numPvContributors));
695-
785+
valuesToFill.push_back(static_cast<double>(zdcTimeZNA));
786+
valuesToFill.push_back(static_cast<double>(zdcTimeZNC));
696787
if constexpr (FillMl) {
697788
registry.get<THnSparse>(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsD0Type"))->Fill(valuesToFill.data());
698789
} else {
@@ -910,7 +1001,7 @@ struct HfTaskD0 {
9101001
registry.fill(HIST("hMassSigD0"), massD0, ptCandidate, rapidityCandidate);
9111002
if constexpr (ApplyMl) {
9121003
if (storeCentrality && storeOccupancyAndIR) {
913-
registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsD0Type"), candidate.mlProbD0()[0], candidate.mlProbD0()[1], candidate.mlProbD0()[2], massD0, ptCandidate, rapidityCandidate, SigD0, candidate.ptBhadMotherPart(), candidate.originMcRec(), numPvContributors, cent, occ, ir);
1004+
registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsD0Type"), candidate.mlProbD0()[0], candidate.mlProbD0()[1], candidate.mlProbD0()[2], massD0, ptCandidate, rapidityCandidate, SigD0, candidate.ptBhadMotherPart(), candidate.originMcRec(), numPvContributors, cent, occ, ir);
9141005
} else if (storeCentrality && !storeOccupancyAndIR) {
9151006
registry.fill(HIST("hBdtScoreVsMassVsPtVsPtBVsYVsOriginVsD0Type"), candidate.mlProbD0()[0], candidate.mlProbD0()[1], candidate.mlProbD0()[2], massD0, ptCandidate, rapidityCandidate, SigD0, candidate.ptBhadMotherPart(), candidate.originMcRec(), numPvContributors, cent);
9161007
} else if (!storeCentrality && storeOccupancyAndIR) {
@@ -1181,9 +1272,11 @@ struct HfTaskD0 {
11811272
aod::FT0s const& ft0s,
11821273
aod::FV0As const& fv0as,
11831274
aod::FDDs const& fdds,
1184-
aod::Zdcs const& /*zdcs*/)
1275+
TracksWPid const& tracks,
1276+
aod::Zdcs const& /*zdcs*/
1277+
)
11851278
{
1186-
runAnalysisPerCollisionDataWithUpc<false>(collisions, selectedD0Candidates, bcs, ft0s, fv0as, fdds);
1279+
runAnalysisPerCollisionDataWithUpc<false>(collisions, selectedD0Candidates, bcs, ft0s, fv0as, fdds, tracks);
11871280
}
11881281
PROCESS_SWITCH(HfTaskD0, processDataWithDCAFitterNWithUpc, "Process real data with DCAFitterN w/o ML with UPC", false);
11891282

@@ -1194,9 +1287,10 @@ struct HfTaskD0 {
11941287
aod::FT0s const& ft0s,
11951288
aod::FV0As const& fv0as,
11961289
aod::FDDs const& fdds,
1290+
TracksWPid const& tracks,
11971291
aod::Zdcs const& /*zdcs*/)
11981292
{
1199-
runAnalysisPerCollisionDataWithUpc<true>(collisions, selectedD0CandidatesMl, bcs, ft0s, fv0as, fdds);
1293+
runAnalysisPerCollisionDataWithUpc<true>(collisions, selectedD0CandidatesMl, bcs, ft0s, fv0as, fdds, tracks);
12001294
}
12011295
PROCESS_SWITCH(HfTaskD0, processDataWithDCAFitterNMlWithUpc, "Process real data with DCAFitterN and ML with UPC", false);
12021296
};

0 commit comments

Comments
 (0)