From f1ba37d103575fd9b2124574479830e1e01b79fa Mon Sep 17 00:00:00 2001
From: marco aparo <aparo.marco@gmail.com>
Date: Sat, 15 Feb 2025 23:02:48 +0100
Subject: [PATCH 1/9] Adding C000 test

---
 ...ack_base_FS_noDoubleRatio_IDTPMconfig.json |  11 +
 ...e_config_EFTrack_base_FS_noDoubleRatio.xml | 545 ++++++++++++++++++
 .../test_EFTrack_C000_FS_ttbar_pu200_grid.sh  |  87 +++
 3 files changed, 643 insertions(+)
 create mode 100644 InnerDetector/InDetValidation/InDetTrackPerfMon/data/EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json
 create mode 100644 InnerDetector/InDetValidation/InDetTrackPerfMon/data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml
 create mode 100755 InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh

diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json
new file mode 100644
index 000000000000..ede75926df63
--- /dev/null
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json
@@ -0,0 +1,11 @@
+{
+    "TrkAnaEF" : {
+        "enabled" : true,
+        "TestType"  : "Offline",
+        "RefType"   : "Truth",
+        "OfflineTrkKey" : "InDetTrackParticles",
+        "MatchingType"  : "TruthMatch",
+        "plotTechnicalEfficiencies" : true,
+        "plotDuplicateRates"  : true
+    }
+}
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml
new file mode 100644
index 000000000000..ef9c1b3ab259
--- /dev/null
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml
@@ -0,0 +1,545 @@
+<?xml version="1.0" ?>
+<!--
+ DCube configuration XML file = dcube_config.xml
+ auto-generated using DCube 7.3.0 by Krzysztof Daniel Ciba (Krzysztof.Ciba@NOSPAMgmail.com)
+ on Sat, 15 Feb 2025 18:54:46 CET
+ from Root reference file: IDTPM.C000_FS.HIST.root
+ Statistics tests:
+ "['KSnorm']"
+ Legend:
+ * KS      - Kolmogorov-Smirnov test
+ * KSnorm  - Kolmogorov-Smirnov + normalisation tests (default)
+ * chi2    - chi2 test
+ * bbb     - bin-by-bin comparision
+ * meany   - avg eff mean y [TProfiles only!]
+ * all     - all above tests (except KSnorm)
+ * allnorm - all above tests (except KS)
+ Tweaks:
+ [1] remove or comment out (using HTML comments tags) histograms not relevant
+     to your analysis
+ [2] provide a new content to "ref_desc" and "mon_desc" tags to something
+     more meaningful
+ [3] and of course feel free to change attribute "tests" in each "hist" tag
+ [4] limits of p-value warning and failure can be set by changing attributes
+     in <plimit> tag
+ [5] if you want to make plots FOR EVERY histogram in your monitored file
+     change attribute "inclusive" in <mode> tag to "true"
+-->
+<dcube_client_config>
+ <dcube branch="*" install="*" cmtconfig="*" project="*" jobId="*">
+  <!--
+  ###################################################
+  DCubeClient for:
+  [1] branch: *
+  [2] install: *
+  [3] cmtconfig: *
+  [4] project: *
+  [5] jobId: *
+  [6] reference root file: IDTPM.C000_FS.HIST.root
+  [7] p-values limits FAIL = 0.750000 WARN = 0.950000
+  ###################################################
+-->
+  <reference file="/eos/home-m/maparo/IDTPMout/ART/IDTPM.C000_FS.HIST.root"/>
+  <ref_desc>PUT YOUR REFERENCE DESCRIPTION HERE</ref_desc>
+  <test_desc>PUT YOUR TEST DESCRIPTION HERE</test_desc>
+  <plimit fail="0.50" warn="0.95"/>
+  <TDirectory name="/">
+   <TDirectory name="InDetTrackPerfMonPlots">
+    <TDirectory name="TrkAnaEF">
+     <TDirectory name="Offline">
+      <TDirectory name="Tracks">
+       <TDirectory name="Multiplicities">
+        <hist1D name="summary" type="TH1D" plotopts="logy" tests="KSnorm"/>
+        <hist1D name="num_offl_all" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_offl_all_vs_num_vtx_offl_all" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="num_offl_selected" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_offl_selected_vs_num_vtx_offl_selected" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="num_offl_matched" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_offl_matched_vs_num_vtx_offl_matched" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_offl_selected_vs_actualMu" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_offl_selected_vs_truthMu" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="num_truth_all" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_truth_all_vs_num_vtx_truth_all" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="num_truth_selected" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_truth_selected_vs_num_vtx_truth_selected" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="num_truth_matched" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_truth_matched_vs_num_vtx_truth_matched" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+       </TDirectory>
+       <TDirectory name="Parameters">
+        <hist1D name="offl_pt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_phi" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_d0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_z0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_z0sin" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_theta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_qoverp" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_chi2" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_ndof" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_chi2OverNdof" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_author" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_time" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_eta_vs_pt" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_eta_vs_phi" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_z0_vs_d0" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_z0sin_vs_d0" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="truth_pt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="truth_phi" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="truth_d0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="truth_z0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="truth_z0sin" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="truth_theta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="truth_qoverp" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="truth_prodR" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="truth_prodZ" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="truth_nSiHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="truth_nSiHits_vs_eta" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="truth_eta_vs_pt" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="truth_eta_vs_phi" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="truth_z0_vs_d0" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="truth_z0sin_vs_d0" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <graph name="offl_hasValidTime_eff_vs_eta" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+       </TDirectory>
+       <TDirectory name="Resolutions">
+        <hist1D name="pull_pt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="res_pt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="sigma_offl_pt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_pt" type="TH2F" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_pt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_pt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_pt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_pt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_pt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resmean_pt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_pt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullmean_pt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_pt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_pt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_pt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_pt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pull_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="res_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="sigma_offl_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_eta" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_eta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_eta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_eta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_eta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_eta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resmean_eta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_eta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullmean_eta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_eta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_eta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_eta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_eta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pull_d0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="res_d0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="sigma_offl_d0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_d0" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_d0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_d0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_d0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_d0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_d0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resmean_d0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_d0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullmean_d0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_d0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_d0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_d0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_d0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pull_z0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="res_z0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="sigma_offl_z0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_z0" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_z0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_z0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_z0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_z0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_z0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resmean_z0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_z0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullmean_z0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_z0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_z0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_z0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_z0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pull_qoverp" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="res_qoverp" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="sigma_offl_qoverp" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_qoverp" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_qoverp_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_qoverp_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_qoverp_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_qoverp_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_qoverp_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resmean_qoverp_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_qoverp_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullmean_qoverp_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_qoverp_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_qoverp_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_qoverp_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_qoverp_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pull_ptqopt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="res_ptqopt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="sigma_offl_ptqopt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_ptqopt" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_ptqopt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_ptqopt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_ptqopt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_ptqopt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_ptqopt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resmean_ptqopt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_ptqopt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullmean_ptqopt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_ptqopt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_ptqopt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_ptqopt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_ptqopt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pull_theta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="res_theta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="sigma_offl_theta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_theta" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_theta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_theta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_theta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_theta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_theta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resmean_theta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_theta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullmean_theta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_theta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_theta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_theta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_theta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pull_phi" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="res_phi" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="sigma_offl_phi" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_phi" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_phi_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_phi_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_phi_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_phi_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_phi_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resmean_phi_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_phi_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullmean_phi_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_phi_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_phi_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_phi_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_phi_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pull_z0sin" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="res_z0sin" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="sigma_offl_z0sin" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_z0sin" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_z0sin_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_z0sin_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_z0sin_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_z0sin_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resolution_z0sin_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resmean_z0sin_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_z0sin_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="pullmean_z0sin_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_z0sin_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="resmean_z0sin_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullwidth_z0sin_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="pullmean_z0sin_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+       </TDirectory>
+       <TDirectory name="Duplicates">
+        <hist1D name="duplnum_vs_truth_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_vs_truth_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_vs_truth_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_vs_truth_d0" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_vs_truth_z0" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_nonzero_vs_truth_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_nonzero_vs_truth_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_nonzero_vs_truth_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_nonzero_vs_truth_d0" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_nonzero_vs_truth_z0" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_nonzero_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="duplnum_nonzero_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <graph name="duplrate_vs_truth_pt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="duplrate_vs_truth_eta" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="duplrate_vs_truth_phi" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="duplrate_vs_truth_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="duplrate_vs_truth_z0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="duplrate_vs_actualMu" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="duplrate_vs_truthMu" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+       </TDirectory>
+       <TDirectory name="HitsOnTracks">
+        <hist1D name="offl_nInnerMostPixelHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelEndcapHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelEndcapHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedEndcapHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHoles" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelSharedHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_pixeldEdx" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHoles" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTSharedHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelEndcapHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelEndcapHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedEndcapHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHoles_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelSharedHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_pixeldEdx_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHoles_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTSharedHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelHits_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelEndcapHits_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelHits_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelEndcapHits_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedHits_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedEndcapHits_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHits_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHoles_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelSharedHits_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_pixeldEdx_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHits_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHoles_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTSharedHits_vs_offl_pt_vs_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelHits_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelEndcapHits_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelHits_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelEndcapHits_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedHits_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedEndcapHits_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHits_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHoles_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelSharedHits_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_pixeldEdx_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHits_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHoles_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTSharedHits_vs_offl_pt_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelHits_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelEndcapHits_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelHits_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelEndcapHits_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedHits_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedEndcapHits_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHits_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHoles_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelSharedHits_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_pixeldEdx_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHits_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHoles_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTSharedHits_vs_offl_eta" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelHits_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelEndcapHits_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelHits_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelEndcapHits_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedHits_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedEndcapHits_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHits_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHoles_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelSharedHits_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_pixeldEdx_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHits_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHoles_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTSharedHits_vs_offl_eta_vs_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelHits_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelEndcapHits_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelHits_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelEndcapHits_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedHits_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedEndcapHits_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHits_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHoles_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelSharedHits_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_pixeldEdx_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHits_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHoles_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTSharedHits_vs_offl_phi" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelHits_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelEndcapHits_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelHits_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelEndcapHits_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedHits_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedEndcapHits_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHits_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHoles_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelSharedHits_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_pixeldEdx_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHits_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHoles_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTSharedHits_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelHits_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelEndcapHits_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelHits_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelEndcapHits_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedHits_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedEndcapHits_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHits_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHoles_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelSharedHits_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_pixeldEdx_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHits_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHoles_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTSharedHits_vs_truthMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelHits_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelEndcapHits_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelHits_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelEndcapHits_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedHits_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedEndcapHits_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHits_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHoles_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelSharedHits_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_pixeldEdx_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHits_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHoles_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTSharedHits_vs_truthMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelHits_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelEndcapHits_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelHits_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelEndcapHits_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedHits_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedEndcapHits_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHits_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHoles_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelSharedHits_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_pixeldEdx_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHits_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHoles_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTSharedHits_vs_truthMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelHits_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelEndcapHits_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelHits_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelEndcapHits_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedHits_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedEndcapHits_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHits_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHoles_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nPixelSharedHits_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_pixeldEdx_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHits_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHoles_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nSCTSharedHits_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelHits_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelEndcapHits_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelHits_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelEndcapHits_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedHits_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedEndcapHits_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHits_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHoles_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelSharedHits_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_pixeldEdx_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHits_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHoles_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTSharedHits_vs_actualMu_vs_offl_pt" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelHits_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelEndcapHits_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelHits_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelEndcapHits_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedHits_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedEndcapHits_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHits_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHoles_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelSharedHits_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_pixeldEdx_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHits_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHoles_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTSharedHits_vs_actualMu_vs_offl_eta" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelHits_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelEndcapHits_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelHits_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nNextToInnerMostPixelEndcapHits_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedHits_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nInnerMostPixelSharedEndcapHits_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHits_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelHoles_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nPixelSharedHits_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_pixeldEdx_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHits_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTHoles_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="offl_nSCTSharedHits_vs_actualMu_vs_offl_phi" type="TProfile2D" plotopts="ratio" tests="KSnorm"/>
+       </TDirectory>
+       <TDirectory name="Efficiencies">
+        <TDirectory name="Purities">
+         <graph name="eff_vs_offl_inclusive" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_offl_pt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_offl_lowPt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_offl_eta" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_offl_phi" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_offl_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_offl_z0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_offl_eta_vs_pt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_offl_eta_vs_phi" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_offl_z0_vs_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_offl_z0sin_vs_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        </TDirectory>
+        <TDirectory name="Technical">
+         <TDirectory name="Purities">
+          <graph name="eff_vs_offl_inclusive" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+          <graph name="eff_vs_offl_pt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+          <graph name="eff_vs_offl_lowPt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+          <graph name="eff_vs_offl_eta" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+          <graph name="eff_vs_offl_phi" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+          <graph name="eff_vs_offl_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+          <graph name="eff_vs_offl_z0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+          <graph name="eff_vs_offl_eta_vs_pt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+          <graph name="eff_vs_offl_eta_vs_phi" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+          <graph name="eff_vs_offl_z0_vs_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+          <graph name="eff_vs_offl_z0sin_vs_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         </TDirectory>
+         <graph name="eff_vs_truth_inclusive" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truth_pt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truth_lowPt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truth_eta" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truth_phi" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truth_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truth_z0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truth_prodR" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truth_prodZ" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truth_eta_vs_pt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truth_eta_vs_phi" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truth_z0_vs_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truth_z0sin_vs_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_actualMu" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+         <graph name="eff_vs_truthMu" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        </TDirectory>
+        <graph name="eff_vs_truth_inclusive" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truth_pt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truth_lowPt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truth_eta" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truth_phi" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truth_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truth_z0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truth_prodR" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truth_prodZ" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truth_eta_vs_pt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truth_eta_vs_phi" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truth_z0_vs_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truth_z0sin_vs_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_actualMu" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="eff_vs_truthMu" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+       </TDirectory>
+       <TDirectory name="FakeRates">
+        <graph name="fakerate_vs_offl_pt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="fakerate_vs_offl_eta" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="fakerate_vs_offl_phi" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="fakerate_vs_offl_d0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="fakerate_vs_offl_z0" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="fakerate_vs_actualMu" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+        <graph name="fakerate_vs_truthMu" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
+       </TDirectory>
+      </TDirectory>
+     </TDirectory>
+    </TDirectory>
+   </TDirectory>
+  </TDirectory>
+ </dcube>
+</dcube_client_config>
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
new file mode 100755
index 000000000000..674a1226ca59
--- /dev/null
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
@@ -0,0 +1,87 @@
+#!/bin/bash
+# art-description: Niglty test to produce a reference for EFTrack studies using ttbar pu200 sample
+# art-type: grid
+# art-include: main/Athena
+# art-output: *.root
+# art-output: *.json
+# art-output: *.xml
+# art-output: dcube*
+# art-html: dcube_cmp
+
+SampleName='C000_FS.ttbar_pu200'
+InputRDOfile='/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/PhaseIIUpgrade/RDO/ATLAS-P2-RUN4-03-00-01/mc21_14TeV.601229.PhPy8EG_A14_ttbar_hdamp258p75_SingleLep.recon.RDO.e8514_s4345_r15583_tid39626672_00/RDO.39626672._001121.pool.root.1'
+IDTPMjsonConfig='EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json'
+dcubeXmlIDTPMconfig='dcube_config_EFTrack_base_FS_noDoubleRatio.xml'
+
+# search in $DATAPATH for matching files
+IDTPMjsonConfig_absPath=$( find -H ${DATAPATH//:/ } -mindepth 1 -maxdepth 2 -name $IDTPMjsonConfig -print -quit 2>/dev/null )
+dcubeXmlIDTPMconfig_absPath=$( find -H ${DATAPATH//:/ } -mindepth 1 -maxdepth 2 -name $dcubeXmlIDTPMconfig -print -quit 2>/dev/null )
+
+run () {
+    name="${1}"
+    cmd="${@:2}"
+    echo "Running ${name}..."
+    echo "command: ${cmd}"
+    time ${cmd}
+    rc=$?
+    echo "art-result: $rc ${name}"
+    if [ $rc != 0 ]; then
+        exit $rc
+    fi
+    return $rc
+}
+
+## Track reconstruction step
+run "C000 ref" \
+  Reco_tf.py \
+    --maxEvents 10 \
+    --multithreaded 'True' \
+    --autoConfiguration 'everything' \
+    --conditionsTag 'all:OFLCOND-MC21-SDR-RUN4-02' \
+    --geometryVersion 'all:ATLAS-P2-RUN4-03-00-00' \
+    --postInclude 'all:PyJobTransforms.UseFrontier' \
+    --preInclude 'InDetConfig.ConfigurationHelpers.OnlyTrackingPreInclude' \
+    --preExec 'flags.Tracking.writeExtendedSi_PRDInfo=True' \
+    --steering 'doRAWtoALL' \
+    --inputRDOFile ${InputRDOfile} \
+    --outputAODFile "${SampleName}.AOD.pool.root"
+
+## Don't run if IDTPM json config is not found
+if [ -z "$IDTPMjsonConfig_absPath" ]; then
+    echo "art-result: 1 $IDTPMjsonConfig_absPath not found"
+    exit 1
+fi
+
+## Copying json config in the output directory
+cwd=$(pwd)
+echo "Running IDTPM with the following json config:"
+## change the name of the track collection if needed
+TrkCollName="InDetTrackParticles"
+cat $IDTPMjsonConfig_absPath | sed "s|InDetTrackParticles|${TrkCollName}|g" | tee ${cwd}/IDTPMconfig.json
+
+## IDTPM step
+run "IDTPM" \
+  runIDTPM.py \
+    --inputFileNames "${SampleName}.AOD.pool.root" \
+    --outputFilePrefix "IDTPM.${SampleName}" \
+    --trkAnaCfgFile "${cwd}/IDTPMconfig.json"
+
+reco_rc=$?
+if [ $reco_rc != 0 ]; then
+    exit $reco_rc
+fi
+
+## Don't run if dcube xml config is not found
+if [ -z "$dcubeXmlIDTPMconfig_absPath" ]; then
+    echo "art-result: 1 $dcubeXmlIDTPMconfig_absPath not found"
+    exit 1
+fi
+echo "MARCO: $dcubeXmlIDTPMconfig_absPath"
+
+## dcube step
+$ATLAS_LOCAL_ROOT/dcube/current/DCubeClient/python/dcube.py \
+    -p -x dcube_cmp \
+    -c ${dcubeXmlIDTPMconfig_absPath} \
+    -r IDTPM.${SampleName}.HIST.root \
+    -R 'ref = C-000 (reference)' -M 'mon = C-000 (latest)' \
+    IDTPM.${SampleName}.HIST.root
-- 
GitLab


From b4d944f927cd6970e1e20adab29e4153b169c2c2 Mon Sep 17 00:00:00 2001
From: marco aparo <aparo.marco@gmail.com>
Date: Sun, 16 Feb 2025 00:17:10 +0100
Subject: [PATCH 2/9] Adding getSample script

---
 .../scripts/getEFTrackSample.py               | 23 ++++++++++
 .../test_EFTrack_C000_FS_ttbar_pu200_grid.sh  | 43 +++++++++++++------
 2 files changed, 54 insertions(+), 12 deletions(-)
 create mode 100755 InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/getEFTrackSample.py

diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/getEFTrackSample.py b/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/getEFTrackSample.py
new file mode 100755
index 000000000000..a07093defb0f
--- /dev/null
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/getEFTrackSample.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
+
+## quick script to get comma-separated list of files
+
+import argparse
+
+# Parsing arguments
+parser = argparse.ArgumentParser( description = "MakePlots.py options:" )
+parser.add_argument( "-s", "--sampleName", help="Short name of the sample to get" )
+
+MyArgs = parser.parse_args()
+sampleName = MyArgs.sampleName
+
+## TODO - update this list with latest samples
+samplesDict = {
+    "ttbar_pu200" : [
+        "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/PhaseIIUpgrade/RDO/ATLAS-P2-RUN4-03-00-01/mc21_14TeV.601229.PhPy8EG_A14_ttbar_hdamp258p75_SingleLep.recon.RDO.e8514_s4345_r15583_tid39626672_00/RDO.39626672._001121.pool.root.1",
+    ],
+}
+
+if sampleName in samplesDict:
+    print( ','.join( samplesDict[ sampleName ] ) )
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
index 674a1226ca59..fbbbb3eb3aae 100755
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
@@ -8,12 +8,20 @@
 # art-output: dcube*
 # art-html: dcube_cmp
 
-SampleName='C000_FS.ttbar_pu200'
-InputRDOfile='/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/PhaseIIUpgrade/RDO/ATLAS-P2-RUN4-03-00-01/mc21_14TeV.601229.PhPy8EG_A14_ttbar_hdamp258p75_SingleLep.recon.RDO.e8514_s4345_r15583_tid39626672_00/RDO.39626672._001121.pool.root.1'
+
+## Input parameters
+pipelineName='C000'
+SampleName='ttbar_pu200'  # as defined in InDetTrackPerfMon/scripts/getEFTrackSample.py
+OutSampleName="${pipelineName}_FS.${SampleName}"
+TrkCollName='InDetTrackParticles'
+referencePath=$(pwd)  # FIXME - change to cvmfs path
+referenceName="C000_FS.${SampleName}"
+referenceName_absPath="${referencePath}/IDTPM.${referenceName}.HIST.root"
+
+## search in $DATAPATH for matching files
 IDTPMjsonConfig='EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json'
 dcubeXmlIDTPMconfig='dcube_config_EFTrack_base_FS_noDoubleRatio.xml'
 
-# search in $DATAPATH for matching files
 IDTPMjsonConfig_absPath=$( find -H ${DATAPATH//:/ } -mindepth 1 -maxdepth 2 -name $IDTPMjsonConfig -print -quit 2>/dev/null )
 dcubeXmlIDTPMconfig_absPath=$( find -H ${DATAPATH//:/ } -mindepth 1 -maxdepth 2 -name $dcubeXmlIDTPMconfig -print -quit 2>/dev/null )
 
@@ -31,10 +39,16 @@ run () {
     return $rc
 }
 
+## Getting the comma-separated list of input RDOs
+InputRDOfiles=$( getEFTrackSample.py -s ${SampleName} )
+if [ "x${InputRDOfiles}" == "x" ]; then
+    echo "art-result: 1 Sample ${SampleName} not found"
+    exit 1
+fi
+
 ## Track reconstruction step
 run "C000 ref" \
   Reco_tf.py \
-    --maxEvents 10 \
     --multithreaded 'True' \
     --autoConfiguration 'everything' \
     --conditionsTag 'all:OFLCOND-MC21-SDR-RUN4-02' \
@@ -43,8 +57,9 @@ run "C000 ref" \
     --preInclude 'InDetConfig.ConfigurationHelpers.OnlyTrackingPreInclude' \
     --preExec 'flags.Tracking.writeExtendedSi_PRDInfo=True' \
     --steering 'doRAWtoALL' \
-    --inputRDOFile ${InputRDOfile} \
-    --outputAODFile "${SampleName}.AOD.pool.root"
+    --inputRDOFile ${InputRDOfiles} \
+    --outputAODFile "${OutSampleName}.AOD.pool.root"
+    #--maxEvents 10 \
 
 ## Don't run if IDTPM json config is not found
 if [ -z "$IDTPMjsonConfig_absPath" ]; then
@@ -56,14 +71,13 @@ fi
 cwd=$(pwd)
 echo "Running IDTPM with the following json config:"
 ## change the name of the track collection if needed
-TrkCollName="InDetTrackParticles"
 cat $IDTPMjsonConfig_absPath | sed "s|InDetTrackParticles|${TrkCollName}|g" | tee ${cwd}/IDTPMconfig.json
 
 ## IDTPM step
 run "IDTPM" \
   runIDTPM.py \
-    --inputFileNames "${SampleName}.AOD.pool.root" \
-    --outputFilePrefix "IDTPM.${SampleName}" \
+    --inputFileNames "${OutSampleName}.AOD.pool.root" \
+    --outputFilePrefix "IDTPM.${OutSampleName}" \
     --trkAnaCfgFile "${cwd}/IDTPMconfig.json"
 
 reco_rc=$?
@@ -76,12 +90,17 @@ if [ -z "$dcubeXmlIDTPMconfig_absPath" ]; then
     echo "art-result: 1 $dcubeXmlIDTPMconfig_absPath not found"
     exit 1
 fi
-echo "MARCO: $dcubeXmlIDTPMconfig_absPath"
+
+## Don't run if reference histogram file is not found
+if [ -z "$referenceName_absPath" ]; then
+    echo "art-result: 1 $referenceName_absPath not found"
+    exit 1
+fi
 
 ## dcube step
 $ATLAS_LOCAL_ROOT/dcube/current/DCubeClient/python/dcube.py \
     -p -x dcube_cmp \
     -c ${dcubeXmlIDTPMconfig_absPath} \
-    -r IDTPM.${SampleName}.HIST.root \
+    -r ${referenceName_absPath} \
     -R 'ref = C-000 (reference)' -M 'mon = C-000 (latest)' \
-    IDTPM.${SampleName}.HIST.root
+    IDTPM.${OutSampleName}.HIST.root
-- 
GitLab


From 5403fa789e18d0f248463e588e8988dd07a0b459 Mon Sep 17 00:00:00 2001
From: marco aparo <aparo.marco@gmail.com>
Date: Sun, 16 Feb 2025 19:00:23 +0100
Subject: [PATCH 3/9] Adding C-100 test + config changes

---
 ...ack_base_FS_noDoubleRatio_IDTPMconfig.json |   2 +-
 .../data/TrkParamPlotsDef.json                |   2 +-
 ...e_config_EFTrack_base_FS_noDoubleRatio.xml | 176 +++++++++---------
 .../test_EFTrack_C000_FS_ttbar_pu200_grid.sh  |  16 +-
 .../test_EFTrack_C100_FS_ttbar_pu200_grid.sh  | 106 +++++++++++
 5 files changed, 204 insertions(+), 98 deletions(-)
 create mode 100755 InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh

diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json
index ede75926df63..5ebce4c9c6fd 100644
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json
@@ -3,7 +3,7 @@
         "enabled" : true,
         "TestType"  : "Offline",
         "RefType"   : "Truth",
-        "OfflineTrkKey" : "InDetTrackParticles",
+        "OfflineTrkKey" : "_TRKCOLLNAME_",
         "MatchingType"  : "TruthMatch",
         "plotTechnicalEfficiencies" : true,
         "plotDuplicateRates"  : true
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/TrkParamPlotsDef.json b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/TrkParamPlotsDef.json
index eb740756b8ea..1e340fd41aec 100644
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/TrkParamPlotsDef.json
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/TrkParamPlotsDef.json
@@ -72,7 +72,7 @@
     },
     "$TRKTAG_chi2OverNdof" : {
         "type" : "TH1F",
-        "xAxis" : { "title" : "$TRKTYPE #chi^i{2}/nDoF", "nBins" : "100", "low" : "0", "high" : "5" },
+        "xAxis" : { "title" : "$TRKTYPE #chi^{2}/nDoF", "nBins" : "100", "low" : "0", "high" : "5" },
         "yAxis" : { "title" : "Entries" }
     },
     "$TRKTAG_author" : {
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml
index ef9c1b3ab259..0f6932fbd6a0 100644
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml
@@ -49,40 +49,40 @@
      <TDirectory name="Offline">
       <TDirectory name="Tracks">
        <TDirectory name="Multiplicities">
-        <hist1D name="summary" type="TH1D" plotopts="logy" tests="KSnorm"/>
+        <hist1D name="summary" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="num_offl_all" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="num_offl_all_vs_num_vtx_offl_all" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_offl_all_vs_num_vtx_offl_all" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="num_offl_selected" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="num_offl_selected_vs_num_vtx_offl_selected" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_offl_selected_vs_num_vtx_offl_selected" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="num_offl_matched" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="num_offl_matched_vs_num_vtx_offl_matched" type="TH2F" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="num_offl_selected_vs_actualMu" type="TH2F" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="num_offl_selected_vs_truthMu" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_offl_matched_vs_num_vtx_offl_matched" type="TH2F" plotopts="" tests="KSnorm"/>
+        <hist2D name="num_offl_selected_vs_actualMu" type="TH2F" plotopts="" tests="KSnorm"/>
+        <hist2D name="num_offl_selected_vs_truthMu" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="num_truth_all" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist2D name="num_truth_all_vs_num_vtx_truth_all" type="TH2F" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="num_truth_selected" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="num_truth_selected_vs_num_vtx_truth_selected" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_truth_selected_vs_num_vtx_truth_selected" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="num_truth_matched" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="num_truth_matched_vs_num_vtx_truth_matched" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="num_truth_matched_vs_num_vtx_truth_matched" type="TH2F" plotopts="" tests="KSnorm"/>
        </TDirectory>
        <TDirectory name="Parameters">
-        <hist1D name="offl_pt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_phi" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_d0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_z0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_z0sin" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_theta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_qoverp" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_chi2" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_ndof" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_chi2OverNdof" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_author" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_time" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="offl_eta_vs_pt" type="TH2F" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="offl_eta_vs_phi" type="TH2F" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="offl_z0_vs_d0" type="TH2F" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="offl_z0sin_vs_d0" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_pt" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_eta" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_phi" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_d0" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_z0" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_z0sin" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_theta" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_qoverp" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_chi2" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_ndof" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_chi2OverNdof" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_author" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_time" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist2D name="offl_eta_vs_pt" type="TH2F" plotopts="" tests="KSnorm"/>
+        <hist2D name="offl_eta_vs_phi" type="TH2F" plotopts="" tests="KSnorm"/>
+        <hist2D name="offl_z0_vs_d0" type="TH2F" plotopts="" tests="KSnorm"/>
+        <hist2D name="offl_z0sin_vs_d0" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="truth_pt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="truth_phi" type="TH1D" plotopts="ratio" tests="KSnorm"/>
@@ -94,26 +94,26 @@
         <hist1D name="truth_prodR" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="truth_prodZ" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="truth_nSiHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="truth_nSiHits_vs_eta" type="TH2F" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="truth_eta_vs_pt" type="TH2F" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="truth_eta_vs_phi" type="TH2F" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="truth_z0_vs_d0" type="TH2F" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="truth_z0sin_vs_d0" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="truth_nSiHits_vs_eta" type="TH2F" plotopts="" tests="KSnorm"/>
+        <hist2D name="truth_eta_vs_pt" type="TH2F" plotopts="" tests="KSnorm"/>
+        <hist2D name="truth_eta_vs_phi" type="TH2F" plotopts="" tests="KSnorm"/>
+        <hist2D name="truth_z0_vs_d0" type="TH2F" plotopts="" tests="KSnorm"/>
+        <hist2D name="truth_z0sin_vs_d0" type="TH2F" plotopts="" tests="KSnorm"/>
         <graph name="offl_hasValidTime_eff_vs_eta" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
        </TDirectory>
        <TDirectory name="Resolutions">
         <hist1D name="pull_pt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="res_pt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="sigma_offl_pt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="corr_offl_vs_truth_pt" type="TH2F" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_pt" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="resolution_pt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_pt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_pt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullmean_pt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="resolution_pt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="resmean_pt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullwidth_pt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullmean_pt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_pt_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="resmean_pt_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_pt_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullmean_pt_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
         <hist1D name="resolution_pt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_pt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_pt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
@@ -121,15 +121,15 @@
         <hist1D name="pull_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="res_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="sigma_offl_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="corr_offl_vs_truth_eta" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_eta" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="resolution_eta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_eta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_eta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullmean_eta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="resolution_eta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="resmean_eta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullwidth_eta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullmean_eta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_eta_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="resmean_eta_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_eta_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullmean_eta_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
         <hist1D name="resolution_eta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_eta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_eta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
@@ -137,15 +137,15 @@
         <hist1D name="pull_d0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="res_d0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="sigma_offl_d0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="corr_offl_vs_truth_d0" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_d0" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="resolution_d0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_d0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_d0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullmean_d0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="resolution_d0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="resmean_d0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullwidth_d0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullmean_d0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_d0_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="resmean_d0_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_d0_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullmean_d0_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
         <hist1D name="resolution_d0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_d0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_d0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
@@ -153,15 +153,15 @@
         <hist1D name="pull_z0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="res_z0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="sigma_offl_z0" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="corr_offl_vs_truth_z0" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_z0" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="resolution_z0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_z0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_z0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullmean_z0_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="resolution_z0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="resmean_z0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullwidth_z0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullmean_z0_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_z0_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="resmean_z0_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_z0_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullmean_z0_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
         <hist1D name="resolution_z0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_z0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_z0_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
@@ -169,15 +169,15 @@
         <hist1D name="pull_qoverp" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="res_qoverp" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="sigma_offl_qoverp" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="corr_offl_vs_truth_qoverp" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_qoverp" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="resolution_qoverp_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_qoverp_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_qoverp_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullmean_qoverp_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="resolution_qoverp_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="resmean_qoverp_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullwidth_qoverp_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullmean_qoverp_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_qoverp_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="resmean_qoverp_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_qoverp_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullmean_qoverp_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
         <hist1D name="resolution_qoverp_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_qoverp_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_qoverp_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
@@ -185,15 +185,15 @@
         <hist1D name="pull_ptqopt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="res_ptqopt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="sigma_offl_ptqopt" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="corr_offl_vs_truth_ptqopt" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_ptqopt" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="resolution_ptqopt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_ptqopt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_ptqopt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullmean_ptqopt_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="resolution_ptqopt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="resmean_ptqopt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullwidth_ptqopt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullmean_ptqopt_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_ptqopt_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="resmean_ptqopt_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_ptqopt_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullmean_ptqopt_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
         <hist1D name="resolution_ptqopt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_ptqopt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_ptqopt_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
@@ -201,15 +201,15 @@
         <hist1D name="pull_theta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="res_theta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="sigma_offl_theta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="corr_offl_vs_truth_theta" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_theta" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="resolution_theta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_theta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_theta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullmean_theta_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="resolution_theta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="resmean_theta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullwidth_theta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullmean_theta_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_theta_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="resmean_theta_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_theta_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullmean_theta_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
         <hist1D name="resolution_theta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_theta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_theta_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
@@ -217,15 +217,15 @@
         <hist1D name="pull_phi" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="res_phi" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="sigma_offl_phi" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="corr_offl_vs_truth_phi" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_phi" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="resolution_phi_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_phi_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_phi_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullmean_phi_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="resolution_phi_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="resmean_phi_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullwidth_phi_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullmean_phi_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_phi_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="resmean_phi_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_phi_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullmean_phi_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
         <hist1D name="resolution_phi_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_phi_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_phi_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
@@ -233,15 +233,15 @@
         <hist1D name="pull_z0sin" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="res_z0sin" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="sigma_offl_z0sin" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist2D name="corr_offl_vs_truth_z0sin" type="TH2F" plotopts="ratio" tests="KSnorm"/>
+        <hist2D name="corr_offl_vs_truth_z0sin" type="TH2F" plotopts="" tests="KSnorm"/>
         <hist1D name="resolution_z0sin_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_z0sin_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_z0sin_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullmean_z0sin_vs_truth_inclusive" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="resolution_z0sin_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="resmean_z0sin_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullwidth_z0sin_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
-        <hist1D name="pullmean_z0sin_vs_truth_pt" type="TH1D" plotopts="ratio,logx" tests="KSnorm"/>
+        <hist1D name="resolution_z0sin_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="resmean_z0sin_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullwidth_z0sin_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
+        <hist1D name="pullmean_z0sin_vs_truth_pt" type="TH1D" plotopts="ratio;logx" tests="KSnorm"/>
         <hist1D name="resolution_z0sin_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="resmean_z0sin_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="pullwidth_z0sin_vs_truth_eta" type="TH1D" plotopts="ratio" tests="KSnorm"/>
@@ -271,19 +271,19 @@
         <graph name="duplrate_vs_truthMu" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
        </TDirectory>
        <TDirectory name="HitsOnTracks">
-        <hist1D name="offl_nInnerMostPixelHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_nInnerMostPixelEndcapHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_nNextToInnerMostPixelHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_nNextToInnerMostPixelEndcapHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_nInnerMostPixelSharedHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_nInnerMostPixelSharedEndcapHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_nPixelHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_nPixelHoles" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_nPixelSharedHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_pixeldEdx" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_nSCTHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_nSCTHoles" type="TH1D" plotopts="ratio" tests="KSnorm"/>
-        <hist1D name="offl_nSCTSharedHits" type="TH1D" plotopts="ratio" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelHits" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelEndcapHits" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelHits" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_nNextToInnerMostPixelEndcapHits" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedHits" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_nInnerMostPixelSharedEndcapHits" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHits" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_nPixelHoles" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_nPixelSharedHits" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_pixeldEdx" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHits" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_nSCTHoles" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
+        <hist1D name="offl_nSCTSharedHits" type="TH1D" plotopts="ratio;norm" tests="KSnorm"/>
         <hist1D name="offl_nInnerMostPixelHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="offl_nInnerMostPixelEndcapHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="offl_nNextToInnerMostPixelHits_vs_offl_pt" type="TProfile" plotopts="ratio" tests="KSnorm"/>
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
index fbbbb3eb3aae..4de18359932a 100755
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
@@ -1,5 +1,5 @@
 #!/bin/bash
-# art-description: Niglty test to produce a reference for EFTrack studies using ttbar pu200 sample
+# art-description: Nightly test to compare C-000 reference to latest C-000 (Full-scan) for EFTrack studies using ttbar pu200 sample
 # art-type: grid
 # art-include: main/Athena
 # art-output: *.root
@@ -11,10 +11,10 @@
 
 ## Input parameters
 pipelineName='C000'
-SampleName='ttbar_pu200'  # as defined in InDetTrackPerfMon/scripts/getEFTrackSample.py
+SampleName='ttbar_pu200'  # as defined in samplesDict of InDetTrackPerfMon/scripts/getEFTrackSample.py
 OutSampleName="${pipelineName}_FS.${SampleName}"
 TrkCollName='InDetTrackParticles'
-referencePath=$(pwd)  # FIXME - change to cvmfs path
+referencePath='/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/InDetTrackPerfMon/EFTrackRefereceHistograms/'
 referenceName="C000_FS.${SampleName}"
 referenceName_absPath="${referencePath}/IDTPM.${referenceName}.HIST.root"
 
@@ -29,7 +29,6 @@ run () {
     name="${1}"
     cmd="${@:2}"
     echo "Running ${name}..."
-    echo "command: ${cmd}"
     time ${cmd}
     rc=$?
     echo "art-result: $rc ${name}"
@@ -47,8 +46,10 @@ if [ "x${InputRDOfiles}" == "x" ]; then
 fi
 
 ## Track reconstruction step
-run "C000 ref" \
+# FIXME - remove maxEvents
+run "${pipelineName}" \
   Reco_tf.py \
+    --maxEvents 10 \
     --multithreaded 'True' \
     --autoConfiguration 'everything' \
     --conditionsTag 'all:OFLCOND-MC21-SDR-RUN4-02' \
@@ -59,7 +60,6 @@ run "C000 ref" \
     --steering 'doRAWtoALL' \
     --inputRDOFile ${InputRDOfiles} \
     --outputAODFile "${OutSampleName}.AOD.pool.root"
-    #--maxEvents 10 \
 
 ## Don't run if IDTPM json config is not found
 if [ -z "$IDTPMjsonConfig_absPath" ]; then
@@ -70,8 +70,8 @@ fi
 ## Copying json config in the output directory
 cwd=$(pwd)
 echo "Running IDTPM with the following json config:"
-## change the name of the track collection if needed
-cat $IDTPMjsonConfig_absPath | sed "s|InDetTrackParticles|${TrkCollName}|g" | tee ${cwd}/IDTPMconfig.json
+## change the name of the track collection to monitor and copy json config in work dir
+cat $IDTPMjsonConfig_absPath | sed "s|_TRKCOLLNAME_|${TrkCollName}|g" | tee ${cwd}/IDTPMconfig.json
 
 ## IDTPM step
 run "IDTPM" \
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh
new file mode 100755
index 000000000000..193e76bac9f3
--- /dev/null
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh
@@ -0,0 +1,106 @@
+#!/bin/bash
+# art-description: Nightly test to compare C-100 vs C-000 (Full-scan) for EFTrack studies using ttbar pu200 sample
+# art-type: grid
+# art-include: main/Athena
+# art-output: *.root
+# art-output: *.json
+# art-output: *.xml
+# art-output: dcube*
+# art-html: dcube_cmp
+
+
+## Input parameters
+pipelineName='C100'
+SampleName='ttbar_pu200'  # as defined in samplesDict of InDetTrackPerfMon/scripts/getEFTrackSample.py
+OutSampleName="${pipelineName}_FS.${SampleName}"
+TrkCollName='InDetTrackParticles'
+referencePath='/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/InDetTrackPerfMon/EFTrackRefereceHistograms/'
+referenceName="C000_FS.${SampleName}"
+referenceName_absPath="${referencePath}/IDTPM.${referenceName}.HIST.root"
+
+## search in $DATAPATH for matching files
+IDTPMjsonConfig='EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json'
+dcubeXmlIDTPMconfig='dcube_config_EFTrack_base_FS_noDoubleRatio.xml'
+
+IDTPMjsonConfig_absPath=$( find -H ${DATAPATH//:/ } -mindepth 1 -maxdepth 2 -name $IDTPMjsonConfig -print -quit 2>/dev/null )
+dcubeXmlIDTPMconfig_absPath=$( find -H ${DATAPATH//:/ } -mindepth 1 -maxdepth 2 -name $dcubeXmlIDTPMconfig -print -quit 2>/dev/null )
+
+run () {
+    name="${1}"
+    cmd="${@:2}"
+    echo "Running ${name}..."
+    time ${cmd}
+    rc=$?
+    echo "art-result: $rc ${name}"
+    if [ $rc != 0 ]; then
+        exit $rc
+    fi
+    return $rc
+}
+
+## Getting the comma-separated list of input RDOs
+InputRDOfiles=$( getEFTrackSample.py -s ${SampleName} )
+if [ "x${InputRDOfiles}" == "x" ]; then
+    echo "art-result: 1 Sample ${SampleName} not found"
+    exit 1
+fi
+
+## Track reconstruction step
+# FIXME - remove maxEvents
+run "${pipelineName}" \
+  Reco_tf.py \
+    --maxEvents 10 \
+    --multithreaded 'True' \
+    --autoConfiguration 'everything' \
+    --conditionsTag 'all:OFLCOND-MC21-SDR-RUN4-02' \
+    --geometryVersion 'all:ATLAS-P2-RUN4-03-00-00' \
+    --postInclude 'all:PyJobTransforms.UseFrontier' \
+    --preInclude 'InDetConfig.ConfigurationHelpers.OnlyTrackingPreInclude,ActsConfig.ActsCIFlags.actsAloneFastWorkflowFlags' \
+    --preExec 'flags.Tracking.writeExtendedSi_PRDInfo=True' \
+    --steering 'doRAWtoALL' \
+    --inputRDOFile ${InputRDOfiles} \
+    --outputAODFile "${OutSampleName}.AOD.pool.root"
+
+## Don't run if IDTPM json config is not found
+if [ -z "$IDTPMjsonConfig_absPath" ]; then
+    echo "art-result: 1 $IDTPMjsonConfig_absPath not found"
+    exit 1
+fi
+
+## Copying json config in the output directory
+cwd=$(pwd)
+echo "Running IDTPM with the following json config:"
+## change the name of the track collection to monitor and copy json config in work dir
+cat $IDTPMjsonConfig_absPath | sed "s|_TRKCOLLNAME_|${TrkCollName}|g" | tee ${cwd}/IDTPMconfig.json
+
+## IDTPM step
+run "IDTPM" \
+  runIDTPM.py \
+    --inputFileNames "${OutSampleName}.AOD.pool.root" \
+    --outputFilePrefix "IDTPM.${OutSampleName}" \
+    --trkAnaCfgFile "${cwd}/IDTPMconfig.json"
+
+reco_rc=$?
+if [ $reco_rc != 0 ]; then
+    exit $reco_rc
+fi
+
+## Don't run if dcube xml config is not found
+if [ -z "$dcubeXmlIDTPMconfig_absPath" ]; then
+    echo "art-result: 1 $dcubeXmlIDTPMconfig_absPath not found"
+    exit 1
+fi
+
+## Don't run if reference histogram file is not found
+if [ -z "$referenceName_absPath" ]; then
+    echo "art-result: 1 $referenceName_absPath not found"
+    exit 1
+fi
+
+## dcube step
+$ATLAS_LOCAL_ROOT/dcube/current/DCubeClient/python/dcube.py \
+    -p -x dcube_cmp \
+    -c ${dcubeXmlIDTPMconfig_absPath} \
+    -r ${referenceName_absPath} \
+    -R 'ref = C-000' -M 'mon = C-100' \
+    IDTPM.${OutSampleName}.HIST.root
-- 
GitLab


From 6bb19d001f3c6d5f80335b895dde36c31f6f64ae Mon Sep 17 00:00:00 2001
From: marco aparo <aparo.marco@gmail.com>
Date: Mon, 17 Feb 2025 12:43:22 +0100
Subject: [PATCH 4/9] Adding script PrintTrkAnaSummary.py

---
 .../scripts/PrintTrkAnaSummary.py             | 58 +++++++++++++++++++
 .../test_EFTrack_C000_FS_ttbar_pu200_grid.sh  |  7 +++
 .../test_EFTrack_C100_FS_ttbar_pu200_grid.sh  |  7 +++
 3 files changed, 72 insertions(+)
 create mode 100755 InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/PrintTrkAnaSummary.py

diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/PrintTrkAnaSummary.py b/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/PrintTrkAnaSummary.py
new file mode 100755
index 000000000000..0795fdde08aa
--- /dev/null
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/PrintTrkAnaSummary.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
+
+import sys, os, argparse, ROOT
+import pandas as pd
+
+# Parsing arguments
+commandName = os.path.basename( sys.argv[0] )
+summaryDirDefault="InDetTrackPerfMonPlots/TrkAnaEF/Offline/Tracks/Multiplicities/"
+parser = argparse.ArgumentParser( description = commandName+" options:" )
+parser.add_argument( "-t", "--testFile", help="Path to input TEST file" )
+parser.add_argument( "-r", "--refFile", default="", help="Path to input REFERENCE file" )
+parser.add_argument( "-T", "--testLabel", default="TEST", help="Label for TEST" )
+parser.add_argument( "-R", "--refLabel", default="REF", help="Label for REFERENCE" )
+parser.add_argument( "-d", "--dirName", default=summaryDirDefault, help="Name of the TDirectory path with summary plot" )
+parser.add_argument( "-o", "--outName", default="TrkAnaSummary.html", help="Name of the output html file" )
+MyArgs = parser.parse_args()
+
+if not MyArgs.testFile:
+    print( "ERROR: input test file not provided" )
+    sys.exit(1)
+
+data={}
+index=[]
+
+## Processing test file
+inTestFile = ROOT.TFile.Open( MyArgs.testFile , "READ" )
+hs1 = inTestFile.Get( MyArgs.dirName+"/summary" )
+testList = []
+for i in range( 1, hs1.GetNbinsX()+1 ) :
+    index.append( hs1.GetXaxis().GetBinLabel(i) )
+    c = hs1.GetBinContent(i)
+    e = hs1.GetBinError(i)
+    testList.append( f"{c:.1f} +/- {e:.1f}" )
+data.update( { MyArgs.testLabel : testList } )
+inTestFile.Close()
+
+## Processing reference file
+if MyArgs.refFile :
+    inRefFile = ROOT.TFile.Open( MyArgs.refFile , "READ" )
+    hs2 = inRefFile.Get( MyArgs.dirName+"/summary" )
+    refList = []
+    for i in range( 1, hs2.GetNbinsX()+1 ) :
+        c = hs2.GetBinContent(i)
+        e = hs2.GetBinError(i)
+        refList.append( f"{c:.1f} +/- {e:.1f}" )
+    data.update( { MyArgs.refLabel : refList } )
+    inRefFile.Close()
+
+## printing table to screen
+df = pd.DataFrame( data, index=index )
+print( df )
+
+## printing table to html output file
+with open( MyArgs.outName, 'w' ) as f :
+    print( df.to_html(), file=f )
+
+sys.exit(0)
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
index 4de18359932a..f0394bce1ba8 100755
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
@@ -5,6 +5,7 @@
 # art-output: *.root
 # art-output: *.json
 # art-output: *.xml
+# art-output: *.html
 # art-output: dcube*
 # art-html: dcube_cmp
 
@@ -104,3 +105,9 @@ $ATLAS_LOCAL_ROOT/dcube/current/DCubeClient/python/dcube.py \
     -r ${referenceName_absPath} \
     -R 'ref = C-000 (reference)' -M 'mon = C-000 (latest)' \
     IDTPM.${OutSampleName}.HIST.root
+
+## Printing summary
+PrintTrkAnaSummary.py \
+    -t IDTPM.${OutSampleName}.HIST.root \
+    -r ${referenceName_absPath} \
+    -R 'C-000 (reference)' -T 'C-000 (latest)'
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh
index 193e76bac9f3..d4314988eaf3 100755
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh
@@ -5,6 +5,7 @@
 # art-output: *.root
 # art-output: *.json
 # art-output: *.xml
+# art-output: *.html
 # art-output: dcube*
 # art-html: dcube_cmp
 
@@ -104,3 +105,9 @@ $ATLAS_LOCAL_ROOT/dcube/current/DCubeClient/python/dcube.py \
     -r ${referenceName_absPath} \
     -R 'ref = C-000' -M 'mon = C-100' \
     IDTPM.${OutSampleName}.HIST.root
+
+## Printing summary
+PrintTrkAnaSummary.py \
+    -t IDTPM.${OutSampleName}.HIST.root \
+    -r ${referenceName_absPath} \
+    -R 'C-000' -T 'C-100'
-- 
GitLab


From b2498cb2ec5254557112205d346329e219306596 Mon Sep 17 00:00:00 2001
From: marco aparo <aparo.marco@gmail.com>
Date: Mon, 17 Feb 2025 15:32:52 +0100
Subject: [PATCH 5/9] Updating PrintTrkAnaSummary.py

---
 .../scripts/PrintTrkAnaSummary.py             | 111 ++++++++++++++----
 1 file changed, 90 insertions(+), 21 deletions(-)

diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/PrintTrkAnaSummary.py b/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/PrintTrkAnaSummary.py
index 0795fdde08aa..325e67361f1c 100755
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/PrintTrkAnaSummary.py
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/PrintTrkAnaSummary.py
@@ -6,13 +6,13 @@ import pandas as pd
 
 # Parsing arguments
 commandName = os.path.basename( sys.argv[0] )
-summaryDirDefault="InDetTrackPerfMonPlots/TrkAnaEF/Offline/Tracks/Multiplicities/"
+summaryDirDefault="InDetTrackPerfMonPlots/TrkAnaEF/Offline/Tracks/"
 parser = argparse.ArgumentParser( description = commandName+" options:" )
 parser.add_argument( "-t", "--testFile", help="Path to input TEST file" )
 parser.add_argument( "-r", "--refFile", default="", help="Path to input REFERENCE file" )
 parser.add_argument( "-T", "--testLabel", default="TEST", help="Label for TEST" )
 parser.add_argument( "-R", "--refLabel", default="REF", help="Label for REFERENCE" )
-parser.add_argument( "-d", "--dirName", default=summaryDirDefault, help="Name of the TDirectory path with summary plot" )
+parser.add_argument( "-d", "--dirName", default=summaryDirDefault, help="Name of the TDirectory path with plots" )
 parser.add_argument( "-o", "--outName", default="TrkAnaSummary.html", help="Name of the output html file" )
 MyArgs = parser.parse_args()
 
@@ -23,29 +23,98 @@ if not MyArgs.testFile:
 data={}
 index=[]
 
+def processFile( inFileName, dirName, label, data, index, updateIndex=True ):
+    sList = []
+    inFile = ROOT.TFile.Open( inFileName, "READ" )
+
+    ## multiplicities
+    hs = inFile.Get( dirName+"Multiplicities/summary" )
+    if hs:
+        for i in range( 1, hs.GetNbinsX()+1 ) :
+            if updateIndex : index.append( hs.GetXaxis().GetBinLabel(i) )
+            c = hs.GetBinContent(i)
+            e = hs.GetBinError(i)
+            sList.append( f"{c:.1f} +/- {e:.1f}" )
+
+    ## efficiency
+    he = inFile.Get( dirName+"Efficiencies/eff_vs_truth_inclusive" )
+    if updateIndex : index.append( " " )
+    sList.append( " " )
+    if updateIndex : index.append( "Eff_vs_truth" )
+    if he:
+        c = 100*he.GetEfficiency(1)
+        eu = 100*he.GetEfficiencyErrorUp(1)
+        el = 100*he.GetEfficiencyErrorLow(1)
+        sList.append( f"{c:.2f} +{eu:.2f}/-{el:.2f} %" )
+    else : sList.append( "-" )
+
+    ## technical efficiency
+    het = inFile.Get( dirName+"Efficiencies/Technical/eff_vs_truth_inclusive" )
+    if updateIndex : index.append( "Tech_eff_vs_truth" )
+    if het:
+        c = 100*het.GetEfficiency(1)
+        eu = 100*het.GetEfficiencyErrorUp(1)
+        el = 100*het.GetEfficiencyErrorLow(1)
+        sList.append( f"{c:.2f} +{eu:.2f}/-{el:.2f} %" )
+    else : sList.append( "-" )
+
+
+    ## pT resolution
+    hrpt = inFile.Get( dirName+"Resolutions/resolution_pt_vs_truth_inclusive" )
+    if updateIndex : index.append( " " )
+    sList.append( " " )
+    if updateIndex : index.append( "Resolution_pT_vs_truth" )
+    if hrpt:
+        c = hrpt.GetBinContent(1)
+        e = hrpt.GetBinError(1)
+        sList.append( f"{c:.2f} +/- {e:.2f} GeV" )
+    else : sList.append( "-" )
+
+
+    ## d0 resolution
+    hrd0 = inFile.Get( dirName+"Resolutions/resolution_d0_vs_truth_inclusive" )
+    if updateIndex : index.append( "Resolution_d0_vs_truth" )
+    if hrd0:
+        c = hrd0.GetBinContent(1)
+        e = hrd0.GetBinError(1)
+        sList.append( f"{c:.2f} +/- {e:.2f} mm" )
+    else : sList.append( "-" )
+
+
+    ## z0 resolution
+    hrz0 = inFile.Get( dirName+"Resolutions/resolution_z0_vs_truth_inclusive" )
+    if updateIndex : index.append( "Resolution_z0_vs_truth" )
+    if hrz0:
+        c = hrz0.GetBinContent(1)
+        e = hrz0.GetBinError(1)
+        sList.append( f"{c:.2f} +/- {e:.2f} mm" )
+    else : sList.append( "-" )
+
+
+    ## updating data
+    data.update( { label : sList } )
+    inFile.Close()
+
+
 ## Processing test file
-inTestFile = ROOT.TFile.Open( MyArgs.testFile , "READ" )
-hs1 = inTestFile.Get( MyArgs.dirName+"/summary" )
-testList = []
-for i in range( 1, hs1.GetNbinsX()+1 ) :
-    index.append( hs1.GetXaxis().GetBinLabel(i) )
-    c = hs1.GetBinContent(i)
-    e = hs1.GetBinError(i)
-    testList.append( f"{c:.1f} +/- {e:.1f}" )
-data.update( { MyArgs.testLabel : testList } )
-inTestFile.Close()
+processFile(
+    inFileName  = MyArgs.testFile,
+    dirName     = MyArgs.dirName,
+    label       = MyArgs.testLabel,
+    data        = data,
+    index       = index
+)
 
 ## Processing reference file
 if MyArgs.refFile :
-    inRefFile = ROOT.TFile.Open( MyArgs.refFile , "READ" )
-    hs2 = inRefFile.Get( MyArgs.dirName+"/summary" )
-    refList = []
-    for i in range( 1, hs2.GetNbinsX()+1 ) :
-        c = hs2.GetBinContent(i)
-        e = hs2.GetBinError(i)
-        refList.append( f"{c:.1f} +/- {e:.1f}" )
-    data.update( { MyArgs.refLabel : refList } )
-    inRefFile.Close()
+    processFile(
+        inFileName  = MyArgs.refFile,
+        dirName     = MyArgs.dirName,
+        label       = MyArgs.refLabel,
+        data        = data,
+        index       = index,
+        updateIndex=False
+    )
 
 ## printing table to screen
 df = pd.DataFrame( data, index=index )
-- 
GitLab


From 032bbbf4f336ad0201705de5e2b7530c51cef4c1 Mon Sep 17 00:00:00 2001
From: marco aparo <aparo.marco@gmail.com>
Date: Mon, 17 Feb 2025 21:07:05 +0100
Subject: [PATCH 6/9] Adding inclusive fake and dupl rate plots

---
 .../InDetTrackPerfMon/data/DuplicateRatePlotsDef.json        | 5 +++++
 .../InDetTrackPerfMon/data/FakeRatePlotsDef.json             | 5 +++++
 .../data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml      | 2 ++
 .../InDetTrackPerfMon/src/plots/DuplicateRatePlots.cxx       | 2 ++
 .../InDetTrackPerfMon/src/plots/DuplicateRatePlots.h         | 1 +
 .../InDetTrackPerfMon/src/plots/FakeRatePlots.cxx            | 2 ++
 .../InDetTrackPerfMon/src/plots/FakeRatePlots.h              | 1 +
 7 files changed, 18 insertions(+)

diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/DuplicateRatePlotsDef.json b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/DuplicateRatePlotsDef.json
index bc290662a533..89bcbdfd25bb 100644
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/DuplicateRatePlotsDef.json
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/DuplicateRatePlotsDef.json
@@ -1,4 +1,9 @@
 {
+    "duplrate_vs_$TRKTAG_inclusive" : {
+        "type" : "TEfficiency",
+        "xAxis" : { "title" : "Inclusive", "nBins" : "1", "low" : "0.0", "high" : "2.0" },
+        "yAxis" : { "title" : "Duplicate rate" }
+    },
     "duplrate_vs_$TRKTAG_pt" : {
         "type" : "TEfficiency",
         "xAxis" : { "title" : "$TRKTYPE p_{T} [GeV]", "nBins" : "25", "low" : "0.0", "high" : "50.0" },
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/FakeRatePlotsDef.json b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/FakeRatePlotsDef.json
index 105b6ea8afde..315ac7f1f1fd 100644
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/FakeRatePlotsDef.json
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/FakeRatePlotsDef.json
@@ -1,4 +1,9 @@
 {
+    "fakerate_vs_$TRKTAG_inclusive" : {
+        "type" : "TEfficiency",
+        "xAxis" : { "title" : "Inclusive", "nBins" : "1", "low" : "0.0", "high" : "2.0" },
+        "yAxis" : { "title" : "Fake rate" }
+    },
     "fakerate_vs_$TRKTAG_pt" : {
         "type" : "TEfficiency",
         "xAxis" : { "title" : "$TRKTYPE p_{T} [GeV]", "nBins" : "100", "low" : "0.0", "high" : "50.0" },
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml
index 0f6932fbd6a0..6c3205b5db23 100644
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/dcube_config_EFTrack_base_FS_noDoubleRatio.xml
@@ -262,6 +262,7 @@
         <hist1D name="duplnum_nonzero_vs_actualMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="duplnum_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
         <hist1D name="duplnum_nonzero_vs_truthMu" type="TProfile" plotopts="ratio" tests="KSnorm"/>
+        <graph name="duplrate_vs_truth_inclusive" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
         <graph name="duplrate_vs_truth_pt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
         <graph name="duplrate_vs_truth_eta" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
         <graph name="duplrate_vs_truth_phi" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
@@ -528,6 +529,7 @@
         <graph name="eff_vs_truthMu" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
        </TDirectory>
        <TDirectory name="FakeRates">
+        <graph name="fakerate_vs_offl_inclusive" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
         <graph name="fakerate_vs_offl_pt" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
         <graph name="fakerate_vs_offl_eta" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
         <graph name="fakerate_vs_offl_phi" type="TEfficiency" plotopts="ratio" tests="KSnorm"/>
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/DuplicateRatePlots.cxx b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/DuplicateRatePlots.cxx
index 07464d416b91..92ed3f37dbf2 100644
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/DuplicateRatePlots.cxx
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/DuplicateRatePlots.cxx
@@ -41,6 +41,7 @@ StatusCode IDTPM::DuplicateRatePlots::bookPlots()
 {
   ATH_MSG_DEBUG( "Booking duplicate rate plots in " << getDirectory() ); 
 
+  ATH_CHECK( retrieveAndBook( m_duplrate_vs_incl, "duplrate_vs_"+m_trackType+"_inclusive" ) );
   ATH_CHECK( retrieveAndBook( m_duplrate_vs_pt,   "duplrate_vs_"+m_trackType+"_pt" ) );
   ATH_CHECK( retrieveAndBook( m_duplrate_vs_eta,  "duplrate_vs_"+m_trackType+"_eta" ) );
   ATH_CHECK( retrieveAndBook( m_duplrate_vs_phi,  "duplrate_vs_"+m_trackType+"_phi" ) );
@@ -94,6 +95,7 @@ StatusCode IDTPM::DuplicateRatePlots::fillPlots(
   float pz0   = z0( particle );
 
   /// Fill the histograms
+  ATH_CHECK( fill( m_duplrate_vs_incl,  1,  (nMatched>1), weight ) );
   ATH_CHECK( fill( m_duplrate_vs_pt,  ppt,  (nMatched>1), weight ) );
   ATH_CHECK( fill( m_duplrate_vs_eta, peta, (nMatched>1), weight ) );
   ATH_CHECK( fill( m_duplrate_vs_phi, pphi, (nMatched>1), weight ) );
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/DuplicateRatePlots.h b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/DuplicateRatePlots.h
index 4ad82afcb0f7..da7b69bbb2cb 100644
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/DuplicateRatePlots.h
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/DuplicateRatePlots.h
@@ -54,6 +54,7 @@ namespace IDTPM {
     bool m_doGlobalPlots{};
     bool m_doTruthMuPlots{};
     
+    TEfficiency*  m_duplrate_vs_incl{};
     TEfficiency*  m_duplrate_vs_pt{};
     TEfficiency*  m_duplrate_vs_eta{};
     TEfficiency*  m_duplrate_vs_phi{};
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/FakeRatePlots.cxx b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/FakeRatePlots.cxx
index 11ee9aafb874..2f22c2fdce47 100644
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/FakeRatePlots.cxx
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/FakeRatePlots.cxx
@@ -41,6 +41,7 @@ StatusCode IDTPM::FakeRatePlots::bookPlots()
 {
   ATH_MSG_DEBUG( "Booking efficiency plots in " << getDirectory() ); 
 
+  ATH_CHECK( retrieveAndBook( m_fakerate_vs_incl, "fakerate_vs_"+m_trackType+"_inclusive" ) );
   ATH_CHECK( retrieveAndBook( m_fakerate_vs_pt,   "fakerate_vs_"+m_trackType+"_pt" ) );
   ATH_CHECK( retrieveAndBook( m_fakerate_vs_eta,  "fakerate_vs_"+m_trackType+"_eta" ) );
   ATH_CHECK( retrieveAndBook( m_fakerate_vs_phi,  "fakerate_vs_"+m_trackType+"_phi" ) );
@@ -69,6 +70,7 @@ StatusCode IDTPM::FakeRatePlots::fillPlots(
   float pz0    = z0( particle );
 
   /// Fill the histograms
+  ATH_CHECK( fill( m_fakerate_vs_incl,  1,  isFake, weight ) );
   ATH_CHECK( fill( m_fakerate_vs_pt,  ppt,  isFake, weight ) );
   ATH_CHECK( fill( m_fakerate_vs_eta, peta, isFake, weight ) );
   ATH_CHECK( fill( m_fakerate_vs_phi, pphi, isFake, weight ) );
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/FakeRatePlots.h b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/FakeRatePlots.h
index e7f66e8d133f..6e6f9db369cf 100644
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/FakeRatePlots.h
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/plots/FakeRatePlots.h
@@ -54,6 +54,7 @@ namespace IDTPM {
     bool m_doGlobalPlots{};
     bool m_doTruthMuPlots{};
 
+    TEfficiency* m_fakerate_vs_incl{};
     TEfficiency* m_fakerate_vs_pt{};
     TEfficiency* m_fakerate_vs_eta{};
     TEfficiency* m_fakerate_vs_phi{};
-- 
GitLab


From 9f1fcc8a65af0650e1bce6bddf22099c1aad81f2 Mon Sep 17 00:00:00 2001
From: marco aparo <aparo.marco@gmail.com>
Date: Thu, 20 Feb 2025 16:32:41 +0100
Subject: [PATCH 7/9] Update labels and html table

---
 .../data/SummaryPlotsDef.json                 |  8 +++----
 .../InDetTrackPerfMon/python/ConfigUtils.py   | 17 +++++++++++++
 .../scripts/PrintTrkAnaSummary.py             | 24 +++++++++++++++++++
 3 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/SummaryPlotsDef.json b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/SummaryPlotsDef.json
index 290f3a19a5c9..1691ef84163e 100644
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/data/SummaryPlotsDef.json
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/data/SummaryPlotsDef.json
@@ -5,10 +5,10 @@
             "title" : "Summary",
             "labels" : [
                 "N_{Events}",
-                "N_{$TESTTYPEs}^{All}",
+                "N_{$TESTTYPEs}^{$TESTALL}",
                 "N_{$TESTTYPEs}^{Selected}",
                 "N_{$TESTTYPEs}^{Matched}",
-                "N_{$REFTYPEs}^{All}",
+                "N_{$REFTYPEs}^{$REFALL}",
                 "N_{$REFTYPEs}^{Selected}",
                 "N_{$REFTYPEs}^{Matched}"
             ]
@@ -22,11 +22,11 @@
             "labels" : [
                 "N_{Events}^{Triggered}",
                 "N_{RoIs}",
-                "N_{$TESTTYPEs}^{All}",
+                "N_{$TESTTYPEs}^{$TESTALL}",
                 "N_{$TESTTYPEs}^{Selected}",
                 "N_{$TESTTYPEs}^{Selected in RoI}",
                 "N_{$TESTTYPEs}^{Matched}",
-                "N_{$REFTYPEs}^{All}",
+                "N_{$REFTYPEs}^{$REFALL}",
                 "N_{$REFTYPEs}^{Selected}",
                 "N_{$REFTYPEs}^{Selected in RoI}",
                 "N_{$REFTYPEs}^{Matched}"
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/python/ConfigUtils.py b/InnerDetector/InDetValidation/InDetTrackPerfMon/python/ConfigUtils.py
index fa544ce048ef..ae7042189e9e 100644
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/python/ConfigUtils.py
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/python/ConfigUtils.py
@@ -200,12 +200,17 @@ def getPlotsDefList( flags ):
     refLabel  = getLabel( flags, flags.PhysVal.IDTPM.currentTrkAna.RefType )
     trkLabels = [ testLabel, refLabel ]
 
+    testAllLabel = getAllTruthLabel( flags, flags.PhysVal.IDTPM.currentTrkAna.TestType )
+    refAllLabel  = getAllTruthLabel( flags, flags.PhysVal.IDTPM.currentTrkAna.RefType )
+
+
     if flags.PhysVal.IDTPM.currentTrkAna.MatchingType == "EFTruthMatch":
         trkLabels.append( getLabel( flags, "Truth" ) )
 
     ## First loop to replace track tags and labels
     plotsDefStrList = []
     for plotsDefStr in plotsDefStrList_v2 :
+        plotsDefStr = plotsDefStr.replace( "$TESTALL", testAllLabel ).replace( "$REFALL", refAllLabel )
         plotsDefStr = plotsDefStr.replace( "$TESTTYPE", testLabel[1] ).replace( "$TESTTAG", testLabel[0] )
         plotsDefStr = plotsDefStr.replace( "$REFTYPE", refLabel[1] ).replace( "$REFTAG", refLabel[0] )
         if ( "$TRKTAG" not in plotsDefStr ) and ( "$TRKTYPE" not in plotsDefStr ) :
@@ -315,3 +320,15 @@ def updateResolutionPlots( myPlotsDefDict ) :
                     outDict.update( { pName : pDict } )
 
     return outDict
+
+
+def getAllTruthLabel( flags, key ) :
+    ## replace All label to All HS/PU depending
+    ## pileupSwitch, for truth particles
+    if key != "Truth":
+        return "All"
+    if flags.PhysVal.IDTPM.currentTrkAna.pileupSwitch == "HardScatter" :
+        return "All HS"
+    if flags.PhysVal.IDTPM.currentTrkAna.pileupSwitch == "PileUp" :
+        return "All PU"
+    return "All"
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/PrintTrkAnaSummary.py b/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/PrintTrkAnaSummary.py
index 325e67361f1c..78c365acb415 100755
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/PrintTrkAnaSummary.py
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/PrintTrkAnaSummary.py
@@ -91,6 +91,30 @@ def processFile( inFileName, dirName, label, data, index, updateIndex=True ):
     else : sList.append( "-" )
 
 
+    ## fake rate
+    hf = inFile.Get( dirName+"FakeRates/fakerate_vs_offl_inclusive" )
+    if updateIndex : index.append( " " )
+    sList.append( " " )
+    if updateIndex : index.append( "FakeRate_vs_reco" )
+    if hf:
+        c = 100*hf.GetEfficiency(1)
+        eu = 100*hf.GetEfficiencyErrorUp(1)
+        el = 100*hf.GetEfficiencyErrorLow(1)
+        sList.append( f"{c:.2f} +{eu:.2f}/-{el:.2f} %" )
+    else : sList.append( "-" )
+
+
+    ## duplicate rate
+    hd = inFile.Get( dirName+"Duplicates/duplrate_vs_truth_inclusive" )
+    if updateIndex : index.append( "DuplicateRate_vs_truth" )
+    if hd:
+        c = 100*hd.GetEfficiency(1)
+        eu = 100*hd.GetEfficiencyErrorUp(1)
+        el = 100*hd.GetEfficiencyErrorLow(1)
+        sList.append( f"{c:.2f} +{eu:.2f}/-{el:.2f} %" )
+    else : sList.append( "-" )
+
+
     ## updating data
     data.update( { label : sList } )
     inFile.Close()
-- 
GitLab


From 5049acf392d353c7afaa56007eecaba049e67cc3 Mon Sep 17 00:00:00 2001
From: marco aparo <aparo.marco@gmail.com>
Date: Thu, 20 Feb 2025 18:30:48 +0100
Subject: [PATCH 8/9] Updating reco steps and moving them into scripts

---
 .../InDetTrackPerfMon/CMakeLists.txt          |  1 +
 .../scripts/runReco_C000_FS.sh                | 70 +++++++++++++++++++
 .../scripts/runReco_C100_FS.sh                | 70 +++++++++++++++++++
 .../test_EFTrack_C000_FS_ttbar_pu200_grid.sh  | 15 +---
 .../test_EFTrack_C100_FS_ttbar_pu200_grid.sh  | 15 +---
 5 files changed, 147 insertions(+), 24 deletions(-)
 create mode 100755 InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/runReco_C000_FS.sh
 create mode 100755 InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/runReco_C100_FS.sh

diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/CMakeLists.txt b/InnerDetector/InDetValidation/InDetTrackPerfMon/CMakeLists.txt
index 49add1d258b5..42bca06d7fff 100755
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/CMakeLists.txt
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/CMakeLists.txt
@@ -44,4 +44,5 @@ atlas_install_data( test/ref.json )
 atlas_install_runtime( scripts/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
 atlas_install_scripts( test/test*.py POST_BUILD_CMD ${ATLAS_FLAKE8})
 atlas_install_data( scripts/hdefXmlToJson.xsl)
+atlas_install_scripts( scripts/*.sh )
 atlas_install_scripts( test/test*.sh )
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/runReco_C000_FS.sh b/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/runReco_C000_FS.sh
new file mode 100755
index 000000000000..fc2753e61d76
--- /dev/null
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/runReco_C000_FS.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+usage () {
+    [ $# -gt 1 ] && echo $2
+    echo "
+    Command line script to run track reconstruction
+    for the reference (C-000) pipeline only as offline-like algorithms (Full-Scan)
+
+    Usage:
+    runReco_C000_FS.sh -i <your_input_RDO_file> -o <your_output_AOD_file_name>
+
+    Options:
+    -i  |  --inputRDO       STRING      full path to input RDO file (mandatory)
+    -o  |  --outputAOD      STRING      name of the output AOD file (mandatory)
+    -n  |  --nEvents        INT         Number of events to run on (default = -1 aka All)
+    -s  |  --skipCheck                  skip checks on output AOD file
+    -h  |  --help                       this help
+    "
+    [ $# -gt 0 ] && exit $1
+    exit 0
+}
+
+inputRDO=""
+outputAOD=""
+nEvents="-1"
+skipCheck="0"
+
+## parsing flags
+while [ $# -ge 1 ];do
+    case "$1" in
+        --) shift ; break ;;
+        -i  | --inputRDO )      if [ $# -lt 2 ] ; then usage ; fi ; inputRDO="$2"  ; shift ;;
+        -o  | --outputAOD )     if [ $# -lt 2 ] ; then usage ; fi ; outputAOD="$2" ; shift ;;
+        -n  | --nEvents )       if [ $# -lt 2 ] ; then usage ; fi ; nEvents="$2"   ; shift ;;
+        -s  | --skipCheck )     if [ $# -lt 1 ] ; then usage ; fi ; skipCheck="1"  ; shift ;;
+        -h  | --help )          usage 0 ;;
+        *) shift ;;
+    esac
+    shift
+done
+
+## checking valid inputs
+if [ -z $inputRDO ]; then usage ; fi
+if [ -z $outputAOD ]; then usage ; fi
+
+if [ ! -f $inputRDO ]; then
+    echo "runReco_C000_FS.sh result: 1 ${inputRDO} not found"
+    exit 1
+fi
+
+## running reconstruction
+Reco_tf.py --CA \
+    --maxEvents ${nEvents} \
+    --preInclude 'InDetConfig.ConfigurationHelpers.OnlyTrackingPreInclude' \
+    --preExec 'flags.Tracking.writeExtendedSi_PRDInfo=True' \
+    --steering 'doRAWtoALL' \
+    --inputRDOFile ${inputRDO} \
+    --outputAODFile ${outputAOD}
+#    --conditionsTag 'all:OFLCOND-MC21-SDR-RUN4-02' \
+#    --geometryVersion 'all:ATLAS-P2-RUN4-03-00-00' \
+
+rc=$?
+echo "Reco_tf.py result: $rc"
+if [ $rc != 0 ]; then exit $rc; fi
+
+## check output
+if [ "$skipCheck" == "0" ]; then
+    checkxAOD.py ${outputAOD} > ${outputAOD}.checkxAOD.log
+    checkFile.py ${outputAOD} > ${outputAOD}.checkFile.log
+fi
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/runReco_C100_FS.sh b/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/runReco_C100_FS.sh
new file mode 100755
index 000000000000..675deaff1cfe
--- /dev/null
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/scripts/runReco_C100_FS.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+usage () {
+    [ $# -gt 1 ] && echo $2
+    echo "
+    Command line script to run track reconstruction
+    for the reference (C-000) pipeline only as offline-like algorithms (Full-Scan)
+
+    Usage:
+    runReco_C100_FS.sh -i <your_input_RDO_file> -o <your_output_AOD_file_name>
+
+    Options:
+    -i  |  --inputRDO       STRING      full path to input RDO file (mandatory)
+    -o  |  --outputAOD      STRING      name of the output AOD file (mandatory)
+    -n  |  --nEvents        INT         Number of events to run on (default = -1 aka All)
+    -s  |  --skipCheck                  skip checks on output AOD file
+    -h  |  --help                       this help
+    "
+    [ $# -gt 0 ] && exit $1
+    exit 0
+}
+
+inputRDO=""
+outputAOD=""
+nEvents="-1"
+skipCheck=0
+
+## parsing flags
+while [ $# -ge 1 ];do
+    case "$1" in
+        --) shift ; break ;;
+        -i  | --inputRDO )      if [ $# -lt 2 ] ; then usage ; fi ; inputRDO="$2"  ; shift ;;
+        -o  | --outputAOD )     if [ $# -lt 2 ] ; then usage ; fi ; outputAOD="$2" ; shift ;;
+        -n  | --nEvents )       if [ $# -lt 2 ] ; then usage ; fi ; nEvents="$2"   ; shift ;;
+        -s  | --skipCheck )     if [ $# -lt 1 ] ; then usage ; fi ; skipCheck=1    ; shift ;;
+        -h  | --help )          usage 0 ;;
+        *) shift ;;
+    esac
+    shift
+done
+
+## checking valid inputs
+if [ -z $inputRDO ]; then usage ; fi
+if [ -z $outputAOD ]; then usage ; fi
+
+if [ ! -f $inputRDO ]; then
+    echo "runReco_C100_FS.sh result: 1 ${inputRDO} not found"
+    exit 1
+fi
+
+## running reconstruction
+Reco_tf.py --CA \
+    --maxEvents ${nEvents} \
+    --preInclude 'InDetConfig.ConfigurationHelpers.OnlyTrackingPreInclude,ActsConfig.ActsCIFlags.actsFastWorkflowFlags' \
+    --preExec 'flags.Tracking.writeExtendedSi_PRDInfo=True' \
+    --steering 'doRAWtoALL' \
+    --inputRDOFile ${inputRDO} \
+    --outputAODFile ${outputAOD}
+#    --conditionsTag 'all:OFLCOND-MC21-SDR-RUN4-02' \
+#    --geometryVersion 'all:ATLAS-P2-RUN4-03-00-00' \
+
+rc=$?
+echo "Reco_tf.py result: $rc"
+if [ $rc != 0 ]; then exit $rc; fi
+
+## check output
+if [ "$skipCheck" == "0" ]; then
+    checkxAOD.py ${outputAOD} > ${outputAOD}.checkxAOD.log
+    checkFile.py ${outputAOD} > ${outputAOD}.checkFile.log
+fi
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
index f0394bce1ba8..cfa5a1c7c25b 100755
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
@@ -49,18 +49,9 @@ fi
 ## Track reconstruction step
 # FIXME - remove maxEvents
 run "${pipelineName}" \
-  Reco_tf.py \
-    --maxEvents 10 \
-    --multithreaded 'True' \
-    --autoConfiguration 'everything' \
-    --conditionsTag 'all:OFLCOND-MC21-SDR-RUN4-02' \
-    --geometryVersion 'all:ATLAS-P2-RUN4-03-00-00' \
-    --postInclude 'all:PyJobTransforms.UseFrontier' \
-    --preInclude 'InDetConfig.ConfigurationHelpers.OnlyTrackingPreInclude' \
-    --preExec 'flags.Tracking.writeExtendedSi_PRDInfo=True' \
-    --steering 'doRAWtoALL' \
-    --inputRDOFile ${InputRDOfiles} \
-    --outputAODFile "${OutSampleName}.AOD.pool.root"
+  runReco_C000_FS.sh \
+    -i ${InputRDOfiles} \
+    -o "${OutSampleName}.AOD.pool.root" -n 10
 
 ## Don't run if IDTPM json config is not found
 if [ -z "$IDTPMjsonConfig_absPath" ]; then
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh
index d4314988eaf3..e12b28231abc 100755
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh
@@ -49,18 +49,9 @@ fi
 ## Track reconstruction step
 # FIXME - remove maxEvents
 run "${pipelineName}" \
-  Reco_tf.py \
-    --maxEvents 10 \
-    --multithreaded 'True' \
-    --autoConfiguration 'everything' \
-    --conditionsTag 'all:OFLCOND-MC21-SDR-RUN4-02' \
-    --geometryVersion 'all:ATLAS-P2-RUN4-03-00-00' \
-    --postInclude 'all:PyJobTransforms.UseFrontier' \
-    --preInclude 'InDetConfig.ConfigurationHelpers.OnlyTrackingPreInclude,ActsConfig.ActsCIFlags.actsAloneFastWorkflowFlags' \
-    --preExec 'flags.Tracking.writeExtendedSi_PRDInfo=True' \
-    --steering 'doRAWtoALL' \
-    --inputRDOFile ${InputRDOfiles} \
-    --outputAODFile "${OutSampleName}.AOD.pool.root"
+  runReco_C100_FS.sh \
+    -i ${InputRDOfiles} \
+    -o "${OutSampleName}.AOD.pool.root" -n 10
 
 ## Don't run if IDTPM json config is not found
 if [ -z "$IDTPMjsonConfig_absPath" ]; then
-- 
GitLab


From 37b681a82236edd3e7d5c60520b1e07dfbcf3a53 Mon Sep 17 00:00:00 2001
From: marco aparo <aparo.marco@gmail.com>
Date: Fri, 21 Feb 2025 15:32:23 +0100
Subject: [PATCH 9/9] Updating ART test scripts

---
 .../test_EFTrack_C000_FS_ttbar_pu200_grid.sh  | 40 +++++++++++--------
 .../test_EFTrack_C100_FS_ttbar_pu200_grid.sh  | 40 +++++++++++--------
 2 files changed, 46 insertions(+), 34 deletions(-)

diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
index cfa5a1c7c25b..d1c4e940f426 100755
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C000_FS_ttbar_pu200_grid.sh
@@ -2,10 +2,11 @@
 # art-description: Nightly test to compare C-000 reference to latest C-000 (Full-scan) for EFTrack studies using ttbar pu200 sample
 # art-type: grid
 # art-include: main/Athena
-# art-output: *.root
+# art-output: IDTPM.*.root
 # art-output: *.json
 # art-output: *.xml
 # art-output: *.html
+# art-output: *.log
 # art-output: dcube*
 # art-html: dcube_cmp
 
@@ -18,6 +19,8 @@ TrkCollName='InDetTrackParticles'
 referencePath='/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/InDetTrackPerfMon/EFTrackRefereceHistograms/'
 referenceName="C000_FS.${SampleName}"
 referenceName_absPath="${referencePath}/IDTPM.${referenceName}.HIST.root"
+refLabel="C-000_cvmfs"
+testLabel="C-000_latest"
 
 ## search in $DATAPATH for matching files
 IDTPMjsonConfig='EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json'
@@ -25,14 +28,21 @@ dcubeXmlIDTPMconfig='dcube_config_EFTrack_base_FS_noDoubleRatio.xml'
 
 IDTPMjsonConfig_absPath=$( find -H ${DATAPATH//:/ } -mindepth 1 -maxdepth 2 -name $IDTPMjsonConfig -print -quit 2>/dev/null )
 dcubeXmlIDTPMconfig_absPath=$( find -H ${DATAPATH//:/ } -mindepth 1 -maxdepth 2 -name $dcubeXmlIDTPMconfig -print -quit 2>/dev/null )
+cwd=$(pwd)
 
 run () {
     name="${1}"
     cmd="${@:2}"
     echo "Running ${name}..."
+    echo -e "\n---> ${name}" >> "${cwd}/commands.log"
+    echo "${cmd}" >> "${cwd}/commands.log"
     time ${cmd}
     rc=$?
     echo "art-result: $rc ${name}"
+    ## if _skipRC is in name skip exit condition
+    if [[ "${name}" =~ "_skipRC" ]]; then
+      return 0
+    fi
     if [ $rc != 0 ]; then
         exit $rc
     fi
@@ -41,26 +51,25 @@ run () {
 
 ## Getting the comma-separated list of input RDOs
 InputRDOfiles=$( getEFTrackSample.py -s ${SampleName} )
-if [ "x${InputRDOfiles}" == "x" ]; then
+if [ ! -f "${InputRDOfiles}" ]; then
     echo "art-result: 1 Sample ${SampleName} not found"
     exit 1
 fi
 
 ## Track reconstruction step
-# FIXME - remove maxEvents
 run "${pipelineName}" \
   runReco_C000_FS.sh \
     -i ${InputRDOfiles} \
-    -o "${OutSampleName}.AOD.pool.root" -n 10
+    -o "${OutSampleName}.AOD.pool.root"
+    #-n 10
 
 ## Don't run if IDTPM json config is not found
-if [ -z "$IDTPMjsonConfig_absPath" ]; then
+if [ ! -f "$IDTPMjsonConfig_absPath" ]; then
     echo "art-result: 1 $IDTPMjsonConfig_absPath not found"
     exit 1
 fi
 
 ## Copying json config in the output directory
-cwd=$(pwd)
 echo "Running IDTPM with the following json config:"
 ## change the name of the track collection to monitor and copy json config in work dir
 cat $IDTPMjsonConfig_absPath | sed "s|_TRKCOLLNAME_|${TrkCollName}|g" | tee ${cwd}/IDTPMconfig.json
@@ -72,33 +81,30 @@ run "IDTPM" \
     --outputFilePrefix "IDTPM.${OutSampleName}" \
     --trkAnaCfgFile "${cwd}/IDTPMconfig.json"
 
-reco_rc=$?
-if [ $reco_rc != 0 ]; then
-    exit $reco_rc
-fi
-
 ## Don't run if dcube xml config is not found
-if [ -z "$dcubeXmlIDTPMconfig_absPath" ]; then
+if [ ! -f "$dcubeXmlIDTPMconfig_absPath" ]; then
     echo "art-result: 1 $dcubeXmlIDTPMconfig_absPath not found"
     exit 1
 fi
 
 ## Don't run if reference histogram file is not found
-if [ -z "$referenceName_absPath" ]; then
+if [ ! -f "$referenceName_absPath" ]; then
     echo "art-result: 1 $referenceName_absPath not found"
     exit 1
 fi
 
 ## dcube step
-$ATLAS_LOCAL_ROOT/dcube/current/DCubeClient/python/dcube.py \
+run "dcube_skipRC" \
+  $ATLAS_LOCAL_ROOT/dcube/current/DCubeClient/python/dcube.py \
     -p -x dcube_cmp \
     -c ${dcubeXmlIDTPMconfig_absPath} \
     -r ${referenceName_absPath} \
-    -R 'ref = C-000 (reference)' -M 'mon = C-000 (latest)' \
+    -R "ref=${refLabel}" -M "mon=${testLabel}" \
     IDTPM.${OutSampleName}.HIST.root
 
 ## Printing summary
-PrintTrkAnaSummary.py \
+run "PrintSummaryTable_skipRC" \
+  PrintTrkAnaSummary.py \
     -t IDTPM.${OutSampleName}.HIST.root \
     -r ${referenceName_absPath} \
-    -R 'C-000 (reference)' -T 'C-000 (latest)'
+    -R "${refLabel}" -T "${testLabel}"
diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh
index e12b28231abc..4252bae1aec5 100755
--- a/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh
+++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/test/test_EFTrack_C100_FS_ttbar_pu200_grid.sh
@@ -2,10 +2,11 @@
 # art-description: Nightly test to compare C-100 vs C-000 (Full-scan) for EFTrack studies using ttbar pu200 sample
 # art-type: grid
 # art-include: main/Athena
-# art-output: *.root
+# art-output: IDTPM.*.root
 # art-output: *.json
 # art-output: *.xml
 # art-output: *.html
+# art-output: *.log
 # art-output: dcube*
 # art-html: dcube_cmp
 
@@ -18,6 +19,8 @@ TrkCollName='InDetTrackParticles'
 referencePath='/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/InDetTrackPerfMon/EFTrackRefereceHistograms/'
 referenceName="C000_FS.${SampleName}"
 referenceName_absPath="${referencePath}/IDTPM.${referenceName}.HIST.root"
+refLabel="C-000"
+testLabel="C-100"
 
 ## search in $DATAPATH for matching files
 IDTPMjsonConfig='EFTrack_base_FS_noDoubleRatio_IDTPMconfig.json'
@@ -25,14 +28,21 @@ dcubeXmlIDTPMconfig='dcube_config_EFTrack_base_FS_noDoubleRatio.xml'
 
 IDTPMjsonConfig_absPath=$( find -H ${DATAPATH//:/ } -mindepth 1 -maxdepth 2 -name $IDTPMjsonConfig -print -quit 2>/dev/null )
 dcubeXmlIDTPMconfig_absPath=$( find -H ${DATAPATH//:/ } -mindepth 1 -maxdepth 2 -name $dcubeXmlIDTPMconfig -print -quit 2>/dev/null )
+cwd=$(pwd)
 
 run () {
     name="${1}"
     cmd="${@:2}"
     echo "Running ${name}..."
+    echo -e "\n---> ${name}" >> "${cwd}/commands.log"
+    echo "${cmd}" >> "${cwd}/commands.log"
     time ${cmd}
     rc=$?
     echo "art-result: $rc ${name}"
+    ## if _skipRC is in name skip exit condition
+    if [[ "${name}" =~ "_skipRC" ]]; then
+      return 0
+    fi
     if [ $rc != 0 ]; then
         exit $rc
     fi
@@ -41,26 +51,25 @@ run () {
 
 ## Getting the comma-separated list of input RDOs
 InputRDOfiles=$( getEFTrackSample.py -s ${SampleName} )
-if [ "x${InputRDOfiles}" == "x" ]; then
+if [ ! -f "${InputRDOfiles}" ]; then
     echo "art-result: 1 Sample ${SampleName} not found"
     exit 1
 fi
 
 ## Track reconstruction step
-# FIXME - remove maxEvents
 run "${pipelineName}" \
   runReco_C100_FS.sh \
     -i ${InputRDOfiles} \
-    -o "${OutSampleName}.AOD.pool.root" -n 10
+    -o "${OutSampleName}.AOD.pool.root"
+    #-n 10
 
 ## Don't run if IDTPM json config is not found
-if [ -z "$IDTPMjsonConfig_absPath" ]; then
+if [ ! -f "$IDTPMjsonConfig_absPath" ]; then
     echo "art-result: 1 $IDTPMjsonConfig_absPath not found"
     exit 1
 fi
 
 ## Copying json config in the output directory
-cwd=$(pwd)
 echo "Running IDTPM with the following json config:"
 ## change the name of the track collection to monitor and copy json config in work dir
 cat $IDTPMjsonConfig_absPath | sed "s|_TRKCOLLNAME_|${TrkCollName}|g" | tee ${cwd}/IDTPMconfig.json
@@ -72,33 +81,30 @@ run "IDTPM" \
     --outputFilePrefix "IDTPM.${OutSampleName}" \
     --trkAnaCfgFile "${cwd}/IDTPMconfig.json"
 
-reco_rc=$?
-if [ $reco_rc != 0 ]; then
-    exit $reco_rc
-fi
-
 ## Don't run if dcube xml config is not found
-if [ -z "$dcubeXmlIDTPMconfig_absPath" ]; then
+if [ ! -f "$dcubeXmlIDTPMconfig_absPath" ]; then
     echo "art-result: 1 $dcubeXmlIDTPMconfig_absPath not found"
     exit 1
 fi
 
 ## Don't run if reference histogram file is not found
-if [ -z "$referenceName_absPath" ]; then
+if [ ! -f "$referenceName_absPath" ]; then
     echo "art-result: 1 $referenceName_absPath not found"
     exit 1
 fi
 
 ## dcube step
-$ATLAS_LOCAL_ROOT/dcube/current/DCubeClient/python/dcube.py \
+run "dcube_skipRC" \
+  $ATLAS_LOCAL_ROOT/dcube/current/DCubeClient/python/dcube.py \
     -p -x dcube_cmp \
     -c ${dcubeXmlIDTPMconfig_absPath} \
     -r ${referenceName_absPath} \
-    -R 'ref = C-000' -M 'mon = C-100' \
+    -R "ref=${refLabel}" -M "mon=${testLabel}" \
     IDTPM.${OutSampleName}.HIST.root
 
 ## Printing summary
-PrintTrkAnaSummary.py \
+run "PrintSummaryTable_skipRC" \
+  PrintTrkAnaSummary.py \
     -t IDTPM.${OutSampleName}.HIST.root \
     -r ${referenceName_absPath} \
-    -R 'C-000' -T 'C-100'
+    -R "${refLabel}" -T "${testLabel}"
-- 
GitLab