Skip to content

Commit 7d62dc5

Browse files
pefK0sTask update (#5185)
* V0DauTuner * Please consider the following formatting changes * del LOGs * Please consider the following formatting changes * update pefK0sTask 1. Stat histo 2. Addressing comments of Mattia 3. V0 inv mass histo is filled for all selected candidates, 2 bools are added * add stat histo bins --------- Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 5171444 commit 7d62dc5

1 file changed

Lines changed: 55 additions & 54 deletions

File tree

DPG/Tasks/AOTTrack/V0Cascades/perfK0sResolution.cxx

Lines changed: 55 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ struct perfK0sResolution {
9696

9797
void init(InitContext const&)
9898
{
99-
const AxisSpec eventAxis{10, 0, 10, "Events"};
99+
const AxisSpec statAxis{5, 0, 5, "Stats"};
100100
const AxisSpec mAxis{mBins, "#it{m} (GeV/#it{c}^{2})"};
101101
const AxisSpec pTAxis{pTBins, "#it{p}_{T} (GeV/#it{c})"};
102102
const AxisSpec pTResAxis{pTResBins, "#Delta#it{p}_{T} (GeV/#it{c})"};
@@ -109,17 +109,12 @@ struct perfK0sResolution {
109109
const AxisSpec phiAxis{phiBins, "#phi"};
110110
const AxisSpec trueK0Axis{2, -0.5, 1.5, "True K0"};
111111

112-
int nProc = 0;
113-
if (doprocessData) {
114-
LOG(info) << "processData enabled";
115-
nProc++;
116-
}
117-
if (doprocessMC) {
118-
LOG(info) << "processMC enabled";
119-
nProc++;
112+
rK0sResolution.add("h1_stats", "h1_stats", {HistType::kTH1F, {statAxis}});
113+
TString hStatsLabels[5] = {"Selected Events", "All V0s", "Selected V0s", "Daughters have MC particles", "Daughters corr. rec."};
114+
for (Int_t n = 1; n <= rK0sResolution.get<TH1>(HIST("h1_stats"))->GetNbinsX(); n++) {
115+
rK0sResolution.get<TH1>(HIST("h1_stats"))->GetXaxis()->SetBinLabel(n, hStatsLabels[n - 1]);
120116
}
121117

122-
rK0sResolution.add("h1_events", "h1_events", {HistType::kTH1F, {eventAxis}});
123118
if (doprocessMC) {
124119
rK0sDauResolution.add("h2_massPosPtRes", "h2_massPosPtRes", {HistType::kTH2F, {mAxis, pTResAxis}});
125120
rK0sDauResolution.add("h2_massNegPtRes", "h2_massNegPtRes", {HistType::kTH2F, {mAxis, pTResAxis}});
@@ -152,13 +147,12 @@ struct perfK0sResolution {
152147
rK0sDauResolution.add("h3_tpc_vs_pid_hypothesis", "h3_tpc_vs_pid_hypothesis", {HistType::kTH3F, {{200, -10.f, 10.f, "#it{p}/Z (GeV/#it{c})"}, {1000, 0, 1000.f, "dE/dx (a.u.)"}, {10, -0.5, 9.5f, "PID hypothesis"}}});
153148
}
154149

155-
ccdb->setURL(ccdburl);
156-
ccdb->setCaching(true);
157-
ccdb->setLocalObjectValidityChecking();
158-
ccdb->setFatalWhenNull(false);
159-
160150
/// TrackTuner initialization
161151
if (useTrackTuner) {
152+
ccdb->setURL(ccdburl);
153+
ccdb->setCaching(true);
154+
ccdb->setLocalObjectValidityChecking();
155+
ccdb->setFatalWhenNull(false);
162156
lut = o2::base::MatLayerCylSet::rectifyPtrFromFile(ccdb->get<o2::base::MatLayerCylSet>(lutPath));
163157
std::string outputStringParams = trackTunerObj.configParams(trackTunerParams);
164158
trackTunerObj.getDcaGraphs();
@@ -374,13 +368,14 @@ struct perfK0sResolution {
374368
soa::Filtered<aod::V0Datas> const& fullV0s,
375369
PIDTracks const&)
376370
{
377-
rK0sResolution.fill(HIST("h1_events"), 0.5);
371+
rK0sResolution.fill(HIST("h1_stats"), 0.5);
378372
for (auto& v0 : fullV0s) {
379-
rK0sResolution.fill(HIST("h1_events"), 1.5);
373+
rK0sResolution.fill(HIST("h1_stats"), 1.5);
380374
const auto& posTrack = v0.posTrack_as<PIDTracks>();
381375
const auto& negTrack = v0.negTrack_as<PIDTracks>();
382376
if (!acceptV0(v0, negTrack, posTrack, collision))
383377
continue;
378+
rK0sResolution.fill(HIST("h1_stats"), 2.5);
384379

385380
float mass = v0.mK0Short();
386381
if (computeInvMassFromDaughters) {
@@ -410,16 +405,15 @@ struct perfK0sResolution {
410405
o2::track::TrackParametrizationWithError<float> mTrackParCovPos;
411406
o2::track::TrackParametrizationWithError<float> mTrackParCovNeg;
412407

413-
template <class TV0TracksTo, typename TV0>
408+
template <typename TV0, typename TV0Track>
414409
void tuneV0(TV0 const& v0,
410+
TV0Track const& posTrack,
411+
TV0Track const& negTrack,
415412
aod::McParticles const&,
416413
aod::BCsWithTimestamps const& bcs)
417414
{
418415
initCCDB(bcs.begin());
419416
trackTunedTracks->Fill(1, 2); // tune 2 tracks
420-
421-
const auto& posTrack = v0.template posTrack_as<TV0TracksTo>();
422-
const auto& negTrack = v0.template negTrack_as<TV0TracksTo>();
423417
setTrackParCov(posTrack, mTrackParCovPos);
424418
setTrackParCov(negTrack, mTrackParCovNeg);
425419
mTrackParCovPos.setPID(posTrack.pidForTracking());
@@ -440,30 +434,35 @@ struct perfK0sResolution {
440434
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, mTrackParCovNeg, 2.f, matCorr, &mDcaInfoCovNeg);
441435
}
442436

437+
bool daughtersHaveMCParticles = false;
438+
bool daughtersCorrRec = false;
439+
443440
void processMC(soa::Filtered<SelectedCollisions>::iterator const& collision,
444441
soa::Filtered<soa::Join<aod::V0Datas, aod::V0Covs, aod::V0DauCovs, aod::McV0Labels>> const& fullV0s,
445442
PIDTracksIUMC const&,
446443
aod::McParticles const& mcParticles,
447444
aod::BCsWithTimestamps const& bcs)
448445
{
449-
rK0sResolution.fill(HIST("h1_events"), 0.5);
446+
rK0sResolution.fill(HIST("h1_stats"), 0.5);
450447
for (auto& v0 : fullV0s) {
451-
rK0sResolution.fill(HIST("h1_events"), 1.5);
448+
rK0sResolution.fill(HIST("h1_stats"), 1.5);
452449
const auto& posTrack = v0.posTrack_as<PIDTracksIUMC>();
453450
const auto& negTrack = v0.negTrack_as<PIDTracksIUMC>();
454451
if (!acceptV0(v0, negTrack, posTrack, collision))
455452
continue;
456-
if (!posTrack.has_mcParticle()) {
457-
continue;
458-
}
459-
if (!negTrack.has_mcParticle()) {
460-
continue;
461-
}
462-
if (posTrack.mcParticle().pdgCode() != 211 || negTrack.mcParticle().pdgCode() != -211) {
463-
continue;
453+
rK0sResolution.fill(HIST("h1_stats"), 2.5);
454+
455+
if (posTrack.has_mcParticle() && negTrack.has_mcParticle()) {
456+
daughtersHaveMCParticles = true;
457+
rK0sResolution.fill(HIST("h1_stats"), 3.5);
458+
if (posTrack.mcParticle().pdgCode() == 211 && negTrack.mcParticle().pdgCode() == -211) {
459+
daughtersCorrRec = true;
460+
rK0sResolution.fill(HIST("h1_stats"), 4.5);
461+
}
464462
}
465-
if (useTrackTuner) {
466-
tuneV0<PIDTracksIUMC>(v0, mcParticles, bcs);
463+
464+
if (useTrackTuner && daughtersHaveMCParticles) {
465+
tuneV0(v0, posTrack, negTrack, mcParticles, bcs);
467466
}
468467

469468
float mass = v0.mK0Short();
@@ -473,7 +472,7 @@ struct perfK0sResolution {
473472
std::array{negTrack.px(), negTrack.py(), negTrack.pz()}},
474473
std::array{o2::constants::physics::MassPionCharged, o2::constants::physics::MassPionCharged});
475474
}
476-
if (useTrackTuner) {
475+
if (useTrackTuner && daughtersHaveMCParticles) {
477476
std::array<float, 3> pPos{0., 0., 0.};
478477
std::array<float, 3> pNeg{0., 0., 0.};
479478
mTrackParCovPos.getPxPyPzGlo(pPos);
@@ -487,33 +486,35 @@ struct perfK0sResolution {
487486
if (!isTrueK0s && requireTrueK0s) {
488487
continue;
489488
}
490-
rK0sDauResolution.fill(HIST("h2_genPtPosPtRes"), (v0.positivept() - posTrack.mcParticle().pt()) / posTrack.mcParticle().pt(), posTrack.mcParticle().pt());
491-
rK0sDauResolution.fill(HIST("h2_genPxPosPxRes"), (v0.pxpos() - posTrack.mcParticle().px()) / posTrack.mcParticle().px(), posTrack.mcParticle().px());
492-
rK0sDauResolution.fill(HIST("h2_genPyPosPyRes"), (v0.pypos() - posTrack.mcParticle().py()) / posTrack.mcParticle().py(), posTrack.mcParticle().py());
493-
rK0sDauResolution.fill(HIST("h2_genPzPosPzRes"), (v0.pzpos() - posTrack.mcParticle().pz()) / posTrack.mcParticle().pz(), posTrack.mcParticle().pz());
494-
495-
rK0sDauResolution.fill(HIST("h2_genPtNegPtRes"), (v0.negativept() - negTrack.mcParticle().pt()) / negTrack.mcParticle().pt(), negTrack.mcParticle().pt());
496-
rK0sDauResolution.fill(HIST("h2_genPxNegPxRes"), (v0.pxneg() - negTrack.mcParticle().px()) / negTrack.mcParticle().px(), negTrack.mcParticle().px());
497-
rK0sDauResolution.fill(HIST("h2_genPyNegPyRes"), (v0.pyneg() - negTrack.mcParticle().py()) / negTrack.mcParticle().py(), negTrack.mcParticle().py());
498-
rK0sDauResolution.fill(HIST("h2_genPzNegPzRes"), (v0.pzneg() - negTrack.mcParticle().pz()) / negTrack.mcParticle().pz(), negTrack.mcParticle().pz());
499489

500-
rK0sDauResolution.fill(HIST("h2_massPosPtRes"), mass, v0.positivept() - posTrack.mcParticle().pt());
501-
rK0sDauResolution.fill(HIST("h2_massNegPtRes"), mass, v0.negativept() - negTrack.mcParticle().pt());
490+
// QA of correctly reconstructed V0 daughters
491+
if (daughtersCorrRec) {
492+
rK0sDauResolution.fill(HIST("h2_genPtPosPtRes"), (v0.positivept() - posTrack.mcParticle().pt()) / posTrack.mcParticle().pt(), posTrack.mcParticle().pt());
493+
rK0sDauResolution.fill(HIST("h2_genPxPosPxRes"), (v0.pxpos() - posTrack.mcParticle().px()) / posTrack.mcParticle().px(), posTrack.mcParticle().px());
494+
rK0sDauResolution.fill(HIST("h2_genPyPosPyRes"), (v0.pypos() - posTrack.mcParticle().py()) / posTrack.mcParticle().py(), posTrack.mcParticle().py());
495+
rK0sDauResolution.fill(HIST("h2_genPzPosPzRes"), (v0.pzpos() - posTrack.mcParticle().pz()) / posTrack.mcParticle().pz(), posTrack.mcParticle().pz());
496+
497+
rK0sDauResolution.fill(HIST("h2_genPtNegPtRes"), (v0.negativept() - negTrack.mcParticle().pt()) / negTrack.mcParticle().pt(), negTrack.mcParticle().pt());
498+
rK0sDauResolution.fill(HIST("h2_genPxNegPxRes"), (v0.pxneg() - negTrack.mcParticle().px()) / negTrack.mcParticle().px(), negTrack.mcParticle().px());
499+
rK0sDauResolution.fill(HIST("h2_genPyNegPyRes"), (v0.pyneg() - negTrack.mcParticle().py()) / negTrack.mcParticle().py(), negTrack.mcParticle().py());
500+
rK0sDauResolution.fill(HIST("h2_genPzNegPzRes"), (v0.pzneg() - negTrack.mcParticle().pz()) / negTrack.mcParticle().pz(), negTrack.mcParticle().pz());
501+
502+
rK0sDauResolution.fill(HIST("h2_massPosPtRes"), mass, v0.positivept() - posTrack.mcParticle().pt());
503+
rK0sDauResolution.fill(HIST("h2_massNegPtRes"), mass, v0.negativept() - negTrack.mcParticle().pt());
504+
if (useMultidimHisto) {
505+
rK0sResolution.fill(HIST("thn_mass"), mass, v0.pt(), v0.eta(), v0.phi(), posTrack.eta(), negTrack.eta(),
506+
1. / v0.positivept() - 1. / posTrack.mcParticle().pt(),
507+
1. / v0.negativept() - 1. / negTrack.mcParticle().pt(),
508+
isTrueK0s);
509+
}
510+
}
502511

512+
// QA of seleted V0s
503513
rK0sDauResolution.fill(HIST("h2_PosRelPtRes"), v0.positivept(), RecoDecay::sqrtSumOfSquares(v0.covMatPosDau()[9], v0.covMatPosDau()[14]), v0.positivept());
504514
rK0sDauResolution.fill(HIST("h2_NegRelPtRes"), v0.negativept(), RecoDecay::sqrtSumOfSquares(v0.covMatNegDau()[9], v0.covMatNegDau()[14]), v0.positivept());
505-
506-
// Can be taken from kTHnSparseF (useMultidimHisto configurable)
507515
rK0sResolution.fill(HIST("h2_masspT"), mass, v0.pt());
508516
rK0sResolution.fill(HIST("h2_masseta"), mass, v0.eta());
509517
rK0sResolution.fill(HIST("h2_massphi"), mass, v0.phi());
510-
511-
if (useMultidimHisto) {
512-
rK0sResolution.fill(HIST("thn_mass"), mass, v0.pt(), v0.eta(), v0.phi(), posTrack.eta(), negTrack.eta(),
513-
1. / v0.positivept() - 1. / posTrack.mcParticle().pt(),
514-
1. / v0.negativept() - 1. / negTrack.mcParticle().pt(),
515-
isTrueK0s);
516-
}
517518
}
518519
}
519520
PROCESS_SWITCH(perfK0sResolution, processMC, "Process MC", false);

0 commit comments

Comments
 (0)