From 5bacd7777693b11a061c1ba72d71dbb48f011f1f Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Fri, 15 Jul 2022 10:34:44 +0200 Subject: [PATCH 1/7] [PWGHF] check origin of tracks without collision association --- PWGHF/Tasks/HFMCValidation.cxx | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/PWGHF/Tasks/HFMCValidation.cxx b/PWGHF/Tasks/HFMCValidation.cxx index 99cb7d73149..ab355fda09d 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -108,7 +108,7 @@ struct ValidationGenLevel { int bPerCollision = 0; int bBarPerCollision = 0; - //Particles and their decay checked in the second part of the task + // Particles and their decay checked in the second part of the task std::array PDGArrayParticle = {pdg::Code::kDPlus, 413, pdg::Code::kD0, 431, pdg::Code::kLambdaCPlus, pdg::Code::kXiCPlus, pdg::Code::kJpsi}; std::array, nCharmHadrons> arrPDGFinal = {{{kPiPlus, kPiPlus, -kKPlus}, {kPiPlus, kPiPlus, -kKPlus}, {-kKPlus, kPiPlus, 0}, {kPiPlus, kKPlus, -kKPlus}, {kProton, -kKPlus, kPiPlus}, {kProton, -kKPlus, kPiPlus}, {kElectron, -kElectron, 0}}}; std::array counterPrompt{0}, counterNonPrompt{0}; @@ -182,7 +182,7 @@ struct ValidationGenLevel { double vertexPrimary[3] = {mccollision.posX(), mccollision.posY(), mccollision.posZ()}; auto decayLength = RecoDecay::distance(vertexPrimary, vertexDau); - //Filling histograms with per-component momentum conservation + // Filling histograms with per-component momentum conservation registry.fill(HIST("hMomentumCheck"), float(momentumCheck)); registry.fill(HIST("hPxDiffMotherDaughterGen"), pxDiff); registry.fill(HIST("hPyDiffMotherDaughterGen"), pyDiff); @@ -204,7 +204,7 @@ struct ValidationGenLevel { } } } - } //end particles + } // end particles registry.fill(HIST("hCountAverageC"), cPerCollision); registry.fill(HIST("hCountAverageB"), bPerCollision); registry.fill(HIST("hCountAverageCbar"), cBarPerCollision); @@ -246,6 +246,11 @@ struct ValidationRecLevel { HistogramRegistry registry{"registry", {}}; void init(o2::framework::InitContext&) { + auto histOriginNonAssociatedTracks = registry.add("histOriginNonAssociatedTracks", ";origin;entries", HistType::kTH1F, {{4, -1.5, 2.5}}); + histOriginNonAssociatedTracks->SetBinLabel(1, "no MC particle"); + histOriginNonAssociatedTracks->SetBinLabel(2, "no quark"); + histOriginNonAssociatedTracks->SetBinLabel(3, "charm"); + histOriginNonAssociatedTracks->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.}}); histDeltaPx[iHad] = registry.add(Form("histDeltaPx%s", particleNames[iHad].data()), Form("Px difference reco - MC %s; #it{p}_{x}^{reco} - #it{p}_{x}^{gen} (GeV/#it{c}); entries", labels[iHad].data()), HistType::kTH1F, {{2000, -1., 1.}}); @@ -269,8 +274,21 @@ struct ValidationRecLevel { using HfCandProng2WithMCRec = soa::Join; using HfCandProng3WithMCRec = soa::Join; + Partition collNonAssociatedTracks = aod::track::collisionId < 0; + void process(HfCandProng2WithMCRec const& cand2Prongs, HfCandProng3WithMCRec const& cand3Prongs, aod::BigTracksMC const& tracks, aod::McParticles const& particlesMC) { + // loop over tracks + for (auto& track : collNonAssociatedTracks) { + if (track.has_mcParticle()) { + auto particle = arrDaughters[iProng].mcParticle(); // ith daughter particle + auto origin = RecoDecay::getCharmHadronOrigin(particlesMC, particle, true); + histOriginNonAssociatedTracks->Fill(origin); + } else { + histOriginNonAssociatedTracks->Fill(-1.); + } + } + // loop over 2-prong candidates for (auto& cand2Prong : cand2Prongs) { @@ -303,7 +321,7 @@ struct ValidationRecLevel { histDeltaPx[whichHad]->Fill(cand2Prong.px() - mother.px()); histDeltaPy[whichHad]->Fill(cand2Prong.py() - mother.py()); histDeltaPz[whichHad]->Fill(cand2Prong.pz() - mother.pz()); - //Compare Secondary vertex and decay length with MC + // Compare Secondary vertex and decay length with MC auto daughter0 = mother.daughters_as().begin(); double vertexDau[3] = {daughter0.vx(), daughter0.vy(), daughter0.vz()}; double vertexMoth[3] = {mother.vx(), mother.vy(), mother.vz()}; @@ -327,7 +345,7 @@ struct ValidationRecLevel { histEtaDau[whichHad][whichOrigin][1]->Fill(RecoDecay::eta(momDau1)); histImpactParameterDau[whichHad][whichOrigin][1]->Fill(cand2Prong.impactParameter1()); } - } //end loop on 2-prong candidates + } // end loop on 2-prong candidates // loop over 3-prong candidates for (auto& cand3Prong : cand3Prongs) { @@ -368,7 +386,7 @@ struct ValidationRecLevel { histDeltaPx[whichHad]->Fill(cand3Prong.px() - mother.px()); histDeltaPy[whichHad]->Fill(cand3Prong.py() - mother.py()); histDeltaPz[whichHad]->Fill(cand3Prong.pz() - mother.pz()); - //Compare Secondary vertex and decay length with MC + // Compare Secondary vertex and decay length with MC auto daughter0 = mother.daughters_as().begin(); double vertexDau[3] = {daughter0.vx(), daughter0.vy(), daughter0.vz()}; double vertexMoth[3] = {mother.vx(), mother.vy(), mother.vz()}; @@ -398,8 +416,8 @@ struct ValidationRecLevel { histEtaDau[whichHad][whichOrigin][2]->Fill(RecoDecay::eta(momDau2)); histImpactParameterDau[whichHad][whichOrigin][2]->Fill(cand3Prong.impactParameter2()); } - } //end loop on 3-prong candidates - } //end process + } // end loop on 3-prong candidates + } // end process }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) From cc20e0dff34680eb167db780bd7ed4e22cc1eb67 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Fri, 15 Jul 2022 10:43:49 +0200 Subject: [PATCH 2/7] Fix 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 ab355fda09d..4a2bc02f6c2 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -281,7 +281,7 @@ struct ValidationRecLevel { // loop over tracks for (auto& track : collNonAssociatedTracks) { if (track.has_mcParticle()) { - auto particle = arrDaughters[iProng].mcParticle(); // ith daughter particle + auto particle = arrDaughters[iProng].mcParticle(); // get corresponding MC particle to check origin auto origin = RecoDecay::getCharmHadronOrigin(particlesMC, particle, true); histOriginNonAssociatedTracks->Fill(origin); } else { From a0462e4fe348253d8e184916da82b07eb138d263 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Fri, 15 Jul 2022 10:59:24 +0200 Subject: [PATCH 3/7] Check also tracks associated to collisions for normalisation --- PWGHF/Tasks/HFMCValidation.cxx | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/PWGHF/Tasks/HFMCValidation.cxx b/PWGHF/Tasks/HFMCValidation.cxx index 4a2bc02f6c2..aa87b0ba2d4 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -242,15 +242,19 @@ 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, 2> histOriginTracks; HistogramRegistry registry{"registry", {}}; void init(o2::framework::InitContext&) { - auto histOriginNonAssociatedTracks = registry.add("histOriginNonAssociatedTracks", ";origin;entries", HistType::kTH1F, {{4, -1.5, 2.5}}); - histOriginNonAssociatedTracks->SetBinLabel(1, "no MC particle"); - histOriginNonAssociatedTracks->SetBinLabel(2, "no quark"); - histOriginNonAssociatedTracks->SetBinLabel(3, "charm"); - histOriginNonAssociatedTracks->SetBinLabel(4, "beauty"); + auto histOriginTracks[0] = registry.add("histOriginNonAssociatedTracks", ";origin;entries", HistType::kTH1F, {{4, -1.5, 2.5}}); + auto histOriginTracks[1] = registry.add("histOriginAssociatedTracks", ";origin;entries", HistType::kTH1F, {{4, -1.5, 2.5}}); + for (int iHist{0}; iHist < histOriginTracks.size(); ++iHist) { + histOriginTracks[iHist]->SetBinLabel(1, "no MC particle"); + histOriginTracks[iHist]->SetBinLabel(2, "no quark"); + histOriginTracks[iHist]->SetBinLabel(3, "charm"); + histOriginTracks[iHist]->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.}}); histDeltaPx[iHad] = registry.add(Form("histDeltaPx%s", particleNames[iHad].data()), Form("Px difference reco - MC %s; #it{p}_{x}^{reco} - #it{p}_{x}^{gen} (GeV/#it{c}); entries", labels[iHad].data()), HistType::kTH1F, {{2000, -1., 1.}}); @@ -275,17 +279,28 @@ struct ValidationRecLevel { using HfCandProng3WithMCRec = soa::Join; Partition collNonAssociatedTracks = aod::track::collisionId < 0; + Partition collAssociatedTracks = aod::track::collisionId >= 0; void process(HfCandProng2WithMCRec const& cand2Prongs, HfCandProng3WithMCRec const& cand3Prongs, aod::BigTracksMC const& tracks, aod::McParticles const& particlesMC) { - // loop over tracks + // loop over tracks without collision association for (auto& track : collNonAssociatedTracks) { if (track.has_mcParticle()) { auto particle = arrDaughters[iProng].mcParticle(); // get corresponding MC particle to check origin auto origin = RecoDecay::getCharmHadronOrigin(particlesMC, particle, true); - histOriginNonAssociatedTracks->Fill(origin); + histOriginTracks[0]->Fill(origin); + } else { + histOriginTracks[0]->Fill(-1.); + } + } + // loop over tracks with collision association + for (auto& track : collAssociatedTracks) { + if (track.has_mcParticle()) { + auto particle = arrDaughters[iProng].mcParticle(); // get corresponding MC particle to check origin + auto origin = RecoDecay::getCharmHadronOrigin(particlesMC, particle, true); + histOriginTracks[1]->Fill(origin); } else { - histOriginNonAssociatedTracks->Fill(-1.); + histOriginTracks[1]->Fill(-1.); } } From 7e4255588d0fb506c781e3d1ab55020c92c3aae7 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Fri, 15 Jul 2022 11:51:18 +0200 Subject: [PATCH 4/7] Fix typos --- PWGHF/Tasks/HFMCValidation.cxx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/PWGHF/Tasks/HFMCValidation.cxx b/PWGHF/Tasks/HFMCValidation.cxx index aa87b0ba2d4..ca58bfdc615 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -247,13 +247,13 @@ struct ValidationRecLevel { HistogramRegistry registry{"registry", {}}; void init(o2::framework::InitContext&) { - auto histOriginTracks[0] = registry.add("histOriginNonAssociatedTracks", ";origin;entries", HistType::kTH1F, {{4, -1.5, 2.5}}); - auto histOriginTracks[1] = registry.add("histOriginAssociatedTracks", ";origin;entries", HistType::kTH1F, {{4, -1.5, 2.5}}); + histOriginTracks[0] = registry.add("histOriginNonAssociatedTracks", ";origin;entries", HistType::kTH1F, {{4, -1.5, 2.5}}); + histOriginTracks[1] = registry.add("histOriginAssociatedTracks", ";origin;entries", HistType::kTH1F, {{4, -1.5, 2.5}}); for (int iHist{0}; iHist < histOriginTracks.size(); ++iHist) { - histOriginTracks[iHist]->SetBinLabel(1, "no MC particle"); - histOriginTracks[iHist]->SetBinLabel(2, "no quark"); - histOriginTracks[iHist]->SetBinLabel(3, "charm"); - histOriginTracks[iHist]->SetBinLabel(4, "beauty"); + 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"); } 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.}}); @@ -278,15 +278,15 @@ struct ValidationRecLevel { using HfCandProng2WithMCRec = soa::Join; using HfCandProng3WithMCRec = soa::Join; - Partition collNonAssociatedTracks = aod::track::collisionId < 0; - Partition collAssociatedTracks = aod::track::collisionId >= 0; + Partition collNonAssociatedTracks = aod::track::collisionId < 0; + Partition collAssociatedTracks = aod::track::collisionId >= 0; void process(HfCandProng2WithMCRec const& cand2Prongs, HfCandProng3WithMCRec const& cand3Prongs, aod::BigTracksMC const& tracks, aod::McParticles const& particlesMC) { // loop over tracks without collision association for (auto& track : collNonAssociatedTracks) { if (track.has_mcParticle()) { - auto particle = arrDaughters[iProng].mcParticle(); // get corresponding MC particle to check origin + auto particle = track.mcParticle(); // get corresponding MC particle to check origin auto origin = RecoDecay::getCharmHadronOrigin(particlesMC, particle, true); histOriginTracks[0]->Fill(origin); } else { @@ -296,7 +296,7 @@ struct ValidationRecLevel { // loop over tracks with collision association for (auto& track : collAssociatedTracks) { if (track.has_mcParticle()) { - auto particle = arrDaughters[iProng].mcParticle(); // get corresponding MC particle to check origin + auto particle = track.mcParticle(); // get corresponding MC particle to check origin auto origin = RecoDecay::getCharmHadronOrigin(particlesMC, particle, true); histOriginTracks[1]->Fill(origin); } else { From b3025e381580243ebe9bf1cbcac84bf382eb594f Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Fri, 15 Jul 2022 11:55:33 +0200 Subject: [PATCH 5/7] Remove partitions --- PWGHF/Tasks/HFMCValidation.cxx | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/PWGHF/Tasks/HFMCValidation.cxx b/PWGHF/Tasks/HFMCValidation.cxx index ca58bfdc615..a9d4516660f 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -278,29 +278,17 @@ struct ValidationRecLevel { using HfCandProng2WithMCRec = soa::Join; using HfCandProng3WithMCRec = soa::Join; - Partition collNonAssociatedTracks = aod::track::collisionId < 0; - Partition collAssociatedTracks = aod::track::collisionId >= 0; - void process(HfCandProng2WithMCRec const& cand2Prongs, HfCandProng3WithMCRec const& cand3Prongs, aod::BigTracksMC const& tracks, aod::McParticles const& particlesMC) { - // loop over tracks without collision association - for (auto& track : collNonAssociatedTracks) { - if (track.has_mcParticle()) { - auto particle = track.mcParticle(); // get corresponding MC particle to check origin - auto origin = RecoDecay::getCharmHadronOrigin(particlesMC, particle, true); - histOriginTracks[0]->Fill(origin); - } else { - histOriginTracks[0]->Fill(-1.); - } - } - // loop over tracks with collision association - for (auto& track : collAssociatedTracks) { + // loop over tracks + for (auto& track : tracks) { + uint index = uint(track.collisionId() >= 0); if (track.has_mcParticle()) { auto particle = track.mcParticle(); // get corresponding MC particle to check origin auto origin = RecoDecay::getCharmHadronOrigin(particlesMC, particle, true); - histOriginTracks[1]->Fill(origin); + histOriginTracks[index]->Fill(origin); } else { - histOriginTracks[1]->Fill(-1.); + histOriginTracks[index]->Fill(origin); } } From 13320f2fb629a376c921d9c87b4a496c1f4f565d Mon Sep 17 00:00:00 2001 From: Fabrizio Date: Fri, 15 Jul 2022 12:02:17 +0200 Subject: [PATCH 6/7] Update PWGHF/Tasks/HFMCValidation.cxx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vít Kučera --- 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 a9d4516660f..11fee1a018d 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -288,7 +288,7 @@ struct ValidationRecLevel { auto origin = RecoDecay::getCharmHadronOrigin(particlesMC, particle, true); histOriginTracks[index]->Fill(origin); } else { - histOriginTracks[index]->Fill(origin); + histOriginTracks[index]->Fill(-1.); } } From defffdafb20371221ecc1d464b59b9ebd438d8ec Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Fri, 15 Jul 2022 12:20:11 +0200 Subject: [PATCH 7/7] Change type in for loop --- 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 11fee1a018d..bb2fab66e48 100644 --- a/PWGHF/Tasks/HFMCValidation.cxx +++ b/PWGHF/Tasks/HFMCValidation.cxx @@ -249,7 +249,7 @@ struct ValidationRecLevel { { histOriginTracks[0] = registry.add("histOriginNonAssociatedTracks", ";origin;entries", HistType::kTH1F, {{4, -1.5, 2.5}}); histOriginTracks[1] = registry.add("histOriginAssociatedTracks", ";origin;entries", HistType::kTH1F, {{4, -1.5, 2.5}}); - for (int iHist{0}; iHist < histOriginTracks.size(); ++iHist) { + 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");