From 22f3b65ce821cf6ab046f2276cea85a1e073874a Mon Sep 17 00:00:00 2001 From: Rafael Manhart <56776511+RafRaf11@users.noreply.github.com> Date: Tue, 28 Jan 2025 14:42:41 +0100 Subject: [PATCH 1/2] Update NucleiEfficiencyTask.cxx Bugfix: fixed bug with Lorenzvector cut Code cleanup --- PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx | 282 ++++++++++++-------- 1 file changed, 164 insertions(+), 118 deletions(-) diff --git a/PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx b/PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx index cf29855fc2f..5c8091fd2cc 100644 --- a/PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx +++ b/PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx @@ -16,64 +16,76 @@ #include #include #include +#include +#include +#include #include "ReconstructionDataFormats/Track.h" +#include "Framework/runDataProcessing.h" #include "Framework/AnalysisTask.h" #include "Framework/AnalysisDataModel.h" #include "Framework/ASoAHelpers.h" +#include "Common/DataModel/PIDResponse.h" #include "Common/DataModel/TrackSelectionTables.h" +#include "Common/DataModel/McCollisionExtra.h" #include "Common/DataModel/EventSelection.h" #include "Common/DataModel/Centrality.h" -#include "Framework/runDataProcessing.h" #include "Framework/HistogramRegistry.h" +#include "PWGLF/DataModel/LFParticleIdentification.h" #include "PWGDQ/DataModel/ReducedInfoTables.h" #include "TPDGCode.h" +#include "Common/DataModel/Multiplicity.h" +#include "Common/Core/TrackSelection.h" +#include "Framework/StaticFor.h" +#include "Common/Core/TrackSelectionDefaults.h" +#include "PWGLF/DataModel/spectraTOF.h" +#include "Framework/O2DatabasePDGPlugin.h" +#include "PWGLF/Utils/inelGt.h" +#include "PWGLF/DataModel/mcCentrality.h" +#include "Common/Core/RecoDecay.h" using namespace o2; +using namespace o2::track; using namespace o2::framework; using namespace o2::framework::expressions; struct NucleiEfficiencyTask { - HistogramRegistry MC_truth_reg{"MC_particles_gen", {}, OutputObjHandlingPolicy::AnalysisObject, true, true}; - HistogramRegistry MC_truth_reg_cent{"MC_particles_gen_cent", {}, OutputObjHandlingPolicy::AnalysisObject, true, true}; + HistogramRegistry MC_gen_reg{"MC_particles_gen", {}, OutputObjHandlingPolicy::AnalysisObject, true, true}; + HistogramRegistry MC_gen_reg_cent{"MC_particles_gen_cent", {}, OutputObjHandlingPolicy::AnalysisObject, true, true}; HistogramRegistry MC_recon_reg{"MC_particles_reco", {}, OutputObjHandlingPolicy::AnalysisObject, true, true}; HistogramRegistry MC_recon_reg_cent{"MC_particles_reco_cent", {}, OutputObjHandlingPolicy::AnalysisObject, true, true}; - OutputObj histPDG_mctruth{TH1F("PDG_gen", "PDG;PDG code", 20, 0.0, 20.0)}; - OutputObj histPDG{TH1F("PDG_reco", "PDG;PDG code", 20, 0.0, 20.0)}; + OutputObj histPDG_gen{TH1F("PDG_gen", "PDG;PDG code", 18, 0.0, 18)}; + OutputObj histPDG_reco{TH1F("PDG_reco", "PDG;PDG code", 18, 0.0, 18)}; void init(o2::framework::InitContext&) { std::vector ptBinning = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.8, 3.2, 3.6, 4., 5., 6., 8., 10., 12., 14.}; - std::vector centBinning = {0., 10., 20., 30., 40., 50., 60., 70., 80., 100.}; std::vector etaBinning = {-1.0, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0}; std::vector PDGBinning = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0}; AxisSpec ptAxis = {ptBinning, "#it{p}_{T} (GeV/#it{c})"}; AxisSpec pAxis = {ptBinning, "#it{p} (GeV/#it{c})"}; - AxisSpec centralityAxis = {100, 0.0, 100.0, "VT0C (%)"}; - AxisSpec centralityAxis_extended = {105, 0.0, 105.0, "VT0C (%)"}; + AxisSpec centralityAxis = {100, 0.0, 105.0, "VT0C (%)"}; AxisSpec etaAxis = {etaBinning, "#eta"}; - AxisSpec centAxis = {centBinning, "Centrality (%)"}; - AxisSpec ImPaAxis = {centBinning, "Impact parameter"}; + AxisSpec ImPaAxis = {100, 0.0, 105.0, "Impact parameter"}; AxisSpec PDGBINNING = {PDGBinning, "PDG code"}; - // Generated - MC_truth_reg.add("histGenVtxMC", "MC generated vertex z position", HistType::kTH1F, {{400, -40., +40., "z position (cm)"}}); - MC_truth_reg.add("histCentrality", "Impact parameter", HistType::kTH1F, {centralityAxis_extended}); - MC_truth_reg.add("hist_gen_p", "generated p distribution", HistType::kTH2F, {pAxis, PDGBINNING}); - MC_truth_reg.add("hist_gen_pT", "generated p_{T} distribution", HistType::kTH2F, {ptAxis, PDGBINNING}); - MC_truth_reg.add("histPhi", "#phi", HistType::kTH2F, {{100, 0., 2. * TMath::Pi()}, PDGBINNING}); - MC_truth_reg.add("histEta", "#eta", HistType::kTH2F, {{102, -2.01, 2.01}, PDGBINNING}); - MC_truth_reg.add("histRapid", "#gamma", HistType::kTH2F, {{1000, -5.0, 5.0}, PDGBINNING}); - // Centrality - MC_truth_reg_cent.add("hist_gen_p_cent", "generated p distribution vs impact param", HistType::kTH3F, {pAxis, PDGBINNING, ImPaAxis}); - MC_truth_reg_cent.add("hist_gen_pT_cent", "generated p_{T} distribution vs impact param", HistType::kTH3F, {ptAxis, PDGBINNING, ImPaAxis}); - - // Reconstructed + // *********************** Generated ********************** + MC_gen_reg.add("histGenVtxMC", "MC generated vertex z position", HistType::kTH1F, {{400, -40., +40., "z position (cm)"}}); + MC_gen_reg.add("histCentrality", "Impact parameter", HistType::kTH1F, {centralityAxis}); + MC_gen_reg.add("hist_gen_p", "generated p distribution", HistType::kTH2F, {pAxis, PDGBINNING}); + MC_gen_reg.add("hist_gen_pT", "generated p_{T} distribution", HistType::kTH2F, {ptAxis, PDGBINNING}); + MC_gen_reg.add("histPhi", "#phi", HistType::kTH2F, {{100, 0., 2. * TMath::Pi()}, PDGBINNING}); + MC_gen_reg.add("histEta", "#eta", HistType::kTH2F, {{102, -2.01, 2.01}, PDGBINNING}); + MC_gen_reg.add("histRapid", "#gamma", HistType::kTH2F, {{1000, -5.0, 5.0}, PDGBINNING}); + MC_gen_reg_cent.add("hist_gen_p_cent", "generated p distribution vs impact param", HistType::kTH3F, {pAxis, PDGBINNING, ImPaAxis}); + MC_gen_reg_cent.add("hist_gen_pT_cent", "generated p_{T} distribution vs impact param", HistType::kTH3F, {ptAxis, PDGBINNING, ImPaAxis}); + + // ********************** Reconstructed ********************* MC_recon_reg.add("histRecVtxMC", "MC reconstructed vertex z position", HistType::kTH1F, {{400, -40., +40., "z position (cm)"}}); - MC_recon_reg.add("histCentrality", "Centrality", HistType::kTH1F, {centralityAxis_extended}); + MC_recon_reg.add("histCentrality", "Centrality", HistType::kTH1F, {centralityAxis}); MC_recon_reg.add("histPhi", "#phi", HistType::kTH2F, {{100, 0., 2. * TMath::Pi()}, PDGBINNING}); MC_recon_reg.add("histEta", "#eta", HistType::kTH2F, {{102, -2.01, 2.01}, PDGBINNING}); MC_recon_reg.add("hist_rec_ITS_vs_p", "ITS reconstructed p distribution", HistType::kTH2F, {pAxis, PDGBINNING}); @@ -82,48 +94,82 @@ struct NucleiEfficiencyTask { MC_recon_reg.add("hist_rec_ITS_vs_pT", "ITS reconstructed p_{T} distribution", HistType::kTH2F, {ptAxis, PDGBINNING}); MC_recon_reg.add("hist_rec_ITS_TPC_vs_pT", "ITS_TPC reconstructed p_{T} distribution", HistType::kTH2F, {ptAxis, PDGBINNING}); MC_recon_reg.add("hist_rec_ITS_TPC_TOF_vs_pT", "ITS_TPC_TOF reconstructed p_{T} distribution", HistType::kTH2F, {ptAxis, PDGBINNING}); - // Centrality - MC_recon_reg_cent.add("hist_rec_ITS_vs_p_cent", "ITS reconstructed p distribution vs centrality", HistType::kTH3F, {pAxis, PDGBINNING, centAxis}); - MC_recon_reg_cent.add("hist_rec_ITS_TPC_vs_p_cent", "ITS_TPC reconstructed p distribution vs centrality", HistType::kTH3F, {pAxis, PDGBINNING, centAxis}); - MC_recon_reg_cent.add("hist_rec_ITS_TPC_TOF_vs_p_cent", "ITS_TPC_TOF reconstructed p distribution vs centrality", HistType::kTH3F, {pAxis, PDGBINNING, centAxis}); - MC_recon_reg_cent.add("hist_rec_ITS_vs_pT_cent", "ITS reconstructed p_{T} distribution vs centrality", HistType::kTH3F, {ptAxis, PDGBINNING, centAxis}); - MC_recon_reg_cent.add("hist_rec_ITS_TPC_vs_pT_cent", "ITS_TPC reconstructed p_{T} distribution vs centrality", HistType::kTH3F, {ptAxis, PDGBINNING, centAxis}); - MC_recon_reg_cent.add("hist_rec_ITS_TPC_TOF_vs_pT_cent", "ITS_TPC_TOF reconstructed p_{T} distribution vs centrality", HistType::kTH3F, {ptAxis, PDGBINNING, centAxis}); + MC_recon_reg_cent.add("hist_rec_ITS_vs_p_cent", "ITS reconstructed p distribution vs centrality", HistType::kTH3F, {pAxis, PDGBINNING, centralityAxis}); + MC_recon_reg_cent.add("hist_rec_ITS_TPC_vs_p_cent", "ITS_TPC reconstructed p distribution vs centrality", HistType::kTH3F, {pAxis, PDGBINNING, centralityAxis}); + MC_recon_reg_cent.add("hist_rec_ITS_TPC_TOF_vs_p_cent", "ITS_TPC_TOF reconstructed p distribution vs centrality", HistType::kTH3F, {pAxis, PDGBINNING, centralityAxis}); + MC_recon_reg_cent.add("hist_rec_ITS_vs_pT_cent", "ITS reconstructed p_{T} distribution vs centrality", HistType::kTH3F, {ptAxis, PDGBINNING, centralityAxis}); + MC_recon_reg_cent.add("hist_rec_ITS_TPC_vs_pT_cent", "ITS_TPC reconstructed p_{T} distribution vs centrality", HistType::kTH3F, {ptAxis, PDGBINNING, centralityAxis}); + MC_recon_reg_cent.add("hist_rec_ITS_TPC_TOF_vs_pT_cent", "ITS_TPC_TOF reconstructed p_{T} distribution vs centrality", HistType::kTH3F, {ptAxis, PDGBINNING, centralityAxis}); } + // ************************ Configurables *********************** Configurable event_selection_MC_sel8{"event_selection_MC_sel8", true, "Enable sel8 event selection in MC processing"}; - Configurable calc_cent{"calc_cent", false, "Enable centrality processing"}; Configurable y_cut_MC_gen{"y_cut_MC_gen", true, "Enable rapidity cut for generated MC"}; - Configurable eta_cut_MC_gen{"eta_cut_MC_gen", true, "Enable eta cut for generated MC"}; - Configurable use_pT_cut{"use_pT_cut", true, "0: p is used | 1: pT is used"}; Configurable yMin_gen{"yMin_gen", -0.5, "Maximum rapidity (generated)"}; Configurable yMax_gen{"yMax_gen", 0.5, "Minimum rapidity (generated)"}; - Configurable cfgCutVertex{"cfgCutVertex", 10.0f, "Accepted z-vertex range"}; - Configurable cfgCutEta{"cfgCutEta", 0.9f, "Eta range for tracks"}; Configurable yMin_reco{"yMin_reco", -0.5, "Maximum rapidity (reconstructed)"}; Configurable yMax_reco{"yMax_reco", 0.5, "Minimum rapidity (reconstructed)"}; - Configurable pmin_reco{"pmin_reco", 0.1f, "min p (reconstructed)"}; - Configurable pmax_reco{"pmax_reco", 1e+10f, "max p (reconstructed)"}; - Configurable pTmin_reco{"pTmin_reco", 0.1f, "min pT (reconstructed)"}; - Configurable pTmax_reco{"pTmax_reco", 1e+10f, "max pT (reconstructed)"}; + Configurable p_min{"p_min", 0.1f, "min track.pt()"}; + Configurable p_max{"p_max", 1e+10f, "max track.pt()"}; + Configurable cfgCutVertex{"cfgCutVertex", 10.0f, "Accepted z-vertex range"}; + Configurable cfgCutEta{"cfgCutEta", 0.9f, "Eta range for tracks"}; + Configurable minCentrality{"minCentrality", 0.0, "min Centrality used"}; + Configurable maxCentrality{"maxCentrality", 80.0, "max Centrality used"}; + Configurable enable_Centrality_cut{"enable_Centrality_cut", true, "enable Centrality cut"}; + + // Track filter + Configurable requireITS{"requireITS", true, "Additional cut on the ITS requirement"}; + Configurable requireTPC{"requireTPC", true, "Additional cut on the TPC requirement"}; + Configurable passedITSRefit{"passedITSRefit", true, "Additional cut on the ITS refit requirement"}; + Configurable passedTPCRefit{"passedTPCRefit", true, "Additional cut on the TPC refit requirement"}; Configurable minReqClusterITS{"minReqClusterITS", 1.0, "min number of clusters required in ITS"}; Configurable minReqClusterITSib{"minReqClusterITSib", 1.0, "min number of clusters required in ITS inner barrel"}; Configurable minTPCnClsFound{"minTPCnClsFound", 0.0f, "min number of crossed rows TPC"}; Configurable minNCrossedRowsTPC{"minNCrossedRowsTPC", 70.0f, "min number of crossed rows TPC"}; Configurable minRatioCrossedRowsTPC{"minRatioCrossedRowsTPC", 0.8f, "min ratio of crossed rows over findable clusters TPC"}; - Configurable maxRatioCrossedRowsTPC{"maxRatioCrossedRowsTPC", 1.5f, "max ratio of crossed rows over findable clusters TPC"}; - Configurable maxChi2ITS{"maxChi2ITS", 36.0f, "max chi2 per cluster ITS"}; - Configurable maxChi2TPC{"maxChi2TPC", 4.0f, "max chi2 per cluster TPC"}; - Configurable maxDCA_XY{"maxDCA_XY", 0.5f, "max DCA to vertex xy"}; + Configurable maxRatioCrossedRowsTPC{"maxRatioCrossedRowsTPC", 2.0f, "max ratio of crossed rows over findable clusters TPC"}; + Configurable maxChi2PerClusterTPC{"maxChi2PerClusterTPC", 4.f, "Cut on the maximum value of the chi2 per cluster in the TPC"}; + Configurable minChi2PerClusterTPC{"minChi2PerClusterTPC", 0.5f, "Cut on the minimum value of the chi2 per cluster in the TPC"}; + Configurable maxChi2PerClusterITS{"maxChi2PerClusterITS", 36.f, "Cut on the maximum value of the chi2 per cluster in the ITS"}; + Configurable maxDcaXYFactor{"maxDcaXYFactor", 0.5f, "DCA xy factor"}; Configurable maxDCA_Z{"maxDCA_Z", 2.0f, "max DCA to vertex z"}; + Configurable lastRequiredTrdCluster{"lastRequiredTrdCluster", -1, "Last cluster to required in TRD for track selection. -1 does not require any TRD cluster"}; + Configurable requireGoldenChi2{"requireGoldenChi2", false, "Enable the requirement of GoldenChi2"}; + + + + Configurable calc_cent{"calc_cent", false, "Enable centrality processing"}; + + Configurable eta_cut_MC_gen{"eta_cut_MC_gen", true, "Enable eta cut for generated MC"}; + Configurable use_pT_cut{"use_pT_cut", true, "0: p is used | 1: pT is used"}; + + + Configurable removeITSROFrameBorder{"removeITSROFrameBorder", false, "Remove TF border"}; + Configurable removeNoSameBunchPileup{"removeNoSameBunchPileup", false, "Remove TF border"}; + Configurable requireIsGoodZvtxFT0vsPV{"requireIsGoodZvtxFT0vsPV", false, "Remove TF border"}; + Configurable requireIsVertexITSTPC{"requireIsVertexITSTPC", false, "Remove TF border"}; + Configurable removeNoTimeFrameBorder{"removeNoTimeFrameBorder", false, "Remove TF border"}; + + //*********************************************************************************** + + template + bool isEventSelected(CollisionType const& collision) + { + if (removeITSROFrameBorder && !collision.selection_bit(aod::evsel::kNoITSROFrameBorder)) return false; + if (removeNoSameBunchPileup && !collision.selection_bit(aod::evsel::kNoSameBunchPileup)) return false; + if (requireIsGoodZvtxFT0vsPV && !collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV)) return false; + if (requireIsVertexITSTPC && !collision.selection_bit(aod::evsel::kIsVertexITSTPC)) return false; + if (removeNoTimeFrameBorder && !collision.selection_bit(aod::evsel::kNoTimeFrameBorder)) return false; + return true; + } - //**************************************************************************************************** + //*********************************************************************************** template void process_MC_gen(const McCollisionType& mcCollision, const McParticlesType& mcParticles) { - MC_truth_reg.fill(HIST("histGenVtxMC"), mcCollision.posZ()); - MC_truth_reg.fill(HIST("histCentrality"), mcCollision.impactParameter()); + MC_gen_reg.fill(HIST("histGenVtxMC"), mcCollision.posZ()); + MC_gen_reg.fill(HIST("histCentrality"), mcCollision.impactParameter()); for (const auto& MCparticle : mcParticles) { if (!MCparticle.isPhysicalPrimary()) @@ -133,181 +179,180 @@ struct NucleiEfficiencyTask { if ((TMath::Abs(MCparticle.eta()) > cfgCutEta) && eta_cut_MC_gen) continue; - int pdgbin = 0; + int pdgbin = -10; switch (MCparticle.pdgCode()) { case +211: - histPDG_mctruth->AddBinContent(1); + histPDG_gen->AddBinContent(1); pdgbin = 0; break; case -211: - histPDG_mctruth->AddBinContent(2); + histPDG_gen->AddBinContent(2); pdgbin = 1; break; case +321: - histPDG_mctruth->AddBinContent(3); + histPDG_gen->AddBinContent(3); pdgbin = 2; break; case -321: - histPDG_mctruth->AddBinContent(4); + histPDG_gen->AddBinContent(4); pdgbin = 3; break; case +2212: - histPDG_mctruth->AddBinContent(5); + histPDG_gen->AddBinContent(5); pdgbin = 4; break; case -2212: - histPDG_mctruth->AddBinContent(6); + histPDG_gen->AddBinContent(6); pdgbin = 5; break; case +1000010020: - histPDG_mctruth->AddBinContent(7); + histPDG_gen->AddBinContent(7); pdgbin = 6; break; case -1000010020: - histPDG_mctruth->AddBinContent(8); + histPDG_gen->AddBinContent(8); pdgbin = 7; break; case +1000010030: - histPDG_mctruth->AddBinContent(9); + histPDG_gen->AddBinContent(9); pdgbin = 8; break; case -1000010030: - histPDG_mctruth->AddBinContent(10); + histPDG_gen->AddBinContent(10); pdgbin = 9; break; case +1000020030: - histPDG_mctruth->AddBinContent(11); + histPDG_gen->AddBinContent(11); pdgbin = 10; break; case -1000020030: - histPDG_mctruth->AddBinContent(12); + histPDG_gen->AddBinContent(12); pdgbin = 11; break; case +1000020040: - histPDG_mctruth->AddBinContent(13); + histPDG_gen->AddBinContent(13); pdgbin = 12; break; case -1000020040: - histPDG_mctruth->AddBinContent(14); + histPDG_gen->AddBinContent(14); pdgbin = 13; break; default: + pdgbin = -10; continue; + break; } - MC_truth_reg.fill(HIST("histPhi"), MCparticle.phi(), pdgbin); - MC_truth_reg.fill(HIST("histEta"), MCparticle.eta(), pdgbin); - MC_truth_reg.fill(HIST("histRapid"), MCparticle.y(), pdgbin); - MC_truth_reg.fill(HIST("hist_gen_p"), MCparticle.p(), pdgbin); - MC_truth_reg.fill(HIST("hist_gen_pT"), MCparticle.pt(), pdgbin); + MC_gen_reg.fill(HIST("histPhi"), MCparticle.phi(), pdgbin); + MC_gen_reg.fill(HIST("histEta"), MCparticle.eta(), pdgbin); + MC_gen_reg.fill(HIST("histRapid"), MCparticle.y(), pdgbin); + MC_gen_reg.fill(HIST("hist_gen_p"), MCparticle.p(), pdgbin); + MC_gen_reg.fill(HIST("hist_gen_pT"), MCparticle.pt(), pdgbin); if (calc_cent) { - MC_truth_reg_cent.fill(HIST("hist_gen_p_cent"), MCparticle.p(), pdgbin, mcCollision.impactParameter()); - MC_truth_reg_cent.fill(HIST("hist_gen_pT_cent"), MCparticle.pt(), pdgbin, mcCollision.impactParameter()); + MC_gen_reg_cent.fill(HIST("hist_gen_p_cent"), MCparticle.p(), pdgbin, mcCollision.impactParameter()); + MC_gen_reg_cent.fill(HIST("hist_gen_pT_cent"), MCparticle.pt(), pdgbin, mcCollision.impactParameter()); } } } - //**************************************************************************************************** + //*********************************************************************************** template void process_MC_reco(const CollisionType& collision, const TracksType& tracks, const mcParticlesType& /*mcParticles*/) { if (event_selection_MC_sel8 && !collision.sel8()) return; + if (collision.posZ() > cfgCutVertex) return; MC_recon_reg.fill(HIST("histRecVtxMC"), collision.posZ()); MC_recon_reg.fill(HIST("histCentrality"), collision.centFT0C()); + if (!isEventSelected(collision)) return; for (auto& track : tracks) { const auto particle = track.mcParticle(); if (!particle.isPhysicalPrimary()) continue; + TLorentzVector lorentzVector_particle_MC{}; - int pdgbin = 0; + int pdgbin = -10; switch (particle.pdgCode()) { case +211: - histPDG->AddBinContent(1); + histPDG_reco->AddBinContent(1); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassPiPlus); pdgbin = 0; break; case -211: - histPDG->AddBinContent(2); + histPDG_reco->AddBinContent(2); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassPiPlus); pdgbin = 1; break; case +321: - histPDG->AddBinContent(3); + histPDG_reco->AddBinContent(3); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassKPlus); pdgbin = 2; break; case -321: - histPDG->AddBinContent(4); + histPDG_reco->AddBinContent(4); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassKPlus); pdgbin = 3; break; case +2212: - histPDG->AddBinContent(5); + histPDG_reco->AddBinContent(5); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassProton); pdgbin = 4; break; case -2212: - histPDG->AddBinContent(6); + histPDG_reco->AddBinContent(6); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassProton); pdgbin = 5; break; case +1000010020: - histPDG->AddBinContent(7); + histPDG_reco->AddBinContent(7); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassDeuteron); pdgbin = 6; break; case -1000010020: - histPDG->AddBinContent(8); + histPDG_reco->AddBinContent(8); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassDeuteron); pdgbin = 7; break; case +1000010030: - histPDG->AddBinContent(9); + histPDG_reco->AddBinContent(9); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassTriton); pdgbin = 8; break; case -1000010030: - histPDG->AddBinContent(10); + histPDG_reco->AddBinContent(10); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassTriton); pdgbin = 9; break; case +1000020030: - histPDG->AddBinContent(11); + histPDG_reco->AddBinContent(11); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt() * 2.0, track.eta(), track.phi(), constants::physics::MassHelium3); pdgbin = 10; break; case -1000020030: - histPDG->AddBinContent(12); + histPDG_reco->AddBinContent(12); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt() * 2.0, track.eta(), track.phi(), constants::physics::MassHelium3); pdgbin = 11; break; case +1000020040: - histPDG->AddBinContent(13); + histPDG_reco->AddBinContent(13); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt() * 2.0, track.eta(), track.phi(), constants::physics::MassAlpha); pdgbin = 12; break; case -1000020040: - histPDG->AddBinContent(14); + histPDG_reco->AddBinContent(14); + lorentzVector_particle_MC.SetPtEtaPhiM(track.pt() * 2.0, track.eta(), track.phi(), constants::physics::MassAlpha); pdgbin = 13; break; default: + pdgbin = -10; continue; + break; } - TLorentzVector lorentzVector_pion{}; - TLorentzVector lorentzVector_kaon{}; - TLorentzVector lorentzVector_proton{}; - TLorentzVector lorentzVector_deuteron{}; - TLorentzVector lorentzVector_triton{}; - TLorentzVector lorentzVector_He3{}; - TLorentzVector lorentzVector_He4{}; - - lorentzVector_pion.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassPiPlus); - lorentzVector_kaon.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassKPlus); - lorentzVector_proton.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassProton); - lorentzVector_deuteron.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassDeuteron); - lorentzVector_triton.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), constants::physics::MassTriton); - lorentzVector_He3.SetPtEtaPhiM(track.pt() * 2.0, track.eta(), track.phi(), constants::physics::MassHelium3); - lorentzVector_He4.SetPtEtaPhiM(track.pt() * 2.0, track.eta(), track.phi(), constants::physics::MassAlpha); - - if (lorentzVector_pion.Rapidity() < yMin_reco || lorentzVector_pion.Rapidity() > yMax_reco || - lorentzVector_kaon.Rapidity() < yMin_reco || lorentzVector_kaon.Rapidity() > yMax_reco || - lorentzVector_proton.Rapidity() < yMin_reco || lorentzVector_proton.Rapidity() > yMax_reco || - lorentzVector_deuteron.Rapidity() < yMin_reco || lorentzVector_deuteron.Rapidity() > yMax_reco || - lorentzVector_triton.Rapidity() < yMin_reco || lorentzVector_triton.Rapidity() > yMax_reco || - lorentzVector_He3.Rapidity() < yMin_reco || lorentzVector_He3.Rapidity() > yMax_reco || - lorentzVector_He4.Rapidity() < yMin_reco || lorentzVector_He4.Rapidity() > yMax_reco) + if (lorentzVector_particle_MC.Rapidity() < yMin_reco || lorentzVector_particle_MC.Rapidity() > yMax_reco) continue; float TPCnumberClsFound = track.tpcNClsFound(); @@ -315,17 +360,18 @@ struct NucleiEfficiencyTask { float RatioCrossedRowsOverFindableTPC = track.tpcCrossedRowsOverFindableCls(); float Chi2perClusterTPC = track.tpcChi2NCl(); float Chi2perClusterITS = track.itsChi2NCl(); + + bool insideDCAxy = (std::abs(track.dcaXY()) <= (maxDcaXYFactor.value * (0.0105f + 0.0350f / pow(track.pt(), 1.1f)))); - if (TPCnumberClsFound < minTPCnClsFound || TPC_nCls_Crossed_Rows < minNCrossedRowsTPC || RatioCrossedRowsOverFindableTPC < minRatioCrossedRowsTPC || RatioCrossedRowsOverFindableTPC > maxRatioCrossedRowsTPC || Chi2perClusterTPC > maxChi2TPC || Chi2perClusterITS > maxChi2ITS || !(track.passedTPCRefit()) || !(track.passedITSRefit()) || (track.itsNClsInnerBarrel()) < minReqClusterITSib || (track.itsNCls()) < minReqClusterITS || TMath::Abs(track.dcaXY()) > maxDCA_XY || TMath::Abs(track.dcaZ()) > maxDCA_Z) + if (!(insideDCAxy) || TMath::Abs(track.dcaZ()) > maxDCA_Z || TPCnumberClsFound < minTPCnClsFound || TPC_nCls_Crossed_Rows < minNCrossedRowsTPC || RatioCrossedRowsOverFindableTPC < minRatioCrossedRowsTPC || RatioCrossedRowsOverFindableTPC > maxRatioCrossedRowsTPC || Chi2perClusterTPC > maxChi2PerClusterTPC || Chi2perClusterTPC < minChi2PerClusterTPC || Chi2perClusterITS > maxChi2PerClusterITS || !(track.passedTPCRefit()) || !(track.passedITSRefit()) || (track.itsNClsInnerBarrel()) < minReqClusterITSib || (track.itsNCls()) < minReqClusterITS || track.pt() < p_min || track.pt() > p_max) + continue; + if ((requireITS && !(track.hasITS())) || (requireTPC && !(track.hasTPC()))) continue; + if (requireGoldenChi2 && !(track.passedGoldenChi2())) + continue; + - if (use_pT_cut) { - if (track.pt() < pTmin_reco || track.pt() > pTmax_reco) - continue; - } else { - if (track.p() < pmin_reco || track.p() > pmax_reco) - continue; - } + MC_recon_reg.fill(HIST("histPhi"), track.phi(), pdgbin); MC_recon_reg.fill(HIST("histEta"), track.eta(), pdgbin); @@ -389,7 +435,7 @@ struct NucleiEfficiencyTask { } } - //**************************************************************************************************** + //*********************************************************************************** void processMCgen(aod::McCollision const& mcCollision, aod::McParticles const& mcParticles) { @@ -409,7 +455,7 @@ struct NucleiEfficiencyTask { PROCESS_SWITCH(NucleiEfficiencyTask, processMCreco, "process reconstructed MC", false); }; -//**************************************************************************************************** +//*********************************************************************************** WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { From 4674ab5c55ea4c34e9455f2a99fe7ce03378f61f Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 28 Jan 2025 13:43:21 +0000 Subject: [PATCH 2/2] Please consider the following formatting changes --- PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx | 37 +++++++++++---------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx b/PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx index 5c8091fd2cc..3a5ff0eff43 100644 --- a/PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx +++ b/PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx @@ -116,7 +116,7 @@ struct NucleiEfficiencyTask { Configurable minCentrality{"minCentrality", 0.0, "min Centrality used"}; Configurable maxCentrality{"maxCentrality", 80.0, "max Centrality used"}; Configurable enable_Centrality_cut{"enable_Centrality_cut", true, "enable Centrality cut"}; - + // Track filter Configurable requireITS{"requireITS", true, "Additional cut on the ITS requirement"}; Configurable requireTPC{"requireTPC", true, "Additional cut on the TPC requirement"}; @@ -135,15 +135,12 @@ struct NucleiEfficiencyTask { Configurable maxDCA_Z{"maxDCA_Z", 2.0f, "max DCA to vertex z"}; Configurable lastRequiredTrdCluster{"lastRequiredTrdCluster", -1, "Last cluster to required in TRD for track selection. -1 does not require any TRD cluster"}; Configurable requireGoldenChi2{"requireGoldenChi2", false, "Enable the requirement of GoldenChi2"}; - - - + Configurable calc_cent{"calc_cent", false, "Enable centrality processing"}; - + Configurable eta_cut_MC_gen{"eta_cut_MC_gen", true, "Enable eta cut for generated MC"}; Configurable use_pT_cut{"use_pT_cut", true, "0: p is used | 1: pT is used"}; - - + Configurable removeITSROFrameBorder{"removeITSROFrameBorder", false, "Remove TF border"}; Configurable removeNoSameBunchPileup{"removeNoSameBunchPileup", false, "Remove TF border"}; Configurable requireIsGoodZvtxFT0vsPV{"requireIsGoodZvtxFT0vsPV", false, "Remove TF border"}; @@ -155,11 +152,16 @@ struct NucleiEfficiencyTask { template bool isEventSelected(CollisionType const& collision) { - if (removeITSROFrameBorder && !collision.selection_bit(aod::evsel::kNoITSROFrameBorder)) return false; - if (removeNoSameBunchPileup && !collision.selection_bit(aod::evsel::kNoSameBunchPileup)) return false; - if (requireIsGoodZvtxFT0vsPV && !collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV)) return false; - if (requireIsVertexITSTPC && !collision.selection_bit(aod::evsel::kIsVertexITSTPC)) return false; - if (removeNoTimeFrameBorder && !collision.selection_bit(aod::evsel::kNoTimeFrameBorder)) return false; + if (removeITSROFrameBorder && !collision.selection_bit(aod::evsel::kNoITSROFrameBorder)) + return false; + if (removeNoSameBunchPileup && !collision.selection_bit(aod::evsel::kNoSameBunchPileup)) + return false; + if (requireIsGoodZvtxFT0vsPV && !collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV)) + return false; + if (requireIsVertexITSTPC && !collision.selection_bit(aod::evsel::kIsVertexITSTPC)) + return false; + if (removeNoTimeFrameBorder && !collision.selection_bit(aod::evsel::kNoTimeFrameBorder)) + return false; return true; } @@ -263,10 +265,12 @@ struct NucleiEfficiencyTask { { if (event_selection_MC_sel8 && !collision.sel8()) return; - if (collision.posZ() > cfgCutVertex) return; + if (collision.posZ() > cfgCutVertex) + return; MC_recon_reg.fill(HIST("histRecVtxMC"), collision.posZ()); MC_recon_reg.fill(HIST("histCentrality"), collision.centFT0C()); - if (!isEventSelected(collision)) return; + if (!isEventSelected(collision)) + return; for (auto& track : tracks) { const auto particle = track.mcParticle(); @@ -360,7 +364,7 @@ struct NucleiEfficiencyTask { float RatioCrossedRowsOverFindableTPC = track.tpcCrossedRowsOverFindableCls(); float Chi2perClusterTPC = track.tpcChi2NCl(); float Chi2perClusterITS = track.itsChi2NCl(); - + bool insideDCAxy = (std::abs(track.dcaXY()) <= (maxDcaXYFactor.value * (0.0105f + 0.0350f / pow(track.pt(), 1.1f)))); if (!(insideDCAxy) || TMath::Abs(track.dcaZ()) > maxDCA_Z || TPCnumberClsFound < minTPCnClsFound || TPC_nCls_Crossed_Rows < minNCrossedRowsTPC || RatioCrossedRowsOverFindableTPC < minRatioCrossedRowsTPC || RatioCrossedRowsOverFindableTPC > maxRatioCrossedRowsTPC || Chi2perClusterTPC > maxChi2PerClusterTPC || Chi2perClusterTPC < minChi2PerClusterTPC || Chi2perClusterITS > maxChi2PerClusterITS || !(track.passedTPCRefit()) || !(track.passedITSRefit()) || (track.itsNClsInnerBarrel()) < minReqClusterITSib || (track.itsNCls()) < minReqClusterITS || track.pt() < p_min || track.pt() > p_max) @@ -369,9 +373,6 @@ struct NucleiEfficiencyTask { continue; if (requireGoldenChi2 && !(track.passedGoldenChi2())) continue; - - - MC_recon_reg.fill(HIST("histPhi"), track.phi(), pdgbin); MC_recon_reg.fill(HIST("histEta"), track.eta(), pdgbin);