From 70db16f25a1438a37c8678d2e75dae7bb91abdbb Mon Sep 17 00:00:00 2001
From: Viktor Klochkov <v.klochkov@gsi.de>
Date: Fri, 11 Jun 2021 15:04:16 +0000
Subject: [PATCH] Do not use cuts by default in AnalysisTreeQA, install file
 with cuts

---
 macro/CMakeLists.txt                          |   1 +
 .../analysis/common/qa/run_analysistree_qa.C  | 188 +++++++++---------
 2 files changed, 96 insertions(+), 93 deletions(-)

diff --git a/macro/CMakeLists.txt b/macro/CMakeLists.txt
index 2fd4215eda..6b29153c10 100644
--- a/macro/CMakeLists.txt
+++ b/macro/CMakeLists.txt
@@ -41,6 +41,7 @@ Install(FILES C2F/.rootrc C2F/c2f_transport.C C2F/sis100_electron.tree.list
               ${CBMROOT_SOURCE_DIR}/macro/analysis/common/analysis_tree_converter/run_analysis_tree_maker.C
               ${CBMROOT_SOURCE_DIR}/macro/analysis/common/at_kfpf_interface/run_at_kfpf.C
               ${CBMROOT_SOURCE_DIR}/macro/analysis/common/qa/run_analysistree_qa.C
+              ${CBMROOT_SOURCE_DIR}/macro/analysis/common/cuts/cbm_cuts.h
         DESTINATION share/cbmroot/macro/c2f
        )
 Install(CODE "FILE(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/share/cbmroot/macro/c2f/data)")
diff --git a/macro/analysis/common/qa/run_analysistree_qa.C b/macro/analysis/common/qa/run_analysistree_qa.C
index 1bce99d1df..80c1e33a88 100644
--- a/macro/analysis/common/qa/run_analysistree_qa.C
+++ b/macro/analysis/common/qa/run_analysistree_qa.C
@@ -2,17 +2,23 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Viktor Klochkov [committer], Viktor Klochkov [committer] */
 
-//#include <AnalysisTree/TaskManager.hpp>
-//#include "AnalysisTree/Cuts.hpp"
-
-//#include "src/EntryConfig.hpp"
-//#include "src/Task.hpp"
-//#include "src/Utils.hpp"
-
-#include "../cuts/cbm_cuts.h"
-
-typedef AnalysisTree::QA::EntryConfig::PlotType PlotType;
-using AnalysisTree::QA::gNbins;
+/** @brief run_analysistree_qa
+ ** @param filelist    Filefist (text file) of input AnalysisTree files
+ ** @param is_single_file  if true, instead of filelist a single ROOT file will be used as input
+ **
+ ** Macro to run AnalysisTreeQA package (https://github.com/HeavyIonAnalysis/AnalysisTreeQA)
+ ** Produces an output ROOT file with specified histograms / TProfiles.
+ ** Examples how to add plots could be found here:
+ ** https://github.com/HeavyIonAnalysis/AnalysisTreeQA/blob/master/examples/example.cpp
+ ** To add event cuts:
+ ** task->SetEventCuts(EventCuts);
+ ** where EventCuts is AnalysisTree::Cuts* object, for example
+ ** GetCbmEventCuts("RecEventHeader") from macro/analysis/common/cuts/cbm_cuts.h
+ ** To apply a cut on some branch, for example select only primiry MC-tracks:
+ ** task->AddBranchCut(GetCbmMcTracksCuts("SimParticles"));
+ ** or apply quality cuts on STS tracks:
+ ** task->AddBranchCut(GetCbmTrackCuts("RecTracks"));
+ **/
 
 using namespace AnalysisTree;
 
@@ -50,10 +56,6 @@ void run_analysistree_qa(std::string filelist, bool is_single_file)
   auto* task = new QA::Task;
   task->SetOutputFileName("cbm_qa.root");
 
-  task->SetEventCuts(GetCbmEventCuts("RecEventHeader"));
-  task->AddBranchCut(GetCbmMcTracksCuts("SimParticles"));
-  task->AddBranchCut(GetCbmTrackCuts("RecTracks"));
-
   RichRingsQA(*task);
   TrdTracksQA(*task);
   //  KFPFTracksQA(*task);
@@ -83,39 +85,39 @@ void TrdTracksQA(QA::Task& task)
   AddTrackQA(&task, trd_tracks);
   AddTracksMatchQA(&task, trd_tracks, rec_tracks);
 
-  task.AddH1({"TRD energy loss in 1st station, keV", {trd_tracks, "energy_loss_0"}, {gNbins, 0, 50}});
-  task.AddH1({"TRD energy loss in 2nd station", {trd_tracks, "energy_loss_1"}, {gNbins, 0, 50}});
-  task.AddH1({"TRD energy loss in 3rd station", {trd_tracks, "energy_loss_2"}, {gNbins, 0, 50}});
-  task.AddH1({"TRD energy loss in 4th station", {trd_tracks, "energy_loss_3"}, {gNbins, 0, 50}});
+  task.AddH1({"TRD energy loss in 1st station, keV", {trd_tracks, "energy_loss_0"}, {QA::gNbins, 0, 50}});
+  task.AddH1({"TRD energy loss in 2nd station", {trd_tracks, "energy_loss_1"}, {QA::gNbins, 0, 50}});
+  task.AddH1({"TRD energy loss in 3rd station", {trd_tracks, "energy_loss_2"}, {QA::gNbins, 0, 50}});
+  task.AddH1({"TRD energy loss in 4th station", {trd_tracks, "energy_loss_3"}, {QA::gNbins, 0, 50}});
 
   task.AddH1({"Number of hits in TRD", {trd_tracks, "n_hits"}, {6, 0, 6}});
 
-  task.AddH1({"PID Likelihood, e^{-}", {trd_tracks, "pid_like_e"}, {gNbins, -1, 1}});
-  task.AddH1({"PID Likelihood, #pi", {trd_tracks, "pid_like_pi"}, {gNbins, -1, 1}});
-  task.AddH1({"PID Likelihood, K", {trd_tracks, "pid_like_k"}, {gNbins, -1, 1}});
-  task.AddH1({"PID Likelihood, p", {trd_tracks, "pid_like_p"}, {gNbins, -1, 1}});
+  task.AddH1({"PID Likelihood, e^{-}", {trd_tracks, "pid_like_e"}, {QA::gNbins, -1, 1}});
+  task.AddH1({"PID Likelihood, #pi", {trd_tracks, "pid_like_pi"}, {QA::gNbins, -1, 1}});
+  task.AddH1({"PID Likelihood, K", {trd_tracks, "pid_like_k"}, {QA::gNbins, -1, 1}});
+  task.AddH1({"PID Likelihood, p", {trd_tracks, "pid_like_p"}, {QA::gNbins, -1, 1}});
 
-  task.AddH1({"#chi^{2}/NDF", {trd_tracks, "chi2_ov_ndf"}, {gNbins, 0, 30}});
-  task.AddH1({"p_{T}^{last} (GeV/c)", {trd_tracks, "pT_out"}, {gNbins, 0, 10}});
-  task.AddH1({"p^{last} (GeV/c)", {trd_tracks, "p_out"}, {gNbins, 0, 10}});
+  task.AddH1({"#chi^{2}/NDF", {trd_tracks, "chi2_ov_ndf"}, {QA::gNbins, 0, 30}});
+  task.AddH1({"p_{T}^{last} (GeV/c)", {trd_tracks, "pT_out"}, {QA::gNbins, 0, 10}});
+  task.AddH1({"p^{last} (GeV/c)", {trd_tracks, "p_out"}, {QA::gNbins, 0, 10}});
 }
 
 void RichRingsQA(QA::Task& task)
 {
-  task.AddH1({"RICh ring x-position (cm)", {rich_rings, "x"}, {gNbins, -100, 100}});
-  task.AddH1({"RICh ring y-position (cm)", {rich_rings, "y"}, {gNbins, -250, 250}});
-  task.AddH2({"RICh ring x-position (cm)", {rich_rings, "x"}, {gNbins, -100, 100}},
-             {"RICh ring y-position (cm)", {rich_rings, "y"}, {gNbins, -250, 250}});
+  task.AddH1({"RICh ring x-position (cm)", {rich_rings, "x"}, {QA::gNbins, -100, 100}});
+  task.AddH1({"RICh ring y-position (cm)", {rich_rings, "y"}, {QA::gNbins, -250, 250}});
+  task.AddH2({"RICh ring x-position (cm)", {rich_rings, "x"}, {QA::gNbins, -100, 100}},
+             {"RICh ring y-position (cm)", {rich_rings, "y"}, {QA::gNbins, -250, 250}});
 
-  task.AddH1({"Ring radius", {rich_rings, "radius"}, {gNbins, 0, 10}});
+  task.AddH1({"Ring radius", {rich_rings, "radius"}, {QA::gNbins, 0, 10}});
 
-  task.AddH1({"n_hits", {rich_rings, "n_hits"}, {gNbins, 0, 60}});
-  task.AddH1({"n_hits_on_ring", {rich_rings, "n_hits_on_ring"}, {gNbins, 0, 100}});
-  task.AddH1({"axis_a", {rich_rings, "axis_a"}, {gNbins, 0, 10}});
-  task.AddH1({"axis_b", {rich_rings, "axis_b"}, {gNbins, 0, 10}});
+  task.AddH1({"n_hits", {rich_rings, "n_hits"}, {QA::gNbins, 0, 60}});
+  task.AddH1({"n_hits_on_ring", {rich_rings, "n_hits_on_ring"}, {QA::gNbins, 0, 100}});
+  task.AddH1({"axis_a", {rich_rings, "axis_a"}, {QA::gNbins, 0, 10}});
+  task.AddH1({"axis_b", {rich_rings, "axis_b"}, {QA::gNbins, 0, 10}});
 
-  task.AddH1({"chi2_ov_ndf", {rich_rings, "chi2_ov_ndf"}, {gNbins, 0, 1}});
-  task.AddH1({"phi_ellipse", {rich_rings, "phi_ellipse"}, {gNbins, -3.2, 3.2}});
+  task.AddH1({"chi2_ov_ndf", {rich_rings, "chi2_ov_ndf"}, {QA::gNbins, 0, 1}});
+  task.AddH1({"phi_ellipse", {rich_rings, "phi_ellipse"}, {QA::gNbins, -3.2, 3.2}});
 }
 
 void VertexTracksQA(QA::Task& task)
@@ -126,33 +128,33 @@ void VertexTracksQA(QA::Task& task)
   Variable chi2_over_ndf("chi2_ndf", {{rec_tracks, "chi2"}, {rec_tracks, "ndf"}},
                          [](std::vector<double>& var) { return var.at(0) / var.at(1); });
 
-  task.AddH1({"DCA_{x}, cm", {rec_tracks, "dcax"}, {gNbins, -1, 1}});
-  task.AddH1({"DCA_{y}, cm", {rec_tracks, "dcay"}, {gNbins, -1, 1}});
-  task.AddH1({"DCA_{z}, cm", {rec_tracks, "dcaz"}, {gNbins, -1, 1}});
+  task.AddH1({"DCA_{x}, cm", {rec_tracks, "dcax"}, {QA::gNbins, -1, 1}});
+  task.AddH1({"DCA_{y}, cm", {rec_tracks, "dcay"}, {QA::gNbins, -1, 1}});
+  task.AddH1({"DCA_{z}, cm", {rec_tracks, "dcaz"}, {QA::gNbins, -1, 1}});
   task.AddH1({"NDF", {rec_tracks, "ndf"}, {30, 0, 30}});
   task.AddH1({"Number of hits (STS+MVD)", {rec_tracks, "nhits"}, {15, 0, 15}});
   task.AddH1({"Number of hits (MVD)", {rec_tracks, "nhits_mvd"}, {5, 0, 5}});
   task.AddH1({"#chi^{2}_{vertex}", {rec_tracks, "vtx_chi2"}, {500, 0, 100}});
-  task.AddH1({"#chi^{2}/NDF", chi2_over_ndf, {gNbins, 0, 10}});
-  task.AddH2({"DCA_{x}, cm", {rec_tracks, "dcax"}, {gNbins, -1, 1}},
-             {"DCA_{y}, cm", {rec_tracks, "dcay"}, {gNbins, -1, 1}});
+  task.AddH1({"#chi^{2}/NDF", chi2_over_ndf, {QA::gNbins, 0, 10}});
+  task.AddH2({"DCA_{x}, cm", {rec_tracks, "dcax"}, {QA::gNbins, -1, 1}},
+             {"DCA_{y}, cm", {rec_tracks, "dcay"}, {QA::gNbins, -1, 1}});
 }
 
 void TofHitsQA(QA::Task& task)
 {
-  task.AddH1({"TOF hit x-position (cm)", {tof_hits, "x"}, {gNbins, -600, 600}});
-  task.AddH1({"TOF hit y-position (cm)", {tof_hits, "y"}, {gNbins, -400, 400}});
-  task.AddH1({"TOF hit z-position (cm)", {tof_hits, "z"}, {gNbins, 600, 800}});
+  task.AddH1({"TOF hit x-position (cm)", {tof_hits, "x"}, {QA::gNbins, -600, 600}});
+  task.AddH1({"TOF hit y-position (cm)", {tof_hits, "y"}, {QA::gNbins, -400, 400}});
+  task.AddH1({"TOF hit z-position (cm)", {tof_hits, "z"}, {QA::gNbins, 600, 800}});
 
-  task.AddH2({"TOF hit x-position (cm)", {tof_hits, "x"}, {gNbins, -600, 600}},
-             {"TOF hit y-position (cm)", {tof_hits, "y"}, {gNbins, -600, 600}});
+  task.AddH2({"TOF hit x-position (cm)", {tof_hits, "x"}, {QA::gNbins, -600, 600}},
+             {"TOF hit y-position (cm)", {tof_hits, "y"}, {QA::gNbins, -600, 600}});
 
   Variable qp_sts("qp_reco", {{rec_tracks, "q"}, {rec_tracks, "p"}},
                   [](std::vector<double>& qp) { return qp.at(0) * qp.at(1); });
-  task.AddH2({"sign(q)*p, GeV/c", qp_sts, {gNbins, -10, 10}},
-             {"m^{2}, GeV^{2}/c^{2}", {tof_hits, "mass2"}, {gNbins, -1, 2}});
-  task.AddH2({"sign(q)*p STS, GeV/c", qp_sts, {gNbins, -10, 10}},
-             {"sign(q)*p TOF, GeV/c", {tof_hits, "qp_tof"}, {gNbins, -10, 10}});
+  task.AddH2({"sign(q)*p, GeV/c", qp_sts, {QA::gNbins, -10, 10}},
+             {"m^{2}, GeV^{2}/c^{2}", {tof_hits, "mass2"}, {QA::gNbins, -1, 2}});
+  task.AddH2({"sign(q)*p STS, GeV/c", qp_sts, {QA::gNbins, -10, 10}},
+             {"sign(q)*p TOF, GeV/c", {tof_hits, "qp_tof"}, {QA::gNbins, -10, 10}});
 
   SimpleCut sc_protons = EqualsCut("SimParticles.pid", 2212);
   SimpleCut sc_prim    = EqualsCut("SimParticles.mother_id", -1);
@@ -175,36 +177,36 @@ void SimParticlesQA(QA::Task& task) { AddParticleQA(&task, sim_particles); }
 
 void SimEventHeaderQA(QA::Task& task)
 {
-  task.AddH1({"x_{vertex}^{MC} (cm)", {sim_event_header, "vtx_x"}, {gNbins, -1, 1}});
-  task.AddH1({"y_{vertex}^{MC} (cm)", {sim_event_header, "vtx_y"}, {gNbins, -1, 1}});
-  task.AddH1({"z_{vertex}^{MC} (cm)", {sim_event_header, "vtx_z"}, {gNbins, -1, 1}});
-  task.AddH1({"b (fm)", {sim_event_header, "b"}, {gNbins, 0, 20}});
-  task.AddH1({"#Psi_{RP}", {sim_event_header, "psi_RP"}, {gNbins, 0, 6.5}});
-
-  task.AddH2({"x_{vertex}^{MC} (cm)", {sim_event_header, "vtx_x"}, {gNbins, -1, 1}},
-             {"y_{vertex}^{MC} (cm)", {sim_event_header, "vtx_y"}, {gNbins, -1, 1}});
+  task.AddH1({"x_{vertex}^{MC} (cm)", {sim_event_header, "vtx_x"}, {QA::gNbins, -1, 1}});
+  task.AddH1({"y_{vertex}^{MC} (cm)", {sim_event_header, "vtx_y"}, {QA::gNbins, -1, 1}});
+  task.AddH1({"z_{vertex}^{MC} (cm)", {sim_event_header, "vtx_z"}, {QA::gNbins, -1, 1}});
+  task.AddH1({"b (fm)", {sim_event_header, "b"}, {QA::gNbins, 0, 20}});
+  task.AddH1({"#Psi_{RP}", {sim_event_header, "psi_RP"}, {QA::gNbins, 0, 6.5}});
+
+  task.AddH2({"x_{vertex}^{MC} (cm)", {sim_event_header, "vtx_x"}, {QA::gNbins, -1, 1}},
+             {"y_{vertex}^{MC} (cm)", {sim_event_header, "vtx_y"}, {QA::gNbins, -1, 1}});
 }
 
 void RecEventHeaderQA(QA::Task& task)
 {
-  task.AddH1({"x_{vertex} (cm)", {rec_event_header, "vtx_x"}, {gNbins, -1, 1}});
-  task.AddH1({"y_{vertex} (cm)", {rec_event_header, "vtx_y"}, {gNbins, -1, 1}});
-  task.AddH1({"z_{vertex} (cm)", {rec_event_header, "vtx_z"}, {gNbins, -1, 1}});
-  task.AddH1({"#chi^{2}_{vertex fit}", {rec_event_header, "vtx_chi2"}, {gNbins, 0, 5}});
+  task.AddH1({"x_{vertex} (cm)", {rec_event_header, "vtx_x"}, {QA::gNbins, -1, 1}});
+  task.AddH1({"y_{vertex} (cm)", {rec_event_header, "vtx_y"}, {QA::gNbins, -1, 1}});
+  task.AddH1({"z_{vertex} (cm)", {rec_event_header, "vtx_z"}, {QA::gNbins, -1, 1}});
+  task.AddH1({"#chi^{2}_{vertex fit}", {rec_event_header, "vtx_chi2"}, {QA::gNbins, 0, 5}});
 
-  task.AddH1({"E_{PSD} (GeV)", {rec_event_header, "Epsd"}, {gNbins, 0, 60}});
+  task.AddH1({"E_{PSD} (GeV)", {rec_event_header, "Epsd"}, {QA::gNbins, 0, 60}});
   task.AddH1({"M_{tracks}", {rec_event_header, "M"}, {800, 0, 800}});
-  task.AddH1({"Event ID", {rec_event_header, "evt_id"}, {gNbins, 0, 2000}});
+  task.AddH1({"Event ID", {rec_event_header, "evt_id"}, {QA::gNbins, 0, 2000}});
 
-  task.AddH2({"x_{vertex} (cm)", {rec_event_header, "vtx_x"}, {gNbins, -1, 1}},
-             {"y_{vertex} (cm)", {rec_event_header, "vtx_y"}, {gNbins, -1, 1}});
+  task.AddH2({"x_{vertex} (cm)", {rec_event_header, "vtx_x"}, {QA::gNbins, -1, 1}},
+             {"y_{vertex} (cm)", {rec_event_header, "vtx_y"}, {QA::gNbins, -1, 1}});
 
-  task.AddH2({"x_{vertex} (cm)", {rec_event_header, "vtx_x"}, {gNbins, -1, 1}},
-             {"x_{vertex} (cm)", {sim_event_header, "vtx_x"}, {gNbins, -1, 1}});
-  task.AddH2({"y_{vertex} (cm)", {rec_event_header, "vtx_y"}, {gNbins, -1, 1}},
-             {"y_{vertex} (cm)", {sim_event_header, "vtx_y"}, {gNbins, -1, 1}});
-  task.AddH2({"z_{vertex} (cm)", {rec_event_header, "vtx_z"}, {gNbins, -1, 1}},
-             {"z_{vertex} (cm)", {sim_event_header, "vtx_z"}, {gNbins, -1, 1}});
+  task.AddH2({"x_{vertex} (cm)", {rec_event_header, "vtx_x"}, {QA::gNbins, -1, 1}},
+             {"x_{vertex} (cm)", {sim_event_header, "vtx_x"}, {QA::gNbins, -1, 1}});
+  task.AddH2({"y_{vertex} (cm)", {rec_event_header, "vtx_y"}, {QA::gNbins, -1, 1}},
+             {"y_{vertex} (cm)", {sim_event_header, "vtx_y"}, {QA::gNbins, -1, 1}});
+  task.AddH2({"z_{vertex} (cm)", {rec_event_header, "vtx_z"}, {QA::gNbins, -1, 1}},
+             {"z_{vertex} (cm)", {sim_event_header, "vtx_z"}, {QA::gNbins, -1, 1}});
 }
 
 void EfficiencyMaps(QA::Task& task)
@@ -227,19 +229,19 @@ void EfficiencyMaps(QA::Task& task)
   Cuts* mc_pions_neg = new Cuts("McPionsNeg", {EqualsCut({sim_particles + ".pid"}, -211)});
   Cuts* mc_pions_pos = new Cuts("McPionsPos", {EqualsCut({sim_particles + ".pid"}, -211)});
 
-  task.AddH2({"#it{y}_{Lab}", {sim_particles, "rapidity"}, {gNbins, -1, 5}},
-             {"p_{T}, GeV/c", {sim_particles, "pT"}, {gNbins, 0, 2}}, mc_protons);
-  task.AddH2({"#it{y}_{Lab}", proton_y, {gNbins, -1, 5}}, {"p_{T}, GeV/c", {rec_tracks, "pT"}, {gNbins, 0, 2}},
+  task.AddH2({"#it{y}_{Lab}", {sim_particles, "rapidity"}, {QA::gNbins, -1, 5}},
+             {"p_{T}, GeV/c", {sim_particles, "pT"}, {QA::gNbins, 0, 2}}, mc_protons);
+  task.AddH2({"#it{y}_{Lab}", proton_y, {QA::gNbins, -1, 5}}, {"p_{T}, GeV/c", {rec_tracks, "pT"}, {QA::gNbins, 0, 2}},
              mc_protons);
 
-  task.AddH2({"#it{y}_{Lab}", {sim_particles, "rapidity"}, {gNbins, -1, 5}},
-             {"p_{T}, GeV/c", {sim_particles, "pT"}, {gNbins, 0, 2}}, mc_pions_neg);
-  task.AddH2({"#it{y}_{Lab}", pion_y, {gNbins, -1, 5}}, {"p_{T}, GeV/c", {rec_tracks, "pT"}, {gNbins, 0, 2}},
+  task.AddH2({"#it{y}_{Lab}", {sim_particles, "rapidity"}, {QA::gNbins, -1, 5}},
+             {"p_{T}, GeV/c", {sim_particles, "pT"}, {QA::gNbins, 0, 2}}, mc_pions_neg);
+  task.AddH2({"#it{y}_{Lab}", pion_y, {QA::gNbins, -1, 5}}, {"p_{T}, GeV/c", {rec_tracks, "pT"}, {QA::gNbins, 0, 2}},
              mc_pions_neg);
 
-  task.AddH2({"#it{y}_{Lab}", {sim_particles, "rapidity"}, {gNbins, -1, 5}},
-             {"p_{T}, GeV/c", {sim_particles, "pT"}, {gNbins, 0, 2}}, mc_pions_pos);
-  task.AddH2({"#it{y}_{Lab}", pion_y, {gNbins, -1, 5}}, {"p_{T}, GeV/c", {rec_tracks, "pT"}, {gNbins, 0, 2}},
+  task.AddH2({"#it{y}_{Lab}", {sim_particles, "rapidity"}, {QA::gNbins, -1, 5}},
+             {"p_{T}, GeV/c", {sim_particles, "pT"}, {QA::gNbins, 0, 2}}, mc_pions_pos);
+  task.AddH2({"#it{y}_{Lab}", pion_y, {QA::gNbins, -1, 5}}, {"p_{T}, GeV/c", {rec_tracks, "pT"}, {QA::gNbins, 0, 2}},
              mc_pions_pos);
 }
 
@@ -248,22 +250,22 @@ void KFPFTracksQA(QA::Task& task)
   const std::vector<std::string> field_par_names_ {"cx0", "cx1", "cx2", "cy1", "cy2", "cz0", "cz1", "cz2"};
   const std::vector<std::string> cov_names_ {"cov1", "cov2",  "cov3",  "cov4",  "cov5",  "cov6",  "cov7", "cov8",
                                              "cov9", "cov10", "cov11", "cov12", "cov13", "cov14", "cov15"};
-  // KFPF tracks
-  task.AddH1({"x, cm", {rec_tracks, "x"}, {gNbins, -10, 10}});
-  task.AddH1({"y, cm", {rec_tracks, "y"}, {gNbins, -10, 10}});
-  task.AddH1({"z, cm", {rec_tracks, "z"}, {gNbins, 0, 40}});
-  task.AddH1({"t_{x}", {rec_tracks, "tx"}, {gNbins, -2, 2}});
-  task.AddH1({"t_{y}", {rec_tracks, "ty"}, {gNbins, -2, 2}});
-  task.AddH1({"q*p, GeV/c", {rec_tracks, "qp"}, {gNbins, -10, 10}});
+
+  task.AddH1({"x, cm", {rec_tracks, "x"}, {QA::gNbins, -10, 10}});
+  task.AddH1({"y, cm", {rec_tracks, "y"}, {QA::gNbins, -10, 10}});
+  task.AddH1({"z, cm", {rec_tracks, "z"}, {QA::gNbins, 0, 40}});
+  task.AddH1({"t_{x}", {rec_tracks, "tx"}, {QA::gNbins, -2, 2}});
+  task.AddH1({"t_{y}", {rec_tracks, "ty"}, {QA::gNbins, -2, 2}});
+  task.AddH1({"q*p, GeV/c", {rec_tracks, "qp"}, {QA::gNbins, -10, 10}});
 
   for (const auto& field_par_name : field_par_names_)
-    task.AddH1({field_par_name, {rec_tracks, field_par_name}, {gNbins, -1, 1}});
+    task.AddH1({field_par_name, {rec_tracks, field_par_name}, {QA::gNbins, -1, 1}});
 
   for (const auto& cov_name : cov_names_)
     task.AddH1({cov_name, {rec_tracks, cov_name}, {1000, -.1, .1}});
 
-  task.AddH1({"cy0", {rec_tracks, "cy0"}, {gNbins, -12, -8}});
-  task.AddH1({"z0", {rec_tracks, "z0"}, {gNbins, 0, 40}});
+  task.AddH1({"cy0", {rec_tracks, "cy0"}, {QA::gNbins, -12, -8}});
+  task.AddH1({"z0", {rec_tracks, "z0"}, {QA::gNbins, 0, 40}});
 }
 
 int main(int argc, char** argv)
-- 
GitLab