From 25c7c89f961fdfc94649823b3b2a2d00efbd22cf Mon Sep 17 00:00:00 2001
From: msaur <miroslav.saur@cern.ch>
Date: Mon, 13 Dec 2021 16:22:56 +0100
Subject: [PATCH 1/2] PrCheckerSummary handler without UT related tracks

---
 handlers/PrCheckerSummaryHandler_withoutUT.py | 280 ++++++++++++++++++
 1 file changed, 280 insertions(+)
 create mode 100644 handlers/PrCheckerSummaryHandler_withoutUT.py

diff --git a/handlers/PrCheckerSummaryHandler_withoutUT.py b/handlers/PrCheckerSummaryHandler_withoutUT.py
new file mode 100644
index 00000000..561caf4f
--- /dev/null
+++ b/handlers/PrCheckerSummaryHandler_withoutUT.py
@@ -0,0 +1,280 @@
+# Handler for summarizing the output of PrChecker2.
+#
+# It extracts the most interesting histograms and also
+# produces efficiency histograms of reconstructed vs
+# reconstructible tracks for different tracking categories.
+#
+# The 1D efficiencies are calculated usig TGraphAsymmErrors
+# and Bayesian error bars
+# Aim is to check reconstruction without UT
+#
+# Based on: PrCheckerSummaryhandler
+# author: Miroslav Saur (miroslav.saur@cern.ch) & Suzanne Klaver (suzanne.klaver@cern.ch)
+# Version:
+#	   - 0.1 (2021/12): version of PrCheckerSummaryhandler without downstream and forward tracks
+
+import os, sys
+import argparse
+import ROOT
+from ROOT import gStyle
+from ROOT import gROOT
+from ROOT import TStyle
+from ROOT import gPad
+from .BaseHandler import BaseHandler
+from .gaussValidation import grepPattern
+from collectRunResults import urlopen
+import logging
+import subprocess
+
+from collections import defaultdict
+
+
+def effPlotsDict_long():
+    basedict = {
+        "Pt": {},
+        "P": {},
+        "Eta": {},
+        "nPV": {},
+        "docaz": {},
+    }
+
+    basedict["Pt"]["path"] = "Track/BestLongTrackChecker/BestLong/01_long_Pt"
+    basedict["P"]["path"] = "Track/BestLongTrackChecker/BestLong/01_long_P"
+    basedict["Eta"]["path"] = "Track/BestLongTrackChecker/BestLong/01_long_Eta"
+    basedict["nPV"]["path"] = "Track/BestLongTrackChecker/BestLong/01_long_nPV"
+    basedict["docaz"][
+        "path"] = "Track/BestLongTrackChecker/BestLong/01_long_docaz"
+    basedict["Pt"]["unit"] = "pT [MeV]"
+    basedict["P"]["unit"] = "p [MeV]"
+    basedict["Eta"]["unit"] = "#eta [-]"
+    basedict["nPV"]["unit"] = "nPV [-]"
+    basedict["docaz"]["unit"] = "docaz [mm]"
+    basedict["Pt"]["unit_y"] = "Effciency [-]"
+    basedict["P"]["unit_y"] = "Effciency [-]"
+    basedict["Eta"]["unit_y"] = "Effciency [-]"
+    basedict["nPV"]["unit_y"] = "Effciency [-]"
+    basedict["docaz"]["unit_y"] = "Effciency [-]"
+    return basedict
+
+
+def getEffPlots_long():
+    return ["Pt", "P", "Eta", "nPV", "docaz"]
+
+
+def effPlotsDict_velo():
+    basedict = {
+        "Pt": {},
+        "P": {},
+        "Eta": {},
+        "nPV": {},
+        "docaz": {},
+    }
+
+    basedict["Pt"][
+        "path"] = "Track/VeloFullTrackChecker/VeloFull/01_notElectron_Velo_Pt"
+    basedict["P"][
+        "path"] = "Track/VeloFullTrackChecker/VeloFull/01_notElectron_Velo_P"
+    basedict["Eta"][
+        "path"] = "Track/VeloFullTrackChecker/VeloFull/01_notElectron_Velo_Eta"
+    basedict["nPV"][
+        "path"] = "Track/VeloFullTrackChecker/VeloFull/01_notElectron_Velo_nPV"
+    basedict["docaz"][
+        "path"] = "Track/VeloFullTrackChecker/VeloFull/01_notElectron_Velo_docaz"
+    basedict["Pt"]["unit"] = "pT [MeV]"
+    basedict["P"]["unit"] = "p [MeV]"
+    basedict["Eta"]["unit"] = "#eta [-]"
+    basedict["nPV"]["unit"] = "nPV [-]"
+    basedict["docaz"]["unit"] = "docaz [mm]"
+    basedict["Pt"]["unit_y"] = "Effciency [-]"
+    basedict["P"]["unit_y"] = "Effciency [-]"
+    basedict["Eta"]["unit_y"] = "Effciency [-]"
+    basedict["nPV"]["unit_y"] = "Effciency [-]"
+    basedict["docaz"]["unit_y"] = "Effciency [-]"
+    return basedict
+
+
+def getEffPlots_velo():
+    return ["Pt", "P", "Eta", "nPV", "docaz"]
+
+
+def effPlotsDict_ttrack():
+    basedict = {
+        "Pt": {},
+        "P": {},
+        "Eta": {},
+        "nPV": {},
+        "docaz": {},
+    }
+
+    basedict["Pt"]["path"] = "Track/SeedTrackChecker/Seed/01_hasT_Pt"
+    basedict["P"]["path"] = "Track/SeedTrackChecker/Seed/01_hasT_P"
+    basedict["Eta"]["path"] = "Track/SeedTrackChecker/Seed/01_hasT_Eta"
+    basedict["nPV"]["path"] = "Track/SeedTrackChecker/Seed/01_hasT_nPV"
+    basedict["docaz"]["path"] = "Track/SeedTrackChecker/Seed/01_hasT_docaz"
+    basedict["Pt"]["unit"] = "pT [MeV]"
+    basedict["P"]["unit"] = "p [MeV]"
+    basedict["Eta"]["unit"] = "#eta [-]"
+    basedict["nPV"]["unit"] = "nPV [-]"
+    basedict["docaz"]["unit"] = "docaz [mm]"
+    basedict["Pt"]["unit_y"] = "Effciency [-]"
+    basedict["P"]["unit_y"] = "Effciency [-]"
+    basedict["Eta"]["unit_y"] = "Effciency [-]"
+    basedict["nPV"]["unit_y"] = "Effciency [-]"
+    basedict["docaz"]["unit_y"] = "Effciency [-]"
+    return basedict
+
+
+def getEffPlots_ttrack():
+    return ["Pt", "P", "Eta", "nPV", "docaz"]
+
+
+class PrCheckerSummaryHandler(BaseHandler):
+    def __init__(self):
+        super(self.__class__, self).__init__()
+
+    def collectResultsExt(self, directory, project, version, platform,
+                          hostname, cpu_info, memoryinfo, startTime, endTime,
+                          options):
+        logfile = os.path.join(directory, 'run.log')
+        rootfile = grepPattern(
+            'INFO Writing ROOT histograms to: (\S+)',
+            open(logfile, 'r', encoding='ISO-8859-1').read())
+        inputfile = ROOT.TFile.Open(os.path.join(directory, rootfile), 'read')
+        outputfile = ROOT.TFile("PrCheckerSummary.root", "recreate")
+
+        from .utils.LHCbStyle import setLHCbStyle
+        from .utils.Legend import place_legend
+
+        setLHCbStyle()
+
+        latex = ROOT.TLatex()
+        latex.SetNDC()
+        latex.SetTextSize(0.03)
+
+        outputfile.mkdir('long')
+        outputfile.mkdir('velo')
+        outputfile.mkdir('ttrack')
+
+        effPlots_long = getEffPlots_long()
+        eff_dict_long = effPlotsDict_long()
+        effPlots_down = getEffPlots_down()
+        eff_dict_down = effPlotsDict_down()
+        effPlots_forward = getEffPlots_forward()
+        eff_dict_forward = effPlotsDict_forward()
+        effPlots_velo = getEffPlots_velo()
+        eff_dict_velo = effPlotsDict_velo()
+        effPlots_ttrack = getEffPlots_ttrack()
+        eff_dict_ttrack = effPlotsDict_ttrack()
+
+        for effPlot in effPlots_long:
+            outputfile.cd("long")
+            effNom = inputfile.Get(eff_dict_long[effPlot]["path"] +
+                                   "_reconstructed")
+            effDenom = inputfile.Get(eff_dict_long[effPlot]["path"] +
+                                     "_reconstructible")
+            canvas_eff = ROOT.TCanvas(effPlot, effPlot)
+            efficiency = ROOT.TGraphAsymmErrors()
+            efficiency.SetName(effPlot + "_tracking_efficiency")
+            efficiency.Divide(effNom, effDenom, "w")
+
+            efficiency.SetMarkerSize(0.5)
+            efficiency.SetLineWidth(1)
+            efficiency.SetMarkerColor(ROOT.kBlack)
+            efficiency.SetMarkerStyle(5)
+            efficiency.GetXaxis().SetLabelFont(132)
+            efficiency.GetXaxis().SetLabelSize(0.04)
+            efficiency.GetXaxis().SetTitleFont(132)
+            efficiency.GetXaxis().SetTitleSize(0.06)
+            efficiency.GetXaxis().SetTitleOffset(0.8)
+            efficiency.GetYaxis().SetLabelFont(132)
+            efficiency.GetYaxis().SetLabelSize(0.04)
+            efficiency.GetYaxis().SetTitleFont(132)
+            efficiency.GetYaxis().SetTitleSize(0.06)
+            efficiency.GetYaxis().SetDecimals()
+            efficiency.GetYaxis().SetTitleOffset(0.7)
+            efficiency.GetXaxis().SetTitle(eff_dict_long[effPlot]["unit"])
+            efficiency.GetYaxis().SetTitle(eff_dict_long[effPlot]["unit_y"])
+            efficiency.SetTitle(
+                "{path} reconstructed / reconstructible".format(
+                    path=eff_dict_long[effPlot]["path"]))
+
+            efficiency.Draw("AP")
+            efficiency.Write(effPlot + "_tgraph")
+            canvas_eff.Write(effPlot + "_canvas")
+
+        for effPlot in effPlots_velo:
+            outputfile.cd("velo")
+            effNom = inputfile.Get(eff_dict_velo[effPlot]["path"] +
+                                   "_reconstructed")
+            effDenom = inputfile.Get(eff_dict_velo[effPlot]["path"] +
+                                     "_reconstructible")
+            canvas_eff = ROOT.TCanvas(effPlot, effPlot)
+            efficiency = ROOT.TGraphAsymmErrors()
+            efficiency.SetName(effPlot + "_tracking_efficiency")
+            efficiency.Divide(effNom, effDenom, "w")
+
+            efficiency.SetMarkerSize(0.5)
+            efficiency.SetLineWidth(1)
+            efficiency.SetMarkerColor(ROOT.kBlack)
+            efficiency.SetMarkerStyle(5)
+            efficiency.GetXaxis().SetLabelFont(132)
+            efficiency.GetXaxis().SetLabelSize(0.04)
+            efficiency.GetXaxis().SetTitleFont(132)
+            efficiency.GetXaxis().SetTitleSize(0.06)
+            efficiency.GetXaxis().SetTitleOffset(0.8)
+            efficiency.GetYaxis().SetLabelFont(132)
+            efficiency.GetYaxis().SetLabelSize(0.04)
+            efficiency.GetYaxis().SetTitleFont(132)
+            efficiency.GetYaxis().SetTitleSize(0.06)
+            efficiency.GetYaxis().SetDecimals()
+            efficiency.GetYaxis().SetTitleOffset(0.7)
+            efficiency.GetXaxis().SetTitle(eff_dict_velo[effPlot]["unit"])
+            efficiency.GetYaxis().SetTitle(eff_dict_velo[effPlot]["unit_y"])
+            efficiency.SetTitle(
+                "{path} reconstructed / reconstructible".format(
+                    path=eff_dict_velo[effPlot]["path"]))
+
+            efficiency.Draw("AP")
+            efficiency.Write(effPlot + "_tgraph")
+            canvas_eff.Write(effPlot + "_canvas")
+
+        for effPlot in effPlots_ttrack:
+            outputfile.cd("ttrack")
+            effNom = inputfile.Get(eff_dict_ttrack[effPlot]["path"] +
+                                   "_reconstructed")
+            effDenom = inputfile.Get(eff_dict_ttrack[effPlot]["path"] +
+                                     "_reconstructible")
+            canvas_eff = ROOT.TCanvas(effPlot, effPlot)
+            efficiency = ROOT.TGraphAsymmErrors()
+            efficiency.SetName(effPlot + "_tracking_efficiency")
+            efficiency.Divide(effNom, effDenom, "w")
+
+            efficiency.SetMarkerSize(0.5)
+            efficiency.SetLineWidth(1)
+            efficiency.SetMarkerColor(ROOT.kBlack)
+            efficiency.SetMarkerStyle(5)
+            efficiency.GetXaxis().SetLabelFont(132)
+            efficiency.GetXaxis().SetLabelSize(0.04)
+            efficiency.GetXaxis().SetTitleFont(132)
+            efficiency.GetXaxis().SetTitleSize(0.06)
+            efficiency.GetXaxis().SetTitleOffset(0.8)
+            efficiency.GetYaxis().SetLabelFont(132)
+            efficiency.GetYaxis().SetLabelSize(0.04)
+            efficiency.GetYaxis().SetTitleFont(132)
+            efficiency.GetYaxis().SetTitleSize(0.06)
+            efficiency.GetYaxis().SetDecimals()
+            efficiency.GetYaxis().SetTitleOffset(0.7)
+            efficiency.GetXaxis().SetTitle(eff_dict_ttrack[effPlot]["unit"])
+            efficiency.GetYaxis().SetTitle(eff_dict_ttrack[effPlot]["unit_y"])
+            efficiency.SetTitle(
+                "{path} reconstructed / reconstructible".format(
+                    path=eff_dict_ttrack[effPlot]["path"]))
+
+            efficiency.Draw("AP")
+            efficiency.Write(effPlot + "_tgraph")
+            canvas_eff.Write(effPlot + "_canvas")
+
+        outputfile.Write()
+        outputfile.Close()
+        inputfile.Close()
+        self.saveFile('PrCheckerSummary', 'PrCheckerSummary.root')
-- 
GitLab


From 5f2664c35c5a93faa21c1a19650e5d8a20fb4560 Mon Sep 17 00:00:00 2001
From: msaur <miroslav.saur@cern.ch>
Date: Mon, 13 Dec 2021 16:39:33 +0100
Subject: [PATCH 2/2] removing remaining down and forward tracks dictionaries

---
 handlers/PrCheckerSummaryHandler_withoutUT.py | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/handlers/PrCheckerSummaryHandler_withoutUT.py b/handlers/PrCheckerSummaryHandler_withoutUT.py
index 561caf4f..72a8da09 100644
--- a/handlers/PrCheckerSummaryHandler_withoutUT.py
+++ b/handlers/PrCheckerSummaryHandler_withoutUT.py
@@ -157,10 +157,6 @@ class PrCheckerSummaryHandler(BaseHandler):
 
         effPlots_long = getEffPlots_long()
         eff_dict_long = effPlotsDict_long()
-        effPlots_down = getEffPlots_down()
-        eff_dict_down = effPlotsDict_down()
-        effPlots_forward = getEffPlots_forward()
-        eff_dict_forward = effPlotsDict_forward()
         effPlots_velo = getEffPlots_velo()
         eff_dict_velo = effPlotsDict_velo()
         effPlots_ttrack = getEffPlots_ttrack()
-- 
GitLab