From 4ad6617d8d06201f606dea94349636d8ec181ad5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Thu, 3 Feb 2022 16:36:25 +0100 Subject: [PATCH] Add efficiency per charge --- DPG/Tasks/qaEfficiency.cxx | 130 ++++++++++++++++++++++++++++++++----- 1 file changed, 113 insertions(+), 17 deletions(-) diff --git a/DPG/Tasks/qaEfficiency.cxx b/DPG/Tasks/qaEfficiency.cxx index fdd36efc4e1..3370b83e212 100644 --- a/DPG/Tasks/qaEfficiency.cxx +++ b/DPG/Tasks/qaEfficiency.cxx @@ -41,14 +41,30 @@ void customize(std::vector& workflowOptions) {"eff-pr", VariantType::Int, 0, {"Efficiency for the Proton PDG code"}}, {"eff-de", VariantType::Int, 0, {"Efficiency for the Deuteron PDG code"}}, {"eff-tr", VariantType::Int, 0, {"Efficiency for the Triton PDG code"}}, - {"eff-he", VariantType::Int, 0, {"Efficiency for the Helium3 PDG code"}}}; + {"eff-he", VariantType::Int, 0, {"Efficiency for the Helium3 PDG code"}}, + {"eff-el-pos", VariantType::Int, 0, {"Efficiency for the Electron Positive PDG code"}}, + {"eff-mu-pos", VariantType::Int, 0, {"Efficiency for the Muon Positive PDG code"}}, + {"eff-pi-pos", VariantType::Int, 0, {"Efficiency for the Pion Positive PDG code"}}, + {"eff-ka-pos", VariantType::Int, 0, {"Efficiency for the Kaon Positive PDG code"}}, + {"eff-pr-pos", VariantType::Int, 0, {"Efficiency for the Proton Positive PDG code"}}, + {"eff-de-pos", VariantType::Int, 0, {"Efficiency for the Deuteron Positive PDG code"}}, + {"eff-tr-pos", VariantType::Int, 0, {"Efficiency for the Triton Positive PDG code"}}, + {"eff-he-pos", VariantType::Int, 0, {"Efficiency for the Helium3 Positive PDG code"}}, + {"eff-el-neg", VariantType::Int, 0, {"Efficiency for the Electron Negative PDG code"}}, + {"eff-mu-neg", VariantType::Int, 0, {"Efficiency for the Muon Negative PDG code"}}, + {"eff-pi-neg", VariantType::Int, 0, {"Efficiency for the Pion Negative PDG code"}}, + {"eff-ka-neg", VariantType::Int, 0, {"Efficiency for the Kaon Negative PDG code"}}, + {"eff-pr-neg", VariantType::Int, 0, {"Efficiency for the Proton Negative PDG code"}}, + {"eff-de-neg", VariantType::Int, 0, {"Efficiency for the Deuteron Negative PDG code"}}, + {"eff-tr-neg", VariantType::Int, 0, {"Efficiency for the Triton Negative PDG code"}}, + {"eff-he-neg", VariantType::Int, 0, {"Efficiency for the Helium3 Negative PDG code"}}}; std::swap(workflowOptions, options); } #include "Framework/runDataProcessing.h" /// Task to QA the efficiency of a particular particle defined by its pdg code -template +template struct QaTrackingEfficiency { static constexpr int nSpecies = 8; static constexpr int PDGs[nSpecies] = {kElectron, kMuonMinus, kPiPlus, kKPlus, kProton, 1000010020, 1000010030, 1000020030}; @@ -64,7 +80,6 @@ struct QaTrackingEfficiency { Configurable ptMin{"pt-min", 0.f, "Lower limit in pT"}; Configurable ptMax{"pt-max", 5.f, "Upper limit in pT"}; Configurable selPrim{"sel-prim", 1, "1 select primaries, 0 select all particles"}; - Configurable pdgSign{"pdgSign", 0, "Sign to give to the PDG. If 0 both signs are accepted."}; Configurable noFakes{"noFakes", false, "Flag to reject tracks that have fake hits"}; // Event selection Configurable nMinNumberOfContributors{"nMinNumberOfContributors", 2, "Minimum required number of contributors to the primary vertex"}; @@ -84,8 +99,8 @@ struct QaTrackingEfficiency { void init(InitContext&) { - if (pdgSign != 0 && pdgSign != 1 && pdgSign != -1) { - LOG(fatal) << "Provide pdgSign as 0, 1, -1. Provided: " << pdgSign.value; + if constexpr (pdgSign != 0 && pdgSign != 1 && pdgSign != -1) { + LOG(fatal) << "Provide pdgSign as 0, 1, -1. Provided: " << pdgSign; } AxisSpec axisPt{ptBins, ptMin, ptMax, "#it{p}_{T} (GeV/#it{c})"}; if (logPt) { @@ -273,7 +288,7 @@ struct QaTrackingEfficiency { histos.fill(h, 7); // Selecting PDG code - switch ((int)pdgSign) { + switch (pdgSign) { case 0: if (abs(p.pdgCode()) != pdg) { return true; @@ -290,7 +305,7 @@ struct QaTrackingEfficiency { } break; default: - LOG(fatal) << "Provide pdgSign as 0, 1, -1. Provided: " << pdgSign.value; + LOG(fatal) << "Provide pdgSign as 0, 1, -1. Provided: " << pdgSign; break; } histos.fill(h, 8); @@ -462,6 +477,26 @@ struct QaTrackingEfficiencyData { histos.add("phi/num", "Numerator " + tagPhi, kTH1D, {axisPhi}); histos.add("phi/den", "Denominator " + tagPhi, kTH1D, {axisPhi}); + // Pos + histos.add("ptpos/num", "Numerator Positve " + tagPt, kTH1D, {axisPt}); + histos.add("ptpos/den", "Denominator Positve " + tagPt, kTH1D, {axisPt}); + + histos.add("etapos/num", "Numerator Positve " + tagEta, kTH1D, {axisEta}); + histos.add("etapos/den", "Denominator Positve " + tagEta, kTH1D, {axisEta}); + + histos.add("phipos/num", "Numerator Positve " + tagPhi, kTH1D, {axisPhi}); + histos.add("phipos/den", "Denominator Positve " + tagPhi, kTH1D, {axisPhi}); + + // Neg + histos.add("ptneg/num", "Numerator Negative " + tagPt, kTH1D, {axisPt}); + histos.add("ptneg/den", "Denominator Negative " + tagPt, kTH1D, {axisPt}); + + histos.add("etaneg/num", "Numerator Negative " + tagEta, kTH1D, {axisEta}); + histos.add("etaneg/den", "Denominator Negative " + tagEta, kTH1D, {axisEta}); + + histos.add("phineg/num", "Numerator Negative " + tagPhi, kTH1D, {axisPhi}); + histos.add("phineg/den", "Denominator Negative " + tagPhi, kTH1D, {axisPhi}); + list.setObject(new TList); if (makeEff) { auto makeEfficiency = [&](TString effname, TString efftitle, auto templateHisto) { @@ -532,6 +567,15 @@ struct QaTrackingEfficiencyData { histos.fill(HIST("pt/num"), track.pt()); histos.fill(HIST("eta/num"), track.eta()); histos.fill(HIST("phi/num"), track.phi()); + if (track.sign() > 0) { + histos.fill(HIST("ptpos/num"), track.pt()); + histos.fill(HIST("etapos/num"), track.eta()); + histos.fill(HIST("phipos/num"), track.phi()); + } else { + histos.fill(HIST("ptneg/num"), track.pt()); + histos.fill(HIST("etaneg/num"), track.eta()); + histos.fill(HIST("phineg/num"), track.phi()); + } } if (makeEff) { @@ -549,32 +593,84 @@ struct QaTrackingEfficiencyData { WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { WorkflowSpec w; + // Data + if (cfgc.options().get("eff-data")) { + w.push_back(adaptAnalysisTask(cfgc)); + } + // Sign blind if (cfgc.options().get("eff-el")) { - w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-electron"})); + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-electron"})); } if (cfgc.options().get("eff-mu")) { - w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-muon"})); + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-muon"})); } if (cfgc.options().get("eff-pi")) { - w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-pion"})); + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-pion"})); } if (cfgc.options().get("eff-ka")) { - w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-kaon"})); + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-kaon"})); } if (cfgc.options().get("eff-pr")) { - w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-proton"})); + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-proton"})); } if (cfgc.options().get("eff-de")) { - w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-deuteron"})); + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-deuteron"})); } if (cfgc.options().get("eff-tr")) { - w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-triton"})); + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-triton"})); } if (cfgc.options().get("eff-he")) { - w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-helium3"})); + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-helium3"})); } - if (cfgc.options().get("eff-data")) { - w.push_back(adaptAnalysisTask(cfgc)); + // Pos + if (cfgc.options().get("eff-el-pos")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-electron-pos"})); + } + if (cfgc.options().get("eff-mu-pos")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-muon-pos"})); + } + if (cfgc.options().get("eff-pi-pos")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-pion-pos"})); + } + if (cfgc.options().get("eff-ka-pos")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-kaon-pos"})); + } + if (cfgc.options().get("eff-pr-pos")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-proton-pos"})); + } + if (cfgc.options().get("eff-de-pos")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-deuteron-pos"})); + } + if (cfgc.options().get("eff-tr-pos")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-triton-pos"})); + } + if (cfgc.options().get("eff-he-pos")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-helium3-pos"})); + } + // Neg + if (cfgc.options().get("eff-el-neg")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-electron-neg"})); + } + if (cfgc.options().get("eff-mu-neg")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-muon-neg"})); + } + if (cfgc.options().get("eff-pi-neg")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-pion-neg"})); + } + if (cfgc.options().get("eff-ka-neg")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-kaon-neg"})); + } + if (cfgc.options().get("eff-pr-neg")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-proton-neg"})); + } + if (cfgc.options().get("eff-de-neg")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-deuteron-neg"})); + } + if (cfgc.options().get("eff-tr-neg")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-triton-neg"})); + } + if (cfgc.options().get("eff-he-neg")) { + w.push_back(adaptAnalysisTask>(cfgc, TaskName{"qa-tracking-efficiency-helium3-neg"})); } return w; }