From 177c537e13ac6811be456b2d7e06f3306e7dabea Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Fri, 22 Jul 2022 14:01:33 +0200 Subject: [PATCH 1/6] PWGHF: add information about Zvtx residual in histos for collision association probability --- PWGHF/Tasks/HFMCValidation.cxx | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/PWGHF/Tasks/HFMCValidation.cxx b/PWGHF/Tasks/HFMCValidation.cxx index 4faaa9c13b2..9f32969f714 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -273,15 +273,15 @@ struct ValidationRecLevel { std::array, nCharmHadrons> histDeltaPt, histDeltaPx, histDeltaPy, histDeltaPz, histDeltaSecondaryVertexX, histDeltaSecondaryVertexY, histDeltaSecondaryVertexZ, histDeltaDecayLength; std::array, 3>, 2>, nCharmHadrons> histPtDau, histEtaDau, histImpactParameterDau; std::array, 2>, nCharmHadrons> histPtReco; - std::array, 4> histOriginTracks; + std::array, 4> histOriginTracks; HistogramRegistry registry{"registry", {}}; void init(o2::framework::InitContext&) { - histOriginTracks[0] = registry.add("histOriginNonAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c})", HistType::kTH2F, {{4, -1.5, 2.5}, {50, 0., 10.}}); // tracks not associated to any collision - histOriginTracks[1] = registry.add("histOriginAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c})", HistType::kTH2F, {{4, -1.5, 2.5}, {50, 0., 10.}}); // tracks associasted to a collision - histOriginTracks[2] = registry.add("histOriginGoodAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c})", HistType::kTH2F, {{4, -1.5, 2.5}, {50, 0., 10.}}); // tracks associated to the correct collision (considering the MC collision index) - histOriginTracks[3] = registry.add("histOriginWrongAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c})", HistType::kTH2F, {{4, -1.5, 2.5}, {50, 0., 10.}}); // tracks associated to the wrong collision (considering the MC collision index) + histOriginTracks[0] = registry.add("histOriginNonAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c})", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks not associated to any collision + histOriginTracks[1] = registry.add("histOriginAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c})", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks associasted to a collision + histOriginTracks[2] = registry.add("histOriginGoodAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c})", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks associated to the correct collision (considering the MC collision index) + histOriginTracks[3] = registry.add("histOriginWrongAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c})", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks associated to the wrong collision (considering the MC collision index) for (std::size_t iHist{0}; iHist < histOriginTracks.size(); ++iHist) { histOriginTracks[iHist]->GetXaxis()->SetBinLabel(1, "no MC particle"); histOriginTracks[iHist]->GetXaxis()->SetBinLabel(2, "no quark"); @@ -320,18 +320,20 @@ struct ValidationRecLevel { if (track.has_mcParticle()) { auto particle = track.mcParticle(); // get corresponding MC particle to check origin auto origin = RecoDecay::getCharmHadronOrigin(particlesMC, particle, true); - histOriginTracks[index]->Fill(origin, track.pt()); + float deltaZ = -999.f; if (index) { auto collision = track.collision_as(); auto mcCollision = particle.mcCollision(); + deltaZ = collision.posZ() - mcCollision.posZ(); uint index2 = 2; - if ((collision.mcCollisionId() == particle.mcCollisionId()) && std::abs(collision.posZ() - mcCollision.posZ()) < 0.02) { // 200 microns compatibility of Z vertex position also required + if (collision.mcCollisionId() == particle.mcCollisionId()) { // 200 microns compatibility of Z vertex position also required index2 = 1; } - histOriginTracks[index + index2]->Fill(origin, track.pt()); + histOriginTracks[index + index2]->Fill(origin, track.pt(), deltaZ); } + histOriginTracks[index]->Fill(origin, track.pt(), deltaZ); } else { - histOriginTracks[index]->Fill(-1., track.pt()); + histOriginTracks[index]->Fill(-1.f, track.pt(), -999.f); } } From 65eb3df2096aa45a1ebd58f75e836f2430876b21 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Fri, 22 Jul 2022 14:02:26 +0200 Subject: [PATCH 2/6] Remove comment --- PWGHF/Tasks/HFMCValidation.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/Tasks/HFMCValidation.cxx b/PWGHF/Tasks/HFMCValidation.cxx index 9f32969f714..b5899f54051 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -326,7 +326,7 @@ struct ValidationRecLevel { auto mcCollision = particle.mcCollision(); deltaZ = collision.posZ() - mcCollision.posZ(); uint index2 = 2; - if (collision.mcCollisionId() == particle.mcCollisionId()) { // 200 microns compatibility of Z vertex position also required + if (collision.mcCollisionId() == particle.mcCollisionId()) { index2 = 1; } histOriginTracks[index + index2]->Fill(origin, track.pt(), deltaZ); From ea4a5eaff32f7ae911484eb9e0c13cbde8d196b8 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Fri, 22 Jul 2022 14:53:39 +0200 Subject: [PATCH 3/6] Add track selection --- PWGHF/Tasks/HFMCValidation.cxx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/PWGHF/Tasks/HFMCValidation.cxx b/PWGHF/Tasks/HFMCValidation.cxx index b5899f54051..85dd7c9aa19 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -311,11 +311,15 @@ struct ValidationRecLevel { using HfCandProng2WithMCRec = soa::Join; using HfCandProng3WithMCRec = soa::Join; using CollisionsWithMCLabels = soa::Join; + using TracksWithSel = soa::Join; - void process(HfCandProng2WithMCRec const& cand2Prongs, HfCandProng3WithMCRec const& cand3Prongs, aod::BigTracksMC const& tracks, aod::McParticles const& particlesMC, aod::McCollisions const& mcCollisions, CollisionsWithMCLabels const& collisions) + void process(HfCandProng2WithMCRec const& cand2Prongs, HfCandProng3WithMCRec const& cand3Prongs, TracksWithSel const& tracks, aod::McParticles const& particlesMC, aod::McCollisions const& mcCollisions, CollisionsWithMCLabels const& collisions) { // loop over tracks for (auto& track : tracks) { + if (!track.isGlobalTrackWoDCA() != (uint8_t) true) { + continue; + } uint index = uint(track.collisionId() >= 0); if (track.has_mcParticle()) { auto particle = track.mcParticle(); // get corresponding MC particle to check origin @@ -361,8 +365,8 @@ struct ValidationRecLevel { if (whichHad >= 0 && whichOrigin >= 0) { int indexParticle = 0; - if (cand2Prong.index0_as().has_mcParticle()) { - indexParticle = RecoDecay::getMother(particlesMC, cand2Prong.index0_as().mcParticle(), PDGArrayParticle[whichHad], true); + if (cand2Prong.index0_as().has_mcParticle()) { + indexParticle = RecoDecay::getMother(particlesMC, cand2Prong.index0_as().mcParticle(), PDGArrayParticle[whichHad], true); } auto mother = particlesMC.rawIteratorAt(indexParticle); histDeltaPt[whichHad]->Fill(cand2Prong.pt() - mother.pt()); @@ -426,8 +430,8 @@ struct ValidationRecLevel { if (whichHad >= 0) { int indexParticle = 0; - if (cand3Prong.index0_as().has_mcParticle()) { - indexParticle = RecoDecay::getMother(particlesMC, cand3Prong.index0_as().mcParticle(), PDGArrayParticle[whichHad], true); + if (cand3Prong.index0_as().has_mcParticle()) { + indexParticle = RecoDecay::getMother(particlesMC, cand3Prong.index0_as().mcParticle(), PDGArrayParticle[whichHad], true); } auto mother = particlesMC.rawIteratorAt(indexParticle); histDeltaPt[whichHad]->Fill(cand3Prong.pt() - mother.pt()); From 438c67b255180fd58b2fd0241b011d54dff380a7 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Fri, 22 Jul 2022 15:39:18 +0200 Subject: [PATCH 4/6] Fix track selection --- PWGHF/Tasks/HFMCValidation.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/Tasks/HFMCValidation.cxx b/PWGHF/Tasks/HFMCValidation.cxx index 85dd7c9aa19..c44b5741b24 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -317,7 +317,7 @@ struct ValidationRecLevel { { // loop over tracks for (auto& track : tracks) { - if (!track.isGlobalTrackWoDCA() != (uint8_t) true) { + if (track.isGlobalTrackWoDCA() != (uint8_t) true) { continue; } uint index = uint(track.collisionId() >= 0); From c01d33ac0121bd609880c757740e1491a78c98a2 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Fri, 22 Jul 2022 17:45:44 +0200 Subject: [PATCH 5/6] Add axis title --- PWGHF/Tasks/HFMCValidation.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PWGHF/Tasks/HFMCValidation.cxx b/PWGHF/Tasks/HFMCValidation.cxx index c44b5741b24..3a632d67407 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -278,10 +278,10 @@ struct ValidationRecLevel { HistogramRegistry registry{"registry", {}}; void init(o2::framework::InitContext&) { - histOriginTracks[0] = registry.add("histOriginNonAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c})", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks not associated to any collision - histOriginTracks[1] = registry.add("histOriginAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c})", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks associasted to a collision - histOriginTracks[2] = registry.add("histOriginGoodAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c})", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks associated to the correct collision (considering the MC collision index) - histOriginTracks[3] = registry.add("histOriginWrongAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c})", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks associated to the wrong collision (considering the MC collision index) + histOriginTracks[0] = registry.add("histOriginNonAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm)", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks not associated to any collision + histOriginTracks[1] = registry.add("histOriginAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm)", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks associasted to a collision + histOriginTracks[2] = registry.add("histOriginGoodAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm)", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks associated to the correct collision (considering the MC collision index) + histOriginTracks[3] = registry.add("histOriginWrongAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm)", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks associated to the wrong collision (considering the MC collision index) for (std::size_t iHist{0}; iHist < histOriginTracks.size(); ++iHist) { histOriginTracks[iHist]->GetXaxis()->SetBinLabel(1, "no MC particle"); histOriginTracks[iHist]->GetXaxis()->SetBinLabel(2, "no quark"); From edd885b80a9f5c41437a71a7857687e96ffd54ba Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Fri, 22 Jul 2022 17:54:56 +0200 Subject: [PATCH 6/6] Add track eta --- PWGHF/Tasks/HFMCValidation.cxx | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/PWGHF/Tasks/HFMCValidation.cxx b/PWGHF/Tasks/HFMCValidation.cxx index 3a632d67407..59fa5e755e5 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -273,20 +273,20 @@ struct ValidationRecLevel { std::array, nCharmHadrons> histDeltaPt, histDeltaPx, histDeltaPy, histDeltaPz, histDeltaSecondaryVertexX, histDeltaSecondaryVertexY, histDeltaSecondaryVertexZ, histDeltaDecayLength; std::array, 3>, 2>, nCharmHadrons> histPtDau, histEtaDau, histImpactParameterDau; std::array, 2>, nCharmHadrons> histPtReco; - std::array, 4> histOriginTracks; + std::array, 4> histOriginTracks; HistogramRegistry registry{"registry", {}}; void init(o2::framework::InitContext&) { - histOriginTracks[0] = registry.add("histOriginNonAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm)", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks not associated to any collision - histOriginTracks[1] = registry.add("histOriginAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm)", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks associasted to a collision - histOriginTracks[2] = registry.add("histOriginGoodAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm)", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks associated to the correct collision (considering the MC collision index) - histOriginTracks[3] = registry.add("histOriginWrongAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm)", HistType::kTH3F, {{4, -1.5, 2.5}, {50, 0., 10.}, {200, -1., 1.}}); // tracks associated to the wrong collision (considering the MC collision index) + histOriginTracks[0] = registry.add("histOriginNonAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{#eta}^{reco};#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm)", HistType::kTHnSparseF, {{4, -1.5, 2.5}, {50, 0., 10.}, {40, -1., 1.}, {200, -1., 1.}}); // tracks not associated to any collision + histOriginTracks[1] = registry.add("histOriginAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{#eta}^{reco};#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm)", HistType::kTHnSparseF, {{4, -1.5, 2.5}, {50, 0., 10.}, {40, -1., 1.}, {200, -1., 1.}}); // tracks associasted to a collision + histOriginTracks[2] = registry.add("histOriginGoodAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{#eta}^{reco};#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm)", HistType::kTHnSparseF, {{4, -1.5, 2.5}, {50, 0., 10.}, {40, -1., 1.}, {200, -1., 1.}}); // tracks associated to the correct collision (considering the MC collision index) + histOriginTracks[3] = registry.add("histOriginWrongAssociatedTracks", ";origin;#it{p}_{T}^{reco} (GeV/#it{c});#it{#eta}^{reco};#it{Z}_{vtx}^{reco}#minus#it{Z}_{vtx}^{gen} (cm)", HistType::kTHnSparseF, {{4, -1.5, 2.5}, {50, 0., 10.}, {40, -1., 1.}, {200, -1., 1.}}); // tracks associated to the wrong collision (considering the MC collision index) for (std::size_t iHist{0}; iHist < histOriginTracks.size(); ++iHist) { - histOriginTracks[iHist]->GetXaxis()->SetBinLabel(1, "no MC particle"); - histOriginTracks[iHist]->GetXaxis()->SetBinLabel(2, "no quark"); - histOriginTracks[iHist]->GetXaxis()->SetBinLabel(3, "charm"); - histOriginTracks[iHist]->GetXaxis()->SetBinLabel(4, "beauty"); + histOriginTracks[iHist]->GetAxis(0)->SetBinLabel(1, "no MC particle"); + histOriginTracks[iHist]->GetAxis(0)->SetBinLabel(2, "no quark"); + histOriginTracks[iHist]->GetAxis(0)->SetBinLabel(3, "charm"); + histOriginTracks[iHist]->GetAxis(0)->SetBinLabel(4, "beauty"); } for (auto iHad = 0; iHad < nCharmHadrons; ++iHad) { histDeltaPt[iHad] = registry.add(Form("histDeltaPt%s", particleNames[iHad].data()), Form("Pt difference reco - MC %s; #it{p}_{T}^{reco} - #it{p}_{T}^{gen} (GeV/#it{c}); entries", labels[iHad].data()), HistType::kTH1F, {{2000, -1., 1.}}); @@ -333,11 +333,11 @@ struct ValidationRecLevel { if (collision.mcCollisionId() == particle.mcCollisionId()) { index2 = 1; } - histOriginTracks[index + index2]->Fill(origin, track.pt(), deltaZ); + histOriginTracks[index + index2]->Fill(origin, track.pt(), track.eta(), deltaZ); } - histOriginTracks[index]->Fill(origin, track.pt(), deltaZ); + histOriginTracks[index]->Fill(origin, track.pt(), track.eta(), deltaZ); } else { - histOriginTracks[index]->Fill(-1.f, track.pt(), -999.f); + histOriginTracks[index]->Fill(-1.f, track.pt(), track.eta(), -999.f); } }