From 35191570b36882d598545618a268c0147ebc7648 Mon Sep 17 00:00:00 2001 From: Tomasz Wojton Date: Wed, 15 Jan 2020 23:00:57 +0100 Subject: [PATCH 01/54] PVChecker functional changes --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 42 +++++++++++++++++++++ Hlt/RecoConf/python/RecoConf/standalone.py | 5 ++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index 06a26e0c006..efaa45b0e7c 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -13,6 +13,7 @@ from __future__ import absolute_import, division, print_function In this file, algorithms needed to run the MC reconstruction checking (PrTrackChecker) are defined. ''' from PyConf.tonic import (configurable) +from PyConf.dataflow import DataHandle from PyConf.components import Tool from PyConf.application import default_raw_event @@ -25,8 +26,10 @@ from PyConf.Algorithms import ( PrTrackAssociator, PrTrackChecker, PrUTHitChecker, + PrimaryVertexChecker ) +from PyConf.Algorithms import LHCb__Converters__RecVertex__v2__fromVectorLHCbRecVertex as FromVectorLHCbRecVertex from PyConf.Tools import LoKi__Hybrid__MCTool from RecoConf.hlt1_tracking import ( @@ -265,6 +268,45 @@ def get_best_tracks_checkers( return efficiency_checkers +@configurable +def get_pv_checkers( + pvs, + tracks, + match_by_distance = False, + produce_ntuple = False, + make_links_lhcbids_mcparticles=make_links_lhcbids_mcparticles_tracking_system +): + + assert isinstance( + pvs, + DataHandle), "Please provide a dictionary of track type and tracks" + + pv_checkers = [] + + vertexConverter = FromVectorLHCbRecVertex( + InputVerticesName=pvs, + InputTracksName=tracks["v1"]).OutputVerticesName + + +# if not match_by_distance: +# links_to_lhcbids = make_links_lhcbids_mcparticles() +# links_to_tracks = make_links_tracks_mcparticles( +# InputTracks=tracks["v1"], LinksToLHCbIDs=links_to_lhcbids) + + pvchecker = PrimaryVertexChecker(produceNtuple = produce_ntuple, + matchByTracks = match_by_distance, + inputVerticesName = vertexConverter, + inputTracksName = tracks["v1"] + ) + + pv_checkers.append(vertexConverter) + pv_checkers.append(pvchecker) +# pv_checkers.append(vertexConverter) + + return pv_checkers + + + def make_track_filter(InputTracks, code): from PyConf.Algorithms import TrackListRefiner from PyConf.Tools import LoKi__Hybrid__TrackSelector as LoKiTrackSelector diff --git a/Hlt/RecoConf/python/RecoConf/standalone.py b/Hlt/RecoConf/python/RecoConf/standalone.py index 6371d9878ec..c236dce45c7 100644 --- a/Hlt/RecoConf/python/RecoConf/standalone.py +++ b/Hlt/RecoConf/python/RecoConf/standalone.py @@ -20,7 +20,7 @@ from RecoConf.hlt1_muonmatch import make_tracks_with_muonmatch_ipcut from .hlt1_muonid import make_muon_id, make_tracks_with_muon_id from .hlt2_tracking import make_hlt2_tracks, make_TrackBestTrackCreator_tracks from .calorimeter_reconstruction import make_calo -from .mc_checking import get_track_checkers, get_best_tracks_checkers +from .mc_checking import get_track_checkers, get_best_tracks_checkers, get_pv_checkers from .reco_objects_from_file import reconstruction from PyConf.application import default_raw_event from .rich_reconstruction import make_rich_pids, make_rich_pixels, default_rich_reco_options @@ -62,6 +62,9 @@ def standalone_hlt1_reco(do_mc_checking=False): "Forward": hlt1_tracks["Forward"], } data += get_track_checkers(types_and_locations_for_checkers) + print hlt1_tracks["Velo"] + print pvs + data += get_pv_checkers(pvs, hlt1_tracks["Velo"]) return Reconstruction('hlt1_reco', data, reco_prefilters()) -- GitLab From b8d73550cfef0061694cf76a63e5101a8a7cf708 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 15 Jan 2020 22:02:07 +0000 Subject: [PATCH 02/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/6789766 --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 54 +++++++++------------ 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index efaa45b0e7c..82b57b8cc78 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -20,14 +20,9 @@ from PyConf.application import default_raw_event from PyConf.application import make_data_with_FetchDataFromFile from PyConf.Algorithms import ( - VPFullCluster2MCParticleLinker, - PrLHCbID2MCParticle, - PrLHCbID2MCParticleVPUTFTMU, - PrTrackAssociator, - PrTrackChecker, - PrUTHitChecker, - PrimaryVertexChecker -) + VPFullCluster2MCParticleLinker, PrLHCbID2MCParticle, + PrLHCbID2MCParticleVPUTFTMU, PrTrackAssociator, PrTrackChecker, + PrUTHitChecker, PrimaryVertexChecker) from PyConf.Algorithms import LHCb__Converters__RecVertex__v2__fromVectorLHCbRecVertex as FromVectorLHCbRecVertex from PyConf.Tools import LoKi__Hybrid__MCTool @@ -270,41 +265,38 @@ def get_best_tracks_checkers( @configurable def get_pv_checkers( - pvs, - tracks, - match_by_distance = False, - produce_ntuple = False, + pvs, + tracks, + match_by_distance=False, + produce_ntuple=False, make_links_lhcbids_mcparticles=make_links_lhcbids_mcparticles_tracking_system ): assert isinstance( pvs, DataHandle), "Please provide a dictionary of track type and tracks" - + pv_checkers = [] vertexConverter = FromVectorLHCbRecVertex( - InputVerticesName=pvs, - InputTracksName=tracks["v1"]).OutputVerticesName - - -# if not match_by_distance: -# links_to_lhcbids = make_links_lhcbids_mcparticles() -# links_to_tracks = make_links_tracks_mcparticles( -# InputTracks=tracks["v1"], LinksToLHCbIDs=links_to_lhcbids) - - pvchecker = PrimaryVertexChecker(produceNtuple = produce_ntuple, - matchByTracks = match_by_distance, - inputVerticesName = vertexConverter, - inputTracksName = tracks["v1"] - ) + InputVerticesName=pvs, InputTracksName=tracks["v1"]).OutputVerticesName - pv_checkers.append(vertexConverter) - pv_checkers.append(pvchecker) -# pv_checkers.append(vertexConverter) + # if not match_by_distance: + # links_to_lhcbids = make_links_lhcbids_mcparticles() + # links_to_tracks = make_links_tracks_mcparticles( + # InputTracks=tracks["v1"], LinksToLHCbIDs=links_to_lhcbids) - return pv_checkers + pvchecker = PrimaryVertexChecker( + produceNtuple=produce_ntuple, + matchByTracks=match_by_distance, + inputVerticesName=vertexConverter, + inputTracksName=tracks["v1"]) + + pv_checkers.append(vertexConverter) + pv_checkers.append(pvchecker) + # pv_checkers.append(vertexConverter) + return pv_checkers def make_track_filter(InputTracks, code): -- GitLab From 4592617a11f2a445057dbd94e270510fc7c8cd95 Mon Sep 17 00:00:00 2001 From: Tomasz Wojton Date: Thu, 16 Jan 2020 16:09:44 +0100 Subject: [PATCH 03/54] distance matching, RecoVertex_v2 --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 22 +++++++-------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index 82b57b8cc78..be64fe5f9a0 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -267,7 +267,6 @@ def get_best_tracks_checkers( def get_pv_checkers( pvs, tracks, - match_by_distance=False, produce_ntuple=False, make_links_lhcbids_mcparticles=make_links_lhcbids_mcparticles_tracking_system ): @@ -278,24 +277,16 @@ def get_pv_checkers( pv_checkers = [] - vertexConverter = FromVectorLHCbRecVertex( - InputVerticesName=pvs, InputTracksName=tracks["v1"]).OutputVerticesName - - # if not match_by_distance: - # links_to_lhcbids = make_links_lhcbids_mcparticles() - # links_to_tracks = make_links_tracks_mcparticles( - # InputTracks=tracks["v1"], LinksToLHCbIDs=links_to_lhcbids) - pvchecker = PrimaryVertexChecker( produceNtuple=produce_ntuple, - matchByTracks=match_by_distance, - inputVerticesName=vertexConverter, - inputTracksName=tracks["v1"]) + inputVerticesName=pvs, + inputTracksName=tracks["v1"], + MCVertexInput=mc_unpackers()["MCVertices"], + # MCParticleInput=mc_unpackers()["MCParticles"], + # LinkerLocation=links_to_tracks, + MCHeaderLocation=make_data_with_FetchDataFromFile("/Event/MC/Header")) - pv_checkers.append(vertexConverter) pv_checkers.append(pvchecker) - # pv_checkers.append(vertexConverter) - return pv_checkers @@ -306,3 +297,4 @@ def make_track_filter(InputTracks, code): filtered_tracks = TrackListRefiner( inputLocation=InputTracks["v1"], Selector=selector).outputLocation return filtered_tracks + -- GitLab From 2daeb5bf7f0b26d5e9805946b430f66ba8e0511e Mon Sep 17 00:00:00 2001 From: bua Date: Thu, 23 Jan 2020 14:12:13 +0100 Subject: [PATCH 04/54] refactoring (MCTrackInfo added) --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index be64fe5f9a0..191d86aad88 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -273,7 +273,7 @@ def get_pv_checkers( assert isinstance( pvs, - DataHandle), "Please provide a dictionary of track type and tracks" + DataHandle), "Please provide reconstructed primary verticies" pv_checkers = [] @@ -282,9 +282,9 @@ def get_pv_checkers( inputVerticesName=pvs, inputTracksName=tracks["v1"], MCVertexInput=mc_unpackers()["MCVertices"], - # MCParticleInput=mc_unpackers()["MCParticles"], - # LinkerLocation=links_to_tracks, - MCHeaderLocation=make_data_with_FetchDataFromFile("/Event/MC/Header")) + MCHeaderLocation=make_data_with_FetchDataFromFile("/Event/MC/Header"), + MCPropertyInput=make_data_with_FetchDataFromFile("/Event/MC/TrackInfo") + ) pv_checkers.append(pvchecker) return pv_checkers -- GitLab From 6c89a979b67ee3576d884011971297947fe67ba5 Mon Sep 17 00:00:00 2001 From: Tomasz Wojton Date: Tue, 28 Jan 2020 10:39:47 +0100 Subject: [PATCH 05/54] removed prints (pvs, hlt1_tracks) --- Hlt/RecoConf/python/RecoConf/standalone.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/standalone.py b/Hlt/RecoConf/python/RecoConf/standalone.py index c236dce45c7..9a8bc483b53 100644 --- a/Hlt/RecoConf/python/RecoConf/standalone.py +++ b/Hlt/RecoConf/python/RecoConf/standalone.py @@ -62,8 +62,6 @@ def standalone_hlt1_reco(do_mc_checking=False): "Forward": hlt1_tracks["Forward"], } data += get_track_checkers(types_and_locations_for_checkers) - print hlt1_tracks["Velo"] - print pvs data += get_pv_checkers(pvs, hlt1_tracks["Velo"]) return Reconstruction('hlt1_reco', data, reco_prefilters()) -- GitLab From cdae793dad309b602acb7c162ddcc072a1ef7d47 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Tue, 28 Jan 2020 09:40:12 +0000 Subject: [PATCH 06/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/6950020 --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index 191d86aad88..9af2be96f60 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -272,8 +272,7 @@ def get_pv_checkers( ): assert isinstance( - pvs, - DataHandle), "Please provide reconstructed primary verticies" + pvs, DataHandle), "Please provide reconstructed primary verticies" pv_checkers = [] @@ -283,8 +282,8 @@ def get_pv_checkers( inputTracksName=tracks["v1"], MCVertexInput=mc_unpackers()["MCVertices"], MCHeaderLocation=make_data_with_FetchDataFromFile("/Event/MC/Header"), - MCPropertyInput=make_data_with_FetchDataFromFile("/Event/MC/TrackInfo") - ) + MCPropertyInput=make_data_with_FetchDataFromFile( + "/Event/MC/TrackInfo")) pv_checkers.append(pvchecker) return pv_checkers @@ -297,4 +296,3 @@ def make_track_filter(InputTracks, code): filtered_tracks = TrackListRefiner( inputLocation=InputTracks["v1"], Selector=selector).outputLocation return filtered_tracks - -- GitLab From 14f5b22665e56990e774e694a8d8be22452d929f Mon Sep 17 00:00:00 2001 From: Tomasz Wojton Date: Tue, 4 Feb 2020 12:26:21 +0100 Subject: [PATCH 07/54] refactoring --- Hlt/RecoConf/options/hlt1_reco_pvchecker.py | 35 +++++++++++++++++++++ Hlt/RecoConf/python/RecoConf/mc_checking.py | 4 +++ 2 files changed, 39 insertions(+) create mode 100644 Hlt/RecoConf/options/hlt1_reco_pvchecker.py diff --git a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py new file mode 100644 index 00000000000..2cff83329dd --- /dev/null +++ b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py @@ -0,0 +1,35 @@ +############################################################################### +# (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +from Moore import options, run_reconstruction +from Moore.config import Reconstruction +from RecoConf.hlt1_tracking import require_gec, make_hlt1_tracks, make_VeloKalman_fitted_tracks, make_pvs +from RecoConf.mc_checking import get_pv_checkers, get_track_checkers +from Configurables import ApplicationMgr +from Configurables import NTupleSvc + + +def hlt1_reco_pvchecker(): + + hlt1_tracks = make_hlt1_tracks() + pvs = make_pvs() + + data = [pvs] + data += get_pv_checkers(pvs, hlt1_tracks["Velo"], produce_ntuple=True) + + return Reconstruction('PVperformance', data, [require_gec()]) + +run_reconstruction(options, hlt1_reco_pvchecker) + +NTupleSvc().Output += [ + "FILE1 DATAFILE='Hlt1_PVperformance.root' TYPE='ROOT' OPT='NEW'" +] +ApplicationMgr().ExtSvc += [NTupleSvc()] +ApplicationMgr().HistogramPersistency = "ROOT" diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index 9af2be96f60..5bb2bfa5e09 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -274,6 +274,9 @@ def get_pv_checkers( assert isinstance( pvs, DataHandle), "Please provide reconstructed primary verticies" + links_to_lhcbids = make_links_lhcbids_mcparticles() + links_to_tracks = make_links_tracks_mcparticles( + InputTracks=tracks, LinksToLHCbIDs=links_to_lhcbids) pv_checkers = [] pvchecker = PrimaryVertexChecker( @@ -281,6 +284,7 @@ def get_pv_checkers( inputVerticesName=pvs, inputTracksName=tracks["v1"], MCVertexInput=mc_unpackers()["MCVertices"], + MCParticleInput = mc_unpackers()["MCParticles"], MCHeaderLocation=make_data_with_FetchDataFromFile("/Event/MC/Header"), MCPropertyInput=make_data_with_FetchDataFromFile( "/Event/MC/TrackInfo")) -- GitLab From faffe69110467f801e7167109d79f4b29b0cd5a9 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Tue, 4 Feb 2020 11:27:09 +0000 Subject: [PATCH 08/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/7045996 --- Hlt/RecoConf/options/hlt1_reco_pvchecker.py | 1 + Hlt/RecoConf/python/RecoConf/mc_checking.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py index 2cff83329dd..91175618897 100644 --- a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py +++ b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py @@ -26,6 +26,7 @@ def hlt1_reco_pvchecker(): return Reconstruction('PVperformance', data, [require_gec()]) + run_reconstruction(options, hlt1_reco_pvchecker) NTupleSvc().Output += [ diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index 5bb2bfa5e09..377fce1a22c 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -276,7 +276,7 @@ def get_pv_checkers( links_to_lhcbids = make_links_lhcbids_mcparticles() links_to_tracks = make_links_tracks_mcparticles( - InputTracks=tracks, LinksToLHCbIDs=links_to_lhcbids) + InputTracks=tracks, LinksToLHCbIDs=links_to_lhcbids) pv_checkers = [] pvchecker = PrimaryVertexChecker( @@ -284,7 +284,7 @@ def get_pv_checkers( inputVerticesName=pvs, inputTracksName=tracks["v1"], MCVertexInput=mc_unpackers()["MCVertices"], - MCParticleInput = mc_unpackers()["MCParticles"], + MCParticleInput=mc_unpackers()["MCParticles"], MCHeaderLocation=make_data_with_FetchDataFromFile("/Event/MC/Header"), MCPropertyInput=make_data_with_FetchDataFromFile( "/Event/MC/TrackInfo")) -- GitLab From 5f1e352892cff50b4d1c1dd25028bd79d329138b Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Wed, 26 Feb 2020 09:23:18 +0100 Subject: [PATCH 09/54] script for efficiency plots, small bugfix for decay categories --- .../scripts/PrimaryVertexCheckerEfficiency.py | 133 +++++++++++++ Hlt/RecoConf/scripts/utils/pvutils.py | 182 ++++++++++++++++++ 2 files changed, 315 insertions(+) create mode 100644 Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py create mode 100644 Hlt/RecoConf/scripts/utils/pvutils.py diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py new file mode 100644 index 00000000000..58913f387c0 --- /dev/null +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -0,0 +1,133 @@ +############################################################################### +# (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +#!/usr/bin/python + +import os, sys +import argparse +import ROOT + +from ROOT import TFile, TTree +from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray +from ROOT import gROOT, TLegend + +parser = argparse.ArgumentParser() +parser.add_argument( '--file', + dest = 'fileName', + default = "", + nargs='+', + help = 'filename to plot') +parser.add_argument( '--label', + dest = 'label', + default = "", + nargs='+', + help = 'labels for files') +parser.add_argument( '--tree', + dest = 'treeName', + default = "", + nargs='+', + help = 'tree name to plot', + ) +parser.add_argument( '--smog', + dest = 'smog', + default = False, + action = 'store_true', + help = 'set true for SMOG' + ) +parser.add_argument( '--multi', + dest = 'multi', + default = False, + action = 'store_true', + help = 'add multiplicity plots' + ) +parser.add_argument( '--dist', + dest = 'dist', + default = False, + action = 'store_true', + help = 'plot distributions in the canvas' + ) +parser.add_argument( '--prefix', + dest = 'prefix', + default = "pv_eff", + help = 'prefix for the plot name', + ) + +def get_categories(multi,smog): + cut = {} + cut["all"] = {"cut":""} + cut["isolated"] = {"cut":"&&isol==1"} + if not smog: + cut["close"] = {"cut":"&&isol==0"} + if multi: + cut["1st"] = {"cut":"&&multimc==1"} + cut["2nd"] = {"cut":"&&multimc==2"} + cut["3rd"] = {"cut":"&&multimc==3"} + cut["4th"] = {"cut":"&&multimc==4"} + cut["5th"] = {"cut":"&&multimc==5"} + + return cut + +def get_colors(): + return [kRed, kBlue, kOrange, kMagenta+2, kGreen+3, kCyan+2] +def get_markers(): + return [21,20,22,23,24,25,26] +def get_labels(number_of_files): + label = [] + for i in range(0,number_of_files): + label.append("PV Checker {number}".format(number=str(i+1))) + return label + + +if __name__ == '__main__' : + args = parser.parse_args() + path = os.getcwd()+"/utils/" + sys.path.append(os.path.abspath(path)) + + gROOT.SetBatch() + + from pvutils import get_default_tree_name + from pvutils import get_files, get_trees, get_eff, plot_eff + from pvutils import set_legend + + markers = get_markers() + colors = get_colors() + + label = args.label + if args.label=="": + label = get_labels(len(args.fileName)) + + tr = {} + tf = {} + tf = get_files(tf, label, args.fileName) + tr = get_trees(tf, tr, label, args.treeName, True) + + eff_tr = {} + eff_z = {} + eff_r = {} + hist_tr = {} + hist_z = {} + hist_r = {} + + cat = get_categories(args.multi,args.smog) + eff_tr, hist_tr = get_eff(eff_tr,hist_tr,tr,"nrectrmc",colors,markers,args.smog,cat,label) + eff_z, hist_z = get_eff(eff_z, hist_z, tr, "zMC",colors,markers,args.smog,cat,label) + eff_r, hist_r = get_eff(eff_r, hist_r, tr, "rMC",colors,markers,args.smog,cat,label) + + if args.dist: + legend = TLegend(0.15, 0.82, 0.88, 0.98 ) + else: + legend = TLegend(0.15, 0.86, 0.88, 0.98 ) + legend = set_legend(legend, label, eff_tr, hist_tr, args.dist) + + plot_eff(eff_tr,hist_tr,args.prefix,"ntracks",cat,label, legend, args.dist) + plot_eff(eff_z, hist_z, args.prefix,"z", cat,label, legend, args.dist) + plot_eff(eff_r, hist_r, args.prefix,"r", cat,label, legend, args.dist) + + diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py new file mode 100644 index 00000000000..3ffa5e54b94 --- /dev/null +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -0,0 +1,182 @@ +############################################################################### +# (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### + +from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors +from ROOT import TCanvas +from ROOT import TGraphErrors, TLegend +from ROOT import gPad, kGray + +def get_default_tree_name(is_checker): + if is_checker: + return "PrimaryVertexChecker/101" + else: + return "VertexCompare/102" + +def get_files(tf, label, files): + i = 0 + for f in files: + tf[label[i]] = TFile(f) + i+=1 + return tf + +def get_trees(tf, tr, label, trees, is_checker): + i=0 + for lab in label: + if len(tf) == len(trees): + tr[lab] = tf[lab].Get(trees[i]) + else: + tr[lab] = tf[lab].Get(get_default_tree_name(is_checker)) + i+=1 + return tr + +def set_style(graph, color, marker, xaxis, yaxis, title): + graph.SetTitle(""); + graph.SetLineColor(color); + graph.SetMarkerColor(color); + graph.SetMarkerSize(1.3); + graph.SetMarkerStyle(marker); + if type(graph) == TH1F: + graph.SetFillColor(color); + graph.SetLineWidth(4) + graph.GetYaxis().SetTitleOffset(0.85); + graph.GetYaxis().SetTitleSize(0.06); + graph.GetYaxis().SetLabelSize(0.06); + graph.GetXaxis().SetTitleSize(0.06); + graph.GetXaxis().SetLabelSize(0.06); + graph.GetXaxis().SetTitleFont(132); + graph.GetXaxis().SetLabelFont(132); + graph.GetYaxis().SetTitleFont(132); + graph.GetYaxis().SetLabelFont(132); + + if title != "": + graph.SetTitle(title) + if xaxis != "": + graph.GetXaxis().SetTitle(xaxis) + if yaxis != "": + graph.GetYaxis().SetTitle(yaxis) + + +def get_range(dependence,smog): + if dependence == "zMC": + if smog: + return "(100,-500,200)" + else: + return "(50,-200,200)" + elif dependence == "rMC": + return "(50,0.0,0.2)" + else: + return "(66,4,70)" + +def get_x_axis(dependence): + if dependence=="zMC": + return "z [mm]" + elif dependence == "rMC": + return "radial distance [mm]" + else: + return "number of tracks in Primary Vertex" + + +def get_eff(eff, hist, trees, dependence, colors, markers, smog, categories, label): + + hist_range = get_range(dependence,smog) + + for cat in categories: + eff[cat] = {} + hist[cat] = {} + i = 0 + for lab in label: + var_den = '{dependence}>>hist{code}_{dep}_{cat}_{lab}{hist_range}'.format( + dependence=dependence,code="den",dep=dependence,cat=cat,lab=lab,hist_range=hist_range) + var_nom = '{dependence}>>hist{code}_{dep}_{cat}_{lab}{hist_range}'.format( + dependence=dependence,code="nom",dep=dependence,cat=cat,lab=lab,hist_range=hist_range) + + cut_den = 'nrectrmc>3 {cuts}'.format(cuts = categories[cat]["cut"]) + cut_nom = cut_den + ' && reco == 1' + + trees[lab].Draw(var_nom,cut_nom) + trees[lab].Draw(var_den,cut_den) + + h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format(code="nom",dep=dependence,cat=cat,lab=lab)) + h_den = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format(code="den",dep=dependence,cat=cat,lab=lab)) + + g_eff = TGraphAsymmErrors() + g_eff.Divide(h_nom,h_den,"cl=0.683 b(1,1) mode") + + set_style(h_nom, colors[i]-8, markers[i], get_x_axis(dependence),"Efficiency","") + set_style(h_den, kGray, markers[i], get_x_axis(dependence),"Efficiency","") + hist[cat][lab] = {} + hist[cat][lab]["nom"] = h_nom + hist[cat][lab]["den"] = h_den + + set_style(g_eff, colors[i], markers[i], get_x_axis(dependence),"Efficiency","") + eff[cat][lab] = g_eff + i+=1 + + return eff, hist + + +def set_legend(legend, label, gr, hist, dist): + legend.SetTextSize(0.04) + legend.SetTextFont(12) + legend.SetFillColor(4000) + legend.SetShadowColor(0) + legend.SetBorderSize(0) + legend.SetTextFont(132) + legend.SetNColumns(2) + #legend.SetHeader("LHCb Preliminary"); + for lab in label: + legend.AddEntry(gr["all"][lab],"Efficiency {lab}".format(lab=lab),"lep") + if dist: + legend.AddEntry(hist["all"][label[0]]["den"],"Distribution MC","f") + for lab in label: + legend.AddEntry(hist["all"][lab]["nom"],"Distribution {lab}".format(lab=lab),"f") + + return legend + +def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): + + for cat in categories: + can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence,cat=cat), "cR", 1200, 800) + can.SetBottomMargin(0.15) + can.SetLeftMargin(0.12) + can.SetTopMargin(0.15) + if dist: + can.SetTopMargin(0.20) + can.SetRightMargin(0.05) + can.cd() + + eff[cat][label[0]].GetYaxis().SetRangeUser(0.0,1.1) + eff[cat][label[0]].Draw("AP") + + for lab in label: + eff[cat][lab].Draw("SAME P") + + if dist: + histmax_den = 1.1*hist[cat][label[0]]["den"].GetMaximum() + scale = gPad.GetUymax()/histmax_den + hist[cat][label[0]]["den"].Scale(scale*0.75) + hist[cat][label[0]]["den"].Draw("hist SAME") + + for lab in label: + histmax_nom = 1.1*hist[cat][lab]["nom"].GetMaximum() + scale = gPad.GetUymax()/histmax_nom + hist[cat][lab]["nom"].Scale(scale*0.75) + hist[cat][lab]["nom"].Draw("SAME") + + legend.Draw("SAME") + + + + saveName = '{prefix}_{dependence}_{cat}.pdf'.format(prefix=prefix,dependence=dependence,cat=cat) + can.SaveAs(saveName) + + + -- GitLab From 8610d321bf78ad7b1717279407ef6ea869fa468a Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 26 Feb 2020 08:26:40 +0000 Subject: [PATCH 10/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/7342166 --- .../scripts/PrimaryVertexCheckerEfficiency.py | 160 ++++++++-------- Hlt/RecoConf/scripts/utils/pvutils.py | 177 ++++++++++-------- 2 files changed, 181 insertions(+), 156 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index 58913f387c0..f05ccd397cb 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -12,122 +12,126 @@ import os, sys import argparse -import ROOT +import ROOT from ROOT import TFile, TTree from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray from ROOT import gROOT, TLegend parser = argparse.ArgumentParser() -parser.add_argument( '--file', - dest = 'fileName', - default = "", - nargs='+', - help = 'filename to plot') -parser.add_argument( '--label', - dest = 'label', - default = "", - nargs='+', - help = 'labels for files') -parser.add_argument( '--tree', - dest = 'treeName', - default = "", - nargs='+', - help = 'tree name to plot', - ) -parser.add_argument( '--smog', - dest = 'smog', - default = False, - action = 'store_true', - help = 'set true for SMOG' - ) -parser.add_argument( '--multi', - dest = 'multi', - default = False, - action = 'store_true', - help = 'add multiplicity plots' - ) -parser.add_argument( '--dist', - dest = 'dist', - default = False, - action = 'store_true', - help = 'plot distributions in the canvas' - ) -parser.add_argument( '--prefix', - dest = 'prefix', - default = "pv_eff", - help = 'prefix for the plot name', - ) - -def get_categories(multi,smog): +parser.add_argument( + '--file', dest='fileName', default="", nargs='+', help='filename to plot') +parser.add_argument( + '--label', dest='label', default="", nargs='+', help='labels for files') +parser.add_argument( + '--tree', + dest='treeName', + default="", + nargs='+', + help='tree name to plot', +) +parser.add_argument( + '--smog', + dest='smog', + default=False, + action='store_true', + help='set true for SMOG') +parser.add_argument( + '--multi', + dest='multi', + default=False, + action='store_true', + help='add multiplicity plots') +parser.add_argument( + '--dist', + dest='dist', + default=False, + action='store_true', + help='plot distributions in the canvas') +parser.add_argument( + '--prefix', + dest='prefix', + default="pv_eff", + help='prefix for the plot name', +) + + +def get_categories(multi, smog): cut = {} - cut["all"] = {"cut":""} - cut["isolated"] = {"cut":"&&isol==1"} + cut["all"] = {"cut": ""} + cut["isolated"] = {"cut": "&&isol==1"} if not smog: - cut["close"] = {"cut":"&&isol==0"} + cut["close"] = {"cut": "&&isol==0"} if multi: - cut["1st"] = {"cut":"&&multimc==1"} - cut["2nd"] = {"cut":"&&multimc==2"} - cut["3rd"] = {"cut":"&&multimc==3"} - cut["4th"] = {"cut":"&&multimc==4"} - cut["5th"] = {"cut":"&&multimc==5"} + cut["1st"] = {"cut": "&&multimc==1"} + cut["2nd"] = {"cut": "&&multimc==2"} + cut["3rd"] = {"cut": "&&multimc==3"} + cut["4th"] = {"cut": "&&multimc==4"} + cut["5th"] = {"cut": "&&multimc==5"} return cut + def get_colors(): - return [kRed, kBlue, kOrange, kMagenta+2, kGreen+3, kCyan+2] + return [kRed, kBlue, kOrange, kMagenta + 2, kGreen + 3, kCyan + 2] + + def get_markers(): - return [21,20,22,23,24,25,26] + return [21, 20, 22, 23, 24, 25, 26] + + def get_labels(number_of_files): label = [] - for i in range(0,number_of_files): - label.append("PV Checker {number}".format(number=str(i+1))) - return label + for i in range(0, number_of_files): + label.append("PV Checker {number}".format(number=str(i + 1))) + return label -if __name__ == '__main__' : +if __name__ == '__main__': args = parser.parse_args() - path = os.getcwd()+"/utils/" + path = os.getcwd() + "/utils/" sys.path.append(os.path.abspath(path)) - + gROOT.SetBatch() - from pvutils import get_default_tree_name - from pvutils import get_files, get_trees, get_eff, plot_eff + from pvutils import get_default_tree_name + from pvutils import get_files, get_trees, get_eff, plot_eff from pvutils import set_legend markers = get_markers() colors = get_colors() label = args.label - if args.label=="": + if args.label == "": label = get_labels(len(args.fileName)) - + tr = {} - tf = {} + tf = {} tf = get_files(tf, label, args.fileName) tr = get_trees(tf, tr, label, args.treeName, True) eff_tr = {} eff_z = {} - eff_r = {} - hist_tr = {} + eff_r = {} + hist_tr = {} hist_z = {} - hist_r = {} + hist_r = {} - cat = get_categories(args.multi,args.smog) - eff_tr, hist_tr = get_eff(eff_tr,hist_tr,tr,"nrectrmc",colors,markers,args.smog,cat,label) - eff_z, hist_z = get_eff(eff_z, hist_z, tr, "zMC",colors,markers,args.smog,cat,label) - eff_r, hist_r = get_eff(eff_r, hist_r, tr, "rMC",colors,markers,args.smog,cat,label) + cat = get_categories(args.multi, args.smog) + eff_tr, hist_tr = get_eff(eff_tr, hist_tr, tr, "nrectrmc", colors, markers, + args.smog, cat, label) + eff_z, hist_z = get_eff(eff_z, hist_z, tr, "zMC", colors, markers, + args.smog, cat, label) + eff_r, hist_r = get_eff(eff_r, hist_r, tr, "rMC", colors, markers, + args.smog, cat, label) if args.dist: - legend = TLegend(0.15, 0.82, 0.88, 0.98 ) + legend = TLegend(0.15, 0.82, 0.88, 0.98) else: - legend = TLegend(0.15, 0.86, 0.88, 0.98 ) - legend = set_legend(legend, label, eff_tr, hist_tr, args.dist) - - plot_eff(eff_tr,hist_tr,args.prefix,"ntracks",cat,label, legend, args.dist) - plot_eff(eff_z, hist_z, args.prefix,"z", cat,label, legend, args.dist) - plot_eff(eff_r, hist_r, args.prefix,"r", cat,label, legend, args.dist) - + legend = TLegend(0.15, 0.86, 0.88, 0.98) + legend = set_legend(legend, label, eff_tr, hist_tr, args.dist) + plot_eff(eff_tr, hist_tr, args.prefix, "ntracks", cat, label, legend, + args.dist) + plot_eff(eff_z, hist_z, args.prefix, "z", cat, label, legend, args.dist) + plot_eff(eff_r, hist_r, args.prefix, "r", cat, label, legend, args.dist) diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 3ffa5e54b94..b04330e898a 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -11,52 +11,56 @@ from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors from ROOT import TCanvas -from ROOT import TGraphErrors, TLegend -from ROOT import gPad, kGray - +from ROOT import TGraphErrors, TLegend +from ROOT import gPad, kGray + + def get_default_tree_name(is_checker): if is_checker: return "PrimaryVertexChecker/101" else: return "VertexCompare/102" + def get_files(tf, label, files): - i = 0 + i = 0 for f in files: tf[label[i]] = TFile(f) - i+=1 + i += 1 return tf + def get_trees(tf, tr, label, trees, is_checker): - i=0 + i = 0 for lab in label: if len(tf) == len(trees): tr[lab] = tf[lab].Get(trees[i]) else: tr[lab] = tf[lab].Get(get_default_tree_name(is_checker)) - i+=1 - return tr + i += 1 + return tr + def set_style(graph, color, marker, xaxis, yaxis, title): - graph.SetTitle(""); - graph.SetLineColor(color); - graph.SetMarkerColor(color); - graph.SetMarkerSize(1.3); - graph.SetMarkerStyle(marker); + graph.SetTitle("") + graph.SetLineColor(color) + graph.SetMarkerColor(color) + graph.SetMarkerSize(1.3) + graph.SetMarkerStyle(marker) if type(graph) == TH1F: - graph.SetFillColor(color); + graph.SetFillColor(color) graph.SetLineWidth(4) - graph.GetYaxis().SetTitleOffset(0.85); - graph.GetYaxis().SetTitleSize(0.06); - graph.GetYaxis().SetLabelSize(0.06); - graph.GetXaxis().SetTitleSize(0.06); - graph.GetXaxis().SetLabelSize(0.06); - graph.GetXaxis().SetTitleFont(132); - graph.GetXaxis().SetLabelFont(132); - graph.GetYaxis().SetTitleFont(132); - graph.GetYaxis().SetLabelFont(132); - - if title != "": + graph.GetYaxis().SetTitleOffset(0.85) + graph.GetYaxis().SetTitleSize(0.06) + graph.GetYaxis().SetLabelSize(0.06) + graph.GetXaxis().SetTitleSize(0.06) + graph.GetXaxis().SetLabelSize(0.06) + graph.GetXaxis().SetTitleFont(132) + graph.GetXaxis().SetLabelFont(132) + graph.GetYaxis().SetTitleFont(132) + graph.GetYaxis().SetLabelFont(132) + + if title != "": graph.SetTitle(title) if xaxis != "": graph.GetXaxis().SetTitle(xaxis) @@ -64,63 +68,80 @@ def set_style(graph, color, marker, xaxis, yaxis, title): graph.GetYaxis().SetTitle(yaxis) -def get_range(dependence,smog): +def get_range(dependence, smog): if dependence == "zMC": if smog: return "(100,-500,200)" else: return "(50,-200,200)" elif dependence == "rMC": - return "(50,0.0,0.2)" + return "(50,0.0,0.2)" else: return "(66,4,70)" + def get_x_axis(dependence): - if dependence=="zMC": + if dependence == "zMC": return "z [mm]" elif dependence == "rMC": return "radial distance [mm]" else: - return "number of tracks in Primary Vertex" + return "number of tracks in Primary Vertex" -def get_eff(eff, hist, trees, dependence, colors, markers, smog, categories, label): +def get_eff(eff, hist, trees, dependence, colors, markers, smog, categories, + label): - hist_range = get_range(dependence,smog) + hist_range = get_range(dependence, smog) for cat in categories: eff[cat] = {} - hist[cat] = {} + hist[cat] = {} i = 0 for lab in label: var_den = '{dependence}>>hist{code}_{dep}_{cat}_{lab}{hist_range}'.format( - dependence=dependence,code="den",dep=dependence,cat=cat,lab=lab,hist_range=hist_range) + dependence=dependence, + code="den", + dep=dependence, + cat=cat, + lab=lab, + hist_range=hist_range) var_nom = '{dependence}>>hist{code}_{dep}_{cat}_{lab}{hist_range}'.format( - dependence=dependence,code="nom",dep=dependence,cat=cat,lab=lab,hist_range=hist_range) - - cut_den = 'nrectrmc>3 {cuts}'.format(cuts = categories[cat]["cut"]) + dependence=dependence, + code="nom", + dep=dependence, + cat=cat, + lab=lab, + hist_range=hist_range) + + cut_den = 'nrectrmc>3 {cuts}'.format(cuts=categories[cat]["cut"]) cut_nom = cut_den + ' && reco == 1' - - trees[lab].Draw(var_nom,cut_nom) - trees[lab].Draw(var_den,cut_den) - - h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format(code="nom",dep=dependence,cat=cat,lab=lab)) - h_den = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format(code="den",dep=dependence,cat=cat,lab=lab)) - + + trees[lab].Draw(var_nom, cut_nom) + trees[lab].Draw(var_den, cut_den) + + h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format( + code="nom", dep=dependence, cat=cat, lab=lab)) + h_den = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format( + code="den", dep=dependence, cat=cat, lab=lab)) + g_eff = TGraphAsymmErrors() - g_eff.Divide(h_nom,h_den,"cl=0.683 b(1,1) mode") - - set_style(h_nom, colors[i]-8, markers[i], get_x_axis(dependence),"Efficiency","") - set_style(h_den, kGray, markers[i], get_x_axis(dependence),"Efficiency","") + g_eff.Divide(h_nom, h_den, "cl=0.683 b(1,1) mode") + + set_style(h_nom, colors[i] - 8, markers[i], get_x_axis(dependence), + "Efficiency", "") + set_style(h_den, kGray, markers[i], get_x_axis(dependence), + "Efficiency", "") hist[cat][lab] = {} hist[cat][lab]["nom"] = h_nom hist[cat][lab]["den"] = h_den - set_style(g_eff, colors[i], markers[i], get_x_axis(dependence),"Efficiency","") + set_style(g_eff, colors[i], markers[i], get_x_axis(dependence), + "Efficiency", "") eff[cat][lab] = g_eff - i+=1 - - return eff, hist + i += 1 + + return eff, hist def set_legend(legend, label, gr, hist, dist): @@ -133,18 +154,22 @@ def set_legend(legend, label, gr, hist, dist): legend.SetNColumns(2) #legend.SetHeader("LHCb Preliminary"); for lab in label: - legend.AddEntry(gr["all"][lab],"Efficiency {lab}".format(lab=lab),"lep") + legend.AddEntry(gr["all"][lab], "Efficiency {lab}".format(lab=lab), + "lep") if dist: - legend.AddEntry(hist["all"][label[0]]["den"],"Distribution MC","f") + legend.AddEntry(hist["all"][label[0]]["den"], "Distribution MC", "f") for lab in label: - legend.AddEntry(hist["all"][lab]["nom"],"Distribution {lab}".format(lab=lab),"f") - + legend.AddEntry(hist["all"][lab]["nom"], + "Distribution {lab}".format(lab=lab), "f") + return legend + def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): - - for cat in categories: - can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence,cat=cat), "cR", 1200, 800) + + for cat in categories: + can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), + "cR", 1200, 800) can.SetBottomMargin(0.15) can.SetLeftMargin(0.12) can.SetTopMargin(0.15) @@ -152,31 +177,27 @@ def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): can.SetTopMargin(0.20) can.SetRightMargin(0.05) can.cd() - - eff[cat][label[0]].GetYaxis().SetRangeUser(0.0,1.1) + + eff[cat][label[0]].GetYaxis().SetRangeUser(0.0, 1.1) eff[cat][label[0]].Draw("AP") - + for lab in label: eff[cat][lab].Draw("SAME P") if dist: - histmax_den = 1.1*hist[cat][label[0]]["den"].GetMaximum() - scale = gPad.GetUymax()/histmax_den - hist[cat][label[0]]["den"].Scale(scale*0.75) - hist[cat][label[0]]["den"].Draw("hist SAME") - - for lab in label: - histmax_nom = 1.1*hist[cat][lab]["nom"].GetMaximum() - scale = gPad.GetUymax()/histmax_nom - hist[cat][lab]["nom"].Scale(scale*0.75) + histmax_den = 1.1 * hist[cat][label[0]]["den"].GetMaximum() + scale = gPad.GetUymax() / histmax_den + hist[cat][label[0]]["den"].Scale(scale * 0.75) + hist[cat][label[0]]["den"].Draw("hist SAME") + + for lab in label: + histmax_nom = 1.1 * hist[cat][lab]["nom"].GetMaximum() + scale = gPad.GetUymax() / histmax_nom + hist[cat][lab]["nom"].Scale(scale * 0.75) hist[cat][lab]["nom"].Draw("SAME") - - legend.Draw("SAME") - - - - saveName = '{prefix}_{dependence}_{cat}.pdf'.format(prefix=prefix,dependence=dependence,cat=cat) - can.SaveAs(saveName) - + legend.Draw("SAME") + saveName = '{prefix}_{dependence}_{cat}.pdf'.format( + prefix=prefix, dependence=dependence, cat=cat) + can.SaveAs(saveName) -- GitLab From 928152f98935a5ae93ae421a855bd32d4c8aa78f Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Wed, 26 Feb 2020 10:30:00 +0100 Subject: [PATCH 11/54] adding description --- .../scripts/PrimaryVertexCheckerEfficiency.py | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index f05ccd397cb..d4692b031e6 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -10,6 +10,23 @@ ############################################################################### #!/usr/bin/python + +# The script for plotting PV efficinecy as the function +# of various distributions: nTracks, z, r. +# As input the NTuple created by hlt1_reco_pvchecker.py +# is needed. +# +# The efficency is calculated usig TGraphAsymmErrors +# and Bayesian error bars +# +# author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) +# date: 02/2020 +# +# Example of usage: +# ../../../run python PrimaryVertexCheckerEfficiency.py +# --file file1.root file2.root --label name1 name2 --dist +# + import os, sys import argparse import ROOT @@ -54,7 +71,12 @@ parser.add_argument( default="pv_eff", help='prefix for the plot name', ) - +parser.add_argument( + '--dir', + dest='directory', + default=os.getcwd(), + help='tree name to plot', +) def get_categories(multi, smog): cut = {} @@ -89,7 +111,7 @@ def get_labels(number_of_files): if __name__ == '__main__': args = parser.parse_args() - path = os.getcwd() + "/utils/" + path = args.directory + "/utils/" sys.path.append(os.path.abspath(path)) gROOT.SetBatch() -- GitLab From 86edaf81e20c8a72bb184b9fdaa53c77cfa5dc55 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 26 Feb 2020 09:31:21 +0000 Subject: [PATCH 12/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/7343320 --- .../scripts/PrimaryVertexCheckerEfficiency.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index d4692b031e6..56f166169fd 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -10,20 +10,19 @@ ############################################################################### #!/usr/bin/python - -# The script for plotting PV efficinecy as the function -# of various distributions: nTracks, z, r. +# The script for plotting PV efficinecy as the function +# of various distributions: nTracks, z, r. # As input the NTuple created by hlt1_reco_pvchecker.py -# is needed. +# is needed. # # The efficency is calculated usig TGraphAsymmErrors # and Bayesian error bars # # author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) # date: 02/2020 -# +# # Example of usage: -# ../../../run python PrimaryVertexCheckerEfficiency.py +# ../../../run python PrimaryVertexCheckerEfficiency.py # --file file1.root file2.root --label name1 name2 --dist # @@ -78,6 +77,7 @@ parser.add_argument( help='tree name to plot', ) + def get_categories(multi, smog): cut = {} cut["all"] = {"cut": ""} -- GitLab From 2f74472ba8c6d159b7bfa27a29e5cf56bad0ff58 Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Thu, 27 Feb 2020 09:50:32 +0100 Subject: [PATCH 13/54] very first scripts for plotting resol and pull, for now only global --- .../scripts/PrimaryVertexCheckerPull.py | 147 ++++++++++++++++++ .../scripts/PrimaryVertexCheckerResolution.py | 147 ++++++++++++++++++ Hlt/RecoConf/scripts/utils/pvutils.py | 133 +++++++++++++++- 3 files changed, 423 insertions(+), 4 deletions(-) create mode 100644 Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py create mode 100644 Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py new file mode 100644 index 00000000000..4c9e1f97df3 --- /dev/null +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -0,0 +1,147 @@ +############################################################################### +# (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +#!/usr/bin/python + +# The script for plotting PV efficinecy as the function +# of various distributions: nTracks, z, r. +# As input the NTuple created by hlt1_reco_pvchecker.py +# is needed. +# +# The efficency is calculated usig TGraphAsymmErrors +# and Bayesian error bars +# +# author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) +# date: 02/2020 +# +# Example of usage: +# ../../../run python PrimaryVertexCheckerPull.py +# --file file1.root file2.root --label name1 name2 +# + +import os, sys +import argparse +import ROOT + +from ROOT import TFile, TTree +from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray, kYellow +from ROOT import gROOT, TLegend + +parser = argparse.ArgumentParser() +parser.add_argument( + '--file', dest='fileName', default="", nargs='+', help='filename to plot') +parser.add_argument( + '--label', dest='label', default="", nargs='+', help='labels for files') +parser.add_argument( + '--tree', + dest='treeName', + default="", + nargs='+', + help='tree name to plot', +) +parser.add_argument( + '--smog', + dest='smog', + default=False, + action='store_true', + help='set true for SMOG') +parser.add_argument( + '--multi', + dest='multi', + default=False, + action='store_true', + help='add multiplicity plots') +parser.add_argument( + '--dist', + dest='dist', + default=False, + action='store_true', + help='plot distributions in the canvas') +parser.add_argument( + '--prefix', + dest='prefix', + default="pv_pull", + help='prefix for the plot name', +) +parser.add_argument( + '--dir', + dest='directory', + default=os.getcwd(), + help='tree name to plot', +) + + +def get_categories(multi, smog): + cut = {} + cut["all"] = {"cut": ""} + cut["isolated"] = {"cut": "&&isol==1"} + if not smog: + cut["close"] = {"cut": "&&isol==0"} + if multi: + cut["1st"] = {"cut": "&&multimc==1"} + cut["2nd"] = {"cut": "&&multimc==2"} + cut["3rd"] = {"cut": "&&multimc==3"} + cut["4th"] = {"cut": "&&multimc==4"} + cut["5th"] = {"cut": "&&multimc==5"} + + return cut + + +def get_colors(): + return [kRed, kBlue, kOrange, kMagenta, kGreen, kCyan] + + +def get_markers(): + return [21, 20, 22, 23, 24, 25, 26] + + +def get_labels(number_of_files): + label = [] + for i in range(0, number_of_files): + label.append("PV Checker {number}".format(number=str(i + 1))) + return label + + +if __name__ == '__main__': + args = parser.parse_args() + path = args.directory + "/utils/" + sys.path.append(os.path.abspath(path)) + + gROOT.SetBatch() + + from pvutils import get_default_tree_name + from pvutils import get_files, get_trees + from pvutils import set_legend, get_global, plot_comparison + + markers = get_markers() + colors = get_colors() + cat = get_categories(args.multi, args.smog) + label = args.label + if args.label == "": + label = get_labels(len(args.fileName)) + + tr = {} + tf = {} + tf = get_files(tf, label, args.fileName) + tr = get_trees(tf, tr, label, args.treeName, True) + + hist_x = {} + hist_y = {} + hist_z = {} + norm = True #to-do + hist_x = get_global(hist_x, tr, "pullx", "#Delta x / #sigma_{x}", "Candidates Normalized", colors, markers, cat, label) + hist_y = get_global(hist_y, tr, "pully", "#Delta y / #sigma_{y}", "Candidates Normalized", colors, markers, cat, label) + hist_z = get_global(hist_z, tr, "pullz", "#Delta z / #sigma_{z}", "Candidates Normalized", colors, markers, cat, label) + + plot_comparison(hist_x, args.prefix, "pullx", cat, label, colors, norm) + plot_comparison(hist_y, args.prefix, "pully", cat, label, colors, norm) + plot_comparison(hist_z, args.prefix, "pullz", cat, label, colors, norm) + + diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py new file mode 100644 index 00000000000..9ee3f4b1be0 --- /dev/null +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -0,0 +1,147 @@ +############################################################################### +# (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +#!/usr/bin/python + +# The script for plotting PV efficinecy as the function +# of various distributions: nTracks, z, r. +# As input the NTuple created by hlt1_reco_pvchecker.py +# is needed. +# +# The efficency is calculated usig TGraphAsymmErrors +# and Bayesian error bars +# +# author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) +# date: 02/2020 +# +# Example of usage: +# ../../../run python PrimaryVertexCheckerResolution.py +# --file file1.root file2.root --label name1 name2 +# + +import os, sys +import argparse +import ROOT + +from ROOT import TFile, TTree +from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray, kYellow +from ROOT import gROOT, TLegend + +parser = argparse.ArgumentParser() +parser.add_argument( + '--file', dest='fileName', default="", nargs='+', help='filename to plot') +parser.add_argument( + '--label', dest='label', default="", nargs='+', help='labels for files') +parser.add_argument( + '--tree', + dest='treeName', + default="", + nargs='+', + help='tree name to plot', +) +parser.add_argument( + '--smog', + dest='smog', + default=False, + action='store_true', + help='set true for SMOG') +parser.add_argument( + '--multi', + dest='multi', + default=False, + action='store_true', + help='add multiplicity plots') +parser.add_argument( + '--dist', + dest='dist', + default=False, + action='store_true', + help='plot distributions in the canvas') +parser.add_argument( + '--prefix', + dest='prefix', + default="pv_resol", + help='prefix for the plot name', +) +parser.add_argument( + '--dir', + dest='directory', + default=os.getcwd(), + help='tree name to plot', +) + + +def get_categories(multi, smog): + cut = {} + cut["all"] = {"cut": ""} + cut["isolated"] = {"cut": "&&isol==1"} + if not smog: + cut["close"] = {"cut": "&&isol==0"} + if multi: + cut["1st"] = {"cut": "&&multimc==1"} + cut["2nd"] = {"cut": "&&multimc==2"} + cut["3rd"] = {"cut": "&&multimc==3"} + cut["4th"] = {"cut": "&&multimc==4"} + cut["5th"] = {"cut": "&&multimc==5"} + + return cut + + +def get_colors(): + return [kRed, kBlue, kOrange, kMagenta, kGreen, kCyan] + + +def get_markers(): + return [21, 20, 22, 23, 24, 25, 26] + + +def get_labels(number_of_files): + label = [] + for i in range(0, number_of_files): + label.append("PV Checker {number}".format(number=str(i + 1))) + return label + + +if __name__ == '__main__': + args = parser.parse_args() + path = args.directory + "/utils/" + sys.path.append(os.path.abspath(path)) + + gROOT.SetBatch() + + from pvutils import get_default_tree_name + from pvutils import get_files, get_trees + from pvutils import set_legend, get_global, plot_comparison + + markers = get_markers() + colors = get_colors() + cat = get_categories(args.multi, args.smog) + label = args.label + if args.label == "": + label = get_labels(len(args.fileName)) + + tr = {} + tf = {} + tf = get_files(tf, label, args.fileName) + tr = get_trees(tf, tr, label, args.treeName, True) + + hist_x = {} + hist_y = {} + hist_z = {} + norm = True + hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", "Candidates Normalized", colors, markers, cat, label) + hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", "Candidates Normalized", colors, markers, cat, label) + hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", "Candidates Normalized", colors, markers, cat, label) + + plot_comparison(hist_x, args.prefix, "dx", cat, label, colors, norm) + plot_comparison(hist_y, args.prefix, "dy", cat, label, colors, norm) + plot_comparison(hist_z, args.prefix, "dz", cat, label, colors, norm) + + diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index b04330e898a..934a3d42f53 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -9,10 +9,17 @@ # or submit itself to any jurisdiction. # ############################################################################### +# The utils for processing output of the PrimaryVertexChecker output +# +# author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) +# date: 02/2020 +# + + from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors from ROOT import TCanvas from ROOT import TGraphErrors, TLegend -from ROOT import gPad, kGray +from ROOT import gPad, kGray, TLatex def get_default_tree_name(is_checker): @@ -47,10 +54,12 @@ def set_style(graph, color, marker, xaxis, yaxis, title): graph.SetMarkerColor(color) graph.SetMarkerSize(1.3) graph.SetMarkerStyle(marker) + graph.GetYaxis().SetTitleOffset(0.85) if type(graph) == TH1F: graph.SetFillColor(color) graph.SetLineWidth(4) - graph.GetYaxis().SetTitleOffset(0.85) + graph.SetStats(False) + graph.GetYaxis().SetTitleOffset(1.1) graph.GetYaxis().SetTitleSize(0.06) graph.GetYaxis().SetLabelSize(0.06) graph.GetXaxis().SetTitleSize(0.06) @@ -76,6 +85,12 @@ def get_range(dependence, smog): return "(50,-200,200)" elif dependence == "rMC": return "(50,0.0,0.2)" + elif (dependence == "dx" or dependence == "dy"): + return "(50,-0.10,0.10)" + elif dependence == "dz": + return "(50,-0.5,0.5)" + elif "err" in dependence or "pull" in dependence: + return "(50,-3.5,3.5)" else: return "(66,4,70)" @@ -114,7 +129,7 @@ def get_eff(eff, hist, trees, dependence, colors, markers, smog, categories, lab=lab, hist_range=hist_range) - cut_den = 'nrectrmc>3 {cuts}'.format(cuts=categories[cat]["cut"]) + cut_den = 'nrectrmc>=4 {cuts}'.format(cuts=categories[cat]["cut"]) cut_nom = cut_den + ' && reco == 1' trees[lab].Draw(var_nom, cut_nom) @@ -195,9 +210,119 @@ def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): scale = gPad.GetUymax() / histmax_nom hist[cat][lab]["nom"].Scale(scale * 0.75) hist[cat][lab]["nom"].Draw("SAME") - + + eff[cat][lab].Draw("SAME P") + legend.Draw("SAME") saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) can.SaveAs(saveName) + +def transfer_dependence(dep): + if dep == "pullx": + return "dx/errx" + elif dep == "pully": + return "dy/erry" + elif dep == "pullz": + return "dz/errz" + else: + return dep + +def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, categories, + label): + + hist_range = get_range(dependence, False) + dep = transfer_dependence(dependence) + + for cat in categories: + hist[cat] = {} + i = 0 + for lab in label: + var = '{dependence}>>hist_{dep}_{cat}_{lab}{hist_range}'.format( + dependence=dep, + dep=dependence, + cat=cat, + lab=lab, + hist_range=hist_range) + + cut = 'nrectrmc>=4 && reco == 1 {cuts}'.format(cuts=categories[cat]["cut"]) + + trees[lab].Draw(var, cut) + h = gDirectory.Get('hist_{dep}_{cat}_{lab}'.format(dep=dependence, cat=cat, lab=lab)) + if i == 0: + col = colors[i]-10 + else: + col = colors[i] + set_style(h, col, markers[i], x_axis, y_axis, "") + + hist[cat][lab] = h + i += 1 + + return hist + +def get_text_cor(): + return {"x":[0.17, 0.65, 0.17, 0.65], "y":[0.92,0.92,0.75,0.75]} + +def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, units ): + s = 1.0 + if scale: + s = 1000.0 + + u = "" + if units: + u = "[#mu m]" + + text.SetNDC() + text.SetTextFont(132); + text.SetTextColor(color) + text.DrawLatex(x,y*1.0,lab) + + text.DrawLatex(x,y*0.95, "#mu = {0:0.2f} #pm {1:0.2f} {unit}".format( + mean*1000.0, mean_err*1000.0,unit=u)) + text.DrawLatex(x,y*0.90, "#sigma = {0:0.2f} #pm {1:0.2f} {unit}".format( + rms*s, rms_err*s,unit=u)) + return text + + +def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): + + for cat in categories: + can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), + "cR", 1200, 800) + can.SetBottomMargin(0.15) + can.SetLeftMargin(0.15) + can.SetTopMargin(0.20) + can.SetRightMargin(0.05) + + can.cd() + cor = get_text_cor() + + hist[cat][label[0]].GetYaxis().SetRangeUser(0.0, hist[cat][label[0]].GetMaximum()*1.1) + scale = True + units = True + if "pull" in dependence: + scale = False + units = False + if norm: + hist[cat][label[0]].DrawNormalized("hist") + hist_max = hist[cat][label[0]].GetMaximum() + i = 0 + for lab in label: + hist[cat][lab].DrawNormalized("SAME PE") + text = TLatex() + text = set_text(text,colors[i],cor["x"][i],cor["y"][i],lab, + hist[cat][lab].GetMean(), hist[cat][lab].GetMeanError(), + hist[cat][lab].GetRMS(), hist[cat][lab].GetRMSError(), + scale,units) + i+=1 + + else: + hist[cat][label[0]].Draw("hist") + for lab in label: + hist[cat][lab].Draw("SAME PE") + + can.Update() + saveName = '{prefix}_{dependence}_{cat}.pdf'.format( + prefix=prefix, dependence=dependence, cat=cat) + can.SaveAs(saveName) -- GitLab From ff00243c818fdaee4a431c578d53d9b71b0e50a2 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Thu, 27 Feb 2020 08:51:49 +0000 Subject: [PATCH 14/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/7359521 --- .../scripts/PrimaryVertexCheckerPull.py | 23 ++--- .../scripts/PrimaryVertexCheckerResolution.py | 23 ++--- Hlt/RecoConf/scripts/utils/pvutils.py | 88 +++++++++++-------- 3 files changed, 73 insertions(+), 61 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 4c9e1f97df3..0e226d931be 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -132,16 +132,17 @@ if __name__ == '__main__': tf = get_files(tf, label, args.fileName) tr = get_trees(tf, tr, label, args.treeName, True) - hist_x = {} + hist_x = {} hist_y = {} hist_z = {} - norm = True #to-do - hist_x = get_global(hist_x, tr, "pullx", "#Delta x / #sigma_{x}", "Candidates Normalized", colors, markers, cat, label) - hist_y = get_global(hist_y, tr, "pully", "#Delta y / #sigma_{y}", "Candidates Normalized", colors, markers, cat, label) - hist_z = get_global(hist_z, tr, "pullz", "#Delta z / #sigma_{z}", "Candidates Normalized", colors, markers, cat, label) - - plot_comparison(hist_x, args.prefix, "pullx", cat, label, colors, norm) - plot_comparison(hist_y, args.prefix, "pully", cat, label, colors, norm) - plot_comparison(hist_z, args.prefix, "pullz", cat, label, colors, norm) - - + norm = True #to-do + hist_x = get_global(hist_x, tr, "pullx", "#Delta x / #sigma_{x}", + "Candidates Normalized", colors, markers, cat, label) + hist_y = get_global(hist_y, tr, "pully", "#Delta y / #sigma_{y}", + "Candidates Normalized", colors, markers, cat, label) + hist_z = get_global(hist_z, tr, "pullz", "#Delta z / #sigma_{z}", + "Candidates Normalized", colors, markers, cat, label) + + plot_comparison(hist_x, args.prefix, "pullx", cat, label, colors, norm) + plot_comparison(hist_y, args.prefix, "pully", cat, label, colors, norm) + plot_comparison(hist_z, args.prefix, "pullz", cat, label, colors, norm) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index 9ee3f4b1be0..e89588da0e6 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -132,16 +132,17 @@ if __name__ == '__main__': tf = get_files(tf, label, args.fileName) tr = get_trees(tf, tr, label, args.treeName, True) - hist_x = {} + hist_x = {} hist_y = {} hist_z = {} - norm = True - hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", "Candidates Normalized", colors, markers, cat, label) - hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", "Candidates Normalized", colors, markers, cat, label) - hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", "Candidates Normalized", colors, markers, cat, label) - - plot_comparison(hist_x, args.prefix, "dx", cat, label, colors, norm) - plot_comparison(hist_y, args.prefix, "dy", cat, label, colors, norm) - plot_comparison(hist_z, args.prefix, "dz", cat, label, colors, norm) - - + norm = True + hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", + "Candidates Normalized", colors, markers, cat, label) + hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", + "Candidates Normalized", colors, markers, cat, label) + hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", + "Candidates Normalized", colors, markers, cat, label) + + plot_comparison(hist_x, args.prefix, "dx", cat, label, colors, norm) + plot_comparison(hist_y, args.prefix, "dy", cat, label, colors, norm) + plot_comparison(hist_z, args.prefix, "dz", cat, label, colors, norm) diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 934a3d42f53..124731fe94f 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -10,11 +10,10 @@ ############################################################################### # The utils for processing output of the PrimaryVertexChecker output -# +# # author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) -# date: 02/2020 -# - +# date: 02/2020 +# from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors from ROOT import TCanvas @@ -210,30 +209,32 @@ def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): scale = gPad.GetUymax() / histmax_nom hist[cat][lab]["nom"].Scale(scale * 0.75) hist[cat][lab]["nom"].Draw("SAME") - + eff[cat][lab].Draw("SAME P") - + legend.Draw("SAME") saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) can.SaveAs(saveName) + def transfer_dependence(dep): if dep == "pullx": return "dx/errx" elif dep == "pully": return "dy/erry" elif dep == "pullz": - return "dz/errz" - else: - return dep + return "dz/errz" + else: + return dep + + +def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, + categories, label): -def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, categories, - label): - hist_range = get_range(dependence, False) - dep = transfer_dependence(dependence) + dep = transfer_dependence(dependence) for cat in categories: hist[cat] = {} @@ -245,13 +246,15 @@ def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, categor cat=cat, lab=lab, hist_range=hist_range) - - cut = 'nrectrmc>=4 && reco == 1 {cuts}'.format(cuts=categories[cat]["cut"]) - + + cut = 'nrectrmc>=4 && reco == 1 {cuts}'.format( + cuts=categories[cat]["cut"]) + trees[lab].Draw(var, cut) - h = gDirectory.Get('hist_{dep}_{cat}_{lab}'.format(dep=dependence, cat=cat, lab=lab)) + h = gDirectory.Get('hist_{dep}_{cat}_{lab}'.format( + dep=dependence, cat=cat, lab=lab)) if i == 0: - col = colors[i]-10 + col = colors[i] - 10 else: col = colors[i] set_style(h, col, markers[i], x_axis, y_axis, "") @@ -261,32 +264,37 @@ def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, categor return hist + def get_text_cor(): - return {"x":[0.17, 0.65, 0.17, 0.65], "y":[0.92,0.92,0.75,0.75]} + return {"x": [0.17, 0.65, 0.17, 0.65], "y": [0.92, 0.92, 0.75, 0.75]} + -def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, units ): +def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, + units): s = 1.0 if scale: s = 1000.0 - u = "" + u = "" if units: u = "[#mu m]" text.SetNDC() - text.SetTextFont(132); + text.SetTextFont(132) text.SetTextColor(color) - text.DrawLatex(x,y*1.0,lab) + text.DrawLatex(x, y * 1.0, lab) - text.DrawLatex(x,y*0.95, "#mu = {0:0.2f} #pm {1:0.2f} {unit}".format( - mean*1000.0, mean_err*1000.0,unit=u)) - text.DrawLatex(x,y*0.90, "#sigma = {0:0.2f} #pm {1:0.2f} {unit}".format( - rms*s, rms_err*s,unit=u)) - return text + text.DrawLatex( + x, y * 0.95, "#mu = {0:0.2f} #pm {1:0.2f} {unit}".format( + mean * 1000.0, mean_err * 1000.0, unit=u)) + text.DrawLatex( + x, y * 0.90, "#sigma = {0:0.2f} #pm {1:0.2f} {unit}".format( + rms * s, rms_err * s, unit=u)) + return text def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): - + for cat in categories: can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), "cR", 1200, 800) @@ -296,14 +304,15 @@ def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): can.SetRightMargin(0.05) can.cd() - cor = get_text_cor() + cor = get_text_cor() - hist[cat][label[0]].GetYaxis().SetRangeUser(0.0, hist[cat][label[0]].GetMaximum()*1.1) + hist[cat][label[0]].GetYaxis().SetRangeUser( + 0.0, hist[cat][label[0]].GetMaximum() * 1.1) scale = True units = True if "pull" in dependence: - scale = False - units = False + scale = False + units = False if norm: hist[cat][label[0]].DrawNormalized("hist") hist_max = hist[cat][label[0]].GetMaximum() @@ -311,18 +320,19 @@ def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): for lab in label: hist[cat][lab].DrawNormalized("SAME PE") text = TLatex() - text = set_text(text,colors[i],cor["x"][i],cor["y"][i],lab, - hist[cat][lab].GetMean(), hist[cat][lab].GetMeanError(), - hist[cat][lab].GetRMS(), hist[cat][lab].GetRMSError(), - scale,units) - i+=1 + text = set_text(text, colors[i], cor["x"][i], cor["y"][i], lab, + hist[cat][lab].GetMean(), + hist[cat][lab].GetMeanError(), + hist[cat][lab].GetRMS(), + hist[cat][lab].GetRMSError(), scale, units) + i += 1 else: hist[cat][label[0]].Draw("hist") for lab in label: hist[cat][lab].Draw("SAME PE") - can.Update() + can.Update() saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) can.SaveAs(saveName) -- GitLab From 5f9d81f2ed8a43bf9ac92b752f87a1858a321fa6 Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Thu, 5 Mar 2020 11:30:18 +0100 Subject: [PATCH 15/54] adding dependence plot, restructurisation --- .../scripts/PrimaryVertexCheckerEfficiency.py | 72 ++--- .../scripts/PrimaryVertexCheckerPull.py | 93 ++++-- .../scripts/PrimaryVertexCheckerResolution.py | 98 ++++-- Hlt/RecoConf/scripts/utils/pvconfig.py | 136 ++++++++ Hlt/RecoConf/scripts/utils/pvutils.py | 306 ++++++++++-------- 5 files changed, 464 insertions(+), 241 deletions(-) create mode 100644 Hlt/RecoConf/scripts/utils/pvconfig.py diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index 56f166169fd..05ee126647e 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -78,29 +78,6 @@ parser.add_argument( ) -def get_categories(multi, smog): - cut = {} - cut["all"] = {"cut": ""} - cut["isolated"] = {"cut": "&&isol==1"} - if not smog: - cut["close"] = {"cut": "&&isol==0"} - if multi: - cut["1st"] = {"cut": "&&multimc==1"} - cut["2nd"] = {"cut": "&&multimc==2"} - cut["3rd"] = {"cut": "&&multimc==3"} - cut["4th"] = {"cut": "&&multimc==4"} - cut["5th"] = {"cut": "&&multimc==5"} - - return cut - - -def get_colors(): - return [kRed, kBlue, kOrange, kMagenta + 2, kGreen + 3, kCyan + 2] - - -def get_markers(): - return [21, 20, 22, 23, 24, 25, 26] - def get_labels(number_of_files): label = [] @@ -117,11 +94,14 @@ if __name__ == '__main__': gROOT.SetBatch() from pvutils import get_default_tree_name - from pvutils import get_files, get_trees, get_eff, plot_eff - from pvutils import set_legend + from pvutils import get_files, get_trees, get_eff, plot + + from pvconfig import get_variable_ranges + from pvconfig import get_style, get_categories + from pvconfig import set_legend - markers = get_markers() - colors = get_colors() + ranges = get_variable_ranges(args.smog) + style = get_style() label = args.label if args.label == "": @@ -132,28 +112,32 @@ if __name__ == '__main__': tf = get_files(tf, label, args.fileName) tr = get_trees(tf, tr, label, args.treeName, True) - eff_tr = {} - eff_z = {} - eff_r = {} - hist_tr = {} - hist_z = {} - hist_r = {} + eff = {} + eff["tracks"] = {} + eff["z"] = {} + eff["r"] = {} + hist = {} + hist["tracks"] = {} + hist["z"]={} + hist["r"]={} + cat = get_categories(args.multi, args.smog) - eff_tr, hist_tr = get_eff(eff_tr, hist_tr, tr, "nrectrmc", colors, markers, - args.smog, cat, label) - eff_z, hist_z = get_eff(eff_z, hist_z, tr, "zMC", colors, markers, - args.smog, cat, label) - eff_r, hist_r = get_eff(eff_r, hist_r, tr, "rMC", colors, markers, - args.smog, cat, label) + + eff["tracks"], hist["tracks"] = get_eff(eff["tracks"], hist["tracks"], tr, "nrectrmc", style, + ranges, cat, label) + eff["z"], hist["z"] = get_eff(eff["z"], hist["z"], tr, "zMC", style, + ranges, cat, label) + eff["r"], hist["r"] = get_eff(eff["r"], hist["r"], tr, "rMC", style, + ranges, cat, label) if args.dist: legend = TLegend(0.15, 0.82, 0.88, 0.98) else: legend = TLegend(0.15, 0.86, 0.88, 0.98) - legend = set_legend(legend, label, eff_tr, hist_tr, args.dist) + legend = set_legend(legend, label, eff["tracks"], "eff", hist["z"], args.dist) + - plot_eff(eff_tr, hist_tr, args.prefix, "ntracks", cat, label, legend, - args.dist) - plot_eff(eff_z, hist_z, args.prefix, "z", cat, label, legend, args.dist) - plot_eff(eff_r, hist_r, args.prefix, "r", cat, label, legend, args.dist) + plot(eff["tracks"], "eff", args.prefix, "ntracks", cat, label, legend, hist["tracks"], args.dist) + plot(eff["z"], "eff", args.prefix, "z", cat, label, legend, hist["z"], args.dist) + plot(eff["r"], "eff", args.prefix, "r", cat, label, legend, hist["r"], args.dist) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 0e226d931be..5c06da4eb87 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -78,30 +78,6 @@ parser.add_argument( ) -def get_categories(multi, smog): - cut = {} - cut["all"] = {"cut": ""} - cut["isolated"] = {"cut": "&&isol==1"} - if not smog: - cut["close"] = {"cut": "&&isol==0"} - if multi: - cut["1st"] = {"cut": "&&multimc==1"} - cut["2nd"] = {"cut": "&&multimc==2"} - cut["3rd"] = {"cut": "&&multimc==3"} - cut["4th"] = {"cut": "&&multimc==4"} - cut["5th"] = {"cut": "&&multimc==5"} - - return cut - - -def get_colors(): - return [kRed, kBlue, kOrange, kMagenta, kGreen, kCyan] - - -def get_markers(): - return [21, 20, 22, 23, 24, 25, 26] - - def get_labels(number_of_files): label = [] for i in range(0, number_of_files): @@ -119,9 +95,16 @@ if __name__ == '__main__': from pvutils import get_default_tree_name from pvutils import get_files, get_trees from pvutils import set_legend, get_global, plot_comparison + from pvutils import get_dependence + from pvutils import plot + + from pvconfig import get_variable_ranges + from pvconfig import get_style, get_categories + from pvconfig import get_y_axis - markers = get_markers() - colors = get_colors() + ranges = get_variable_ranges(args.smog) + style = get_style() + cat = get_categories(args.multi, args.smog) label = args.label if args.label == "": @@ -137,12 +120,58 @@ if __name__ == '__main__': hist_z = {} norm = True #to-do hist_x = get_global(hist_x, tr, "pullx", "#Delta x / #sigma_{x}", - "Candidates Normalized", colors, markers, cat, label) + "Candidates Normalized", style, ranges, cat, label) hist_y = get_global(hist_y, tr, "pully", "#Delta y / #sigma_{y}", - "Candidates Normalized", colors, markers, cat, label) + "Candidates Normalized", style, ranges, cat, label) hist_z = get_global(hist_z, tr, "pullz", "#Delta z / #sigma_{z}", - "Candidates Normalized", colors, markers, cat, label) + "Candidates Normalized", style, ranges, cat, label) + + plot_comparison(hist_x, args.prefix, "pullx", cat, label, style, norm) + plot_comparison(hist_y, args.prefix, "pully", cat, label, style, norm) + plot_comparison(hist_z, args.prefix, "pullz", cat, label, style, norm) + + + from ROOT import gEnv + gEnv.SetValue("Hist.Binning.1D.x","100") + + + graph = {} + graph["tracks"] = {} + graph["tracks"]["pullx"] = {} + graph["tracks"]["pully"] = {} + graph["tracks"]["pullz"] = {} + graph["tracks"]["pullx"] = get_dependence(graph["tracks"]["pullx"], tr, "pullx", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["pully"] = get_dependence(graph["tracks"]["pully"], tr, "pully", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["pullz"] = get_dependence(graph["tracks"]["pullz"], tr, "pullz", "nrectrmc", ranges, style, cat, label) + + legend = TLegend(0.15, 0.86, 0.88, 0.98) + legend = set_legend(legend, label, graph["tracks"]["pullz"], "sigma") + + plot(graph["tracks"]["pullx"], "mean", args.prefix+"_ntracks_mean", "pullx", cat, label, legend) + plot(graph["tracks"]["pullx"], "sigma", args.prefix+"_ntracks_sigma", "pullx", cat, label, legend) + + plot(graph["tracks"]["pully"], "mean", args.prefix+"_ntracks_mean", "pully", cat, label, legend) + plot(graph["tracks"]["pully"], "sigma", args.prefix+"_ntracks_sigma", "pully", cat, label, legend) + + plot(graph["tracks"]["pullz"], "mean", args.prefix+"_ntracks_mean", "pullz", cat, label, legend) + plot(graph["tracks"]["pullz"], "sigma", args.prefix+"_ntracks_sigma", "pullz", cat, label, legend) + + + graph["z"] = {} + graph["z"]["pullx"] = {} + graph["z"]["pully"] = {} + graph["z"]["pullz"] = {} + graph["z"]["pullx"] = get_dependence(graph["z"]["pullx"], tr, "pullx", "zMC", ranges, style, cat, label) + graph["z"]["pully"] = get_dependence(graph["z"]["pully"], tr, "pully", "zMC", ranges, style, cat, label) + graph["z"]["pullz"] = get_dependence(graph["z"]["pullz"], tr, "pullz", "zMC", ranges, style, cat, label) + + plot(graph["z"]["pullx"], "mean", args.prefix+"_z_mean", "pullx", cat, label, legend) + plot(graph["z"]["pullx"], "sigma", args.prefix+"_z_sigma", "pullx", cat, label, legend) + + plot(graph["z"]["pully"], "mean", args.prefix+"_z_mean", "pully", cat, label, legend) + plot(graph["z"]["pully"], "sigma", args.prefix+"_z_sigma", "pully", cat, label, legend) + + plot(graph["z"]["pullz"], "mean", args.prefix+"_z_mean", "pullz", cat, label, legend) + plot(graph["z"]["pullz"], "sigma", args.prefix+"_z_sigma", "pullz", cat, label, legend) + - plot_comparison(hist_x, args.prefix, "pullx", cat, label, colors, norm) - plot_comparison(hist_y, args.prefix, "pully", cat, label, colors, norm) - plot_comparison(hist_z, args.prefix, "pullz", cat, label, colors, norm) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index e89588da0e6..119963274c0 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -78,34 +78,10 @@ parser.add_argument( ) -def get_categories(multi, smog): - cut = {} - cut["all"] = {"cut": ""} - cut["isolated"] = {"cut": "&&isol==1"} - if not smog: - cut["close"] = {"cut": "&&isol==0"} - if multi: - cut["1st"] = {"cut": "&&multimc==1"} - cut["2nd"] = {"cut": "&&multimc==2"} - cut["3rd"] = {"cut": "&&multimc==3"} - cut["4th"] = {"cut": "&&multimc==4"} - cut["5th"] = {"cut": "&&multimc==5"} - - return cut - - -def get_colors(): - return [kRed, kBlue, kOrange, kMagenta, kGreen, kCyan] - - -def get_markers(): - return [21, 20, 22, 23, 24, 25, 26] - - def get_labels(number_of_files): label = [] for i in range(0, number_of_files): - label.append("PV Checker {number}".format(number=str(i + 1))) + label.append("PVChecker{number}".format(number=str(i + 1))) return label @@ -119,14 +95,21 @@ if __name__ == '__main__': from pvutils import get_default_tree_name from pvutils import get_files, get_trees from pvutils import set_legend, get_global, plot_comparison + from pvutils import get_dependence + from pvutils import plot + + from pvconfig import get_variable_ranges + from pvconfig import get_style, get_categories - markers = get_markers() - colors = get_colors() + ranges = get_variable_ranges(args.smog) + style = get_style() + cat = get_categories(args.multi, args.smog) label = args.label if args.label == "": label = get_labels(len(args.fileName)) + tr = {} tf = {} tf = get_files(tf, label, args.fileName) @@ -136,13 +119,60 @@ if __name__ == '__main__': hist_y = {} hist_z = {} norm = True + + hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", - "Candidates Normalized", colors, markers, cat, label) + "Candidates Normalized", style, ranges, cat, label) hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", - "Candidates Normalized", colors, markers, cat, label) + "Candidates Normalized", style, ranges, cat, label) hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", - "Candidates Normalized", colors, markers, cat, label) - - plot_comparison(hist_x, args.prefix, "dx", cat, label, colors, norm) - plot_comparison(hist_y, args.prefix, "dy", cat, label, colors, norm) - plot_comparison(hist_z, args.prefix, "dz", cat, label, colors, norm) + "Candidates Normalized", style, ranges, cat, label) + + plot_comparison(hist_x, args.prefix, "dx", cat, label, style, norm) + plot_comparison(hist_y, args.prefix, "dy", cat, label, style, norm) + plot_comparison(hist_z, args.prefix, "dz", cat, label, style, norm) + + + from ROOT import gEnv + gEnv.SetValue("Hist.Binning.1D.x","100") + + graph = {} + graph["tracks"] = {} + graph["tracks"]["dx"] = {} + graph["tracks"]["dy"] = {} + graph["tracks"]["dz"] = {} + graph["tracks"]["dx"] = get_dependence(graph["tracks"]["dx"], tr, "dx", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dy"] = get_dependence(graph["tracks"]["dy"], tr, "dy", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dz"] = get_dependence(graph["tracks"]["dz"], tr, "dz", "nrectrmc", ranges, style, cat, label) + + legend = TLegend(0.15, 0.86, 0.88, 0.98) + legend = set_legend(legend, label, graph["tracks"]["dz"], "sigma") + + plot(graph["tracks"]["dx"], "mean", args.prefix+"_ntracks_mean", "dx", cat, label, legend) + plot(graph["tracks"]["dx"], "sigma", args.prefix+"_ntracks_sigma", "dx", cat, label, legend) + + plot(graph["tracks"]["dy"], "mean", args.prefix+"_ntracks_mean", "dy", cat, label, legend) + plot(graph["tracks"]["dy"], "sigma", args.prefix+"_ntracks_sigma", "dy", cat, label, legend) + + plot(graph["tracks"]["dz"], "mean", args.prefix+"_ntracks_mean", "dz", cat, label, legend) + plot(graph["tracks"]["dz"], "sigma", args.prefix+"_ntracks_sigma", "dz", cat, label, legend) + + + graph["z"] = {} + graph["z"]["dx"] = {} + graph["z"]["dy"] = {} + graph["z"]["dz"] = {} + graph["z"]["dx"] = get_dependence(graph["z"]["dx"], tr, "dx", "zMC", ranges, style, cat, label) + graph["z"]["dy"] = get_dependence(graph["z"]["dy"], tr, "dy", "zMC", ranges, style, cat, label) + graph["z"]["dz"] = get_dependence(graph["z"]["dz"], tr, "dz", "zMC", ranges, style, cat, label) + + plot(graph["z"]["dx"], "mean", args.prefix+"_z_mean", "dx", cat, label, legend) + plot(graph["z"]["dx"], "sigma", args.prefix+"_z_sigma", "dx", cat, label, legend) + + plot(graph["z"]["dy"], "mean", args.prefix+"_z_mean", "dy", cat, label, legend) + plot(graph["z"]["dy"], "sigma", args.prefix+"_z_sigma", "dy", cat, label, legend) + + plot(graph["z"]["dz"], "mean", args.prefix+"_z_mean", "dz", cat, label, legend) + plot(graph["z"]["dz"], "sigma", args.prefix+"_z_sigma", "dz", cat, label, legend) + + diff --git a/Hlt/RecoConf/scripts/utils/pvconfig.py b/Hlt/RecoConf/scripts/utils/pvconfig.py new file mode 100644 index 00000000000..0b7f6890670 --- /dev/null +++ b/Hlt/RecoConf/scripts/utils/pvconfig.py @@ -0,0 +1,136 @@ +############################################################################### +# (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +#!/usr/bin/python + +from ROOT import TH1F, TLegend +from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray, kYellow + +def get_categories(multi, smog): + cut = {} + cut["all"] = {"cut": ""} +# cut["isolated"] = {"cut": "&&isol==1"} +# if not smog: +# cut["close"] = {"cut": "&&isol==0"} + if multi: + cut["1st"] = {"cut": "&&multimc==1"} + cut["2nd"] = {"cut": "&&multimc==2"} + cut["3rd"] = {"cut": "&&multimc==3"} + cut["4th"] = {"cut": "&&multimc==4"} + cut["5th"] = {"cut": "&&multimc==5"} + + return cut + + +def get_style(): + return {"color" :[kRed, kBlue, kOrange, kMagenta, kGreen, kCyan], + "marker":[21, 20, 22, 23, 24, 25 ]} + +def get_default_tree_name(is_checker): + if is_checker: + return "PrimaryVertexChecker/101" + else: + return "VertexCompare/102" + +def transfer_variable(dep): + dictionary = {"pullx":"dx/errx", + "pully":"dy/erry", + "pullz":"dz/errz", + "dx":"dx", + "dy":"dy", + "dz":"dz", } + return dictionary[dep] + +def get_variable_ranges(smog): + dictionary = {"zMC" :{"bins":50, "min":-200, "max":200}, + "rMC" :{"bins":50, "min":0.0, "max":0.2}, + "dx" :{"bins":50, "min":-0.10, "max":0.10}, + "dy" :{"bins":50, "min":-0.10, "max":0.10}, + "dz" :{"bins":50, "min":-0.40, "max":0.40}, + "pullx" :{"bins":50, "min":-3.50, "max":3.50}, + "pully" :{"bins":50, "min":-3.50, "max":3.50}, + "pullz" :{"bins":50, "min":-3.50, "max":3.50}, + "nrectrmc":{"bins":66, "min":4.0, "max":70.0}} + if smog: + dictionary["zMC"] = {"bins":100,"min":-500, "max":200} + + return dictionary + +def get_y_axis(dependence): + dictionary = {"dx":"Resolution #Delta x [#mu m]", + "dy":"Resolution #Delta y [#mu m]", + "dz":"Resolution #Delta z [#mu m]", + "pullx":"Pull #Delta x/#sigma_{x}", + "pully":"Pull #Delta y/#sigma_{y}", + "pullz":"Pull #Delta z/#sigma_{z}"} + return dictionary[dependence] + +def get_x_axis(dependence): + dictionary= {"zMC":"z [mm]", + "rMC":"radial distance [mm]", + "nrectrmc":"number of tracks in Primary Vertex"} + return dictionary[dependence] + +def set_style(graph, color, marker, xaxis, yaxis, title): + graph.SetTitle("") + graph.SetLineColor(color) + graph.SetMarkerColor(color) + graph.SetMarkerSize(1.3) + graph.SetMarkerStyle(marker) + graph.GetYaxis().SetTitleOffset(0.85) + if type(graph) == TH1F: + graph.SetFillColor(color) + graph.SetLineWidth(1) + graph.SetStats(False) + graph.GetYaxis().SetTitleOffset(1.1) + graph.GetYaxis().SetTitleSize(0.06) + graph.GetYaxis().SetLabelSize(0.06) + graph.GetXaxis().SetTitleSize(0.06) + graph.GetXaxis().SetLabelSize(0.06) + graph.GetXaxis().SetTitleFont(132) + graph.GetXaxis().SetLabelFont(132) + graph.GetYaxis().SetTitleFont(132) + graph.GetYaxis().SetLabelFont(132) + + if title != "": + graph.SetTitle(title) + if xaxis != "": + graph.GetXaxis().SetTitle(xaxis) + if yaxis != "": + graph.GetYaxis().SetTitle(yaxis) + +def set_legend(legend, label, gr, gr_type, + hist = None, dist = False): + legend.SetTextSize(0.04) + legend.SetTextFont(12) + legend.SetFillColor(4000) + legend.SetShadowColor(0) + legend.SetBorderSize(0) + legend.SetTextFont(132) + legend.SetNColumns(2) + for lab in label: + legend.AddEntry(gr["all"][lab][gr_type], "{lab}".format(lab=lab), + "lep") + if dist: + legend.AddEntry(hist["all"][label[0]]["den"], "Distribution MC", "f") + for lab in label: + legend.AddEntry(hist["all"][lab]["nom"], + "Distribution {lab}".format(lab=lab), "f") + + return legend + +def get_text_cor(): + return {"x": [0.17, 0.65, 0.17, 0.65], + "y": [0.92, 0.92, 0.75, 0.75]} + + + +def basic_cut(): + return "nrectrmc>=4 && dz < 2.0" diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 124731fe94f..d734f3e7a62 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -20,13 +20,15 @@ from ROOT import TCanvas from ROOT import TGraphErrors, TLegend from ROOT import gPad, kGray, TLatex +from pvconfig import get_default_tree_name +from pvconfig import transfer_variable +from pvconfig import get_x_axis, get_y_axis +from pvconfig import set_style +from pvconfig import set_legend +from pvconfig import get_text_cor +from pvconfig import basic_cut -def get_default_tree_name(is_checker): - if is_checker: - return "PrimaryVertexChecker/101" - else: - return "VertexCompare/102" - +from array import array def get_files(tf, label, files): i = 0 @@ -47,88 +49,33 @@ def get_trees(tf, tr, label, trees, is_checker): return tr -def set_style(graph, color, marker, xaxis, yaxis, title): - graph.SetTitle("") - graph.SetLineColor(color) - graph.SetMarkerColor(color) - graph.SetMarkerSize(1.3) - graph.SetMarkerStyle(marker) - graph.GetYaxis().SetTitleOffset(0.85) - if type(graph) == TH1F: - graph.SetFillColor(color) - graph.SetLineWidth(4) - graph.SetStats(False) - graph.GetYaxis().SetTitleOffset(1.1) - graph.GetYaxis().SetTitleSize(0.06) - graph.GetYaxis().SetLabelSize(0.06) - graph.GetXaxis().SetTitleSize(0.06) - graph.GetXaxis().SetLabelSize(0.06) - graph.GetXaxis().SetTitleFont(132) - graph.GetXaxis().SetLabelFont(132) - graph.GetYaxis().SetTitleFont(132) - graph.GetYaxis().SetLabelFont(132) - - if title != "": - graph.SetTitle(title) - if xaxis != "": - graph.GetXaxis().SetTitle(xaxis) - if yaxis != "": - graph.GetYaxis().SetTitle(yaxis) - - -def get_range(dependence, smog): - if dependence == "zMC": - if smog: - return "(100,-500,200)" - else: - return "(50,-200,200)" - elif dependence == "rMC": - return "(50,0.0,0.2)" - elif (dependence == "dx" or dependence == "dy"): - return "(50,-0.10,0.10)" - elif dependence == "dz": - return "(50,-0.5,0.5)" - elif "err" in dependence or "pull" in dependence: - return "(50,-3.5,3.5)" - else: - return "(66,4,70)" - - -def get_x_axis(dependence): - if dependence == "zMC": - return "z [mm]" - elif dependence == "rMC": - return "radial distance [mm]" - else: - return "number of tracks in Primary Vertex" - - -def get_eff(eff, hist, trees, dependence, colors, markers, smog, categories, - label): - - hist_range = get_range(dependence, smog) +def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): for cat in categories: eff[cat] = {} hist[cat] = {} i = 0 for lab in label: - var_den = '{dependence}>>hist{code}_{dep}_{cat}_{lab}{hist_range}'.format( + var_den = '{dependence}>>hist{code}_{dep}_{cat}_{lab}({bins},{mins},{maxs})'.format( dependence=dependence, code="den", dep=dependence, cat=cat, lab=lab, - hist_range=hist_range) - var_nom = '{dependence}>>hist{code}_{dep}_{cat}_{lab}{hist_range}'.format( + bins=ranges[dependence]["bins"], + mins=ranges[dependence]["min"], + maxs=ranges[dependence]["max"]) + var_nom = '{dependence}>>hist{code}_{dep}_{cat}_{lab}({bins},{mins},{maxs})'.format( dependence=dependence, code="nom", dep=dependence, cat=cat, lab=lab, - hist_range=hist_range) + bins=ranges[dependence]["bins"], + mins=ranges[dependence]["min"], + maxs=ranges[dependence]["max"]) - cut_den = 'nrectrmc>=4 {cuts}'.format(cuts=categories[cat]["cut"]) + cut_den = 'nrectrmc>=4 && dz < 2.0 {cuts}'.format(cuts=categories[cat]["cut"]) cut_nom = cut_den + ' && reco == 1' trees[lab].Draw(var_nom, cut_nom) @@ -142,47 +89,42 @@ def get_eff(eff, hist, trees, dependence, colors, markers, smog, categories, g_eff = TGraphAsymmErrors() g_eff.Divide(h_nom, h_den, "cl=0.683 b(1,1) mode") - set_style(h_nom, colors[i] - 8, markers[i], get_x_axis(dependence), + set_style(h_nom, style["color"][i] - 8, style["marker"][i], get_x_axis(dependence), "Efficiency", "") - set_style(h_den, kGray, markers[i], get_x_axis(dependence), + set_style(h_den, kGray, style["marker"][i], get_x_axis(dependence), "Efficiency", "") hist[cat][lab] = {} hist[cat][lab]["nom"] = h_nom hist[cat][lab]["den"] = h_den - set_style(g_eff, colors[i], markers[i], get_x_axis(dependence), + set_style(g_eff, style["color"][i], style["marker"][i], get_x_axis(dependence), "Efficiency", "") - eff[cat][lab] = g_eff + eff[cat][lab] = {} + eff[cat][lab]["eff"] = g_eff i += 1 return eff, hist - -def set_legend(legend, label, gr, hist, dist): - legend.SetTextSize(0.04) - legend.SetTextFont(12) - legend.SetFillColor(4000) - legend.SetShadowColor(0) - legend.SetBorderSize(0) - legend.SetTextFont(132) - legend.SetNColumns(2) - #legend.SetHeader("LHCb Preliminary"); +def find_max(gr, gr_type, label): + m = -999999.0 for lab in label: - legend.AddEntry(gr["all"][lab], "Efficiency {lab}".format(lab=lab), - "lep") - if dist: - legend.AddEntry(hist["all"][label[0]]["den"], "Distribution MC", "f") - for lab in label: - legend.AddEntry(hist["all"][lab]["nom"], - "Distribution {lab}".format(lab=lab), "f") + if ( gr[lab][gr_type].GetYaxis().GetXmax() > m ): + m = gr[lab][gr_type].GetYaxis().GetXmax() - return legend + return m +def find_min(gr, gr_type, label): + m =999999.0 + for lab in label: + if ( gr[lab][gr_type].GetYaxis().GetXmin() < m ): + m = gr[lab][gr_type].GetYaxis().GetXmin() + return m + -def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): +def plot(gr, gr_type, prefix, dependence, categories, label, legend=None, hist=None, dist=False): for cat in categories: - can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), + can = TCanvas('canvas_{depen}_{prefix}_{gr_type}_{cat}'.format(depen=dependence, prefix=prefix, gr_type=gr_type, cat=cat), "cR", 1200, 800) can.SetBottomMargin(0.15) can.SetLeftMargin(0.12) @@ -192,11 +134,20 @@ def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): can.SetRightMargin(0.05) can.cd() - eff[cat][label[0]].GetYaxis().SetRangeUser(0.0, 1.1) - eff[cat][label[0]].Draw("AP") + maximum = find_max(gr[cat],gr_type,label) + minimum = find_min(gr[cat],gr_type,label) + if ( abs(maximum) > abs(minimum) and minimum<0): + minimum = -maximum + + gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser(minimum*1.1, maximum*1.1) + if ( gr_type == "eff" ): + gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser(0.0, 1.1) + if ( gr_type == "sigma"): + gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser(0.0, maximum*1.1) + gr[cat][label[0]][gr_type].Draw("AP") for lab in label: - eff[cat][lab].Draw("SAME P") + gr[cat][lab][gr_type].Draw("SAME P") if dist: histmax_den = 1.1 * hist[cat][label[0]]["den"].GetMaximum() @@ -210,54 +161,47 @@ def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): hist[cat][lab]["nom"].Scale(scale * 0.75) hist[cat][lab]["nom"].Draw("SAME") - eff[cat][lab].Draw("SAME P") + gr[cat][lab][gr_type].Draw("SAME P") - legend.Draw("SAME") + if legend: + legend.Draw("SAME") saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) can.SaveAs(saveName) -def transfer_dependence(dep): - if dep == "pullx": - return "dx/errx" - elif dep == "pully": - return "dy/erry" - elif dep == "pullz": - return "dz/errz" - else: - return dep - -def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, +def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, categories, label): - hist_range = get_range(dependence, False) - dep = transfer_dependence(dependence) + dep = transfer_variable(dependence) for cat in categories: hist[cat] = {} i = 0 for lab in label: - var = '{dependence}>>hist_{dep}_{cat}_{lab}{hist_range}'.format( + var = '{dependence}>>hist_{dep}_{cat}_{lab}({bins},{mins},{maxs})'.format( dependence=dep, dep=dependence, cat=cat, lab=lab, - hist_range=hist_range) + bins=ranges[dependence]["bins"], + mins=ranges[dependence]["min"], + maxs=ranges[dependence]["max"] + ) - cut = 'nrectrmc>=4 && reco == 1 {cuts}'.format( + cut = 'nrectrmc>=4 && dz < 2.0 && reco == 1 {cuts}'.format( cuts=categories[cat]["cut"]) trees[lab].Draw(var, cut) h = gDirectory.Get('hist_{dep}_{cat}_{lab}'.format( dep=dependence, cat=cat, lab=lab)) if i == 0: - col = colors[i] - 10 + col = style["color"][i] - 10 else: - col = colors[i] - set_style(h, col, markers[i], x_axis, y_axis, "") + col = style["color"][i] + set_style(h, col, style["marker"][i], x_axis, y_axis, "") hist[cat][lab] = h i += 1 @@ -265,19 +209,17 @@ def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, return hist -def get_text_cor(): - return {"x": [0.17, 0.65, 0.17, 0.65], "y": [0.92, 0.92, 0.75, 0.75]} - - def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, units): s = 1.0 if scale: s = 1000.0 - u = "" + ur = "" + um = "#times 10^{-3}" if units: - u = "[#mu m]" + ur = "[#mu m]" + um = "[#mu m]" text.SetNDC() text.SetTextFont(132) @@ -285,15 +227,15 @@ def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, text.DrawLatex(x, y * 1.0, lab) text.DrawLatex( - x, y * 0.95, "#mu = {0:0.2f} #pm {1:0.2f} {unit}".format( - mean * 1000.0, mean_err * 1000.0, unit=u)) + x, y * 0.95, "#mu = ({0:0.2f} #pm {1:0.2f}) {unit}".format( + mean * 1000.0, mean_err * 1000.0, unit=um)) text.DrawLatex( - x, y * 0.90, "#sigma = {0:0.2f} #pm {1:0.2f} {unit}".format( - rms * s, rms_err * s, unit=u)) + x, y * 0.90, "#sigma = ({0:0.2f} #pm {1:0.2f}) {unit}".format( + rms * s, rms_err * s, unit=ur)) return text -def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): +def plot_comparison(hist, prefix, dependence, categories, label, style, norm): for cat in categories: can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), @@ -320,7 +262,7 @@ def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): for lab in label: hist[cat][lab].DrawNormalized("SAME PE") text = TLatex() - text = set_text(text, colors[i], cor["x"][i], cor["y"][i], lab, + text = set_text(text, style["color"][i], cor["x"][i], cor["y"][i], lab, hist[cat][lab].GetMean(), hist[cat][lab].GetMeanError(), hist[cat][lab].GetRMS(), @@ -336,3 +278,105 @@ def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) can.SaveAs(saveName) + + +def get_robust_sigma(hist, resol): + + y = array('d',[0.]*3) + x = array('d',[0.]*3) + x[0] = 0.25 + x[1] = 0.50 + x[2] = 0.75 + + hist.GetQuantiles(3, y, x) + + _median = y[1] + _approxstdev = (y[2] - y[0]) / 1.34898; #factor gives correspondence between IQR and stdev for a Gaussian + mult = 4.0 + + histclone = hist.Clone() + nb = histclone.GetNbinsX() + + for i in range(1,nb+1): + if ((histclone.GetBinCenter(i) < (_median - _approxstdev * mult)) or (histclone.GetBinCenter(i) > (_median + _approxstdev * mult))): + histclone.SetBinContent(i, 0) + + if resol: + robustsigma = {"sigma": {"var":histclone.GetRMS()*1000.0, "err":histclone.GetRMSError()*1000.0}, + "mean": {"var":histclone.GetMean()*1000.0, "err":histclone.GetMeanError()*1000.0}} + + else: + robustsigma = {"sigma": {"var":histclone.GetRMS()*1.0, "err":histclone.GetRMSError()*1.0}, + "mean": {"var":histclone.GetMean(), "err":histclone.GetMeanError()}} + + return robustsigma; + +def get_dependence(graph, trees, variable, dependence, ranges, style, categories, label): + + var = transfer_variable(variable) + bin_width = (ranges[dependence]["max"]-ranges[dependence]["min"])/ranges[dependence]["bins"] + + resol = True + mean = "Mean [#mu m]" + if "pull" in variable: + resol = False + mean = "Mean" + + for cat in categories: + graph[cat] = {} + i = 0 + for lab in label: + graph[cat][lab] = {} + graph_rms = TGraphAsymmErrors(ranges[dependence]["bins"]) + graph_mean = TGraphAsymmErrors(ranges[dependence]["bins"]) + + bin_min = ranges[dependence]["min"] + for b in range(0,ranges[dependence]["bins"]): + + cut_bin = '{variable1}>={mins} && {variable2}<{maxs}'.format( + variable1 = dependence, + mins = bin_min, + variable2 = dependence, + maxs = bin_min+bin_width) + + hist_string = '{dependence}>>hist_{dep}_{cat}_{lab}_{number}'.format( + dependence=var, + dep=variable, + cat=cat, + lab=lab, + number=int(b), + ) + + cut = '{basic} && reco == 1 && {bin_cut} {cuts}'.format( + basic = basic_cut(), + bin_cut = cut_bin, + cuts=categories[cat]["cut"]) + + + a = trees[lab].Draw(hist_string, cut) + + bin_min += bin_width + + h = gDirectory.Get('hist_{dep}_{cat}_{lab}_{number}'.format( + dep=variable, + cat=cat, + lab=lab, + number=int(b) )) + + robust_sigma = get_robust_sigma(h, resol) + + graph_mean.SetPoint(b, bin_min+bin_width/2.0, robust_sigma["mean"]["var"]) + graph_mean.SetPointError(b, bin_width/2.0, bin_width/2.0, robust_sigma["mean"]["err"],robust_sigma["mean"]["err"]) + + graph_rms.SetPoint(b, bin_min+bin_width/2.0, robust_sigma["sigma"]["var"]) + graph_rms.SetPointError(b, bin_width/2.0, bin_width/2.0, robust_sigma["sigma"]["err"],robust_sigma["sigma"]["err"]) + + set_style(graph_rms, style["color"][i], style["marker"][i], get_x_axis(dependence), get_y_axis(variable), "") + set_style(graph_mean, style["color"][i], style["marker"][i], get_x_axis(dependence), mean, "") + + graph[cat][lab]["sigma"] = graph_rms + graph[cat][lab]["mean"] = graph_mean + i+=1 + + + return graph -- GitLab From 3e137afa1ecdf95fea7e8b457dc1d770716cdc66 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Thu, 5 Mar 2020 10:34:53 +0000 Subject: [PATCH 16/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/7460832 --- .../scripts/PrimaryVertexCheckerEfficiency.py | 43 ++-- .../scripts/PrimaryVertexCheckerPull.py | 74 ++++--- .../scripts/PrimaryVertexCheckerResolution.py | 82 ++++---- Hlt/RecoConf/scripts/utils/pvconfig.py | 126 ++++++++---- Hlt/RecoConf/scripts/utils/pvutils.py | 185 +++++++++++------- 5 files changed, 316 insertions(+), 194 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index 05ee126647e..a8870f7bcfa 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -78,7 +78,6 @@ parser.add_argument( ) - def get_labels(number_of_files): label = [] for i in range(0, number_of_files): @@ -95,7 +94,7 @@ if __name__ == '__main__': from pvutils import get_default_tree_name from pvutils import get_files, get_trees, get_eff, plot - + from pvconfig import get_variable_ranges from pvconfig import get_style, get_categories from pvconfig import set_legend @@ -112,32 +111,36 @@ if __name__ == '__main__': tf = get_files(tf, label, args.fileName) tr = get_trees(tf, tr, label, args.treeName, True) - eff = {} + eff = {} eff["tracks"] = {} - eff["z"] = {} - eff["r"] = {} + eff["z"] = {} + eff["r"] = {} hist = {} hist["tracks"] = {} - hist["z"]={} - hist["r"]={} - + hist["z"] = {} + hist["r"] = {} + cat = get_categories(args.multi, args.smog) - eff["tracks"], hist["tracks"] = get_eff(eff["tracks"], hist["tracks"], tr, "nrectrmc", style, - ranges, cat, label) - eff["z"], hist["z"] = get_eff(eff["z"], hist["z"], tr, "zMC", style, - ranges, cat, label) - eff["r"], hist["r"] = get_eff(eff["r"], hist["r"], tr, "rMC", style, - ranges, cat, label) + eff["tracks"], hist["tracks"] = get_eff(eff["tracks"], hist["tracks"], tr, + "nrectrmc", style, ranges, cat, + label) + eff["z"], hist["z"] = get_eff(eff["z"], hist["z"], tr, "zMC", style, + ranges, cat, label) + eff["r"], hist["r"] = get_eff(eff["r"], hist["r"], tr, "rMC", style, + ranges, cat, label) if args.dist: legend = TLegend(0.15, 0.82, 0.88, 0.98) else: legend = TLegend(0.15, 0.86, 0.88, 0.98) - legend = set_legend(legend, label, eff["tracks"], "eff", hist["z"], args.dist) - - - plot(eff["tracks"], "eff", args.prefix, "ntracks", cat, label, legend, hist["tracks"], args.dist) - plot(eff["z"], "eff", args.prefix, "z", cat, label, legend, hist["z"], args.dist) - plot(eff["r"], "eff", args.prefix, "r", cat, label, legend, hist["r"], args.dist) + legend = set_legend(legend, label, eff["tracks"], "eff", hist["z"], + args.dist) + + plot(eff["tracks"], "eff", args.prefix, "ntracks", cat, label, legend, + hist["tracks"], args.dist) + plot(eff["z"], "eff", args.prefix, "z", cat, label, legend, hist["z"], + args.dist) + plot(eff["r"], "eff", args.prefix, "r", cat, label, legend, hist["r"], + args.dist) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 5c06da4eb87..6b6b2f7532d 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -100,11 +100,11 @@ if __name__ == '__main__': from pvconfig import get_variable_ranges from pvconfig import get_style, get_categories - from pvconfig import get_y_axis + from pvconfig import get_y_axis ranges = get_variable_ranges(args.smog) style = get_style() - + cat = get_categories(args.multi, args.smog) label = args.label if args.label == "": @@ -130,48 +130,64 @@ if __name__ == '__main__': plot_comparison(hist_y, args.prefix, "pully", cat, label, style, norm) plot_comparison(hist_z, args.prefix, "pullz", cat, label, style, norm) - from ROOT import gEnv - gEnv.SetValue("Hist.Binning.1D.x","100") - + gEnv.SetValue("Hist.Binning.1D.x", "100") graph = {} graph["tracks"] = {} graph["tracks"]["pullx"] = {} graph["tracks"]["pully"] = {} graph["tracks"]["pullz"] = {} - graph["tracks"]["pullx"] = get_dependence(graph["tracks"]["pullx"], tr, "pullx", "nrectrmc", ranges, style, cat, label) - graph["tracks"]["pully"] = get_dependence(graph["tracks"]["pully"], tr, "pully", "nrectrmc", ranges, style, cat, label) - graph["tracks"]["pullz"] = get_dependence(graph["tracks"]["pullz"], tr, "pullz", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["pullx"] = get_dependence(graph["tracks"]["pullx"], tr, + "pullx", "nrectrmc", ranges, + style, cat, label) + graph["tracks"]["pully"] = get_dependence(graph["tracks"]["pully"], tr, + "pully", "nrectrmc", ranges, + style, cat, label) + graph["tracks"]["pullz"] = get_dependence(graph["tracks"]["pullz"], tr, + "pullz", "nrectrmc", ranges, + style, cat, label) legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["pullz"], "sigma") - plot(graph["tracks"]["pullx"], "mean", args.prefix+"_ntracks_mean", "pullx", cat, label, legend) - plot(graph["tracks"]["pullx"], "sigma", args.prefix+"_ntracks_sigma", "pullx", cat, label, legend) + plot(graph["tracks"]["pullx"], "mean", args.prefix + "_ntracks_mean", + "pullx", cat, label, legend) + plot(graph["tracks"]["pullx"], "sigma", args.prefix + "_ntracks_sigma", + "pullx", cat, label, legend) - plot(graph["tracks"]["pully"], "mean", args.prefix+"_ntracks_mean", "pully", cat, label, legend) - plot(graph["tracks"]["pully"], "sigma", args.prefix+"_ntracks_sigma", "pully", cat, label, legend) - - plot(graph["tracks"]["pullz"], "mean", args.prefix+"_ntracks_mean", "pullz", cat, label, legend) - plot(graph["tracks"]["pullz"], "sigma", args.prefix+"_ntracks_sigma", "pullz", cat, label, legend) + plot(graph["tracks"]["pully"], "mean", args.prefix + "_ntracks_mean", + "pully", cat, label, legend) + plot(graph["tracks"]["pully"], "sigma", args.prefix + "_ntracks_sigma", + "pully", cat, label, legend) + plot(graph["tracks"]["pullz"], "mean", args.prefix + "_ntracks_mean", + "pullz", cat, label, legend) + plot(graph["tracks"]["pullz"], "sigma", args.prefix + "_ntracks_sigma", + "pullz", cat, label, legend) graph["z"] = {} graph["z"]["pullx"] = {} graph["z"]["pully"] = {} graph["z"]["pullz"] = {} - graph["z"]["pullx"] = get_dependence(graph["z"]["pullx"], tr, "pullx", "zMC", ranges, style, cat, label) - graph["z"]["pully"] = get_dependence(graph["z"]["pully"], tr, "pully", "zMC", ranges, style, cat, label) - graph["z"]["pullz"] = get_dependence(graph["z"]["pullz"], tr, "pullz", "zMC", ranges, style, cat, label) - - plot(graph["z"]["pullx"], "mean", args.prefix+"_z_mean", "pullx", cat, label, legend) - plot(graph["z"]["pullx"], "sigma", args.prefix+"_z_sigma", "pullx", cat, label, legend) - - plot(graph["z"]["pully"], "mean", args.prefix+"_z_mean", "pully", cat, label, legend) - plot(graph["z"]["pully"], "sigma", args.prefix+"_z_sigma", "pully", cat, label, legend) - - plot(graph["z"]["pullz"], "mean", args.prefix+"_z_mean", "pullz", cat, label, legend) - plot(graph["z"]["pullz"], "sigma", args.prefix+"_z_sigma", "pullz", cat, label, legend) - - + graph["z"]["pullx"] = get_dependence(graph["z"]["pullx"], tr, "pullx", + "zMC", ranges, style, cat, label) + graph["z"]["pully"] = get_dependence(graph["z"]["pully"], tr, "pully", + "zMC", ranges, style, cat, label) + graph["z"]["pullz"] = get_dependence(graph["z"]["pullz"], tr, "pullz", + "zMC", ranges, style, cat, label) + + plot(graph["z"]["pullx"], "mean", args.prefix + "_z_mean", "pullx", cat, + label, legend) + plot(graph["z"]["pullx"], "sigma", args.prefix + "_z_sigma", "pullx", cat, + label, legend) + + plot(graph["z"]["pully"], "mean", args.prefix + "_z_mean", "pully", cat, + label, legend) + plot(graph["z"]["pully"], "sigma", args.prefix + "_z_sigma", "pully", cat, + label, legend) + + plot(graph["z"]["pullz"], "mean", args.prefix + "_z_mean", "pullz", cat, + label, legend) + plot(graph["z"]["pullz"], "sigma", args.prefix + "_z_sigma", "pullz", cat, + label, legend) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index 119963274c0..7a753cf251e 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -95,21 +95,20 @@ if __name__ == '__main__': from pvutils import get_default_tree_name from pvutils import get_files, get_trees from pvutils import set_legend, get_global, plot_comparison - from pvutils import get_dependence - from pvutils import plot + from pvutils import get_dependence + from pvutils import plot from pvconfig import get_variable_ranges from pvconfig import get_style, get_categories - ranges = get_variable_ranges(args.smog) + ranges = get_variable_ranges(args.smog) style = get_style() - + cat = get_categories(args.multi, args.smog) label = args.label if args.label == "": label = get_labels(len(args.fileName)) - tr = {} tf = {} tf = get_files(tf, label, args.fileName) @@ -120,59 +119,72 @@ if __name__ == '__main__': hist_z = {} norm = True - hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", "Candidates Normalized", style, ranges, cat, label) hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", "Candidates Normalized", style, ranges, cat, label) hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", "Candidates Normalized", style, ranges, cat, label) - + plot_comparison(hist_x, args.prefix, "dx", cat, label, style, norm) plot_comparison(hist_y, args.prefix, "dy", cat, label, style, norm) plot_comparison(hist_z, args.prefix, "dz", cat, label, style, norm) - from ROOT import gEnv - gEnv.SetValue("Hist.Binning.1D.x","100") - + gEnv.SetValue("Hist.Binning.1D.x", "100") + graph = {} graph["tracks"] = {} graph["tracks"]["dx"] = {} graph["tracks"]["dy"] = {} graph["tracks"]["dz"] = {} - graph["tracks"]["dx"] = get_dependence(graph["tracks"]["dx"], tr, "dx", "nrectrmc", ranges, style, cat, label) - graph["tracks"]["dy"] = get_dependence(graph["tracks"]["dy"], tr, "dy", "nrectrmc", ranges, style, cat, label) - graph["tracks"]["dz"] = get_dependence(graph["tracks"]["dz"], tr, "dz", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dx"] = get_dependence( + graph["tracks"]["dx"], tr, "dx", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dy"] = get_dependence( + graph["tracks"]["dy"], tr, "dy", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dz"] = get_dependence( + graph["tracks"]["dz"], tr, "dz", "nrectrmc", ranges, style, cat, label) legend = TLegend(0.15, 0.86, 0.88, 0.98) - legend = set_legend(legend, label, graph["tracks"]["dz"], "sigma") + legend = set_legend(legend, label, graph["tracks"]["dz"], "sigma") - plot(graph["tracks"]["dx"], "mean", args.prefix+"_ntracks_mean", "dx", cat, label, legend) - plot(graph["tracks"]["dx"], "sigma", args.prefix+"_ntracks_sigma", "dx", cat, label, legend) - - plot(graph["tracks"]["dy"], "mean", args.prefix+"_ntracks_mean", "dy", cat, label, legend) - plot(graph["tracks"]["dy"], "sigma", args.prefix+"_ntracks_sigma", "dy", cat, label, legend) + plot(graph["tracks"]["dx"], "mean", args.prefix + "_ntracks_mean", "dx", + cat, label, legend) + plot(graph["tracks"]["dx"], "sigma", args.prefix + "_ntracks_sigma", "dx", + cat, label, legend) - plot(graph["tracks"]["dz"], "mean", args.prefix+"_ntracks_mean", "dz", cat, label, legend) - plot(graph["tracks"]["dz"], "sigma", args.prefix+"_ntracks_sigma", "dz", cat, label, legend) + plot(graph["tracks"]["dy"], "mean", args.prefix + "_ntracks_mean", "dy", + cat, label, legend) + plot(graph["tracks"]["dy"], "sigma", args.prefix + "_ntracks_sigma", "dy", + cat, label, legend) + plot(graph["tracks"]["dz"], "mean", args.prefix + "_ntracks_mean", "dz", + cat, label, legend) + plot(graph["tracks"]["dz"], "sigma", args.prefix + "_ntracks_sigma", "dz", + cat, label, legend) graph["z"] = {} graph["z"]["dx"] = {} graph["z"]["dy"] = {} graph["z"]["dz"] = {} - graph["z"]["dx"] = get_dependence(graph["z"]["dx"], tr, "dx", "zMC", ranges, style, cat, label) - graph["z"]["dy"] = get_dependence(graph["z"]["dy"], tr, "dy", "zMC", ranges, style, cat, label) - graph["z"]["dz"] = get_dependence(graph["z"]["dz"], tr, "dz", "zMC", ranges, style, cat, label) - - plot(graph["z"]["dx"], "mean", args.prefix+"_z_mean", "dx", cat, label, legend) - plot(graph["z"]["dx"], "sigma", args.prefix+"_z_sigma", "dx", cat, label, legend) - - plot(graph["z"]["dy"], "mean", args.prefix+"_z_mean", "dy", cat, label, legend) - plot(graph["z"]["dy"], "sigma", args.prefix+"_z_sigma", "dy", cat, label, legend) - - plot(graph["z"]["dz"], "mean", args.prefix+"_z_mean", "dz", cat, label, legend) - plot(graph["z"]["dz"], "sigma", args.prefix+"_z_sigma", "dz", cat, label, legend) - - + graph["z"]["dx"] = get_dependence(graph["z"]["dx"], tr, "dx", "zMC", + ranges, style, cat, label) + graph["z"]["dy"] = get_dependence(graph["z"]["dy"], tr, "dy", "zMC", + ranges, style, cat, label) + graph["z"]["dz"] = get_dependence(graph["z"]["dz"], tr, "dz", "zMC", + ranges, style, cat, label) + + plot(graph["z"]["dx"], "mean", args.prefix + "_z_mean", "dx", cat, label, + legend) + plot(graph["z"]["dx"], "sigma", args.prefix + "_z_sigma", "dx", cat, label, + legend) + + plot(graph["z"]["dy"], "mean", args.prefix + "_z_mean", "dy", cat, label, + legend) + plot(graph["z"]["dy"], "sigma", args.prefix + "_z_sigma", "dy", cat, label, + legend) + + plot(graph["z"]["dz"], "mean", args.prefix + "_z_mean", "dz", cat, label, + legend) + plot(graph["z"]["dz"], "sigma", args.prefix + "_z_sigma", "dz", cat, label, + legend) diff --git a/Hlt/RecoConf/scripts/utils/pvconfig.py b/Hlt/RecoConf/scripts/utils/pvconfig.py index 0b7f6890670..aa85884257c 100644 --- a/Hlt/RecoConf/scripts/utils/pvconfig.py +++ b/Hlt/RecoConf/scripts/utils/pvconfig.py @@ -13,12 +13,13 @@ from ROOT import TH1F, TLegend from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray, kYellow + def get_categories(multi, smog): cut = {} cut["all"] = {"cut": ""} -# cut["isolated"] = {"cut": "&&isol==1"} -# if not smog: -# cut["close"] = {"cut": "&&isol==0"} + # cut["isolated"] = {"cut": "&&isol==1"} + # if not smog: + # cut["close"] = {"cut": "&&isol==0"} if multi: cut["1st"] = {"cut": "&&multimc==1"} cut["2nd"] = {"cut": "&&multimc==2"} @@ -30,8 +31,11 @@ def get_categories(multi, smog): def get_style(): - return {"color" :[kRed, kBlue, kOrange, kMagenta, kGreen, kCyan], - "marker":[21, 20, 22, 23, 24, 25 ]} + return { + "color": [kRed, kBlue, kOrange, kMagenta, kGreen, kCyan], + "marker": [21, 20, 22, 23, 24, 25] + } + def get_default_tree_name(is_checker): if is_checker: @@ -39,45 +43,94 @@ def get_default_tree_name(is_checker): else: return "VertexCompare/102" + def transfer_variable(dep): - dictionary = {"pullx":"dx/errx", - "pully":"dy/erry", - "pullz":"dz/errz", - "dx":"dx", - "dy":"dy", - "dz":"dz", } + dictionary = { + "pullx": "dx/errx", + "pully": "dy/erry", + "pullz": "dz/errz", + "dx": "dx", + "dy": "dy", + "dz": "dz", + } return dictionary[dep] + def get_variable_ranges(smog): - dictionary = {"zMC" :{"bins":50, "min":-200, "max":200}, - "rMC" :{"bins":50, "min":0.0, "max":0.2}, - "dx" :{"bins":50, "min":-0.10, "max":0.10}, - "dy" :{"bins":50, "min":-0.10, "max":0.10}, - "dz" :{"bins":50, "min":-0.40, "max":0.40}, - "pullx" :{"bins":50, "min":-3.50, "max":3.50}, - "pully" :{"bins":50, "min":-3.50, "max":3.50}, - "pullz" :{"bins":50, "min":-3.50, "max":3.50}, - "nrectrmc":{"bins":66, "min":4.0, "max":70.0}} + dictionary = { + "zMC": { + "bins": 50, + "min": -200, + "max": 200 + }, + "rMC": { + "bins": 50, + "min": 0.0, + "max": 0.2 + }, + "dx": { + "bins": 50, + "min": -0.10, + "max": 0.10 + }, + "dy": { + "bins": 50, + "min": -0.10, + "max": 0.10 + }, + "dz": { + "bins": 50, + "min": -0.40, + "max": 0.40 + }, + "pullx": { + "bins": 50, + "min": -3.50, + "max": 3.50 + }, + "pully": { + "bins": 50, + "min": -3.50, + "max": 3.50 + }, + "pullz": { + "bins": 50, + "min": -3.50, + "max": 3.50 + }, + "nrectrmc": { + "bins": 66, + "min": 4.0, + "max": 70.0 + } + } if smog: - dictionary["zMC"] = {"bins":100,"min":-500, "max":200} - + dictionary["zMC"] = {"bins": 100, "min": -500, "max": 200} + return dictionary + def get_y_axis(dependence): - dictionary = {"dx":"Resolution #Delta x [#mu m]", - "dy":"Resolution #Delta y [#mu m]", - "dz":"Resolution #Delta z [#mu m]", - "pullx":"Pull #Delta x/#sigma_{x}", - "pully":"Pull #Delta y/#sigma_{y}", - "pullz":"Pull #Delta z/#sigma_{z}"} + dictionary = { + "dx": "Resolution #Delta x [#mu m]", + "dy": "Resolution #Delta y [#mu m]", + "dz": "Resolution #Delta z [#mu m]", + "pullx": "Pull #Delta x/#sigma_{x}", + "pully": "Pull #Delta y/#sigma_{y}", + "pullz": "Pull #Delta z/#sigma_{z}" + } return dictionary[dependence] + def get_x_axis(dependence): - dictionary= {"zMC":"z [mm]", - "rMC":"radial distance [mm]", - "nrectrmc":"number of tracks in Primary Vertex"} + dictionary = { + "zMC": "z [mm]", + "rMC": "radial distance [mm]", + "nrectrmc": "number of tracks in Primary Vertex" + } return dictionary[dependence] + def set_style(graph, color, marker, xaxis, yaxis, title): graph.SetTitle("") graph.SetLineColor(color) @@ -106,8 +159,8 @@ def set_style(graph, color, marker, xaxis, yaxis, title): if yaxis != "": graph.GetYaxis().SetTitle(yaxis) -def set_legend(legend, label, gr, gr_type, - hist = None, dist = False): + +def set_legend(legend, label, gr, gr_type, hist=None, dist=False): legend.SetTextSize(0.04) legend.SetTextFont(12) legend.SetFillColor(4000) @@ -126,11 +179,10 @@ def set_legend(legend, label, gr, gr_type, return legend + def get_text_cor(): - return {"x": [0.17, 0.65, 0.17, 0.65], - "y": [0.92, 0.92, 0.75, 0.75]} + return {"x": [0.17, 0.65, 0.17, 0.65], "y": [0.92, 0.92, 0.75, 0.75]} - def basic_cut(): - return "nrectrmc>=4 && dz < 2.0" + return "nrectrmc>=4 && dz < 2.0" diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index d734f3e7a62..5065d911ddf 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -20,7 +20,7 @@ from ROOT import TCanvas from ROOT import TGraphErrors, TLegend from ROOT import gPad, kGray, TLatex -from pvconfig import get_default_tree_name +from pvconfig import get_default_tree_name from pvconfig import transfer_variable from pvconfig import get_x_axis, get_y_axis from pvconfig import set_style @@ -30,6 +30,7 @@ from pvconfig import basic_cut from array import array + def get_files(tf, label, files): i = 0 for f in files: @@ -75,7 +76,8 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): mins=ranges[dependence]["min"], maxs=ranges[dependence]["max"]) - cut_den = 'nrectrmc>=4 && dz < 2.0 {cuts}'.format(cuts=categories[cat]["cut"]) + cut_den = 'nrectrmc>=4 && dz < 2.0 {cuts}'.format( + cuts=categories[cat]["cut"]) cut_nom = cut_den + ' && reco == 1' trees[lab].Draw(var_nom, cut_nom) @@ -89,43 +91,55 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): g_eff = TGraphAsymmErrors() g_eff.Divide(h_nom, h_den, "cl=0.683 b(1,1) mode") - set_style(h_nom, style["color"][i] - 8, style["marker"][i], get_x_axis(dependence), - "Efficiency", "") + set_style(h_nom, style["color"][i] - 8, style["marker"][i], + get_x_axis(dependence), "Efficiency", "") set_style(h_den, kGray, style["marker"][i], get_x_axis(dependence), "Efficiency", "") hist[cat][lab] = {} hist[cat][lab]["nom"] = h_nom hist[cat][lab]["den"] = h_den - set_style(g_eff, style["color"][i], style["marker"][i], get_x_axis(dependence), - "Efficiency", "") - eff[cat][lab] = {} + set_style(g_eff, style["color"][i], style["marker"][i], + get_x_axis(dependence), "Efficiency", "") + eff[cat][lab] = {} eff[cat][lab]["eff"] = g_eff i += 1 return eff, hist + def find_max(gr, gr_type, label): m = -999999.0 for lab in label: - if ( gr[lab][gr_type].GetYaxis().GetXmax() > m ): + if (gr[lab][gr_type].GetYaxis().GetXmax() > m): m = gr[lab][gr_type].GetYaxis().GetXmax() - return m + return m + def find_min(gr, gr_type, label): - m =999999.0 + m = 999999.0 for lab in label: - if ( gr[lab][gr_type].GetYaxis().GetXmin() < m ): + if (gr[lab][gr_type].GetYaxis().GetXmin() < m): m = gr[lab][gr_type].GetYaxis().GetXmin() return m - -def plot(gr, gr_type, prefix, dependence, categories, label, legend=None, hist=None, dist=False): + +def plot(gr, + gr_type, + prefix, + dependence, + categories, + label, + legend=None, + hist=None, + dist=False): for cat in categories: - can = TCanvas('canvas_{depen}_{prefix}_{gr_type}_{cat}'.format(depen=dependence, prefix=prefix, gr_type=gr_type, cat=cat), - "cR", 1200, 800) + can = TCanvas( + 'canvas_{depen}_{prefix}_{gr_type}_{cat}'.format( + depen=dependence, prefix=prefix, gr_type=gr_type, cat=cat), + "cR", 1200, 800) can.SetBottomMargin(0.15) can.SetLeftMargin(0.12) can.SetTopMargin(0.15) @@ -134,16 +148,18 @@ def plot(gr, gr_type, prefix, dependence, categories, label, legend=None, hist=N can.SetRightMargin(0.05) can.cd() - maximum = find_max(gr[cat],gr_type,label) - minimum = find_min(gr[cat],gr_type,label) - if ( abs(maximum) > abs(minimum) and minimum<0): + maximum = find_max(gr[cat], gr_type, label) + minimum = find_min(gr[cat], gr_type, label) + if (abs(maximum) > abs(minimum) and minimum < 0): minimum = -maximum - - gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser(minimum*1.1, maximum*1.1) - if ( gr_type == "eff" ): + + gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser( + minimum * 1.1, maximum * 1.1) + if (gr_type == "eff"): gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser(0.0, 1.1) - if ( gr_type == "sigma"): - gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser(0.0, maximum*1.1) + if (gr_type == "sigma"): + gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser( + 0.0, maximum * 1.1) gr[cat][label[0]][gr_type].Draw("AP") for lab in label: @@ -171,7 +187,6 @@ def plot(gr, gr_type, prefix, dependence, categories, label, legend=None, hist=N can.SaveAs(saveName) - def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, categories, label): @@ -188,8 +203,7 @@ def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, lab=lab, bins=ranges[dependence]["bins"], mins=ranges[dependence]["min"], - maxs=ranges[dependence]["max"] - ) + maxs=ranges[dependence]["max"]) cut = 'nrectrmc>=4 && dz < 2.0 && reco == 1 {cuts}'.format( cuts=categories[cat]["cut"]) @@ -262,8 +276,8 @@ def plot_comparison(hist, prefix, dependence, categories, label, style, norm): for lab in label: hist[cat][lab].DrawNormalized("SAME PE") text = TLatex() - text = set_text(text, style["color"][i], cor["x"][i], cor["y"][i], lab, - hist[cat][lab].GetMean(), + text = set_text(text, style["color"][i], cor["x"][i], + cor["y"][i], lab, hist[cat][lab].GetMean(), hist[cat][lab].GetMeanError(), hist[cat][lab].GetRMS(), hist[cat][lab].GetRMSError(), scale, units) @@ -281,63 +295,85 @@ def plot_comparison(hist, prefix, dependence, categories, label, style, norm): def get_robust_sigma(hist, resol): - - y = array('d',[0.]*3) - x = array('d',[0.]*3) + + y = array('d', [0.] * 3) + x = array('d', [0.] * 3) x[0] = 0.25 x[1] = 0.50 x[2] = 0.75 hist.GetQuantiles(3, y, x) - + _median = y[1] - _approxstdev = (y[2] - y[0]) / 1.34898; #factor gives correspondence between IQR and stdev for a Gaussian + _approxstdev = (y[2] - y[0]) / 1.34898 + #factor gives correspondence between IQR and stdev for a Gaussian mult = 4.0 histclone = hist.Clone() nb = histclone.GetNbinsX() - for i in range(1,nb+1): - if ((histclone.GetBinCenter(i) < (_median - _approxstdev * mult)) or (histclone.GetBinCenter(i) > (_median + _approxstdev * mult))): + for i in range(1, nb + 1): + if ((histclone.GetBinCenter(i) < (_median - _approxstdev * mult)) + or (histclone.GetBinCenter(i) > + (_median + _approxstdev * mult))): histclone.SetBinContent(i, 0) if resol: - robustsigma = {"sigma": {"var":histclone.GetRMS()*1000.0, "err":histclone.GetRMSError()*1000.0}, - "mean": {"var":histclone.GetMean()*1000.0, "err":histclone.GetMeanError()*1000.0}} + robustsigma = { + "sigma": { + "var": histclone.GetRMS() * 1000.0, + "err": histclone.GetRMSError() * 1000.0 + }, + "mean": { + "var": histclone.GetMean() * 1000.0, + "err": histclone.GetMeanError() * 1000.0 + } + } else: - robustsigma = {"sigma": {"var":histclone.GetRMS()*1.0, "err":histclone.GetRMSError()*1.0}, - "mean": {"var":histclone.GetMean(), "err":histclone.GetMeanError()}} - - return robustsigma; + robustsigma = { + "sigma": { + "var": histclone.GetRMS() * 1.0, + "err": histclone.GetRMSError() * 1.0 + }, + "mean": { + "var": histclone.GetMean(), + "err": histclone.GetMeanError() + } + } -def get_dependence(graph, trees, variable, dependence, ranges, style, categories, label): - - var = transfer_variable(variable) - bin_width = (ranges[dependence]["max"]-ranges[dependence]["min"])/ranges[dependence]["bins"] + return robustsigma - resol = True + +def get_dependence(graph, trees, variable, dependence, ranges, style, + categories, label): + + var = transfer_variable(variable) + bin_width = (ranges[dependence]["max"] - + ranges[dependence]["min"]) / ranges[dependence]["bins"] + + resol = True mean = "Mean [#mu m]" if "pull" in variable: resol = False - mean = "Mean" + mean = "Mean" for cat in categories: graph[cat] = {} i = 0 for lab in label: graph[cat][lab] = {} - graph_rms = TGraphAsymmErrors(ranges[dependence]["bins"]) + graph_rms = TGraphAsymmErrors(ranges[dependence]["bins"]) graph_mean = TGraphAsymmErrors(ranges[dependence]["bins"]) bin_min = ranges[dependence]["min"] - for b in range(0,ranges[dependence]["bins"]): + for b in range(0, ranges[dependence]["bins"]): cut_bin = '{variable1}>={mins} && {variable2}<{maxs}'.format( - variable1 = dependence, - mins = bin_min, - variable2 = dependence, - maxs = bin_min+bin_width) + variable1=dependence, + mins=bin_min, + variable2=dependence, + maxs=bin_min + bin_width) hist_string = '{dependence}>>hist_{dep}_{cat}_{lab}_{number}'.format( dependence=var, @@ -346,37 +382,40 @@ def get_dependence(graph, trees, variable, dependence, ranges, style, categories lab=lab, number=int(b), ) - + cut = '{basic} && reco == 1 && {bin_cut} {cuts}'.format( - basic = basic_cut(), - bin_cut = cut_bin, + basic=basic_cut(), + bin_cut=cut_bin, cuts=categories[cat]["cut"]) - a = trees[lab].Draw(hist_string, cut) bin_min += bin_width - + h = gDirectory.Get('hist_{dep}_{cat}_{lab}_{number}'.format( - dep=variable, - cat=cat, - lab=lab, - number=int(b) )) + dep=variable, cat=cat, lab=lab, number=int(b))) robust_sigma = get_robust_sigma(h, resol) - - graph_mean.SetPoint(b, bin_min+bin_width/2.0, robust_sigma["mean"]["var"]) - graph_mean.SetPointError(b, bin_width/2.0, bin_width/2.0, robust_sigma["mean"]["err"],robust_sigma["mean"]["err"]) - - graph_rms.SetPoint(b, bin_min+bin_width/2.0, robust_sigma["sigma"]["var"]) - graph_rms.SetPointError(b, bin_width/2.0, bin_width/2.0, robust_sigma["sigma"]["err"],robust_sigma["sigma"]["err"]) - - set_style(graph_rms, style["color"][i], style["marker"][i], get_x_axis(dependence), get_y_axis(variable), "") - set_style(graph_mean, style["color"][i], style["marker"][i], get_x_axis(dependence), mean, "") + + graph_mean.SetPoint(b, bin_min + bin_width / 2.0, + robust_sigma["mean"]["var"]) + graph_mean.SetPointError(b, bin_width / 2.0, bin_width / 2.0, + robust_sigma["mean"]["err"], + robust_sigma["mean"]["err"]) + + graph_rms.SetPoint(b, bin_min + bin_width / 2.0, + robust_sigma["sigma"]["var"]) + graph_rms.SetPointError(b, bin_width / 2.0, bin_width / 2.0, + robust_sigma["sigma"]["err"], + robust_sigma["sigma"]["err"]) + + set_style(graph_rms, style["color"][i], style["marker"][i], + get_x_axis(dependence), get_y_axis(variable), "") + set_style(graph_mean, style["color"][i], style["marker"][i], + get_x_axis(dependence), mean, "") graph[cat][lab]["sigma"] = graph_rms graph[cat][lab]["mean"] = graph_mean - i+=1 - + i += 1 return graph -- GitLab From e1edab0e3890ee45532431deb1800b09080f4998 Mon Sep 17 00:00:00 2001 From: Florian Reiss Date: Tue, 5 May 2020 22:38:52 +0200 Subject: [PATCH 17/54] updates to PV plotting scripts to create plots for figure document --- .../scripts/PrimaryVertexCheckerEfficiency.py | 14 +++- .../scripts/PrimaryVertexCheckerPull.py | 58 +++++++------- .../scripts/PrimaryVertexCheckerResolution.py | 60 +++++++++------ Hlt/RecoConf/scripts/utils/pvconfig.py | 2 +- Hlt/RecoConf/scripts/utils/pvutils.py | 75 ++++++++++++------- 5 files changed, 127 insertions(+), 82 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index a8870f7bcfa..bfc3151734f 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -77,6 +77,13 @@ parser.add_argument( help='tree name to plot', ) +parser.add_argument( + '--offset', + dest='offset', + default=0, + help='offset for plot colors', +) + def get_labels(number_of_files): label = [] @@ -89,6 +96,7 @@ if __name__ == '__main__': args = parser.parse_args() path = args.directory + "/utils/" sys.path.append(os.path.abspath(path)) + offset = int(args.offset) gROOT.SetBatch() @@ -125,11 +133,11 @@ if __name__ == '__main__': eff["tracks"], hist["tracks"] = get_eff(eff["tracks"], hist["tracks"], tr, "nrectrmc", style, ranges, cat, - label) + label, offset) eff["z"], hist["z"] = get_eff(eff["z"], hist["z"], tr, "zMC", style, - ranges, cat, label) + ranges, cat, label, offset) eff["r"], hist["r"] = get_eff(eff["r"], hist["r"], tr, "rMC", style, - ranges, cat, label) + ranges, cat, label, offset) if args.dist: legend = TLegend(0.15, 0.82, 0.88, 0.98) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 6b6b2f7532d..127154700bb 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -77,6 +77,13 @@ parser.add_argument( help='tree name to plot', ) +parser.add_argument( + '--offset', + dest='offset', + default=0, + help='offset for plot colors', +) + def get_labels(number_of_files): label = [] @@ -89,7 +96,7 @@ if __name__ == '__main__': args = parser.parse_args() path = args.directory + "/utils/" sys.path.append(os.path.abspath(path)) - + offset = int(args.offset) gROOT.SetBatch() from pvutils import get_default_tree_name @@ -120,15 +127,15 @@ if __name__ == '__main__': hist_z = {} norm = True #to-do hist_x = get_global(hist_x, tr, "pullx", "#Delta x / #sigma_{x}", - "Candidates Normalized", style, ranges, cat, label) + "Candidates Normalized", style, ranges, cat, label, offset) hist_y = get_global(hist_y, tr, "pully", "#Delta y / #sigma_{y}", - "Candidates Normalized", style, ranges, cat, label) + "Candidates Normalized", style, ranges, cat, label, offset) hist_z = get_global(hist_z, tr, "pullz", "#Delta z / #sigma_{z}", - "Candidates Normalized", style, ranges, cat, label) + "Candidates Normalized", style, ranges, cat, label, offset) - plot_comparison(hist_x, args.prefix, "pullx", cat, label, style, norm) - plot_comparison(hist_y, args.prefix, "pully", cat, label, style, norm) - plot_comparison(hist_z, args.prefix, "pullz", cat, label, style, norm) + plot_comparison(hist_x, args.prefix, "pullx", cat, label, style, norm, offset) + plot_comparison(hist_y, args.prefix, "pully", cat, label, style, norm, offset) + plot_comparison(hist_z, args.prefix, "pullz", cat, label, style, norm, offset) from ROOT import gEnv gEnv.SetValue("Hist.Binning.1D.x", "100") @@ -140,54 +147,55 @@ if __name__ == '__main__': graph["tracks"]["pullz"] = {} graph["tracks"]["pullx"] = get_dependence(graph["tracks"]["pullx"], tr, "pullx", "nrectrmc", ranges, - style, cat, label) + style, cat, label, offset) graph["tracks"]["pully"] = get_dependence(graph["tracks"]["pully"], tr, "pully", "nrectrmc", ranges, - style, cat, label) + style, cat, label, offset) graph["tracks"]["pullz"] = get_dependence(graph["tracks"]["pullz"], tr, "pullz", "nrectrmc", ranges, - style, cat, label) + style, cat, label, offset) legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["pullz"], "sigma") + labelpos=(0.75, 0.75,0.9,0.87) plot(graph["tracks"]["pullx"], "mean", args.prefix + "_ntracks_mean", - "pullx", cat, label, legend) + "pullx", cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["pullx"], "sigma", args.prefix + "_ntracks_sigma", - "pullx", cat, label, legend) + "pullx", cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["pully"], "mean", args.prefix + "_ntracks_mean", - "pully", cat, label, legend) + "pully", cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["pully"], "sigma", args.prefix + "_ntracks_sigma", - "pully", cat, label, legend) + "pully", cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["pullz"], "mean", args.prefix + "_ntracks_mean", - "pullz", cat, label, legend) + "pullz", cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["pullz"], "sigma", args.prefix + "_ntracks_sigma", - "pullz", cat, label, legend) + "pullz", cat, label, legend, labelpos=labelpos) graph["z"] = {} graph["z"]["pullx"] = {} graph["z"]["pully"] = {} graph["z"]["pullz"] = {} graph["z"]["pullx"] = get_dependence(graph["z"]["pullx"], tr, "pullx", - "zMC", ranges, style, cat, label) + "zMC", ranges, style, cat, label, offset) graph["z"]["pully"] = get_dependence(graph["z"]["pully"], tr, "pully", - "zMC", ranges, style, cat, label) + "zMC", ranges, style, cat, label, offset) graph["z"]["pullz"] = get_dependence(graph["z"]["pullz"], tr, "pullz", - "zMC", ranges, style, cat, label) + "zMC", ranges, style, cat, label, offset) plot(graph["z"]["pullx"], "mean", args.prefix + "_z_mean", "pullx", cat, - label, legend) + label, legend, labelpos=labelpos) plot(graph["z"]["pullx"], "sigma", args.prefix + "_z_sigma", "pullx", cat, - label, legend) + label, legend, labelpos=labelpos) plot(graph["z"]["pully"], "mean", args.prefix + "_z_mean", "pully", cat, - label, legend) + label, legend, labelpos=labelpos) plot(graph["z"]["pully"], "sigma", args.prefix + "_z_sigma", "pully", cat, - label, legend) + label, legend, labelpos=labelpos) plot(graph["z"]["pullz"], "mean", args.prefix + "_z_mean", "pullz", cat, - label, legend) + label, legend, labelpos=labelpos) plot(graph["z"]["pullz"], "sigma", args.prefix + "_z_sigma", "pullz", cat, - label, legend) + label, legend, labelpos=labelpos) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index 7a753cf251e..f195826d0df 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -77,6 +77,13 @@ parser.add_argument( help='tree name to plot', ) +parser.add_argument( + '--offset', + dest='offset', + default=0, + help='offset for plot colors', +) + def get_labels(number_of_files): label = [] @@ -89,6 +96,7 @@ if __name__ == '__main__': args = parser.parse_args() path = args.directory + "/utils/" sys.path.append(os.path.abspath(path)) + offset = int(args.offset) gROOT.SetBatch() @@ -120,15 +128,15 @@ if __name__ == '__main__': norm = True hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", - "Candidates Normalized", style, ranges, cat, label) + "Candidates Normalized", style, ranges, cat, label, offset) hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", - "Candidates Normalized", style, ranges, cat, label) + "Candidates Normalized", style, ranges, cat, label, offset) hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", - "Candidates Normalized", style, ranges, cat, label) + "Candidates Normalized", style, ranges, cat, label, offset) - plot_comparison(hist_x, args.prefix, "dx", cat, label, style, norm) - plot_comparison(hist_y, args.prefix, "dy", cat, label, style, norm) - plot_comparison(hist_z, args.prefix, "dz", cat, label, style, norm) + plot_comparison(hist_x, args.prefix, "dx", cat, label, style, norm, offset) + plot_comparison(hist_y, args.prefix, "dy", cat, label, style, norm, offset) + plot_comparison(hist_z, args.prefix, "dz", cat, label, style, norm, offset) from ROOT import gEnv gEnv.SetValue("Hist.Binning.1D.x", "100") @@ -139,52 +147,56 @@ if __name__ == '__main__': graph["tracks"]["dy"] = {} graph["tracks"]["dz"] = {} graph["tracks"]["dx"] = get_dependence( - graph["tracks"]["dx"], tr, "dx", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dx"], tr, "dx", "nrectrmc", ranges, style, cat, label, offset) graph["tracks"]["dy"] = get_dependence( - graph["tracks"]["dy"], tr, "dy", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dy"], tr, "dy", "nrectrmc", ranges, style, cat, label, offset) graph["tracks"]["dz"] = get_dependence( - graph["tracks"]["dz"], tr, "dz", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dz"], tr, "dz", "nrectrmc", ranges, style, cat, label, offset) legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["dz"], "sigma") + + labelpos=(0.73, 0.75,0.88,0.87) plot(graph["tracks"]["dx"], "mean", args.prefix + "_ntracks_mean", "dx", - cat, label, legend) + cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["dx"], "sigma", args.prefix + "_ntracks_sigma", "dx", - cat, label, legend) + cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["dy"], "mean", args.prefix + "_ntracks_mean", "dy", - cat, label, legend) + cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["dy"], "sigma", args.prefix + "_ntracks_sigma", "dy", - cat, label, legend) + cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["dz"], "mean", args.prefix + "_ntracks_mean", "dz", - cat, label, legend) + cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["dz"], "sigma", args.prefix + "_ntracks_sigma", "dz", - cat, label, legend) + cat, label, legend, labelpos=labelpos) graph["z"] = {} graph["z"]["dx"] = {} graph["z"]["dy"] = {} graph["z"]["dz"] = {} graph["z"]["dx"] = get_dependence(graph["z"]["dx"], tr, "dx", "zMC", - ranges, style, cat, label) + ranges, style, cat, label, offset) graph["z"]["dy"] = get_dependence(graph["z"]["dy"], tr, "dy", "zMC", - ranges, style, cat, label) + ranges, style, cat, label, offset) graph["z"]["dz"] = get_dependence(graph["z"]["dz"], tr, "dz", "zMC", - ranges, style, cat, label) + ranges, style, cat, label, offset) + plot(graph["z"]["dx"], "mean", args.prefix + "_z_mean", "dx", cat, label, - legend) + legend, labelpos=labelpos) plot(graph["z"]["dx"], "sigma", args.prefix + "_z_sigma", "dx", cat, label, - legend) + legend, labelpos=labelpos) plot(graph["z"]["dy"], "mean", args.prefix + "_z_mean", "dy", cat, label, - legend) + legend, labelpos=labelpos) plot(graph["z"]["dy"], "sigma", args.prefix + "_z_sigma", "dy", cat, label, - legend) + legend, labelpos=labelpos) + plot(graph["z"]["dz"], "mean", args.prefix + "_z_mean", "dz", cat, label, - legend) + legend, labelpos=labelpos) plot(graph["z"]["dz"], "sigma", args.prefix + "_z_sigma", "dz", cat, label, - legend) + legend, labelpos=labelpos) diff --git a/Hlt/RecoConf/scripts/utils/pvconfig.py b/Hlt/RecoConf/scripts/utils/pvconfig.py index aa85884257c..09bccd2963f 100644 --- a/Hlt/RecoConf/scripts/utils/pvconfig.py +++ b/Hlt/RecoConf/scripts/utils/pvconfig.py @@ -175,7 +175,7 @@ def set_legend(legend, label, gr, gr_type, hist=None, dist=False): legend.AddEntry(hist["all"][label[0]]["den"], "Distribution MC", "f") for lab in label: legend.AddEntry(hist["all"][lab]["nom"], - "Distribution {lab}".format(lab=lab), "f") + "Distribution {lab}".format(lab=lab), "lep") return legend diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 5065d911ddf..02e0ab776a1 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -15,7 +15,7 @@ # date: 02/2020 # -from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors +from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors, TPaveText, gStyle from ROOT import TCanvas from ROOT import TGraphErrors, TLegend from ROOT import gPad, kGray, TLatex @@ -50,14 +50,14 @@ def get_trees(tf, tr, label, trees, is_checker): return tr -def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): +def get_eff(eff, hist, trees, dependence, style, ranges, categories, label, offset): for cat in categories: eff[cat] = {} hist[cat] = {} - i = 0 + i = offset for lab in label: - var_den = '{dependence}>>hist{code}_{dep}_{cat}_{lab}({bins},{mins},{maxs})'.format( + var_den = '{dependence}>>hist{code}_{dep}_{cat}_denom{i}({bins},{mins},{maxs})'.format( dependence=dependence, code="den", dep=dependence, @@ -65,8 +65,9 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): lab=lab, bins=ranges[dependence]["bins"], mins=ranges[dependence]["min"], - maxs=ranges[dependence]["max"]) - var_nom = '{dependence}>>hist{code}_{dep}_{cat}_{lab}({bins},{mins},{maxs})'.format( + maxs=ranges[dependence]["max"], + i=i) + var_nom = '{dependence}>>hist{code}_{dep}_{cat}_num{i}({bins},{mins},{maxs})'.format( dependence=dependence, code="nom", dep=dependence, @@ -74,7 +75,8 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): lab=lab, bins=ranges[dependence]["bins"], mins=ranges[dependence]["min"], - maxs=ranges[dependence]["max"]) + maxs=ranges[dependence]["max"], + i=i) cut_den = 'nrectrmc>=4 && dz < 2.0 {cuts}'.format( cuts=categories[cat]["cut"]) @@ -83,15 +85,15 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): trees[lab].Draw(var_nom, cut_nom) trees[lab].Draw(var_den, cut_den) - h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format( - code="nom", dep=dependence, cat=cat, lab=lab)) - h_den = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format( - code="den", dep=dependence, cat=cat, lab=lab)) + h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_num{i}'.format( + code="nom", dep=dependence, cat=cat, lab=lab, i=i)) + h_den = gDirectory.Get('hist{code}_{dep}_{cat}_denom{i}'.format( + code="den", dep=dependence, cat=cat, lab=lab, i=i)) g_eff = TGraphAsymmErrors() g_eff.Divide(h_nom, h_den, "cl=0.683 b(1,1) mode") - set_style(h_nom, style["color"][i] - 8, style["marker"][i], + set_style(h_nom, style["color"][i]-7, style["marker"][i]+4, get_x_axis(dependence), "Efficiency", "") set_style(h_den, kGray, style["marker"][i], get_x_axis(dependence), "Efficiency", "") @@ -133,7 +135,8 @@ def plot(gr, label, legend=None, hist=None, - dist=False): + dist=False, + labelpos=(0.75, 0.78,0.9,0.9)): for cat in categories: can = TCanvas( @@ -173,14 +176,21 @@ def plot(gr, for lab in label: histmax_nom = 1.1 * hist[cat][lab]["nom"].GetMaximum() - scale = gPad.GetUymax() / histmax_nom + #scale = gPad.GetUymax() / histmax_nom hist[cat][lab]["nom"].Scale(scale * 0.75) - hist[cat][lab]["nom"].Draw("SAME") + hist[cat][lab]["nom"].Draw("ep SAME") gr[cat][lab][gr_type].Draw("SAME P") if legend: legend.Draw("SAME") + pavetext = TPaveText(labelpos[0],labelpos[1],labelpos[2],labelpos[3], "NBNDC") + pavetext.AddText("LHCb simulation") + pavetext.SetFillColor(0) + pavetext.SetFillStyle(3000) + pavetext.SetTextSize(0.06) + pavetext.SetTextFont(132) + pavetext.Draw() saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) @@ -188,29 +198,30 @@ def plot(gr, def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, - categories, label): + categories, label, offset): dep = transfer_variable(dependence) for cat in categories: hist[cat] = {} - i = 0 + i = offset for lab in label: - var = '{dependence}>>hist_{dep}_{cat}_{lab}({bins},{mins},{maxs})'.format( + var = '{dependence}>>hist_{dep}_{cat}_{i}({bins},{mins},{maxs})'.format( dependence=dep, dep=dependence, cat=cat, lab=lab, bins=ranges[dependence]["bins"], mins=ranges[dependence]["min"], - maxs=ranges[dependence]["max"]) + maxs=ranges[dependence]["max"], + i=i) cut = 'nrectrmc>=4 && dz < 2.0 && reco == 1 {cuts}'.format( cuts=categories[cat]["cut"]) trees[lab].Draw(var, cut) - h = gDirectory.Get('hist_{dep}_{cat}_{lab}'.format( - dep=dependence, cat=cat, lab=lab)) + h = gDirectory.Get('hist_{dep}_{cat}_{i}'.format( + dep=dependence, cat=cat, lab=lab, i=i)) if i == 0: col = style["color"][i] - 10 else: @@ -249,7 +260,7 @@ def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, return text -def plot_comparison(hist, prefix, dependence, categories, label, style, norm): +def plot_comparison(hist, prefix, dependence, categories, label, style, norm, offset): for cat in categories: can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), @@ -272,7 +283,7 @@ def plot_comparison(hist, prefix, dependence, categories, label, style, norm): if norm: hist[cat][label[0]].DrawNormalized("hist") hist_max = hist[cat][label[0]].GetMaximum() - i = 0 + i = offset for lab in label: hist[cat][lab].DrawNormalized("SAME PE") text = TLatex() @@ -287,6 +298,12 @@ def plot_comparison(hist, prefix, dependence, categories, label, style, norm): hist[cat][label[0]].Draw("hist") for lab in label: hist[cat][lab].Draw("SAME PE") + pavetext = TPaveText(0.72, 0.77 - gStyle.GetPadTopMargin(), 0.87, 0.89 - gStyle.GetPadTopMargin(), "NBNDC") + pavetext.AddText("LHCb simulation") + pavetext.SetFillColor(0) + pavetext.SetTextSize(0.06) + pavetext.SetTextFont(132) + pavetext.Draw() can.Update() saveName = '{prefix}_{dependence}_{cat}.pdf'.format( @@ -346,7 +363,7 @@ def get_robust_sigma(hist, resol): def get_dependence(graph, trees, variable, dependence, ranges, style, - categories, label): + categories, label, offset): var = transfer_variable(variable) bin_width = (ranges[dependence]["max"] - @@ -360,7 +377,7 @@ def get_dependence(graph, trees, variable, dependence, ranges, style, for cat in categories: graph[cat] = {} - i = 0 + i = offset for lab in label: graph[cat][lab] = {} graph_rms = TGraphAsymmErrors(ranges[dependence]["bins"]) @@ -375,11 +392,11 @@ def get_dependence(graph, trees, variable, dependence, ranges, style, variable2=dependence, maxs=bin_min + bin_width) - hist_string = '{dependence}>>hist_{dep}_{cat}_{lab}_{number}'.format( + hist_string = '{dependence}>>hist_{dep}_{cat}_{i}_{number}'.format( dependence=var, dep=variable, cat=cat, - lab=lab, + i=i, number=int(b), ) @@ -392,8 +409,8 @@ def get_dependence(graph, trees, variable, dependence, ranges, style, bin_min += bin_width - h = gDirectory.Get('hist_{dep}_{cat}_{lab}_{number}'.format( - dep=variable, cat=cat, lab=lab, number=int(b))) + h = gDirectory.Get('hist_{dep}_{cat}_{i}_{number}'.format( + dep=variable, cat=cat, i=i, number=int(b))) robust_sigma = get_robust_sigma(h, resol) -- GitLab From 37efe35e2a9bcefbc0549b9ff0265548ac4c9562 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 6 May 2020 08:20:23 +0000 Subject: [PATCH 18/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/8259820 --- .../scripts/PrimaryVertexCheckerPull.py | 167 ++++++++++++++---- .../scripts/PrimaryVertexCheckerResolution.py | 161 +++++++++++++---- Hlt/RecoConf/scripts/utils/pvutils.py | 16 +- 3 files changed, 264 insertions(+), 80 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 127154700bb..cf30de6cca3 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -127,15 +127,21 @@ if __name__ == '__main__': hist_z = {} norm = True #to-do hist_x = get_global(hist_x, tr, "pullx", "#Delta x / #sigma_{x}", - "Candidates Normalized", style, ranges, cat, label, offset) + "Candidates Normalized", style, ranges, cat, label, + offset) hist_y = get_global(hist_y, tr, "pully", "#Delta y / #sigma_{y}", - "Candidates Normalized", style, ranges, cat, label, offset) + "Candidates Normalized", style, ranges, cat, label, + offset) hist_z = get_global(hist_z, tr, "pullz", "#Delta z / #sigma_{z}", - "Candidates Normalized", style, ranges, cat, label, offset) + "Candidates Normalized", style, ranges, cat, label, + offset) - plot_comparison(hist_x, args.prefix, "pullx", cat, label, style, norm, offset) - plot_comparison(hist_y, args.prefix, "pully", cat, label, style, norm, offset) - plot_comparison(hist_z, args.prefix, "pullz", cat, label, style, norm, offset) + plot_comparison(hist_x, args.prefix, "pullx", cat, label, style, norm, + offset) + plot_comparison(hist_y, args.prefix, "pully", cat, label, style, norm, + offset) + plot_comparison(hist_z, args.prefix, "pullz", cat, label, style, norm, + offset) from ROOT import gEnv gEnv.SetValue("Hist.Binning.1D.x", "100") @@ -158,44 +164,131 @@ if __name__ == '__main__': legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["pullz"], "sigma") - labelpos=(0.75, 0.75,0.9,0.87) - plot(graph["tracks"]["pullx"], "mean", args.prefix + "_ntracks_mean", - "pullx", cat, label, legend, labelpos=labelpos) - plot(graph["tracks"]["pullx"], "sigma", args.prefix + "_ntracks_sigma", - "pullx", cat, label, legend, labelpos=labelpos) + labelpos = (0.75, 0.75, 0.9, 0.87) + plot( + graph["tracks"]["pullx"], + "mean", + args.prefix + "_ntracks_mean", + "pullx", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["tracks"]["pullx"], + "sigma", + args.prefix + "_ntracks_sigma", + "pullx", + cat, + label, + legend, + labelpos=labelpos) - plot(graph["tracks"]["pully"], "mean", args.prefix + "_ntracks_mean", - "pully", cat, label, legend, labelpos=labelpos) - plot(graph["tracks"]["pully"], "sigma", args.prefix + "_ntracks_sigma", - "pully", cat, label, legend, labelpos=labelpos) + plot( + graph["tracks"]["pully"], + "mean", + args.prefix + "_ntracks_mean", + "pully", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["tracks"]["pully"], + "sigma", + args.prefix + "_ntracks_sigma", + "pully", + cat, + label, + legend, + labelpos=labelpos) - plot(graph["tracks"]["pullz"], "mean", args.prefix + "_ntracks_mean", - "pullz", cat, label, legend, labelpos=labelpos) - plot(graph["tracks"]["pullz"], "sigma", args.prefix + "_ntracks_sigma", - "pullz", cat, label, legend, labelpos=labelpos) + plot( + graph["tracks"]["pullz"], + "mean", + args.prefix + "_ntracks_mean", + "pullz", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["tracks"]["pullz"], + "sigma", + args.prefix + "_ntracks_sigma", + "pullz", + cat, + label, + legend, + labelpos=labelpos) graph["z"] = {} graph["z"]["pullx"] = {} graph["z"]["pully"] = {} graph["z"]["pullz"] = {} graph["z"]["pullx"] = get_dependence(graph["z"]["pullx"], tr, "pullx", - "zMC", ranges, style, cat, label, offset) + "zMC", ranges, style, cat, label, + offset) graph["z"]["pully"] = get_dependence(graph["z"]["pully"], tr, "pully", - "zMC", ranges, style, cat, label, offset) + "zMC", ranges, style, cat, label, + offset) graph["z"]["pullz"] = get_dependence(graph["z"]["pullz"], tr, "pullz", - "zMC", ranges, style, cat, label, offset) - - plot(graph["z"]["pullx"], "mean", args.prefix + "_z_mean", "pullx", cat, - label, legend, labelpos=labelpos) - plot(graph["z"]["pullx"], "sigma", args.prefix + "_z_sigma", "pullx", cat, - label, legend, labelpos=labelpos) - - plot(graph["z"]["pully"], "mean", args.prefix + "_z_mean", "pully", cat, - label, legend, labelpos=labelpos) - plot(graph["z"]["pully"], "sigma", args.prefix + "_z_sigma", "pully", cat, - label, legend, labelpos=labelpos) - - plot(graph["z"]["pullz"], "mean", args.prefix + "_z_mean", "pullz", cat, - label, legend, labelpos=labelpos) - plot(graph["z"]["pullz"], "sigma", args.prefix + "_z_sigma", "pullz", cat, - label, legend, labelpos=labelpos) + "zMC", ranges, style, cat, label, + offset) + + plot( + graph["z"]["pullx"], + "mean", + args.prefix + "_z_mean", + "pullx", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["z"]["pullx"], + "sigma", + args.prefix + "_z_sigma", + "pullx", + cat, + label, + legend, + labelpos=labelpos) + + plot( + graph["z"]["pully"], + "mean", + args.prefix + "_z_mean", + "pully", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["z"]["pully"], + "sigma", + args.prefix + "_z_sigma", + "pully", + cat, + label, + legend, + labelpos=labelpos) + + plot( + graph["z"]["pullz"], + "mean", + args.prefix + "_z_mean", + "pullz", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["z"]["pullz"], + "sigma", + args.prefix + "_z_sigma", + "pullz", + cat, + label, + legend, + labelpos=labelpos) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index f195826d0df..e1bdce35d1c 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -128,11 +128,14 @@ if __name__ == '__main__': norm = True hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", - "Candidates Normalized", style, ranges, cat, label, offset) + "Candidates Normalized", style, ranges, cat, label, + offset) hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", - "Candidates Normalized", style, ranges, cat, label, offset) + "Candidates Normalized", style, ranges, cat, label, + offset) hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", - "Candidates Normalized", style, ranges, cat, label, offset) + "Candidates Normalized", style, ranges, cat, label, + offset) plot_comparison(hist_x, args.prefix, "dx", cat, label, style, norm, offset) plot_comparison(hist_y, args.prefix, "dy", cat, label, style, norm, offset) @@ -146,32 +149,76 @@ if __name__ == '__main__': graph["tracks"]["dx"] = {} graph["tracks"]["dy"] = {} graph["tracks"]["dz"] = {} - graph["tracks"]["dx"] = get_dependence( - graph["tracks"]["dx"], tr, "dx", "nrectrmc", ranges, style, cat, label, offset) - graph["tracks"]["dy"] = get_dependence( - graph["tracks"]["dy"], tr, "dy", "nrectrmc", ranges, style, cat, label, offset) - graph["tracks"]["dz"] = get_dependence( - graph["tracks"]["dz"], tr, "dz", "nrectrmc", ranges, style, cat, label, offset) + graph["tracks"]["dx"] = get_dependence(graph["tracks"]["dx"], tr, "dx", + "nrectrmc", ranges, style, cat, + label, offset) + graph["tracks"]["dy"] = get_dependence(graph["tracks"]["dy"], tr, "dy", + "nrectrmc", ranges, style, cat, + label, offset) + graph["tracks"]["dz"] = get_dependence(graph["tracks"]["dz"], tr, "dz", + "nrectrmc", ranges, style, cat, + label, offset) legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["dz"], "sigma") + labelpos = (0.73, 0.75, 0.88, 0.87) + plot( + graph["tracks"]["dx"], + "mean", + args.prefix + "_ntracks_mean", + "dx", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["tracks"]["dx"], + "sigma", + args.prefix + "_ntracks_sigma", + "dx", + cat, + label, + legend, + labelpos=labelpos) - labelpos=(0.73, 0.75,0.88,0.87) - plot(graph["tracks"]["dx"], "mean", args.prefix + "_ntracks_mean", "dx", - cat, label, legend, labelpos=labelpos) - plot(graph["tracks"]["dx"], "sigma", args.prefix + "_ntracks_sigma", "dx", - cat, label, legend, labelpos=labelpos) + plot( + graph["tracks"]["dy"], + "mean", + args.prefix + "_ntracks_mean", + "dy", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["tracks"]["dy"], + "sigma", + args.prefix + "_ntracks_sigma", + "dy", + cat, + label, + legend, + labelpos=labelpos) - plot(graph["tracks"]["dy"], "mean", args.prefix + "_ntracks_mean", "dy", - cat, label, legend, labelpos=labelpos) - plot(graph["tracks"]["dy"], "sigma", args.prefix + "_ntracks_sigma", "dy", - cat, label, legend, labelpos=labelpos) - - plot(graph["tracks"]["dz"], "mean", args.prefix + "_ntracks_mean", "dz", - cat, label, legend, labelpos=labelpos) - plot(graph["tracks"]["dz"], "sigma", args.prefix + "_ntracks_sigma", "dz", - cat, label, legend, labelpos=labelpos) + plot( + graph["tracks"]["dz"], + "mean", + args.prefix + "_ntracks_mean", + "dz", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["tracks"]["dz"], + "sigma", + args.prefix + "_ntracks_sigma", + "dz", + cat, + label, + legend, + labelpos=labelpos) graph["z"] = {} graph["z"]["dx"] = {} @@ -184,19 +231,59 @@ if __name__ == '__main__': graph["z"]["dz"] = get_dependence(graph["z"]["dz"], tr, "dz", "zMC", ranges, style, cat, label, offset) + plot( + graph["z"]["dx"], + "mean", + args.prefix + "_z_mean", + "dx", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["z"]["dx"], + "sigma", + args.prefix + "_z_sigma", + "dx", + cat, + label, + legend, + labelpos=labelpos) - plot(graph["z"]["dx"], "mean", args.prefix + "_z_mean", "dx", cat, label, - legend, labelpos=labelpos) - plot(graph["z"]["dx"], "sigma", args.prefix + "_z_sigma", "dx", cat, label, - legend, labelpos=labelpos) - - plot(graph["z"]["dy"], "mean", args.prefix + "_z_mean", "dy", cat, label, - legend, labelpos=labelpos) - plot(graph["z"]["dy"], "sigma", args.prefix + "_z_sigma", "dy", cat, label, - legend, labelpos=labelpos) - + plot( + graph["z"]["dy"], + "mean", + args.prefix + "_z_mean", + "dy", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["z"]["dy"], + "sigma", + args.prefix + "_z_sigma", + "dy", + cat, + label, + legend, + labelpos=labelpos) - plot(graph["z"]["dz"], "mean", args.prefix + "_z_mean", "dz", cat, label, - legend, labelpos=labelpos) - plot(graph["z"]["dz"], "sigma", args.prefix + "_z_sigma", "dz", cat, label, - legend, labelpos=labelpos) + plot( + graph["z"]["dz"], + "mean", + args.prefix + "_z_mean", + "dz", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["z"]["dz"], + "sigma", + args.prefix + "_z_sigma", + "dz", + cat, + label, + legend, + labelpos=labelpos) diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 02e0ab776a1..16d61773c5a 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -50,7 +50,8 @@ def get_trees(tf, tr, label, trees, is_checker): return tr -def get_eff(eff, hist, trees, dependence, style, ranges, categories, label, offset): +def get_eff(eff, hist, trees, dependence, style, ranges, categories, label, + offset): for cat in categories: eff[cat] = {} @@ -93,7 +94,7 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label, offs g_eff = TGraphAsymmErrors() g_eff.Divide(h_nom, h_den, "cl=0.683 b(1,1) mode") - set_style(h_nom, style["color"][i]-7, style["marker"][i]+4, + set_style(h_nom, style["color"][i] - 7, style["marker"][i] + 4, get_x_axis(dependence), "Efficiency", "") set_style(h_den, kGray, style["marker"][i], get_x_axis(dependence), "Efficiency", "") @@ -136,7 +137,7 @@ def plot(gr, legend=None, hist=None, dist=False, - labelpos=(0.75, 0.78,0.9,0.9)): + labelpos=(0.75, 0.78, 0.9, 0.9)): for cat in categories: can = TCanvas( @@ -184,7 +185,8 @@ def plot(gr, if legend: legend.Draw("SAME") - pavetext = TPaveText(labelpos[0],labelpos[1],labelpos[2],labelpos[3], "NBNDC") + pavetext = TPaveText(labelpos[0], labelpos[1], labelpos[2], + labelpos[3], "NBNDC") pavetext.AddText("LHCb simulation") pavetext.SetFillColor(0) pavetext.SetFillStyle(3000) @@ -260,7 +262,8 @@ def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, return text -def plot_comparison(hist, prefix, dependence, categories, label, style, norm, offset): +def plot_comparison(hist, prefix, dependence, categories, label, style, norm, + offset): for cat in categories: can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), @@ -298,7 +301,8 @@ def plot_comparison(hist, prefix, dependence, categories, label, style, norm, of hist[cat][label[0]].Draw("hist") for lab in label: hist[cat][lab].Draw("SAME PE") - pavetext = TPaveText(0.72, 0.77 - gStyle.GetPadTopMargin(), 0.87, 0.89 - gStyle.GetPadTopMargin(), "NBNDC") + pavetext = TPaveText(0.72, 0.77 - gStyle.GetPadTopMargin(), 0.87, + 0.89 - gStyle.GetPadTopMargin(), "NBNDC") pavetext.AddText("LHCb simulation") pavetext.SetFillColor(0) pavetext.SetTextSize(0.06) -- GitLab From 1d80478b63d1254c747ee1be82595d804e2676e2 Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Fri, 11 Sep 2020 17:25:51 +0200 Subject: [PATCH 19/54] small adjustments after merging with master --- Hlt/RecoConf/options/hlt1_reco_pvchecker.py | 8 +------- Hlt/RecoConf/python/RecoConf/mc_checking.py | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py index 91175618897..abaf275b228 100644 --- a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py +++ b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py @@ -26,11 +26,5 @@ def hlt1_reco_pvchecker(): return Reconstruction('PVperformance', data, [require_gec()]) - +options.ntuple_file = 'Hlt1_PVperformance.root' run_reconstruction(options, hlt1_reco_pvchecker) - -NTupleSvc().Output += [ - "FILE1 DATAFILE='Hlt1_PVperformance.root' TYPE='ROOT' OPT='NEW'" -] -ApplicationMgr().ExtSvc += [NTupleSvc()] -ApplicationMgr().HistogramPersistency = "ROOT" diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index 298938c117c..dd5767dfd81 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -27,7 +27,7 @@ from PyConf.Algorithms import ( PrLHCbID2MCParticleVPUTFTMU, PrTrackAssociator, PrTrackChecker, PrUTHitChecker, TrackListRefiner, TrackResChecker, TrackIPResolutionCheckerNT, DataPacking__Unpack_LHCb__MCVPHitPacker_, - MCParticle2MCHitAlg, PrTrackerDumper, PVDumper, + MCParticle2MCHitAlg, PrTrackerDumper, PVDumper, PrimaryVertexChecker, LHCb__Converters__RecVertex__v2__fromVectorLHCbRecVertices as FromVectorLHCbRecVertex) -- GitLab From bb022b45c6275f64152a5a23bfbe1b096ff6a607 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Fri, 11 Sep 2020 15:42:37 +0000 Subject: [PATCH 20/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/9959385 --- Hlt/RecoConf/options/hlt1_reco_pvchecker.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py index abaf275b228..79fe4af8562 100644 --- a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py +++ b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py @@ -26,5 +26,6 @@ def hlt1_reco_pvchecker(): return Reconstruction('PVperformance', data, [require_gec()]) + options.ntuple_file = 'Hlt1_PVperformance.root' run_reconstruction(options, hlt1_reco_pvchecker) -- GitLab From b85974b38ed2bb675f97381bd8435ba2eddf1fcf Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Fri, 11 Sep 2020 18:13:34 +0200 Subject: [PATCH 21/54] removing not needed imports --- Hlt/RecoConf/options/hlt1_reco_pvchecker.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py index 79fe4af8562..28e85cbe748 100644 --- a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py +++ b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py @@ -10,8 +10,8 @@ ############################################################################### from Moore import options, run_reconstruction from Moore.config import Reconstruction -from RecoConf.hlt1_tracking import require_gec, make_hlt1_tracks, make_VeloKalman_fitted_tracks, make_pvs -from RecoConf.mc_checking import get_pv_checkers, get_track_checkers +from RecoConf.hlt1_tracking import require_gec, make_hlt1_tracks, make_pvs +from RecoConf.mc_checking import get_pv_checkers from Configurables import ApplicationMgr from Configurables import NTupleSvc @@ -26,6 +26,5 @@ def hlt1_reco_pvchecker(): return Reconstruction('PVperformance', data, [require_gec()]) - options.ntuple_file = 'Hlt1_PVperformance.root' run_reconstruction(options, hlt1_reco_pvchecker) -- GitLab From 3b1ae9822997a764ab35455fb7ead35e4a5853f6 Mon Sep 17 00:00:00 2001 From: Tomasz Wojton Date: Wed, 15 Jan 2020 23:00:57 +0100 Subject: [PATCH 22/54] PVChecker functional changes --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 39 +++++++++++++++++++++ Hlt/RecoConf/python/RecoConf/standalone.py | 3 ++ 2 files changed, 42 insertions(+) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index 10a7cb0ae87..428585d7788 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -308,6 +308,45 @@ def get_best_tracks_checkers( return efficiency_checkers +@configurable +def get_pv_checkers( + pvs, + tracks, + match_by_distance = False, + produce_ntuple = False, + make_links_lhcbids_mcparticles=make_links_lhcbids_mcparticles_tracking_system +): + + assert isinstance( + pvs, + DataHandle), "Please provide a dictionary of track type and tracks" + + pv_checkers = [] + + vertexConverter = FromVectorLHCbRecVertex( + InputVerticesName=pvs, + InputTracksName=tracks["v1"]).OutputVerticesName + + +# if not match_by_distance: +# links_to_lhcbids = make_links_lhcbids_mcparticles() +# links_to_tracks = make_links_tracks_mcparticles( +# InputTracks=tracks["v1"], LinksToLHCbIDs=links_to_lhcbids) + + pvchecker = PrimaryVertexChecker(produceNtuple = produce_ntuple, + matchByTracks = match_by_distance, + inputVerticesName = vertexConverter, + inputTracksName = tracks["v1"] + ) + + pv_checkers.append(vertexConverter) + pv_checkers.append(pvchecker) +# pv_checkers.append(vertexConverter) + + return pv_checkers + + + def make_track_filter(InputTracks, code): selector = LoKiTrackSelector(Code=code) filtered_tracks = TrackListRefiner( diff --git a/Hlt/RecoConf/python/RecoConf/standalone.py b/Hlt/RecoConf/python/RecoConf/standalone.py index ac4a74f1637..9f1c924fae5 100644 --- a/Hlt/RecoConf/python/RecoConf/standalone.py +++ b/Hlt/RecoConf/python/RecoConf/standalone.py @@ -76,6 +76,9 @@ def standalone_hlt1_reco(do_mc_checking=False): "Forward": hlt1_tracks["Forward"], } data += get_track_checkers(types_and_locations_for_checkers) + print hlt1_tracks["Velo"] + print pvs + data += get_pv_checkers(pvs, hlt1_tracks["Velo"]) return Reconstruction('hlt1_reco', data, reco_prefilters()) -- GitLab From 651dcc3756ec147d24bfef4fff4907c202e03277 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 15 Jan 2020 22:02:07 +0000 Subject: [PATCH 23/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/6789766 --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 43 ++++++++++----------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index 428585d7788..ec70bb3837c 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -310,41 +310,38 @@ def get_best_tracks_checkers( @configurable def get_pv_checkers( - pvs, - tracks, - match_by_distance = False, - produce_ntuple = False, + pvs, + tracks, + match_by_distance=False, + produce_ntuple=False, make_links_lhcbids_mcparticles=make_links_lhcbids_mcparticles_tracking_system ): assert isinstance( pvs, DataHandle), "Please provide a dictionary of track type and tracks" - + pv_checkers = [] vertexConverter = FromVectorLHCbRecVertex( - InputVerticesName=pvs, - InputTracksName=tracks["v1"]).OutputVerticesName - - -# if not match_by_distance: -# links_to_lhcbids = make_links_lhcbids_mcparticles() -# links_to_tracks = make_links_tracks_mcparticles( -# InputTracks=tracks["v1"], LinksToLHCbIDs=links_to_lhcbids) - - pvchecker = PrimaryVertexChecker(produceNtuple = produce_ntuple, - matchByTracks = match_by_distance, - inputVerticesName = vertexConverter, - inputTracksName = tracks["v1"] - ) + InputVerticesName=pvs, InputTracksName=tracks["v1"]).OutputVerticesName - pv_checkers.append(vertexConverter) - pv_checkers.append(pvchecker) -# pv_checkers.append(vertexConverter) + # if not match_by_distance: + # links_to_lhcbids = make_links_lhcbids_mcparticles() + # links_to_tracks = make_links_tracks_mcparticles( + # InputTracks=tracks["v1"], LinksToLHCbIDs=links_to_lhcbids) - return pv_checkers + pvchecker = PrimaryVertexChecker( + produceNtuple=produce_ntuple, + matchByTracks=match_by_distance, + inputVerticesName=vertexConverter, + inputTracksName=tracks["v1"]) + + pv_checkers.append(vertexConverter) + pv_checkers.append(pvchecker) + # pv_checkers.append(vertexConverter) + return pv_checkers def make_track_filter(InputTracks, code): -- GitLab From 5f8a217e99e3f39d34387b03965e4f14cbc268d6 Mon Sep 17 00:00:00 2001 From: Tomasz Wojton Date: Thu, 16 Jan 2020 16:09:44 +0100 Subject: [PATCH 24/54] distance matching, RecoVertex_v2 --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index ec70bb3837c..bf3208ea1af 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -312,7 +312,6 @@ def get_best_tracks_checkers( def get_pv_checkers( pvs, tracks, - match_by_distance=False, produce_ntuple=False, make_links_lhcbids_mcparticles=make_links_lhcbids_mcparticles_tracking_system ): @@ -323,24 +322,16 @@ def get_pv_checkers( pv_checkers = [] - vertexConverter = FromVectorLHCbRecVertex( - InputVerticesName=pvs, InputTracksName=tracks["v1"]).OutputVerticesName - - # if not match_by_distance: - # links_to_lhcbids = make_links_lhcbids_mcparticles() - # links_to_tracks = make_links_tracks_mcparticles( - # InputTracks=tracks["v1"], LinksToLHCbIDs=links_to_lhcbids) - pvchecker = PrimaryVertexChecker( produceNtuple=produce_ntuple, - matchByTracks=match_by_distance, - inputVerticesName=vertexConverter, - inputTracksName=tracks["v1"]) + inputVerticesName=pvs, + inputTracksName=tracks["v1"], + MCVertexInput=mc_unpackers()["MCVertices"], + # MCParticleInput=mc_unpackers()["MCParticles"], + # LinkerLocation=links_to_tracks, + MCHeaderLocation=make_data_with_FetchDataFromFile("/Event/MC/Header")) - pv_checkers.append(vertexConverter) pv_checkers.append(pvchecker) - # pv_checkers.append(vertexConverter) - return pv_checkers -- GitLab From 23b07fc5669377cc1db5951afae97dcf7e047535 Mon Sep 17 00:00:00 2001 From: bua Date: Thu, 23 Jan 2020 14:12:13 +0100 Subject: [PATCH 25/54] refactoring (MCTrackInfo added) --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index bf3208ea1af..fe518b324f9 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -318,7 +318,7 @@ def get_pv_checkers( assert isinstance( pvs, - DataHandle), "Please provide a dictionary of track type and tracks" + DataHandle), "Please provide reconstructed primary verticies" pv_checkers = [] @@ -327,9 +327,9 @@ def get_pv_checkers( inputVerticesName=pvs, inputTracksName=tracks["v1"], MCVertexInput=mc_unpackers()["MCVertices"], - # MCParticleInput=mc_unpackers()["MCParticles"], - # LinkerLocation=links_to_tracks, - MCHeaderLocation=make_data_with_FetchDataFromFile("/Event/MC/Header")) + MCHeaderLocation=make_data_with_FetchDataFromFile("/Event/MC/Header"), + MCPropertyInput=make_data_with_FetchDataFromFile("/Event/MC/TrackInfo") + ) pv_checkers.append(pvchecker) return pv_checkers -- GitLab From 09081d763ce4590cf1dfbf8358f66f0ae63e0bc1 Mon Sep 17 00:00:00 2001 From: Tomasz Wojton Date: Tue, 28 Jan 2020 10:39:47 +0100 Subject: [PATCH 26/54] removed prints (pvs, hlt1_tracks) --- Hlt/RecoConf/python/RecoConf/standalone.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/standalone.py b/Hlt/RecoConf/python/RecoConf/standalone.py index 9f1c924fae5..c5ca9b17420 100644 --- a/Hlt/RecoConf/python/RecoConf/standalone.py +++ b/Hlt/RecoConf/python/RecoConf/standalone.py @@ -76,8 +76,6 @@ def standalone_hlt1_reco(do_mc_checking=False): "Forward": hlt1_tracks["Forward"], } data += get_track_checkers(types_and_locations_for_checkers) - print hlt1_tracks["Velo"] - print pvs data += get_pv_checkers(pvs, hlt1_tracks["Velo"]) return Reconstruction('hlt1_reco', data, reco_prefilters()) -- GitLab From e9b0bc8d5121cd92ba246f315df730e93d30a2f4 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Tue, 28 Jan 2020 09:40:12 +0000 Subject: [PATCH 27/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/6950020 --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index fe518b324f9..44f9e7709b4 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -317,8 +317,7 @@ def get_pv_checkers( ): assert isinstance( - pvs, - DataHandle), "Please provide reconstructed primary verticies" + pvs, DataHandle), "Please provide reconstructed primary verticies" pv_checkers = [] @@ -328,8 +327,8 @@ def get_pv_checkers( inputTracksName=tracks["v1"], MCVertexInput=mc_unpackers()["MCVertices"], MCHeaderLocation=make_data_with_FetchDataFromFile("/Event/MC/Header"), - MCPropertyInput=make_data_with_FetchDataFromFile("/Event/MC/TrackInfo") - ) + MCPropertyInput=make_data_with_FetchDataFromFile( + "/Event/MC/TrackInfo")) pv_checkers.append(pvchecker) return pv_checkers @@ -430,4 +429,4 @@ def pv_dumper(odin_location=make_odin, output_dir="dump/MC_info/PVs"): MCPropertyLocation=make_data_with_FetchDataFromFile( "/Event/MC/TrackInfo"), ODINLocation=odin_location(), - OutputDirectory=output_dir) + OutputDirectory=output_dir) \ No newline at end of file -- GitLab From 833e40ac319365656c091692960c19f1e4d4f186 Mon Sep 17 00:00:00 2001 From: Tomasz Wojton Date: Tue, 4 Feb 2020 12:26:21 +0100 Subject: [PATCH 28/54] refactoring --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index 44f9e7709b4..eec362a3e29 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -319,6 +319,9 @@ def get_pv_checkers( assert isinstance( pvs, DataHandle), "Please provide reconstructed primary verticies" + links_to_lhcbids = make_links_lhcbids_mcparticles() + links_to_tracks = make_links_tracks_mcparticles( + InputTracks=tracks, LinksToLHCbIDs=links_to_lhcbids) pv_checkers = [] pvchecker = PrimaryVertexChecker( @@ -326,6 +329,7 @@ def get_pv_checkers( inputVerticesName=pvs, inputTracksName=tracks["v1"], MCVertexInput=mc_unpackers()["MCVertices"], + MCParticleInput = mc_unpackers()["MCParticles"], MCHeaderLocation=make_data_with_FetchDataFromFile("/Event/MC/Header"), MCPropertyInput=make_data_with_FetchDataFromFile( "/Event/MC/TrackInfo")) -- GitLab From 82953113568b6c25bae16fe9432ab8e0610d90a4 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Tue, 4 Feb 2020 11:27:09 +0000 Subject: [PATCH 29/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/7045996 --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index eec362a3e29..3f8bd07359a 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -321,7 +321,7 @@ def get_pv_checkers( links_to_lhcbids = make_links_lhcbids_mcparticles() links_to_tracks = make_links_tracks_mcparticles( - InputTracks=tracks, LinksToLHCbIDs=links_to_lhcbids) + InputTracks=tracks, LinksToLHCbIDs=links_to_lhcbids) pv_checkers = [] pvchecker = PrimaryVertexChecker( @@ -329,7 +329,7 @@ def get_pv_checkers( inputVerticesName=pvs, inputTracksName=tracks["v1"], MCVertexInput=mc_unpackers()["MCVertices"], - MCParticleInput = mc_unpackers()["MCParticles"], + MCParticleInput=mc_unpackers()["MCParticles"], MCHeaderLocation=make_data_with_FetchDataFromFile("/Event/MC/Header"), MCPropertyInput=make_data_with_FetchDataFromFile( "/Event/MC/TrackInfo")) -- GitLab From b01e26991fad6afc33d9a8210cd5aff63da12cec Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Wed, 26 Feb 2020 09:23:18 +0100 Subject: [PATCH 30/54] script for efficiency plots, small bugfix for decay categories --- .../scripts/PrimaryVertexCheckerEfficiency.py | 133 +++++++++++++ Hlt/RecoConf/scripts/utils/pvutils.py | 182 ++++++++++++++++++ 2 files changed, 315 insertions(+) create mode 100644 Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py create mode 100644 Hlt/RecoConf/scripts/utils/pvutils.py diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py new file mode 100644 index 00000000000..58913f387c0 --- /dev/null +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -0,0 +1,133 @@ +############################################################################### +# (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +#!/usr/bin/python + +import os, sys +import argparse +import ROOT + +from ROOT import TFile, TTree +from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray +from ROOT import gROOT, TLegend + +parser = argparse.ArgumentParser() +parser.add_argument( '--file', + dest = 'fileName', + default = "", + nargs='+', + help = 'filename to plot') +parser.add_argument( '--label', + dest = 'label', + default = "", + nargs='+', + help = 'labels for files') +parser.add_argument( '--tree', + dest = 'treeName', + default = "", + nargs='+', + help = 'tree name to plot', + ) +parser.add_argument( '--smog', + dest = 'smog', + default = False, + action = 'store_true', + help = 'set true for SMOG' + ) +parser.add_argument( '--multi', + dest = 'multi', + default = False, + action = 'store_true', + help = 'add multiplicity plots' + ) +parser.add_argument( '--dist', + dest = 'dist', + default = False, + action = 'store_true', + help = 'plot distributions in the canvas' + ) +parser.add_argument( '--prefix', + dest = 'prefix', + default = "pv_eff", + help = 'prefix for the plot name', + ) + +def get_categories(multi,smog): + cut = {} + cut["all"] = {"cut":""} + cut["isolated"] = {"cut":"&&isol==1"} + if not smog: + cut["close"] = {"cut":"&&isol==0"} + if multi: + cut["1st"] = {"cut":"&&multimc==1"} + cut["2nd"] = {"cut":"&&multimc==2"} + cut["3rd"] = {"cut":"&&multimc==3"} + cut["4th"] = {"cut":"&&multimc==4"} + cut["5th"] = {"cut":"&&multimc==5"} + + return cut + +def get_colors(): + return [kRed, kBlue, kOrange, kMagenta+2, kGreen+3, kCyan+2] +def get_markers(): + return [21,20,22,23,24,25,26] +def get_labels(number_of_files): + label = [] + for i in range(0,number_of_files): + label.append("PV Checker {number}".format(number=str(i+1))) + return label + + +if __name__ == '__main__' : + args = parser.parse_args() + path = os.getcwd()+"/utils/" + sys.path.append(os.path.abspath(path)) + + gROOT.SetBatch() + + from pvutils import get_default_tree_name + from pvutils import get_files, get_trees, get_eff, plot_eff + from pvutils import set_legend + + markers = get_markers() + colors = get_colors() + + label = args.label + if args.label=="": + label = get_labels(len(args.fileName)) + + tr = {} + tf = {} + tf = get_files(tf, label, args.fileName) + tr = get_trees(tf, tr, label, args.treeName, True) + + eff_tr = {} + eff_z = {} + eff_r = {} + hist_tr = {} + hist_z = {} + hist_r = {} + + cat = get_categories(args.multi,args.smog) + eff_tr, hist_tr = get_eff(eff_tr,hist_tr,tr,"nrectrmc",colors,markers,args.smog,cat,label) + eff_z, hist_z = get_eff(eff_z, hist_z, tr, "zMC",colors,markers,args.smog,cat,label) + eff_r, hist_r = get_eff(eff_r, hist_r, tr, "rMC",colors,markers,args.smog,cat,label) + + if args.dist: + legend = TLegend(0.15, 0.82, 0.88, 0.98 ) + else: + legend = TLegend(0.15, 0.86, 0.88, 0.98 ) + legend = set_legend(legend, label, eff_tr, hist_tr, args.dist) + + plot_eff(eff_tr,hist_tr,args.prefix,"ntracks",cat,label, legend, args.dist) + plot_eff(eff_z, hist_z, args.prefix,"z", cat,label, legend, args.dist) + plot_eff(eff_r, hist_r, args.prefix,"r", cat,label, legend, args.dist) + + diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py new file mode 100644 index 00000000000..3ffa5e54b94 --- /dev/null +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -0,0 +1,182 @@ +############################################################################### +# (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### + +from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors +from ROOT import TCanvas +from ROOT import TGraphErrors, TLegend +from ROOT import gPad, kGray + +def get_default_tree_name(is_checker): + if is_checker: + return "PrimaryVertexChecker/101" + else: + return "VertexCompare/102" + +def get_files(tf, label, files): + i = 0 + for f in files: + tf[label[i]] = TFile(f) + i+=1 + return tf + +def get_trees(tf, tr, label, trees, is_checker): + i=0 + for lab in label: + if len(tf) == len(trees): + tr[lab] = tf[lab].Get(trees[i]) + else: + tr[lab] = tf[lab].Get(get_default_tree_name(is_checker)) + i+=1 + return tr + +def set_style(graph, color, marker, xaxis, yaxis, title): + graph.SetTitle(""); + graph.SetLineColor(color); + graph.SetMarkerColor(color); + graph.SetMarkerSize(1.3); + graph.SetMarkerStyle(marker); + if type(graph) == TH1F: + graph.SetFillColor(color); + graph.SetLineWidth(4) + graph.GetYaxis().SetTitleOffset(0.85); + graph.GetYaxis().SetTitleSize(0.06); + graph.GetYaxis().SetLabelSize(0.06); + graph.GetXaxis().SetTitleSize(0.06); + graph.GetXaxis().SetLabelSize(0.06); + graph.GetXaxis().SetTitleFont(132); + graph.GetXaxis().SetLabelFont(132); + graph.GetYaxis().SetTitleFont(132); + graph.GetYaxis().SetLabelFont(132); + + if title != "": + graph.SetTitle(title) + if xaxis != "": + graph.GetXaxis().SetTitle(xaxis) + if yaxis != "": + graph.GetYaxis().SetTitle(yaxis) + + +def get_range(dependence,smog): + if dependence == "zMC": + if smog: + return "(100,-500,200)" + else: + return "(50,-200,200)" + elif dependence == "rMC": + return "(50,0.0,0.2)" + else: + return "(66,4,70)" + +def get_x_axis(dependence): + if dependence=="zMC": + return "z [mm]" + elif dependence == "rMC": + return "radial distance [mm]" + else: + return "number of tracks in Primary Vertex" + + +def get_eff(eff, hist, trees, dependence, colors, markers, smog, categories, label): + + hist_range = get_range(dependence,smog) + + for cat in categories: + eff[cat] = {} + hist[cat] = {} + i = 0 + for lab in label: + var_den = '{dependence}>>hist{code}_{dep}_{cat}_{lab}{hist_range}'.format( + dependence=dependence,code="den",dep=dependence,cat=cat,lab=lab,hist_range=hist_range) + var_nom = '{dependence}>>hist{code}_{dep}_{cat}_{lab}{hist_range}'.format( + dependence=dependence,code="nom",dep=dependence,cat=cat,lab=lab,hist_range=hist_range) + + cut_den = 'nrectrmc>3 {cuts}'.format(cuts = categories[cat]["cut"]) + cut_nom = cut_den + ' && reco == 1' + + trees[lab].Draw(var_nom,cut_nom) + trees[lab].Draw(var_den,cut_den) + + h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format(code="nom",dep=dependence,cat=cat,lab=lab)) + h_den = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format(code="den",dep=dependence,cat=cat,lab=lab)) + + g_eff = TGraphAsymmErrors() + g_eff.Divide(h_nom,h_den,"cl=0.683 b(1,1) mode") + + set_style(h_nom, colors[i]-8, markers[i], get_x_axis(dependence),"Efficiency","") + set_style(h_den, kGray, markers[i], get_x_axis(dependence),"Efficiency","") + hist[cat][lab] = {} + hist[cat][lab]["nom"] = h_nom + hist[cat][lab]["den"] = h_den + + set_style(g_eff, colors[i], markers[i], get_x_axis(dependence),"Efficiency","") + eff[cat][lab] = g_eff + i+=1 + + return eff, hist + + +def set_legend(legend, label, gr, hist, dist): + legend.SetTextSize(0.04) + legend.SetTextFont(12) + legend.SetFillColor(4000) + legend.SetShadowColor(0) + legend.SetBorderSize(0) + legend.SetTextFont(132) + legend.SetNColumns(2) + #legend.SetHeader("LHCb Preliminary"); + for lab in label: + legend.AddEntry(gr["all"][lab],"Efficiency {lab}".format(lab=lab),"lep") + if dist: + legend.AddEntry(hist["all"][label[0]]["den"],"Distribution MC","f") + for lab in label: + legend.AddEntry(hist["all"][lab]["nom"],"Distribution {lab}".format(lab=lab),"f") + + return legend + +def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): + + for cat in categories: + can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence,cat=cat), "cR", 1200, 800) + can.SetBottomMargin(0.15) + can.SetLeftMargin(0.12) + can.SetTopMargin(0.15) + if dist: + can.SetTopMargin(0.20) + can.SetRightMargin(0.05) + can.cd() + + eff[cat][label[0]].GetYaxis().SetRangeUser(0.0,1.1) + eff[cat][label[0]].Draw("AP") + + for lab in label: + eff[cat][lab].Draw("SAME P") + + if dist: + histmax_den = 1.1*hist[cat][label[0]]["den"].GetMaximum() + scale = gPad.GetUymax()/histmax_den + hist[cat][label[0]]["den"].Scale(scale*0.75) + hist[cat][label[0]]["den"].Draw("hist SAME") + + for lab in label: + histmax_nom = 1.1*hist[cat][lab]["nom"].GetMaximum() + scale = gPad.GetUymax()/histmax_nom + hist[cat][lab]["nom"].Scale(scale*0.75) + hist[cat][lab]["nom"].Draw("SAME") + + legend.Draw("SAME") + + + + saveName = '{prefix}_{dependence}_{cat}.pdf'.format(prefix=prefix,dependence=dependence,cat=cat) + can.SaveAs(saveName) + + + -- GitLab From 48e01d0d09274bd9a05265d347c166485d556e99 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 26 Feb 2020 08:26:40 +0000 Subject: [PATCH 31/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/7342166 --- .../scripts/PrimaryVertexCheckerEfficiency.py | 160 ++++++++-------- Hlt/RecoConf/scripts/utils/pvutils.py | 177 ++++++++++-------- 2 files changed, 181 insertions(+), 156 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index 58913f387c0..f05ccd397cb 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -12,122 +12,126 @@ import os, sys import argparse -import ROOT +import ROOT from ROOT import TFile, TTree from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray from ROOT import gROOT, TLegend parser = argparse.ArgumentParser() -parser.add_argument( '--file', - dest = 'fileName', - default = "", - nargs='+', - help = 'filename to plot') -parser.add_argument( '--label', - dest = 'label', - default = "", - nargs='+', - help = 'labels for files') -parser.add_argument( '--tree', - dest = 'treeName', - default = "", - nargs='+', - help = 'tree name to plot', - ) -parser.add_argument( '--smog', - dest = 'smog', - default = False, - action = 'store_true', - help = 'set true for SMOG' - ) -parser.add_argument( '--multi', - dest = 'multi', - default = False, - action = 'store_true', - help = 'add multiplicity plots' - ) -parser.add_argument( '--dist', - dest = 'dist', - default = False, - action = 'store_true', - help = 'plot distributions in the canvas' - ) -parser.add_argument( '--prefix', - dest = 'prefix', - default = "pv_eff", - help = 'prefix for the plot name', - ) - -def get_categories(multi,smog): +parser.add_argument( + '--file', dest='fileName', default="", nargs='+', help='filename to plot') +parser.add_argument( + '--label', dest='label', default="", nargs='+', help='labels for files') +parser.add_argument( + '--tree', + dest='treeName', + default="", + nargs='+', + help='tree name to plot', +) +parser.add_argument( + '--smog', + dest='smog', + default=False, + action='store_true', + help='set true for SMOG') +parser.add_argument( + '--multi', + dest='multi', + default=False, + action='store_true', + help='add multiplicity plots') +parser.add_argument( + '--dist', + dest='dist', + default=False, + action='store_true', + help='plot distributions in the canvas') +parser.add_argument( + '--prefix', + dest='prefix', + default="pv_eff", + help='prefix for the plot name', +) + + +def get_categories(multi, smog): cut = {} - cut["all"] = {"cut":""} - cut["isolated"] = {"cut":"&&isol==1"} + cut["all"] = {"cut": ""} + cut["isolated"] = {"cut": "&&isol==1"} if not smog: - cut["close"] = {"cut":"&&isol==0"} + cut["close"] = {"cut": "&&isol==0"} if multi: - cut["1st"] = {"cut":"&&multimc==1"} - cut["2nd"] = {"cut":"&&multimc==2"} - cut["3rd"] = {"cut":"&&multimc==3"} - cut["4th"] = {"cut":"&&multimc==4"} - cut["5th"] = {"cut":"&&multimc==5"} + cut["1st"] = {"cut": "&&multimc==1"} + cut["2nd"] = {"cut": "&&multimc==2"} + cut["3rd"] = {"cut": "&&multimc==3"} + cut["4th"] = {"cut": "&&multimc==4"} + cut["5th"] = {"cut": "&&multimc==5"} return cut + def get_colors(): - return [kRed, kBlue, kOrange, kMagenta+2, kGreen+3, kCyan+2] + return [kRed, kBlue, kOrange, kMagenta + 2, kGreen + 3, kCyan + 2] + + def get_markers(): - return [21,20,22,23,24,25,26] + return [21, 20, 22, 23, 24, 25, 26] + + def get_labels(number_of_files): label = [] - for i in range(0,number_of_files): - label.append("PV Checker {number}".format(number=str(i+1))) - return label + for i in range(0, number_of_files): + label.append("PV Checker {number}".format(number=str(i + 1))) + return label -if __name__ == '__main__' : +if __name__ == '__main__': args = parser.parse_args() - path = os.getcwd()+"/utils/" + path = os.getcwd() + "/utils/" sys.path.append(os.path.abspath(path)) - + gROOT.SetBatch() - from pvutils import get_default_tree_name - from pvutils import get_files, get_trees, get_eff, plot_eff + from pvutils import get_default_tree_name + from pvutils import get_files, get_trees, get_eff, plot_eff from pvutils import set_legend markers = get_markers() colors = get_colors() label = args.label - if args.label=="": + if args.label == "": label = get_labels(len(args.fileName)) - + tr = {} - tf = {} + tf = {} tf = get_files(tf, label, args.fileName) tr = get_trees(tf, tr, label, args.treeName, True) eff_tr = {} eff_z = {} - eff_r = {} - hist_tr = {} + eff_r = {} + hist_tr = {} hist_z = {} - hist_r = {} + hist_r = {} - cat = get_categories(args.multi,args.smog) - eff_tr, hist_tr = get_eff(eff_tr,hist_tr,tr,"nrectrmc",colors,markers,args.smog,cat,label) - eff_z, hist_z = get_eff(eff_z, hist_z, tr, "zMC",colors,markers,args.smog,cat,label) - eff_r, hist_r = get_eff(eff_r, hist_r, tr, "rMC",colors,markers,args.smog,cat,label) + cat = get_categories(args.multi, args.smog) + eff_tr, hist_tr = get_eff(eff_tr, hist_tr, tr, "nrectrmc", colors, markers, + args.smog, cat, label) + eff_z, hist_z = get_eff(eff_z, hist_z, tr, "zMC", colors, markers, + args.smog, cat, label) + eff_r, hist_r = get_eff(eff_r, hist_r, tr, "rMC", colors, markers, + args.smog, cat, label) if args.dist: - legend = TLegend(0.15, 0.82, 0.88, 0.98 ) + legend = TLegend(0.15, 0.82, 0.88, 0.98) else: - legend = TLegend(0.15, 0.86, 0.88, 0.98 ) - legend = set_legend(legend, label, eff_tr, hist_tr, args.dist) - - plot_eff(eff_tr,hist_tr,args.prefix,"ntracks",cat,label, legend, args.dist) - plot_eff(eff_z, hist_z, args.prefix,"z", cat,label, legend, args.dist) - plot_eff(eff_r, hist_r, args.prefix,"r", cat,label, legend, args.dist) - + legend = TLegend(0.15, 0.86, 0.88, 0.98) + legend = set_legend(legend, label, eff_tr, hist_tr, args.dist) + plot_eff(eff_tr, hist_tr, args.prefix, "ntracks", cat, label, legend, + args.dist) + plot_eff(eff_z, hist_z, args.prefix, "z", cat, label, legend, args.dist) + plot_eff(eff_r, hist_r, args.prefix, "r", cat, label, legend, args.dist) diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 3ffa5e54b94..b04330e898a 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -11,52 +11,56 @@ from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors from ROOT import TCanvas -from ROOT import TGraphErrors, TLegend -from ROOT import gPad, kGray - +from ROOT import TGraphErrors, TLegend +from ROOT import gPad, kGray + + def get_default_tree_name(is_checker): if is_checker: return "PrimaryVertexChecker/101" else: return "VertexCompare/102" + def get_files(tf, label, files): - i = 0 + i = 0 for f in files: tf[label[i]] = TFile(f) - i+=1 + i += 1 return tf + def get_trees(tf, tr, label, trees, is_checker): - i=0 + i = 0 for lab in label: if len(tf) == len(trees): tr[lab] = tf[lab].Get(trees[i]) else: tr[lab] = tf[lab].Get(get_default_tree_name(is_checker)) - i+=1 - return tr + i += 1 + return tr + def set_style(graph, color, marker, xaxis, yaxis, title): - graph.SetTitle(""); - graph.SetLineColor(color); - graph.SetMarkerColor(color); - graph.SetMarkerSize(1.3); - graph.SetMarkerStyle(marker); + graph.SetTitle("") + graph.SetLineColor(color) + graph.SetMarkerColor(color) + graph.SetMarkerSize(1.3) + graph.SetMarkerStyle(marker) if type(graph) == TH1F: - graph.SetFillColor(color); + graph.SetFillColor(color) graph.SetLineWidth(4) - graph.GetYaxis().SetTitleOffset(0.85); - graph.GetYaxis().SetTitleSize(0.06); - graph.GetYaxis().SetLabelSize(0.06); - graph.GetXaxis().SetTitleSize(0.06); - graph.GetXaxis().SetLabelSize(0.06); - graph.GetXaxis().SetTitleFont(132); - graph.GetXaxis().SetLabelFont(132); - graph.GetYaxis().SetTitleFont(132); - graph.GetYaxis().SetLabelFont(132); - - if title != "": + graph.GetYaxis().SetTitleOffset(0.85) + graph.GetYaxis().SetTitleSize(0.06) + graph.GetYaxis().SetLabelSize(0.06) + graph.GetXaxis().SetTitleSize(0.06) + graph.GetXaxis().SetLabelSize(0.06) + graph.GetXaxis().SetTitleFont(132) + graph.GetXaxis().SetLabelFont(132) + graph.GetYaxis().SetTitleFont(132) + graph.GetYaxis().SetLabelFont(132) + + if title != "": graph.SetTitle(title) if xaxis != "": graph.GetXaxis().SetTitle(xaxis) @@ -64,63 +68,80 @@ def set_style(graph, color, marker, xaxis, yaxis, title): graph.GetYaxis().SetTitle(yaxis) -def get_range(dependence,smog): +def get_range(dependence, smog): if dependence == "zMC": if smog: return "(100,-500,200)" else: return "(50,-200,200)" elif dependence == "rMC": - return "(50,0.0,0.2)" + return "(50,0.0,0.2)" else: return "(66,4,70)" + def get_x_axis(dependence): - if dependence=="zMC": + if dependence == "zMC": return "z [mm]" elif dependence == "rMC": return "radial distance [mm]" else: - return "number of tracks in Primary Vertex" + return "number of tracks in Primary Vertex" -def get_eff(eff, hist, trees, dependence, colors, markers, smog, categories, label): +def get_eff(eff, hist, trees, dependence, colors, markers, smog, categories, + label): - hist_range = get_range(dependence,smog) + hist_range = get_range(dependence, smog) for cat in categories: eff[cat] = {} - hist[cat] = {} + hist[cat] = {} i = 0 for lab in label: var_den = '{dependence}>>hist{code}_{dep}_{cat}_{lab}{hist_range}'.format( - dependence=dependence,code="den",dep=dependence,cat=cat,lab=lab,hist_range=hist_range) + dependence=dependence, + code="den", + dep=dependence, + cat=cat, + lab=lab, + hist_range=hist_range) var_nom = '{dependence}>>hist{code}_{dep}_{cat}_{lab}{hist_range}'.format( - dependence=dependence,code="nom",dep=dependence,cat=cat,lab=lab,hist_range=hist_range) - - cut_den = 'nrectrmc>3 {cuts}'.format(cuts = categories[cat]["cut"]) + dependence=dependence, + code="nom", + dep=dependence, + cat=cat, + lab=lab, + hist_range=hist_range) + + cut_den = 'nrectrmc>3 {cuts}'.format(cuts=categories[cat]["cut"]) cut_nom = cut_den + ' && reco == 1' - - trees[lab].Draw(var_nom,cut_nom) - trees[lab].Draw(var_den,cut_den) - - h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format(code="nom",dep=dependence,cat=cat,lab=lab)) - h_den = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format(code="den",dep=dependence,cat=cat,lab=lab)) - + + trees[lab].Draw(var_nom, cut_nom) + trees[lab].Draw(var_den, cut_den) + + h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format( + code="nom", dep=dependence, cat=cat, lab=lab)) + h_den = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format( + code="den", dep=dependence, cat=cat, lab=lab)) + g_eff = TGraphAsymmErrors() - g_eff.Divide(h_nom,h_den,"cl=0.683 b(1,1) mode") - - set_style(h_nom, colors[i]-8, markers[i], get_x_axis(dependence),"Efficiency","") - set_style(h_den, kGray, markers[i], get_x_axis(dependence),"Efficiency","") + g_eff.Divide(h_nom, h_den, "cl=0.683 b(1,1) mode") + + set_style(h_nom, colors[i] - 8, markers[i], get_x_axis(dependence), + "Efficiency", "") + set_style(h_den, kGray, markers[i], get_x_axis(dependence), + "Efficiency", "") hist[cat][lab] = {} hist[cat][lab]["nom"] = h_nom hist[cat][lab]["den"] = h_den - set_style(g_eff, colors[i], markers[i], get_x_axis(dependence),"Efficiency","") + set_style(g_eff, colors[i], markers[i], get_x_axis(dependence), + "Efficiency", "") eff[cat][lab] = g_eff - i+=1 - - return eff, hist + i += 1 + + return eff, hist def set_legend(legend, label, gr, hist, dist): @@ -133,18 +154,22 @@ def set_legend(legend, label, gr, hist, dist): legend.SetNColumns(2) #legend.SetHeader("LHCb Preliminary"); for lab in label: - legend.AddEntry(gr["all"][lab],"Efficiency {lab}".format(lab=lab),"lep") + legend.AddEntry(gr["all"][lab], "Efficiency {lab}".format(lab=lab), + "lep") if dist: - legend.AddEntry(hist["all"][label[0]]["den"],"Distribution MC","f") + legend.AddEntry(hist["all"][label[0]]["den"], "Distribution MC", "f") for lab in label: - legend.AddEntry(hist["all"][lab]["nom"],"Distribution {lab}".format(lab=lab),"f") - + legend.AddEntry(hist["all"][lab]["nom"], + "Distribution {lab}".format(lab=lab), "f") + return legend + def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): - - for cat in categories: - can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence,cat=cat), "cR", 1200, 800) + + for cat in categories: + can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), + "cR", 1200, 800) can.SetBottomMargin(0.15) can.SetLeftMargin(0.12) can.SetTopMargin(0.15) @@ -152,31 +177,27 @@ def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): can.SetTopMargin(0.20) can.SetRightMargin(0.05) can.cd() - - eff[cat][label[0]].GetYaxis().SetRangeUser(0.0,1.1) + + eff[cat][label[0]].GetYaxis().SetRangeUser(0.0, 1.1) eff[cat][label[0]].Draw("AP") - + for lab in label: eff[cat][lab].Draw("SAME P") if dist: - histmax_den = 1.1*hist[cat][label[0]]["den"].GetMaximum() - scale = gPad.GetUymax()/histmax_den - hist[cat][label[0]]["den"].Scale(scale*0.75) - hist[cat][label[0]]["den"].Draw("hist SAME") - - for lab in label: - histmax_nom = 1.1*hist[cat][lab]["nom"].GetMaximum() - scale = gPad.GetUymax()/histmax_nom - hist[cat][lab]["nom"].Scale(scale*0.75) + histmax_den = 1.1 * hist[cat][label[0]]["den"].GetMaximum() + scale = gPad.GetUymax() / histmax_den + hist[cat][label[0]]["den"].Scale(scale * 0.75) + hist[cat][label[0]]["den"].Draw("hist SAME") + + for lab in label: + histmax_nom = 1.1 * hist[cat][lab]["nom"].GetMaximum() + scale = gPad.GetUymax() / histmax_nom + hist[cat][lab]["nom"].Scale(scale * 0.75) hist[cat][lab]["nom"].Draw("SAME") - - legend.Draw("SAME") - - - - saveName = '{prefix}_{dependence}_{cat}.pdf'.format(prefix=prefix,dependence=dependence,cat=cat) - can.SaveAs(saveName) - + legend.Draw("SAME") + saveName = '{prefix}_{dependence}_{cat}.pdf'.format( + prefix=prefix, dependence=dependence, cat=cat) + can.SaveAs(saveName) -- GitLab From f3301342d7f623edf3cb776cf5de5b51012db209 Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Wed, 26 Feb 2020 10:30:00 +0100 Subject: [PATCH 32/54] adding description --- .../scripts/PrimaryVertexCheckerEfficiency.py | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index f05ccd397cb..d4692b031e6 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -10,6 +10,23 @@ ############################################################################### #!/usr/bin/python + +# The script for plotting PV efficinecy as the function +# of various distributions: nTracks, z, r. +# As input the NTuple created by hlt1_reco_pvchecker.py +# is needed. +# +# The efficency is calculated usig TGraphAsymmErrors +# and Bayesian error bars +# +# author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) +# date: 02/2020 +# +# Example of usage: +# ../../../run python PrimaryVertexCheckerEfficiency.py +# --file file1.root file2.root --label name1 name2 --dist +# + import os, sys import argparse import ROOT @@ -54,7 +71,12 @@ parser.add_argument( default="pv_eff", help='prefix for the plot name', ) - +parser.add_argument( + '--dir', + dest='directory', + default=os.getcwd(), + help='tree name to plot', +) def get_categories(multi, smog): cut = {} @@ -89,7 +111,7 @@ def get_labels(number_of_files): if __name__ == '__main__': args = parser.parse_args() - path = os.getcwd() + "/utils/" + path = args.directory + "/utils/" sys.path.append(os.path.abspath(path)) gROOT.SetBatch() -- GitLab From 6bce91dbd611a8c0a6c150f73683c1398e365ea7 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 26 Feb 2020 09:31:21 +0000 Subject: [PATCH 33/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/7343320 --- .../scripts/PrimaryVertexCheckerEfficiency.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index d4692b031e6..56f166169fd 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -10,20 +10,19 @@ ############################################################################### #!/usr/bin/python - -# The script for plotting PV efficinecy as the function -# of various distributions: nTracks, z, r. +# The script for plotting PV efficinecy as the function +# of various distributions: nTracks, z, r. # As input the NTuple created by hlt1_reco_pvchecker.py -# is needed. +# is needed. # # The efficency is calculated usig TGraphAsymmErrors # and Bayesian error bars # # author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) # date: 02/2020 -# +# # Example of usage: -# ../../../run python PrimaryVertexCheckerEfficiency.py +# ../../../run python PrimaryVertexCheckerEfficiency.py # --file file1.root file2.root --label name1 name2 --dist # @@ -78,6 +77,7 @@ parser.add_argument( help='tree name to plot', ) + def get_categories(multi, smog): cut = {} cut["all"] = {"cut": ""} -- GitLab From 4b88bdc36db582e6fef2074a24aedebc7a8b4449 Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Thu, 27 Feb 2020 09:50:32 +0100 Subject: [PATCH 34/54] very first scripts for plotting resol and pull, for now only global --- .../scripts/PrimaryVertexCheckerPull.py | 147 ++++++++++++++++++ .../scripts/PrimaryVertexCheckerResolution.py | 147 ++++++++++++++++++ Hlt/RecoConf/scripts/utils/pvutils.py | 133 +++++++++++++++- 3 files changed, 423 insertions(+), 4 deletions(-) create mode 100644 Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py create mode 100644 Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py new file mode 100644 index 00000000000..4c9e1f97df3 --- /dev/null +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -0,0 +1,147 @@ +############################################################################### +# (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +#!/usr/bin/python + +# The script for plotting PV efficinecy as the function +# of various distributions: nTracks, z, r. +# As input the NTuple created by hlt1_reco_pvchecker.py +# is needed. +# +# The efficency is calculated usig TGraphAsymmErrors +# and Bayesian error bars +# +# author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) +# date: 02/2020 +# +# Example of usage: +# ../../../run python PrimaryVertexCheckerPull.py +# --file file1.root file2.root --label name1 name2 +# + +import os, sys +import argparse +import ROOT + +from ROOT import TFile, TTree +from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray, kYellow +from ROOT import gROOT, TLegend + +parser = argparse.ArgumentParser() +parser.add_argument( + '--file', dest='fileName', default="", nargs='+', help='filename to plot') +parser.add_argument( + '--label', dest='label', default="", nargs='+', help='labels for files') +parser.add_argument( + '--tree', + dest='treeName', + default="", + nargs='+', + help='tree name to plot', +) +parser.add_argument( + '--smog', + dest='smog', + default=False, + action='store_true', + help='set true for SMOG') +parser.add_argument( + '--multi', + dest='multi', + default=False, + action='store_true', + help='add multiplicity plots') +parser.add_argument( + '--dist', + dest='dist', + default=False, + action='store_true', + help='plot distributions in the canvas') +parser.add_argument( + '--prefix', + dest='prefix', + default="pv_pull", + help='prefix for the plot name', +) +parser.add_argument( + '--dir', + dest='directory', + default=os.getcwd(), + help='tree name to plot', +) + + +def get_categories(multi, smog): + cut = {} + cut["all"] = {"cut": ""} + cut["isolated"] = {"cut": "&&isol==1"} + if not smog: + cut["close"] = {"cut": "&&isol==0"} + if multi: + cut["1st"] = {"cut": "&&multimc==1"} + cut["2nd"] = {"cut": "&&multimc==2"} + cut["3rd"] = {"cut": "&&multimc==3"} + cut["4th"] = {"cut": "&&multimc==4"} + cut["5th"] = {"cut": "&&multimc==5"} + + return cut + + +def get_colors(): + return [kRed, kBlue, kOrange, kMagenta, kGreen, kCyan] + + +def get_markers(): + return [21, 20, 22, 23, 24, 25, 26] + + +def get_labels(number_of_files): + label = [] + for i in range(0, number_of_files): + label.append("PV Checker {number}".format(number=str(i + 1))) + return label + + +if __name__ == '__main__': + args = parser.parse_args() + path = args.directory + "/utils/" + sys.path.append(os.path.abspath(path)) + + gROOT.SetBatch() + + from pvutils import get_default_tree_name + from pvutils import get_files, get_trees + from pvutils import set_legend, get_global, plot_comparison + + markers = get_markers() + colors = get_colors() + cat = get_categories(args.multi, args.smog) + label = args.label + if args.label == "": + label = get_labels(len(args.fileName)) + + tr = {} + tf = {} + tf = get_files(tf, label, args.fileName) + tr = get_trees(tf, tr, label, args.treeName, True) + + hist_x = {} + hist_y = {} + hist_z = {} + norm = True #to-do + hist_x = get_global(hist_x, tr, "pullx", "#Delta x / #sigma_{x}", "Candidates Normalized", colors, markers, cat, label) + hist_y = get_global(hist_y, tr, "pully", "#Delta y / #sigma_{y}", "Candidates Normalized", colors, markers, cat, label) + hist_z = get_global(hist_z, tr, "pullz", "#Delta z / #sigma_{z}", "Candidates Normalized", colors, markers, cat, label) + + plot_comparison(hist_x, args.prefix, "pullx", cat, label, colors, norm) + plot_comparison(hist_y, args.prefix, "pully", cat, label, colors, norm) + plot_comparison(hist_z, args.prefix, "pullz", cat, label, colors, norm) + + diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py new file mode 100644 index 00000000000..9ee3f4b1be0 --- /dev/null +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -0,0 +1,147 @@ +############################################################################### +# (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +#!/usr/bin/python + +# The script for plotting PV efficinecy as the function +# of various distributions: nTracks, z, r. +# As input the NTuple created by hlt1_reco_pvchecker.py +# is needed. +# +# The efficency is calculated usig TGraphAsymmErrors +# and Bayesian error bars +# +# author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) +# date: 02/2020 +# +# Example of usage: +# ../../../run python PrimaryVertexCheckerResolution.py +# --file file1.root file2.root --label name1 name2 +# + +import os, sys +import argparse +import ROOT + +from ROOT import TFile, TTree +from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray, kYellow +from ROOT import gROOT, TLegend + +parser = argparse.ArgumentParser() +parser.add_argument( + '--file', dest='fileName', default="", nargs='+', help='filename to plot') +parser.add_argument( + '--label', dest='label', default="", nargs='+', help='labels for files') +parser.add_argument( + '--tree', + dest='treeName', + default="", + nargs='+', + help='tree name to plot', +) +parser.add_argument( + '--smog', + dest='smog', + default=False, + action='store_true', + help='set true for SMOG') +parser.add_argument( + '--multi', + dest='multi', + default=False, + action='store_true', + help='add multiplicity plots') +parser.add_argument( + '--dist', + dest='dist', + default=False, + action='store_true', + help='plot distributions in the canvas') +parser.add_argument( + '--prefix', + dest='prefix', + default="pv_resol", + help='prefix for the plot name', +) +parser.add_argument( + '--dir', + dest='directory', + default=os.getcwd(), + help='tree name to plot', +) + + +def get_categories(multi, smog): + cut = {} + cut["all"] = {"cut": ""} + cut["isolated"] = {"cut": "&&isol==1"} + if not smog: + cut["close"] = {"cut": "&&isol==0"} + if multi: + cut["1st"] = {"cut": "&&multimc==1"} + cut["2nd"] = {"cut": "&&multimc==2"} + cut["3rd"] = {"cut": "&&multimc==3"} + cut["4th"] = {"cut": "&&multimc==4"} + cut["5th"] = {"cut": "&&multimc==5"} + + return cut + + +def get_colors(): + return [kRed, kBlue, kOrange, kMagenta, kGreen, kCyan] + + +def get_markers(): + return [21, 20, 22, 23, 24, 25, 26] + + +def get_labels(number_of_files): + label = [] + for i in range(0, number_of_files): + label.append("PV Checker {number}".format(number=str(i + 1))) + return label + + +if __name__ == '__main__': + args = parser.parse_args() + path = args.directory + "/utils/" + sys.path.append(os.path.abspath(path)) + + gROOT.SetBatch() + + from pvutils import get_default_tree_name + from pvutils import get_files, get_trees + from pvutils import set_legend, get_global, plot_comparison + + markers = get_markers() + colors = get_colors() + cat = get_categories(args.multi, args.smog) + label = args.label + if args.label == "": + label = get_labels(len(args.fileName)) + + tr = {} + tf = {} + tf = get_files(tf, label, args.fileName) + tr = get_trees(tf, tr, label, args.treeName, True) + + hist_x = {} + hist_y = {} + hist_z = {} + norm = True + hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", "Candidates Normalized", colors, markers, cat, label) + hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", "Candidates Normalized", colors, markers, cat, label) + hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", "Candidates Normalized", colors, markers, cat, label) + + plot_comparison(hist_x, args.prefix, "dx", cat, label, colors, norm) + plot_comparison(hist_y, args.prefix, "dy", cat, label, colors, norm) + plot_comparison(hist_z, args.prefix, "dz", cat, label, colors, norm) + + diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index b04330e898a..934a3d42f53 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -9,10 +9,17 @@ # or submit itself to any jurisdiction. # ############################################################################### +# The utils for processing output of the PrimaryVertexChecker output +# +# author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) +# date: 02/2020 +# + + from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors from ROOT import TCanvas from ROOT import TGraphErrors, TLegend -from ROOT import gPad, kGray +from ROOT import gPad, kGray, TLatex def get_default_tree_name(is_checker): @@ -47,10 +54,12 @@ def set_style(graph, color, marker, xaxis, yaxis, title): graph.SetMarkerColor(color) graph.SetMarkerSize(1.3) graph.SetMarkerStyle(marker) + graph.GetYaxis().SetTitleOffset(0.85) if type(graph) == TH1F: graph.SetFillColor(color) graph.SetLineWidth(4) - graph.GetYaxis().SetTitleOffset(0.85) + graph.SetStats(False) + graph.GetYaxis().SetTitleOffset(1.1) graph.GetYaxis().SetTitleSize(0.06) graph.GetYaxis().SetLabelSize(0.06) graph.GetXaxis().SetTitleSize(0.06) @@ -76,6 +85,12 @@ def get_range(dependence, smog): return "(50,-200,200)" elif dependence == "rMC": return "(50,0.0,0.2)" + elif (dependence == "dx" or dependence == "dy"): + return "(50,-0.10,0.10)" + elif dependence == "dz": + return "(50,-0.5,0.5)" + elif "err" in dependence or "pull" in dependence: + return "(50,-3.5,3.5)" else: return "(66,4,70)" @@ -114,7 +129,7 @@ def get_eff(eff, hist, trees, dependence, colors, markers, smog, categories, lab=lab, hist_range=hist_range) - cut_den = 'nrectrmc>3 {cuts}'.format(cuts=categories[cat]["cut"]) + cut_den = 'nrectrmc>=4 {cuts}'.format(cuts=categories[cat]["cut"]) cut_nom = cut_den + ' && reco == 1' trees[lab].Draw(var_nom, cut_nom) @@ -195,9 +210,119 @@ def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): scale = gPad.GetUymax() / histmax_nom hist[cat][lab]["nom"].Scale(scale * 0.75) hist[cat][lab]["nom"].Draw("SAME") - + + eff[cat][lab].Draw("SAME P") + legend.Draw("SAME") saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) can.SaveAs(saveName) + +def transfer_dependence(dep): + if dep == "pullx": + return "dx/errx" + elif dep == "pully": + return "dy/erry" + elif dep == "pullz": + return "dz/errz" + else: + return dep + +def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, categories, + label): + + hist_range = get_range(dependence, False) + dep = transfer_dependence(dependence) + + for cat in categories: + hist[cat] = {} + i = 0 + for lab in label: + var = '{dependence}>>hist_{dep}_{cat}_{lab}{hist_range}'.format( + dependence=dep, + dep=dependence, + cat=cat, + lab=lab, + hist_range=hist_range) + + cut = 'nrectrmc>=4 && reco == 1 {cuts}'.format(cuts=categories[cat]["cut"]) + + trees[lab].Draw(var, cut) + h = gDirectory.Get('hist_{dep}_{cat}_{lab}'.format(dep=dependence, cat=cat, lab=lab)) + if i == 0: + col = colors[i]-10 + else: + col = colors[i] + set_style(h, col, markers[i], x_axis, y_axis, "") + + hist[cat][lab] = h + i += 1 + + return hist + +def get_text_cor(): + return {"x":[0.17, 0.65, 0.17, 0.65], "y":[0.92,0.92,0.75,0.75]} + +def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, units ): + s = 1.0 + if scale: + s = 1000.0 + + u = "" + if units: + u = "[#mu m]" + + text.SetNDC() + text.SetTextFont(132); + text.SetTextColor(color) + text.DrawLatex(x,y*1.0,lab) + + text.DrawLatex(x,y*0.95, "#mu = {0:0.2f} #pm {1:0.2f} {unit}".format( + mean*1000.0, mean_err*1000.0,unit=u)) + text.DrawLatex(x,y*0.90, "#sigma = {0:0.2f} #pm {1:0.2f} {unit}".format( + rms*s, rms_err*s,unit=u)) + return text + + +def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): + + for cat in categories: + can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), + "cR", 1200, 800) + can.SetBottomMargin(0.15) + can.SetLeftMargin(0.15) + can.SetTopMargin(0.20) + can.SetRightMargin(0.05) + + can.cd() + cor = get_text_cor() + + hist[cat][label[0]].GetYaxis().SetRangeUser(0.0, hist[cat][label[0]].GetMaximum()*1.1) + scale = True + units = True + if "pull" in dependence: + scale = False + units = False + if norm: + hist[cat][label[0]].DrawNormalized("hist") + hist_max = hist[cat][label[0]].GetMaximum() + i = 0 + for lab in label: + hist[cat][lab].DrawNormalized("SAME PE") + text = TLatex() + text = set_text(text,colors[i],cor["x"][i],cor["y"][i],lab, + hist[cat][lab].GetMean(), hist[cat][lab].GetMeanError(), + hist[cat][lab].GetRMS(), hist[cat][lab].GetRMSError(), + scale,units) + i+=1 + + else: + hist[cat][label[0]].Draw("hist") + for lab in label: + hist[cat][lab].Draw("SAME PE") + + can.Update() + saveName = '{prefix}_{dependence}_{cat}.pdf'.format( + prefix=prefix, dependence=dependence, cat=cat) + can.SaveAs(saveName) -- GitLab From d8a690347d33b2b42b91f7a6ac954835839ab192 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Thu, 27 Feb 2020 08:51:49 +0000 Subject: [PATCH 35/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/7359521 --- .../scripts/PrimaryVertexCheckerPull.py | 23 ++--- .../scripts/PrimaryVertexCheckerResolution.py | 23 ++--- Hlt/RecoConf/scripts/utils/pvutils.py | 88 +++++++++++-------- 3 files changed, 73 insertions(+), 61 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 4c9e1f97df3..0e226d931be 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -132,16 +132,17 @@ if __name__ == '__main__': tf = get_files(tf, label, args.fileName) tr = get_trees(tf, tr, label, args.treeName, True) - hist_x = {} + hist_x = {} hist_y = {} hist_z = {} - norm = True #to-do - hist_x = get_global(hist_x, tr, "pullx", "#Delta x / #sigma_{x}", "Candidates Normalized", colors, markers, cat, label) - hist_y = get_global(hist_y, tr, "pully", "#Delta y / #sigma_{y}", "Candidates Normalized", colors, markers, cat, label) - hist_z = get_global(hist_z, tr, "pullz", "#Delta z / #sigma_{z}", "Candidates Normalized", colors, markers, cat, label) - - plot_comparison(hist_x, args.prefix, "pullx", cat, label, colors, norm) - plot_comparison(hist_y, args.prefix, "pully", cat, label, colors, norm) - plot_comparison(hist_z, args.prefix, "pullz", cat, label, colors, norm) - - + norm = True #to-do + hist_x = get_global(hist_x, tr, "pullx", "#Delta x / #sigma_{x}", + "Candidates Normalized", colors, markers, cat, label) + hist_y = get_global(hist_y, tr, "pully", "#Delta y / #sigma_{y}", + "Candidates Normalized", colors, markers, cat, label) + hist_z = get_global(hist_z, tr, "pullz", "#Delta z / #sigma_{z}", + "Candidates Normalized", colors, markers, cat, label) + + plot_comparison(hist_x, args.prefix, "pullx", cat, label, colors, norm) + plot_comparison(hist_y, args.prefix, "pully", cat, label, colors, norm) + plot_comparison(hist_z, args.prefix, "pullz", cat, label, colors, norm) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index 9ee3f4b1be0..e89588da0e6 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -132,16 +132,17 @@ if __name__ == '__main__': tf = get_files(tf, label, args.fileName) tr = get_trees(tf, tr, label, args.treeName, True) - hist_x = {} + hist_x = {} hist_y = {} hist_z = {} - norm = True - hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", "Candidates Normalized", colors, markers, cat, label) - hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", "Candidates Normalized", colors, markers, cat, label) - hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", "Candidates Normalized", colors, markers, cat, label) - - plot_comparison(hist_x, args.prefix, "dx", cat, label, colors, norm) - plot_comparison(hist_y, args.prefix, "dy", cat, label, colors, norm) - plot_comparison(hist_z, args.prefix, "dz", cat, label, colors, norm) - - + norm = True + hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", + "Candidates Normalized", colors, markers, cat, label) + hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", + "Candidates Normalized", colors, markers, cat, label) + hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", + "Candidates Normalized", colors, markers, cat, label) + + plot_comparison(hist_x, args.prefix, "dx", cat, label, colors, norm) + plot_comparison(hist_y, args.prefix, "dy", cat, label, colors, norm) + plot_comparison(hist_z, args.prefix, "dz", cat, label, colors, norm) diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 934a3d42f53..124731fe94f 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -10,11 +10,10 @@ ############################################################################### # The utils for processing output of the PrimaryVertexChecker output -# +# # author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) -# date: 02/2020 -# - +# date: 02/2020 +# from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors from ROOT import TCanvas @@ -210,30 +209,32 @@ def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): scale = gPad.GetUymax() / histmax_nom hist[cat][lab]["nom"].Scale(scale * 0.75) hist[cat][lab]["nom"].Draw("SAME") - + eff[cat][lab].Draw("SAME P") - + legend.Draw("SAME") saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) can.SaveAs(saveName) + def transfer_dependence(dep): if dep == "pullx": return "dx/errx" elif dep == "pully": return "dy/erry" elif dep == "pullz": - return "dz/errz" - else: - return dep + return "dz/errz" + else: + return dep + + +def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, + categories, label): -def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, categories, - label): - hist_range = get_range(dependence, False) - dep = transfer_dependence(dependence) + dep = transfer_dependence(dependence) for cat in categories: hist[cat] = {} @@ -245,13 +246,15 @@ def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, categor cat=cat, lab=lab, hist_range=hist_range) - - cut = 'nrectrmc>=4 && reco == 1 {cuts}'.format(cuts=categories[cat]["cut"]) - + + cut = 'nrectrmc>=4 && reco == 1 {cuts}'.format( + cuts=categories[cat]["cut"]) + trees[lab].Draw(var, cut) - h = gDirectory.Get('hist_{dep}_{cat}_{lab}'.format(dep=dependence, cat=cat, lab=lab)) + h = gDirectory.Get('hist_{dep}_{cat}_{lab}'.format( + dep=dependence, cat=cat, lab=lab)) if i == 0: - col = colors[i]-10 + col = colors[i] - 10 else: col = colors[i] set_style(h, col, markers[i], x_axis, y_axis, "") @@ -261,32 +264,37 @@ def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, categor return hist + def get_text_cor(): - return {"x":[0.17, 0.65, 0.17, 0.65], "y":[0.92,0.92,0.75,0.75]} + return {"x": [0.17, 0.65, 0.17, 0.65], "y": [0.92, 0.92, 0.75, 0.75]} + -def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, units ): +def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, + units): s = 1.0 if scale: s = 1000.0 - u = "" + u = "" if units: u = "[#mu m]" text.SetNDC() - text.SetTextFont(132); + text.SetTextFont(132) text.SetTextColor(color) - text.DrawLatex(x,y*1.0,lab) + text.DrawLatex(x, y * 1.0, lab) - text.DrawLatex(x,y*0.95, "#mu = {0:0.2f} #pm {1:0.2f} {unit}".format( - mean*1000.0, mean_err*1000.0,unit=u)) - text.DrawLatex(x,y*0.90, "#sigma = {0:0.2f} #pm {1:0.2f} {unit}".format( - rms*s, rms_err*s,unit=u)) - return text + text.DrawLatex( + x, y * 0.95, "#mu = {0:0.2f} #pm {1:0.2f} {unit}".format( + mean * 1000.0, mean_err * 1000.0, unit=u)) + text.DrawLatex( + x, y * 0.90, "#sigma = {0:0.2f} #pm {1:0.2f} {unit}".format( + rms * s, rms_err * s, unit=u)) + return text def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): - + for cat in categories: can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), "cR", 1200, 800) @@ -296,14 +304,15 @@ def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): can.SetRightMargin(0.05) can.cd() - cor = get_text_cor() + cor = get_text_cor() - hist[cat][label[0]].GetYaxis().SetRangeUser(0.0, hist[cat][label[0]].GetMaximum()*1.1) + hist[cat][label[0]].GetYaxis().SetRangeUser( + 0.0, hist[cat][label[0]].GetMaximum() * 1.1) scale = True units = True if "pull" in dependence: - scale = False - units = False + scale = False + units = False if norm: hist[cat][label[0]].DrawNormalized("hist") hist_max = hist[cat][label[0]].GetMaximum() @@ -311,18 +320,19 @@ def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): for lab in label: hist[cat][lab].DrawNormalized("SAME PE") text = TLatex() - text = set_text(text,colors[i],cor["x"][i],cor["y"][i],lab, - hist[cat][lab].GetMean(), hist[cat][lab].GetMeanError(), - hist[cat][lab].GetRMS(), hist[cat][lab].GetRMSError(), - scale,units) - i+=1 + text = set_text(text, colors[i], cor["x"][i], cor["y"][i], lab, + hist[cat][lab].GetMean(), + hist[cat][lab].GetMeanError(), + hist[cat][lab].GetRMS(), + hist[cat][lab].GetRMSError(), scale, units) + i += 1 else: hist[cat][label[0]].Draw("hist") for lab in label: hist[cat][lab].Draw("SAME PE") - can.Update() + can.Update() saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) can.SaveAs(saveName) -- GitLab From 42d66218a7d7ee6c1e6349a1505e653ac625042e Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Thu, 5 Mar 2020 11:30:18 +0100 Subject: [PATCH 36/54] adding dependence plot, restructurisation --- .../scripts/PrimaryVertexCheckerEfficiency.py | 72 ++--- .../scripts/PrimaryVertexCheckerPull.py | 93 ++++-- .../scripts/PrimaryVertexCheckerResolution.py | 98 ++++-- Hlt/RecoConf/scripts/utils/pvconfig.py | 136 ++++++++ Hlt/RecoConf/scripts/utils/pvutils.py | 306 ++++++++++-------- 5 files changed, 464 insertions(+), 241 deletions(-) create mode 100644 Hlt/RecoConf/scripts/utils/pvconfig.py diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index 56f166169fd..05ee126647e 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -78,29 +78,6 @@ parser.add_argument( ) -def get_categories(multi, smog): - cut = {} - cut["all"] = {"cut": ""} - cut["isolated"] = {"cut": "&&isol==1"} - if not smog: - cut["close"] = {"cut": "&&isol==0"} - if multi: - cut["1st"] = {"cut": "&&multimc==1"} - cut["2nd"] = {"cut": "&&multimc==2"} - cut["3rd"] = {"cut": "&&multimc==3"} - cut["4th"] = {"cut": "&&multimc==4"} - cut["5th"] = {"cut": "&&multimc==5"} - - return cut - - -def get_colors(): - return [kRed, kBlue, kOrange, kMagenta + 2, kGreen + 3, kCyan + 2] - - -def get_markers(): - return [21, 20, 22, 23, 24, 25, 26] - def get_labels(number_of_files): label = [] @@ -117,11 +94,14 @@ if __name__ == '__main__': gROOT.SetBatch() from pvutils import get_default_tree_name - from pvutils import get_files, get_trees, get_eff, plot_eff - from pvutils import set_legend + from pvutils import get_files, get_trees, get_eff, plot + + from pvconfig import get_variable_ranges + from pvconfig import get_style, get_categories + from pvconfig import set_legend - markers = get_markers() - colors = get_colors() + ranges = get_variable_ranges(args.smog) + style = get_style() label = args.label if args.label == "": @@ -132,28 +112,32 @@ if __name__ == '__main__': tf = get_files(tf, label, args.fileName) tr = get_trees(tf, tr, label, args.treeName, True) - eff_tr = {} - eff_z = {} - eff_r = {} - hist_tr = {} - hist_z = {} - hist_r = {} + eff = {} + eff["tracks"] = {} + eff["z"] = {} + eff["r"] = {} + hist = {} + hist["tracks"] = {} + hist["z"]={} + hist["r"]={} + cat = get_categories(args.multi, args.smog) - eff_tr, hist_tr = get_eff(eff_tr, hist_tr, tr, "nrectrmc", colors, markers, - args.smog, cat, label) - eff_z, hist_z = get_eff(eff_z, hist_z, tr, "zMC", colors, markers, - args.smog, cat, label) - eff_r, hist_r = get_eff(eff_r, hist_r, tr, "rMC", colors, markers, - args.smog, cat, label) + + eff["tracks"], hist["tracks"] = get_eff(eff["tracks"], hist["tracks"], tr, "nrectrmc", style, + ranges, cat, label) + eff["z"], hist["z"] = get_eff(eff["z"], hist["z"], tr, "zMC", style, + ranges, cat, label) + eff["r"], hist["r"] = get_eff(eff["r"], hist["r"], tr, "rMC", style, + ranges, cat, label) if args.dist: legend = TLegend(0.15, 0.82, 0.88, 0.98) else: legend = TLegend(0.15, 0.86, 0.88, 0.98) - legend = set_legend(legend, label, eff_tr, hist_tr, args.dist) + legend = set_legend(legend, label, eff["tracks"], "eff", hist["z"], args.dist) + - plot_eff(eff_tr, hist_tr, args.prefix, "ntracks", cat, label, legend, - args.dist) - plot_eff(eff_z, hist_z, args.prefix, "z", cat, label, legend, args.dist) - plot_eff(eff_r, hist_r, args.prefix, "r", cat, label, legend, args.dist) + plot(eff["tracks"], "eff", args.prefix, "ntracks", cat, label, legend, hist["tracks"], args.dist) + plot(eff["z"], "eff", args.prefix, "z", cat, label, legend, hist["z"], args.dist) + plot(eff["r"], "eff", args.prefix, "r", cat, label, legend, hist["r"], args.dist) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 0e226d931be..5c06da4eb87 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -78,30 +78,6 @@ parser.add_argument( ) -def get_categories(multi, smog): - cut = {} - cut["all"] = {"cut": ""} - cut["isolated"] = {"cut": "&&isol==1"} - if not smog: - cut["close"] = {"cut": "&&isol==0"} - if multi: - cut["1st"] = {"cut": "&&multimc==1"} - cut["2nd"] = {"cut": "&&multimc==2"} - cut["3rd"] = {"cut": "&&multimc==3"} - cut["4th"] = {"cut": "&&multimc==4"} - cut["5th"] = {"cut": "&&multimc==5"} - - return cut - - -def get_colors(): - return [kRed, kBlue, kOrange, kMagenta, kGreen, kCyan] - - -def get_markers(): - return [21, 20, 22, 23, 24, 25, 26] - - def get_labels(number_of_files): label = [] for i in range(0, number_of_files): @@ -119,9 +95,16 @@ if __name__ == '__main__': from pvutils import get_default_tree_name from pvutils import get_files, get_trees from pvutils import set_legend, get_global, plot_comparison + from pvutils import get_dependence + from pvutils import plot + + from pvconfig import get_variable_ranges + from pvconfig import get_style, get_categories + from pvconfig import get_y_axis - markers = get_markers() - colors = get_colors() + ranges = get_variable_ranges(args.smog) + style = get_style() + cat = get_categories(args.multi, args.smog) label = args.label if args.label == "": @@ -137,12 +120,58 @@ if __name__ == '__main__': hist_z = {} norm = True #to-do hist_x = get_global(hist_x, tr, "pullx", "#Delta x / #sigma_{x}", - "Candidates Normalized", colors, markers, cat, label) + "Candidates Normalized", style, ranges, cat, label) hist_y = get_global(hist_y, tr, "pully", "#Delta y / #sigma_{y}", - "Candidates Normalized", colors, markers, cat, label) + "Candidates Normalized", style, ranges, cat, label) hist_z = get_global(hist_z, tr, "pullz", "#Delta z / #sigma_{z}", - "Candidates Normalized", colors, markers, cat, label) + "Candidates Normalized", style, ranges, cat, label) + + plot_comparison(hist_x, args.prefix, "pullx", cat, label, style, norm) + plot_comparison(hist_y, args.prefix, "pully", cat, label, style, norm) + plot_comparison(hist_z, args.prefix, "pullz", cat, label, style, norm) + + + from ROOT import gEnv + gEnv.SetValue("Hist.Binning.1D.x","100") + + + graph = {} + graph["tracks"] = {} + graph["tracks"]["pullx"] = {} + graph["tracks"]["pully"] = {} + graph["tracks"]["pullz"] = {} + graph["tracks"]["pullx"] = get_dependence(graph["tracks"]["pullx"], tr, "pullx", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["pully"] = get_dependence(graph["tracks"]["pully"], tr, "pully", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["pullz"] = get_dependence(graph["tracks"]["pullz"], tr, "pullz", "nrectrmc", ranges, style, cat, label) + + legend = TLegend(0.15, 0.86, 0.88, 0.98) + legend = set_legend(legend, label, graph["tracks"]["pullz"], "sigma") + + plot(graph["tracks"]["pullx"], "mean", args.prefix+"_ntracks_mean", "pullx", cat, label, legend) + plot(graph["tracks"]["pullx"], "sigma", args.prefix+"_ntracks_sigma", "pullx", cat, label, legend) + + plot(graph["tracks"]["pully"], "mean", args.prefix+"_ntracks_mean", "pully", cat, label, legend) + plot(graph["tracks"]["pully"], "sigma", args.prefix+"_ntracks_sigma", "pully", cat, label, legend) + + plot(graph["tracks"]["pullz"], "mean", args.prefix+"_ntracks_mean", "pullz", cat, label, legend) + plot(graph["tracks"]["pullz"], "sigma", args.prefix+"_ntracks_sigma", "pullz", cat, label, legend) + + + graph["z"] = {} + graph["z"]["pullx"] = {} + graph["z"]["pully"] = {} + graph["z"]["pullz"] = {} + graph["z"]["pullx"] = get_dependence(graph["z"]["pullx"], tr, "pullx", "zMC", ranges, style, cat, label) + graph["z"]["pully"] = get_dependence(graph["z"]["pully"], tr, "pully", "zMC", ranges, style, cat, label) + graph["z"]["pullz"] = get_dependence(graph["z"]["pullz"], tr, "pullz", "zMC", ranges, style, cat, label) + + plot(graph["z"]["pullx"], "mean", args.prefix+"_z_mean", "pullx", cat, label, legend) + plot(graph["z"]["pullx"], "sigma", args.prefix+"_z_sigma", "pullx", cat, label, legend) + + plot(graph["z"]["pully"], "mean", args.prefix+"_z_mean", "pully", cat, label, legend) + plot(graph["z"]["pully"], "sigma", args.prefix+"_z_sigma", "pully", cat, label, legend) + + plot(graph["z"]["pullz"], "mean", args.prefix+"_z_mean", "pullz", cat, label, legend) + plot(graph["z"]["pullz"], "sigma", args.prefix+"_z_sigma", "pullz", cat, label, legend) + - plot_comparison(hist_x, args.prefix, "pullx", cat, label, colors, norm) - plot_comparison(hist_y, args.prefix, "pully", cat, label, colors, norm) - plot_comparison(hist_z, args.prefix, "pullz", cat, label, colors, norm) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index e89588da0e6..119963274c0 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -78,34 +78,10 @@ parser.add_argument( ) -def get_categories(multi, smog): - cut = {} - cut["all"] = {"cut": ""} - cut["isolated"] = {"cut": "&&isol==1"} - if not smog: - cut["close"] = {"cut": "&&isol==0"} - if multi: - cut["1st"] = {"cut": "&&multimc==1"} - cut["2nd"] = {"cut": "&&multimc==2"} - cut["3rd"] = {"cut": "&&multimc==3"} - cut["4th"] = {"cut": "&&multimc==4"} - cut["5th"] = {"cut": "&&multimc==5"} - - return cut - - -def get_colors(): - return [kRed, kBlue, kOrange, kMagenta, kGreen, kCyan] - - -def get_markers(): - return [21, 20, 22, 23, 24, 25, 26] - - def get_labels(number_of_files): label = [] for i in range(0, number_of_files): - label.append("PV Checker {number}".format(number=str(i + 1))) + label.append("PVChecker{number}".format(number=str(i + 1))) return label @@ -119,14 +95,21 @@ if __name__ == '__main__': from pvutils import get_default_tree_name from pvutils import get_files, get_trees from pvutils import set_legend, get_global, plot_comparison + from pvutils import get_dependence + from pvutils import plot + + from pvconfig import get_variable_ranges + from pvconfig import get_style, get_categories - markers = get_markers() - colors = get_colors() + ranges = get_variable_ranges(args.smog) + style = get_style() + cat = get_categories(args.multi, args.smog) label = args.label if args.label == "": label = get_labels(len(args.fileName)) + tr = {} tf = {} tf = get_files(tf, label, args.fileName) @@ -136,13 +119,60 @@ if __name__ == '__main__': hist_y = {} hist_z = {} norm = True + + hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", - "Candidates Normalized", colors, markers, cat, label) + "Candidates Normalized", style, ranges, cat, label) hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", - "Candidates Normalized", colors, markers, cat, label) + "Candidates Normalized", style, ranges, cat, label) hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", - "Candidates Normalized", colors, markers, cat, label) - - plot_comparison(hist_x, args.prefix, "dx", cat, label, colors, norm) - plot_comparison(hist_y, args.prefix, "dy", cat, label, colors, norm) - plot_comparison(hist_z, args.prefix, "dz", cat, label, colors, norm) + "Candidates Normalized", style, ranges, cat, label) + + plot_comparison(hist_x, args.prefix, "dx", cat, label, style, norm) + plot_comparison(hist_y, args.prefix, "dy", cat, label, style, norm) + plot_comparison(hist_z, args.prefix, "dz", cat, label, style, norm) + + + from ROOT import gEnv + gEnv.SetValue("Hist.Binning.1D.x","100") + + graph = {} + graph["tracks"] = {} + graph["tracks"]["dx"] = {} + graph["tracks"]["dy"] = {} + graph["tracks"]["dz"] = {} + graph["tracks"]["dx"] = get_dependence(graph["tracks"]["dx"], tr, "dx", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dy"] = get_dependence(graph["tracks"]["dy"], tr, "dy", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dz"] = get_dependence(graph["tracks"]["dz"], tr, "dz", "nrectrmc", ranges, style, cat, label) + + legend = TLegend(0.15, 0.86, 0.88, 0.98) + legend = set_legend(legend, label, graph["tracks"]["dz"], "sigma") + + plot(graph["tracks"]["dx"], "mean", args.prefix+"_ntracks_mean", "dx", cat, label, legend) + plot(graph["tracks"]["dx"], "sigma", args.prefix+"_ntracks_sigma", "dx", cat, label, legend) + + plot(graph["tracks"]["dy"], "mean", args.prefix+"_ntracks_mean", "dy", cat, label, legend) + plot(graph["tracks"]["dy"], "sigma", args.prefix+"_ntracks_sigma", "dy", cat, label, legend) + + plot(graph["tracks"]["dz"], "mean", args.prefix+"_ntracks_mean", "dz", cat, label, legend) + plot(graph["tracks"]["dz"], "sigma", args.prefix+"_ntracks_sigma", "dz", cat, label, legend) + + + graph["z"] = {} + graph["z"]["dx"] = {} + graph["z"]["dy"] = {} + graph["z"]["dz"] = {} + graph["z"]["dx"] = get_dependence(graph["z"]["dx"], tr, "dx", "zMC", ranges, style, cat, label) + graph["z"]["dy"] = get_dependence(graph["z"]["dy"], tr, "dy", "zMC", ranges, style, cat, label) + graph["z"]["dz"] = get_dependence(graph["z"]["dz"], tr, "dz", "zMC", ranges, style, cat, label) + + plot(graph["z"]["dx"], "mean", args.prefix+"_z_mean", "dx", cat, label, legend) + plot(graph["z"]["dx"], "sigma", args.prefix+"_z_sigma", "dx", cat, label, legend) + + plot(graph["z"]["dy"], "mean", args.prefix+"_z_mean", "dy", cat, label, legend) + plot(graph["z"]["dy"], "sigma", args.prefix+"_z_sigma", "dy", cat, label, legend) + + plot(graph["z"]["dz"], "mean", args.prefix+"_z_mean", "dz", cat, label, legend) + plot(graph["z"]["dz"], "sigma", args.prefix+"_z_sigma", "dz", cat, label, legend) + + diff --git a/Hlt/RecoConf/scripts/utils/pvconfig.py b/Hlt/RecoConf/scripts/utils/pvconfig.py new file mode 100644 index 00000000000..0b7f6890670 --- /dev/null +++ b/Hlt/RecoConf/scripts/utils/pvconfig.py @@ -0,0 +1,136 @@ +############################################################################### +# (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +#!/usr/bin/python + +from ROOT import TH1F, TLegend +from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray, kYellow + +def get_categories(multi, smog): + cut = {} + cut["all"] = {"cut": ""} +# cut["isolated"] = {"cut": "&&isol==1"} +# if not smog: +# cut["close"] = {"cut": "&&isol==0"} + if multi: + cut["1st"] = {"cut": "&&multimc==1"} + cut["2nd"] = {"cut": "&&multimc==2"} + cut["3rd"] = {"cut": "&&multimc==3"} + cut["4th"] = {"cut": "&&multimc==4"} + cut["5th"] = {"cut": "&&multimc==5"} + + return cut + + +def get_style(): + return {"color" :[kRed, kBlue, kOrange, kMagenta, kGreen, kCyan], + "marker":[21, 20, 22, 23, 24, 25 ]} + +def get_default_tree_name(is_checker): + if is_checker: + return "PrimaryVertexChecker/101" + else: + return "VertexCompare/102" + +def transfer_variable(dep): + dictionary = {"pullx":"dx/errx", + "pully":"dy/erry", + "pullz":"dz/errz", + "dx":"dx", + "dy":"dy", + "dz":"dz", } + return dictionary[dep] + +def get_variable_ranges(smog): + dictionary = {"zMC" :{"bins":50, "min":-200, "max":200}, + "rMC" :{"bins":50, "min":0.0, "max":0.2}, + "dx" :{"bins":50, "min":-0.10, "max":0.10}, + "dy" :{"bins":50, "min":-0.10, "max":0.10}, + "dz" :{"bins":50, "min":-0.40, "max":0.40}, + "pullx" :{"bins":50, "min":-3.50, "max":3.50}, + "pully" :{"bins":50, "min":-3.50, "max":3.50}, + "pullz" :{"bins":50, "min":-3.50, "max":3.50}, + "nrectrmc":{"bins":66, "min":4.0, "max":70.0}} + if smog: + dictionary["zMC"] = {"bins":100,"min":-500, "max":200} + + return dictionary + +def get_y_axis(dependence): + dictionary = {"dx":"Resolution #Delta x [#mu m]", + "dy":"Resolution #Delta y [#mu m]", + "dz":"Resolution #Delta z [#mu m]", + "pullx":"Pull #Delta x/#sigma_{x}", + "pully":"Pull #Delta y/#sigma_{y}", + "pullz":"Pull #Delta z/#sigma_{z}"} + return dictionary[dependence] + +def get_x_axis(dependence): + dictionary= {"zMC":"z [mm]", + "rMC":"radial distance [mm]", + "nrectrmc":"number of tracks in Primary Vertex"} + return dictionary[dependence] + +def set_style(graph, color, marker, xaxis, yaxis, title): + graph.SetTitle("") + graph.SetLineColor(color) + graph.SetMarkerColor(color) + graph.SetMarkerSize(1.3) + graph.SetMarkerStyle(marker) + graph.GetYaxis().SetTitleOffset(0.85) + if type(graph) == TH1F: + graph.SetFillColor(color) + graph.SetLineWidth(1) + graph.SetStats(False) + graph.GetYaxis().SetTitleOffset(1.1) + graph.GetYaxis().SetTitleSize(0.06) + graph.GetYaxis().SetLabelSize(0.06) + graph.GetXaxis().SetTitleSize(0.06) + graph.GetXaxis().SetLabelSize(0.06) + graph.GetXaxis().SetTitleFont(132) + graph.GetXaxis().SetLabelFont(132) + graph.GetYaxis().SetTitleFont(132) + graph.GetYaxis().SetLabelFont(132) + + if title != "": + graph.SetTitle(title) + if xaxis != "": + graph.GetXaxis().SetTitle(xaxis) + if yaxis != "": + graph.GetYaxis().SetTitle(yaxis) + +def set_legend(legend, label, gr, gr_type, + hist = None, dist = False): + legend.SetTextSize(0.04) + legend.SetTextFont(12) + legend.SetFillColor(4000) + legend.SetShadowColor(0) + legend.SetBorderSize(0) + legend.SetTextFont(132) + legend.SetNColumns(2) + for lab in label: + legend.AddEntry(gr["all"][lab][gr_type], "{lab}".format(lab=lab), + "lep") + if dist: + legend.AddEntry(hist["all"][label[0]]["den"], "Distribution MC", "f") + for lab in label: + legend.AddEntry(hist["all"][lab]["nom"], + "Distribution {lab}".format(lab=lab), "f") + + return legend + +def get_text_cor(): + return {"x": [0.17, 0.65, 0.17, 0.65], + "y": [0.92, 0.92, 0.75, 0.75]} + + + +def basic_cut(): + return "nrectrmc>=4 && dz < 2.0" diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 124731fe94f..d734f3e7a62 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -20,13 +20,15 @@ from ROOT import TCanvas from ROOT import TGraphErrors, TLegend from ROOT import gPad, kGray, TLatex +from pvconfig import get_default_tree_name +from pvconfig import transfer_variable +from pvconfig import get_x_axis, get_y_axis +from pvconfig import set_style +from pvconfig import set_legend +from pvconfig import get_text_cor +from pvconfig import basic_cut -def get_default_tree_name(is_checker): - if is_checker: - return "PrimaryVertexChecker/101" - else: - return "VertexCompare/102" - +from array import array def get_files(tf, label, files): i = 0 @@ -47,88 +49,33 @@ def get_trees(tf, tr, label, trees, is_checker): return tr -def set_style(graph, color, marker, xaxis, yaxis, title): - graph.SetTitle("") - graph.SetLineColor(color) - graph.SetMarkerColor(color) - graph.SetMarkerSize(1.3) - graph.SetMarkerStyle(marker) - graph.GetYaxis().SetTitleOffset(0.85) - if type(graph) == TH1F: - graph.SetFillColor(color) - graph.SetLineWidth(4) - graph.SetStats(False) - graph.GetYaxis().SetTitleOffset(1.1) - graph.GetYaxis().SetTitleSize(0.06) - graph.GetYaxis().SetLabelSize(0.06) - graph.GetXaxis().SetTitleSize(0.06) - graph.GetXaxis().SetLabelSize(0.06) - graph.GetXaxis().SetTitleFont(132) - graph.GetXaxis().SetLabelFont(132) - graph.GetYaxis().SetTitleFont(132) - graph.GetYaxis().SetLabelFont(132) - - if title != "": - graph.SetTitle(title) - if xaxis != "": - graph.GetXaxis().SetTitle(xaxis) - if yaxis != "": - graph.GetYaxis().SetTitle(yaxis) - - -def get_range(dependence, smog): - if dependence == "zMC": - if smog: - return "(100,-500,200)" - else: - return "(50,-200,200)" - elif dependence == "rMC": - return "(50,0.0,0.2)" - elif (dependence == "dx" or dependence == "dy"): - return "(50,-0.10,0.10)" - elif dependence == "dz": - return "(50,-0.5,0.5)" - elif "err" in dependence or "pull" in dependence: - return "(50,-3.5,3.5)" - else: - return "(66,4,70)" - - -def get_x_axis(dependence): - if dependence == "zMC": - return "z [mm]" - elif dependence == "rMC": - return "radial distance [mm]" - else: - return "number of tracks in Primary Vertex" - - -def get_eff(eff, hist, trees, dependence, colors, markers, smog, categories, - label): - - hist_range = get_range(dependence, smog) +def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): for cat in categories: eff[cat] = {} hist[cat] = {} i = 0 for lab in label: - var_den = '{dependence}>>hist{code}_{dep}_{cat}_{lab}{hist_range}'.format( + var_den = '{dependence}>>hist{code}_{dep}_{cat}_{lab}({bins},{mins},{maxs})'.format( dependence=dependence, code="den", dep=dependence, cat=cat, lab=lab, - hist_range=hist_range) - var_nom = '{dependence}>>hist{code}_{dep}_{cat}_{lab}{hist_range}'.format( + bins=ranges[dependence]["bins"], + mins=ranges[dependence]["min"], + maxs=ranges[dependence]["max"]) + var_nom = '{dependence}>>hist{code}_{dep}_{cat}_{lab}({bins},{mins},{maxs})'.format( dependence=dependence, code="nom", dep=dependence, cat=cat, lab=lab, - hist_range=hist_range) + bins=ranges[dependence]["bins"], + mins=ranges[dependence]["min"], + maxs=ranges[dependence]["max"]) - cut_den = 'nrectrmc>=4 {cuts}'.format(cuts=categories[cat]["cut"]) + cut_den = 'nrectrmc>=4 && dz < 2.0 {cuts}'.format(cuts=categories[cat]["cut"]) cut_nom = cut_den + ' && reco == 1' trees[lab].Draw(var_nom, cut_nom) @@ -142,47 +89,42 @@ def get_eff(eff, hist, trees, dependence, colors, markers, smog, categories, g_eff = TGraphAsymmErrors() g_eff.Divide(h_nom, h_den, "cl=0.683 b(1,1) mode") - set_style(h_nom, colors[i] - 8, markers[i], get_x_axis(dependence), + set_style(h_nom, style["color"][i] - 8, style["marker"][i], get_x_axis(dependence), "Efficiency", "") - set_style(h_den, kGray, markers[i], get_x_axis(dependence), + set_style(h_den, kGray, style["marker"][i], get_x_axis(dependence), "Efficiency", "") hist[cat][lab] = {} hist[cat][lab]["nom"] = h_nom hist[cat][lab]["den"] = h_den - set_style(g_eff, colors[i], markers[i], get_x_axis(dependence), + set_style(g_eff, style["color"][i], style["marker"][i], get_x_axis(dependence), "Efficiency", "") - eff[cat][lab] = g_eff + eff[cat][lab] = {} + eff[cat][lab]["eff"] = g_eff i += 1 return eff, hist - -def set_legend(legend, label, gr, hist, dist): - legend.SetTextSize(0.04) - legend.SetTextFont(12) - legend.SetFillColor(4000) - legend.SetShadowColor(0) - legend.SetBorderSize(0) - legend.SetTextFont(132) - legend.SetNColumns(2) - #legend.SetHeader("LHCb Preliminary"); +def find_max(gr, gr_type, label): + m = -999999.0 for lab in label: - legend.AddEntry(gr["all"][lab], "Efficiency {lab}".format(lab=lab), - "lep") - if dist: - legend.AddEntry(hist["all"][label[0]]["den"], "Distribution MC", "f") - for lab in label: - legend.AddEntry(hist["all"][lab]["nom"], - "Distribution {lab}".format(lab=lab), "f") + if ( gr[lab][gr_type].GetYaxis().GetXmax() > m ): + m = gr[lab][gr_type].GetYaxis().GetXmax() - return legend + return m +def find_min(gr, gr_type, label): + m =999999.0 + for lab in label: + if ( gr[lab][gr_type].GetYaxis().GetXmin() < m ): + m = gr[lab][gr_type].GetYaxis().GetXmin() + return m + -def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): +def plot(gr, gr_type, prefix, dependence, categories, label, legend=None, hist=None, dist=False): for cat in categories: - can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), + can = TCanvas('canvas_{depen}_{prefix}_{gr_type}_{cat}'.format(depen=dependence, prefix=prefix, gr_type=gr_type, cat=cat), "cR", 1200, 800) can.SetBottomMargin(0.15) can.SetLeftMargin(0.12) @@ -192,11 +134,20 @@ def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): can.SetRightMargin(0.05) can.cd() - eff[cat][label[0]].GetYaxis().SetRangeUser(0.0, 1.1) - eff[cat][label[0]].Draw("AP") + maximum = find_max(gr[cat],gr_type,label) + minimum = find_min(gr[cat],gr_type,label) + if ( abs(maximum) > abs(minimum) and minimum<0): + minimum = -maximum + + gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser(minimum*1.1, maximum*1.1) + if ( gr_type == "eff" ): + gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser(0.0, 1.1) + if ( gr_type == "sigma"): + gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser(0.0, maximum*1.1) + gr[cat][label[0]][gr_type].Draw("AP") for lab in label: - eff[cat][lab].Draw("SAME P") + gr[cat][lab][gr_type].Draw("SAME P") if dist: histmax_den = 1.1 * hist[cat][label[0]]["den"].GetMaximum() @@ -210,54 +161,47 @@ def plot_eff(eff, hist, prefix, dependence, categories, label, legend, dist): hist[cat][lab]["nom"].Scale(scale * 0.75) hist[cat][lab]["nom"].Draw("SAME") - eff[cat][lab].Draw("SAME P") + gr[cat][lab][gr_type].Draw("SAME P") - legend.Draw("SAME") + if legend: + legend.Draw("SAME") saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) can.SaveAs(saveName) -def transfer_dependence(dep): - if dep == "pullx": - return "dx/errx" - elif dep == "pully": - return "dy/erry" - elif dep == "pullz": - return "dz/errz" - else: - return dep - -def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, +def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, categories, label): - hist_range = get_range(dependence, False) - dep = transfer_dependence(dependence) + dep = transfer_variable(dependence) for cat in categories: hist[cat] = {} i = 0 for lab in label: - var = '{dependence}>>hist_{dep}_{cat}_{lab}{hist_range}'.format( + var = '{dependence}>>hist_{dep}_{cat}_{lab}({bins},{mins},{maxs})'.format( dependence=dep, dep=dependence, cat=cat, lab=lab, - hist_range=hist_range) + bins=ranges[dependence]["bins"], + mins=ranges[dependence]["min"], + maxs=ranges[dependence]["max"] + ) - cut = 'nrectrmc>=4 && reco == 1 {cuts}'.format( + cut = 'nrectrmc>=4 && dz < 2.0 && reco == 1 {cuts}'.format( cuts=categories[cat]["cut"]) trees[lab].Draw(var, cut) h = gDirectory.Get('hist_{dep}_{cat}_{lab}'.format( dep=dependence, cat=cat, lab=lab)) if i == 0: - col = colors[i] - 10 + col = style["color"][i] - 10 else: - col = colors[i] - set_style(h, col, markers[i], x_axis, y_axis, "") + col = style["color"][i] + set_style(h, col, style["marker"][i], x_axis, y_axis, "") hist[cat][lab] = h i += 1 @@ -265,19 +209,17 @@ def get_global(hist, trees, dependence, x_axis, y_axis, colors, markers, return hist -def get_text_cor(): - return {"x": [0.17, 0.65, 0.17, 0.65], "y": [0.92, 0.92, 0.75, 0.75]} - - def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, units): s = 1.0 if scale: s = 1000.0 - u = "" + ur = "" + um = "#times 10^{-3}" if units: - u = "[#mu m]" + ur = "[#mu m]" + um = "[#mu m]" text.SetNDC() text.SetTextFont(132) @@ -285,15 +227,15 @@ def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, text.DrawLatex(x, y * 1.0, lab) text.DrawLatex( - x, y * 0.95, "#mu = {0:0.2f} #pm {1:0.2f} {unit}".format( - mean * 1000.0, mean_err * 1000.0, unit=u)) + x, y * 0.95, "#mu = ({0:0.2f} #pm {1:0.2f}) {unit}".format( + mean * 1000.0, mean_err * 1000.0, unit=um)) text.DrawLatex( - x, y * 0.90, "#sigma = {0:0.2f} #pm {1:0.2f} {unit}".format( - rms * s, rms_err * s, unit=u)) + x, y * 0.90, "#sigma = ({0:0.2f} #pm {1:0.2f}) {unit}".format( + rms * s, rms_err * s, unit=ur)) return text -def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): +def plot_comparison(hist, prefix, dependence, categories, label, style, norm): for cat in categories: can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), @@ -320,7 +262,7 @@ def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): for lab in label: hist[cat][lab].DrawNormalized("SAME PE") text = TLatex() - text = set_text(text, colors[i], cor["x"][i], cor["y"][i], lab, + text = set_text(text, style["color"][i], cor["x"][i], cor["y"][i], lab, hist[cat][lab].GetMean(), hist[cat][lab].GetMeanError(), hist[cat][lab].GetRMS(), @@ -336,3 +278,105 @@ def plot_comparison(hist, prefix, dependence, categories, label, colors, norm): saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) can.SaveAs(saveName) + + +def get_robust_sigma(hist, resol): + + y = array('d',[0.]*3) + x = array('d',[0.]*3) + x[0] = 0.25 + x[1] = 0.50 + x[2] = 0.75 + + hist.GetQuantiles(3, y, x) + + _median = y[1] + _approxstdev = (y[2] - y[0]) / 1.34898; #factor gives correspondence between IQR and stdev for a Gaussian + mult = 4.0 + + histclone = hist.Clone() + nb = histclone.GetNbinsX() + + for i in range(1,nb+1): + if ((histclone.GetBinCenter(i) < (_median - _approxstdev * mult)) or (histclone.GetBinCenter(i) > (_median + _approxstdev * mult))): + histclone.SetBinContent(i, 0) + + if resol: + robustsigma = {"sigma": {"var":histclone.GetRMS()*1000.0, "err":histclone.GetRMSError()*1000.0}, + "mean": {"var":histclone.GetMean()*1000.0, "err":histclone.GetMeanError()*1000.0}} + + else: + robustsigma = {"sigma": {"var":histclone.GetRMS()*1.0, "err":histclone.GetRMSError()*1.0}, + "mean": {"var":histclone.GetMean(), "err":histclone.GetMeanError()}} + + return robustsigma; + +def get_dependence(graph, trees, variable, dependence, ranges, style, categories, label): + + var = transfer_variable(variable) + bin_width = (ranges[dependence]["max"]-ranges[dependence]["min"])/ranges[dependence]["bins"] + + resol = True + mean = "Mean [#mu m]" + if "pull" in variable: + resol = False + mean = "Mean" + + for cat in categories: + graph[cat] = {} + i = 0 + for lab in label: + graph[cat][lab] = {} + graph_rms = TGraphAsymmErrors(ranges[dependence]["bins"]) + graph_mean = TGraphAsymmErrors(ranges[dependence]["bins"]) + + bin_min = ranges[dependence]["min"] + for b in range(0,ranges[dependence]["bins"]): + + cut_bin = '{variable1}>={mins} && {variable2}<{maxs}'.format( + variable1 = dependence, + mins = bin_min, + variable2 = dependence, + maxs = bin_min+bin_width) + + hist_string = '{dependence}>>hist_{dep}_{cat}_{lab}_{number}'.format( + dependence=var, + dep=variable, + cat=cat, + lab=lab, + number=int(b), + ) + + cut = '{basic} && reco == 1 && {bin_cut} {cuts}'.format( + basic = basic_cut(), + bin_cut = cut_bin, + cuts=categories[cat]["cut"]) + + + a = trees[lab].Draw(hist_string, cut) + + bin_min += bin_width + + h = gDirectory.Get('hist_{dep}_{cat}_{lab}_{number}'.format( + dep=variable, + cat=cat, + lab=lab, + number=int(b) )) + + robust_sigma = get_robust_sigma(h, resol) + + graph_mean.SetPoint(b, bin_min+bin_width/2.0, robust_sigma["mean"]["var"]) + graph_mean.SetPointError(b, bin_width/2.0, bin_width/2.0, robust_sigma["mean"]["err"],robust_sigma["mean"]["err"]) + + graph_rms.SetPoint(b, bin_min+bin_width/2.0, robust_sigma["sigma"]["var"]) + graph_rms.SetPointError(b, bin_width/2.0, bin_width/2.0, robust_sigma["sigma"]["err"],robust_sigma["sigma"]["err"]) + + set_style(graph_rms, style["color"][i], style["marker"][i], get_x_axis(dependence), get_y_axis(variable), "") + set_style(graph_mean, style["color"][i], style["marker"][i], get_x_axis(dependence), mean, "") + + graph[cat][lab]["sigma"] = graph_rms + graph[cat][lab]["mean"] = graph_mean + i+=1 + + + return graph -- GitLab From 8607df6ec87ca6008b2f58d14a6d89298b135ce3 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Thu, 5 Mar 2020 10:34:53 +0000 Subject: [PATCH 37/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/7460832 --- .../scripts/PrimaryVertexCheckerEfficiency.py | 43 ++-- .../scripts/PrimaryVertexCheckerPull.py | 74 ++++--- .../scripts/PrimaryVertexCheckerResolution.py | 82 ++++---- Hlt/RecoConf/scripts/utils/pvconfig.py | 126 ++++++++---- Hlt/RecoConf/scripts/utils/pvutils.py | 185 +++++++++++------- 5 files changed, 316 insertions(+), 194 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index 05ee126647e..a8870f7bcfa 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -78,7 +78,6 @@ parser.add_argument( ) - def get_labels(number_of_files): label = [] for i in range(0, number_of_files): @@ -95,7 +94,7 @@ if __name__ == '__main__': from pvutils import get_default_tree_name from pvutils import get_files, get_trees, get_eff, plot - + from pvconfig import get_variable_ranges from pvconfig import get_style, get_categories from pvconfig import set_legend @@ -112,32 +111,36 @@ if __name__ == '__main__': tf = get_files(tf, label, args.fileName) tr = get_trees(tf, tr, label, args.treeName, True) - eff = {} + eff = {} eff["tracks"] = {} - eff["z"] = {} - eff["r"] = {} + eff["z"] = {} + eff["r"] = {} hist = {} hist["tracks"] = {} - hist["z"]={} - hist["r"]={} - + hist["z"] = {} + hist["r"] = {} + cat = get_categories(args.multi, args.smog) - eff["tracks"], hist["tracks"] = get_eff(eff["tracks"], hist["tracks"], tr, "nrectrmc", style, - ranges, cat, label) - eff["z"], hist["z"] = get_eff(eff["z"], hist["z"], tr, "zMC", style, - ranges, cat, label) - eff["r"], hist["r"] = get_eff(eff["r"], hist["r"], tr, "rMC", style, - ranges, cat, label) + eff["tracks"], hist["tracks"] = get_eff(eff["tracks"], hist["tracks"], tr, + "nrectrmc", style, ranges, cat, + label) + eff["z"], hist["z"] = get_eff(eff["z"], hist["z"], tr, "zMC", style, + ranges, cat, label) + eff["r"], hist["r"] = get_eff(eff["r"], hist["r"], tr, "rMC", style, + ranges, cat, label) if args.dist: legend = TLegend(0.15, 0.82, 0.88, 0.98) else: legend = TLegend(0.15, 0.86, 0.88, 0.98) - legend = set_legend(legend, label, eff["tracks"], "eff", hist["z"], args.dist) - - - plot(eff["tracks"], "eff", args.prefix, "ntracks", cat, label, legend, hist["tracks"], args.dist) - plot(eff["z"], "eff", args.prefix, "z", cat, label, legend, hist["z"], args.dist) - plot(eff["r"], "eff", args.prefix, "r", cat, label, legend, hist["r"], args.dist) + legend = set_legend(legend, label, eff["tracks"], "eff", hist["z"], + args.dist) + + plot(eff["tracks"], "eff", args.prefix, "ntracks", cat, label, legend, + hist["tracks"], args.dist) + plot(eff["z"], "eff", args.prefix, "z", cat, label, legend, hist["z"], + args.dist) + plot(eff["r"], "eff", args.prefix, "r", cat, label, legend, hist["r"], + args.dist) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 5c06da4eb87..6b6b2f7532d 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -100,11 +100,11 @@ if __name__ == '__main__': from pvconfig import get_variable_ranges from pvconfig import get_style, get_categories - from pvconfig import get_y_axis + from pvconfig import get_y_axis ranges = get_variable_ranges(args.smog) style = get_style() - + cat = get_categories(args.multi, args.smog) label = args.label if args.label == "": @@ -130,48 +130,64 @@ if __name__ == '__main__': plot_comparison(hist_y, args.prefix, "pully", cat, label, style, norm) plot_comparison(hist_z, args.prefix, "pullz", cat, label, style, norm) - from ROOT import gEnv - gEnv.SetValue("Hist.Binning.1D.x","100") - + gEnv.SetValue("Hist.Binning.1D.x", "100") graph = {} graph["tracks"] = {} graph["tracks"]["pullx"] = {} graph["tracks"]["pully"] = {} graph["tracks"]["pullz"] = {} - graph["tracks"]["pullx"] = get_dependence(graph["tracks"]["pullx"], tr, "pullx", "nrectrmc", ranges, style, cat, label) - graph["tracks"]["pully"] = get_dependence(graph["tracks"]["pully"], tr, "pully", "nrectrmc", ranges, style, cat, label) - graph["tracks"]["pullz"] = get_dependence(graph["tracks"]["pullz"], tr, "pullz", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["pullx"] = get_dependence(graph["tracks"]["pullx"], tr, + "pullx", "nrectrmc", ranges, + style, cat, label) + graph["tracks"]["pully"] = get_dependence(graph["tracks"]["pully"], tr, + "pully", "nrectrmc", ranges, + style, cat, label) + graph["tracks"]["pullz"] = get_dependence(graph["tracks"]["pullz"], tr, + "pullz", "nrectrmc", ranges, + style, cat, label) legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["pullz"], "sigma") - plot(graph["tracks"]["pullx"], "mean", args.prefix+"_ntracks_mean", "pullx", cat, label, legend) - plot(graph["tracks"]["pullx"], "sigma", args.prefix+"_ntracks_sigma", "pullx", cat, label, legend) + plot(graph["tracks"]["pullx"], "mean", args.prefix + "_ntracks_mean", + "pullx", cat, label, legend) + plot(graph["tracks"]["pullx"], "sigma", args.prefix + "_ntracks_sigma", + "pullx", cat, label, legend) - plot(graph["tracks"]["pully"], "mean", args.prefix+"_ntracks_mean", "pully", cat, label, legend) - plot(graph["tracks"]["pully"], "sigma", args.prefix+"_ntracks_sigma", "pully", cat, label, legend) - - plot(graph["tracks"]["pullz"], "mean", args.prefix+"_ntracks_mean", "pullz", cat, label, legend) - plot(graph["tracks"]["pullz"], "sigma", args.prefix+"_ntracks_sigma", "pullz", cat, label, legend) + plot(graph["tracks"]["pully"], "mean", args.prefix + "_ntracks_mean", + "pully", cat, label, legend) + plot(graph["tracks"]["pully"], "sigma", args.prefix + "_ntracks_sigma", + "pully", cat, label, legend) + plot(graph["tracks"]["pullz"], "mean", args.prefix + "_ntracks_mean", + "pullz", cat, label, legend) + plot(graph["tracks"]["pullz"], "sigma", args.prefix + "_ntracks_sigma", + "pullz", cat, label, legend) graph["z"] = {} graph["z"]["pullx"] = {} graph["z"]["pully"] = {} graph["z"]["pullz"] = {} - graph["z"]["pullx"] = get_dependence(graph["z"]["pullx"], tr, "pullx", "zMC", ranges, style, cat, label) - graph["z"]["pully"] = get_dependence(graph["z"]["pully"], tr, "pully", "zMC", ranges, style, cat, label) - graph["z"]["pullz"] = get_dependence(graph["z"]["pullz"], tr, "pullz", "zMC", ranges, style, cat, label) - - plot(graph["z"]["pullx"], "mean", args.prefix+"_z_mean", "pullx", cat, label, legend) - plot(graph["z"]["pullx"], "sigma", args.prefix+"_z_sigma", "pullx", cat, label, legend) - - plot(graph["z"]["pully"], "mean", args.prefix+"_z_mean", "pully", cat, label, legend) - plot(graph["z"]["pully"], "sigma", args.prefix+"_z_sigma", "pully", cat, label, legend) - - plot(graph["z"]["pullz"], "mean", args.prefix+"_z_mean", "pullz", cat, label, legend) - plot(graph["z"]["pullz"], "sigma", args.prefix+"_z_sigma", "pullz", cat, label, legend) - - + graph["z"]["pullx"] = get_dependence(graph["z"]["pullx"], tr, "pullx", + "zMC", ranges, style, cat, label) + graph["z"]["pully"] = get_dependence(graph["z"]["pully"], tr, "pully", + "zMC", ranges, style, cat, label) + graph["z"]["pullz"] = get_dependence(graph["z"]["pullz"], tr, "pullz", + "zMC", ranges, style, cat, label) + + plot(graph["z"]["pullx"], "mean", args.prefix + "_z_mean", "pullx", cat, + label, legend) + plot(graph["z"]["pullx"], "sigma", args.prefix + "_z_sigma", "pullx", cat, + label, legend) + + plot(graph["z"]["pully"], "mean", args.prefix + "_z_mean", "pully", cat, + label, legend) + plot(graph["z"]["pully"], "sigma", args.prefix + "_z_sigma", "pully", cat, + label, legend) + + plot(graph["z"]["pullz"], "mean", args.prefix + "_z_mean", "pullz", cat, + label, legend) + plot(graph["z"]["pullz"], "sigma", args.prefix + "_z_sigma", "pullz", cat, + label, legend) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index 119963274c0..7a753cf251e 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -95,21 +95,20 @@ if __name__ == '__main__': from pvutils import get_default_tree_name from pvutils import get_files, get_trees from pvutils import set_legend, get_global, plot_comparison - from pvutils import get_dependence - from pvutils import plot + from pvutils import get_dependence + from pvutils import plot from pvconfig import get_variable_ranges from pvconfig import get_style, get_categories - ranges = get_variable_ranges(args.smog) + ranges = get_variable_ranges(args.smog) style = get_style() - + cat = get_categories(args.multi, args.smog) label = args.label if args.label == "": label = get_labels(len(args.fileName)) - tr = {} tf = {} tf = get_files(tf, label, args.fileName) @@ -120,59 +119,72 @@ if __name__ == '__main__': hist_z = {} norm = True - hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", "Candidates Normalized", style, ranges, cat, label) hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", "Candidates Normalized", style, ranges, cat, label) hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", "Candidates Normalized", style, ranges, cat, label) - + plot_comparison(hist_x, args.prefix, "dx", cat, label, style, norm) plot_comparison(hist_y, args.prefix, "dy", cat, label, style, norm) plot_comparison(hist_z, args.prefix, "dz", cat, label, style, norm) - from ROOT import gEnv - gEnv.SetValue("Hist.Binning.1D.x","100") - + gEnv.SetValue("Hist.Binning.1D.x", "100") + graph = {} graph["tracks"] = {} graph["tracks"]["dx"] = {} graph["tracks"]["dy"] = {} graph["tracks"]["dz"] = {} - graph["tracks"]["dx"] = get_dependence(graph["tracks"]["dx"], tr, "dx", "nrectrmc", ranges, style, cat, label) - graph["tracks"]["dy"] = get_dependence(graph["tracks"]["dy"], tr, "dy", "nrectrmc", ranges, style, cat, label) - graph["tracks"]["dz"] = get_dependence(graph["tracks"]["dz"], tr, "dz", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dx"] = get_dependence( + graph["tracks"]["dx"], tr, "dx", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dy"] = get_dependence( + graph["tracks"]["dy"], tr, "dy", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dz"] = get_dependence( + graph["tracks"]["dz"], tr, "dz", "nrectrmc", ranges, style, cat, label) legend = TLegend(0.15, 0.86, 0.88, 0.98) - legend = set_legend(legend, label, graph["tracks"]["dz"], "sigma") + legend = set_legend(legend, label, graph["tracks"]["dz"], "sigma") - plot(graph["tracks"]["dx"], "mean", args.prefix+"_ntracks_mean", "dx", cat, label, legend) - plot(graph["tracks"]["dx"], "sigma", args.prefix+"_ntracks_sigma", "dx", cat, label, legend) - - plot(graph["tracks"]["dy"], "mean", args.prefix+"_ntracks_mean", "dy", cat, label, legend) - plot(graph["tracks"]["dy"], "sigma", args.prefix+"_ntracks_sigma", "dy", cat, label, legend) + plot(graph["tracks"]["dx"], "mean", args.prefix + "_ntracks_mean", "dx", + cat, label, legend) + plot(graph["tracks"]["dx"], "sigma", args.prefix + "_ntracks_sigma", "dx", + cat, label, legend) - plot(graph["tracks"]["dz"], "mean", args.prefix+"_ntracks_mean", "dz", cat, label, legend) - plot(graph["tracks"]["dz"], "sigma", args.prefix+"_ntracks_sigma", "dz", cat, label, legend) + plot(graph["tracks"]["dy"], "mean", args.prefix + "_ntracks_mean", "dy", + cat, label, legend) + plot(graph["tracks"]["dy"], "sigma", args.prefix + "_ntracks_sigma", "dy", + cat, label, legend) + plot(graph["tracks"]["dz"], "mean", args.prefix + "_ntracks_mean", "dz", + cat, label, legend) + plot(graph["tracks"]["dz"], "sigma", args.prefix + "_ntracks_sigma", "dz", + cat, label, legend) graph["z"] = {} graph["z"]["dx"] = {} graph["z"]["dy"] = {} graph["z"]["dz"] = {} - graph["z"]["dx"] = get_dependence(graph["z"]["dx"], tr, "dx", "zMC", ranges, style, cat, label) - graph["z"]["dy"] = get_dependence(graph["z"]["dy"], tr, "dy", "zMC", ranges, style, cat, label) - graph["z"]["dz"] = get_dependence(graph["z"]["dz"], tr, "dz", "zMC", ranges, style, cat, label) - - plot(graph["z"]["dx"], "mean", args.prefix+"_z_mean", "dx", cat, label, legend) - plot(graph["z"]["dx"], "sigma", args.prefix+"_z_sigma", "dx", cat, label, legend) - - plot(graph["z"]["dy"], "mean", args.prefix+"_z_mean", "dy", cat, label, legend) - plot(graph["z"]["dy"], "sigma", args.prefix+"_z_sigma", "dy", cat, label, legend) - - plot(graph["z"]["dz"], "mean", args.prefix+"_z_mean", "dz", cat, label, legend) - plot(graph["z"]["dz"], "sigma", args.prefix+"_z_sigma", "dz", cat, label, legend) - - + graph["z"]["dx"] = get_dependence(graph["z"]["dx"], tr, "dx", "zMC", + ranges, style, cat, label) + graph["z"]["dy"] = get_dependence(graph["z"]["dy"], tr, "dy", "zMC", + ranges, style, cat, label) + graph["z"]["dz"] = get_dependence(graph["z"]["dz"], tr, "dz", "zMC", + ranges, style, cat, label) + + plot(graph["z"]["dx"], "mean", args.prefix + "_z_mean", "dx", cat, label, + legend) + plot(graph["z"]["dx"], "sigma", args.prefix + "_z_sigma", "dx", cat, label, + legend) + + plot(graph["z"]["dy"], "mean", args.prefix + "_z_mean", "dy", cat, label, + legend) + plot(graph["z"]["dy"], "sigma", args.prefix + "_z_sigma", "dy", cat, label, + legend) + + plot(graph["z"]["dz"], "mean", args.prefix + "_z_mean", "dz", cat, label, + legend) + plot(graph["z"]["dz"], "sigma", args.prefix + "_z_sigma", "dz", cat, label, + legend) diff --git a/Hlt/RecoConf/scripts/utils/pvconfig.py b/Hlt/RecoConf/scripts/utils/pvconfig.py index 0b7f6890670..aa85884257c 100644 --- a/Hlt/RecoConf/scripts/utils/pvconfig.py +++ b/Hlt/RecoConf/scripts/utils/pvconfig.py @@ -13,12 +13,13 @@ from ROOT import TH1F, TLegend from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray, kYellow + def get_categories(multi, smog): cut = {} cut["all"] = {"cut": ""} -# cut["isolated"] = {"cut": "&&isol==1"} -# if not smog: -# cut["close"] = {"cut": "&&isol==0"} + # cut["isolated"] = {"cut": "&&isol==1"} + # if not smog: + # cut["close"] = {"cut": "&&isol==0"} if multi: cut["1st"] = {"cut": "&&multimc==1"} cut["2nd"] = {"cut": "&&multimc==2"} @@ -30,8 +31,11 @@ def get_categories(multi, smog): def get_style(): - return {"color" :[kRed, kBlue, kOrange, kMagenta, kGreen, kCyan], - "marker":[21, 20, 22, 23, 24, 25 ]} + return { + "color": [kRed, kBlue, kOrange, kMagenta, kGreen, kCyan], + "marker": [21, 20, 22, 23, 24, 25] + } + def get_default_tree_name(is_checker): if is_checker: @@ -39,45 +43,94 @@ def get_default_tree_name(is_checker): else: return "VertexCompare/102" + def transfer_variable(dep): - dictionary = {"pullx":"dx/errx", - "pully":"dy/erry", - "pullz":"dz/errz", - "dx":"dx", - "dy":"dy", - "dz":"dz", } + dictionary = { + "pullx": "dx/errx", + "pully": "dy/erry", + "pullz": "dz/errz", + "dx": "dx", + "dy": "dy", + "dz": "dz", + } return dictionary[dep] + def get_variable_ranges(smog): - dictionary = {"zMC" :{"bins":50, "min":-200, "max":200}, - "rMC" :{"bins":50, "min":0.0, "max":0.2}, - "dx" :{"bins":50, "min":-0.10, "max":0.10}, - "dy" :{"bins":50, "min":-0.10, "max":0.10}, - "dz" :{"bins":50, "min":-0.40, "max":0.40}, - "pullx" :{"bins":50, "min":-3.50, "max":3.50}, - "pully" :{"bins":50, "min":-3.50, "max":3.50}, - "pullz" :{"bins":50, "min":-3.50, "max":3.50}, - "nrectrmc":{"bins":66, "min":4.0, "max":70.0}} + dictionary = { + "zMC": { + "bins": 50, + "min": -200, + "max": 200 + }, + "rMC": { + "bins": 50, + "min": 0.0, + "max": 0.2 + }, + "dx": { + "bins": 50, + "min": -0.10, + "max": 0.10 + }, + "dy": { + "bins": 50, + "min": -0.10, + "max": 0.10 + }, + "dz": { + "bins": 50, + "min": -0.40, + "max": 0.40 + }, + "pullx": { + "bins": 50, + "min": -3.50, + "max": 3.50 + }, + "pully": { + "bins": 50, + "min": -3.50, + "max": 3.50 + }, + "pullz": { + "bins": 50, + "min": -3.50, + "max": 3.50 + }, + "nrectrmc": { + "bins": 66, + "min": 4.0, + "max": 70.0 + } + } if smog: - dictionary["zMC"] = {"bins":100,"min":-500, "max":200} - + dictionary["zMC"] = {"bins": 100, "min": -500, "max": 200} + return dictionary + def get_y_axis(dependence): - dictionary = {"dx":"Resolution #Delta x [#mu m]", - "dy":"Resolution #Delta y [#mu m]", - "dz":"Resolution #Delta z [#mu m]", - "pullx":"Pull #Delta x/#sigma_{x}", - "pully":"Pull #Delta y/#sigma_{y}", - "pullz":"Pull #Delta z/#sigma_{z}"} + dictionary = { + "dx": "Resolution #Delta x [#mu m]", + "dy": "Resolution #Delta y [#mu m]", + "dz": "Resolution #Delta z [#mu m]", + "pullx": "Pull #Delta x/#sigma_{x}", + "pully": "Pull #Delta y/#sigma_{y}", + "pullz": "Pull #Delta z/#sigma_{z}" + } return dictionary[dependence] + def get_x_axis(dependence): - dictionary= {"zMC":"z [mm]", - "rMC":"radial distance [mm]", - "nrectrmc":"number of tracks in Primary Vertex"} + dictionary = { + "zMC": "z [mm]", + "rMC": "radial distance [mm]", + "nrectrmc": "number of tracks in Primary Vertex" + } return dictionary[dependence] + def set_style(graph, color, marker, xaxis, yaxis, title): graph.SetTitle("") graph.SetLineColor(color) @@ -106,8 +159,8 @@ def set_style(graph, color, marker, xaxis, yaxis, title): if yaxis != "": graph.GetYaxis().SetTitle(yaxis) -def set_legend(legend, label, gr, gr_type, - hist = None, dist = False): + +def set_legend(legend, label, gr, gr_type, hist=None, dist=False): legend.SetTextSize(0.04) legend.SetTextFont(12) legend.SetFillColor(4000) @@ -126,11 +179,10 @@ def set_legend(legend, label, gr, gr_type, return legend + def get_text_cor(): - return {"x": [0.17, 0.65, 0.17, 0.65], - "y": [0.92, 0.92, 0.75, 0.75]} + return {"x": [0.17, 0.65, 0.17, 0.65], "y": [0.92, 0.92, 0.75, 0.75]} - def basic_cut(): - return "nrectrmc>=4 && dz < 2.0" + return "nrectrmc>=4 && dz < 2.0" diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index d734f3e7a62..5065d911ddf 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -20,7 +20,7 @@ from ROOT import TCanvas from ROOT import TGraphErrors, TLegend from ROOT import gPad, kGray, TLatex -from pvconfig import get_default_tree_name +from pvconfig import get_default_tree_name from pvconfig import transfer_variable from pvconfig import get_x_axis, get_y_axis from pvconfig import set_style @@ -30,6 +30,7 @@ from pvconfig import basic_cut from array import array + def get_files(tf, label, files): i = 0 for f in files: @@ -75,7 +76,8 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): mins=ranges[dependence]["min"], maxs=ranges[dependence]["max"]) - cut_den = 'nrectrmc>=4 && dz < 2.0 {cuts}'.format(cuts=categories[cat]["cut"]) + cut_den = 'nrectrmc>=4 && dz < 2.0 {cuts}'.format( + cuts=categories[cat]["cut"]) cut_nom = cut_den + ' && reco == 1' trees[lab].Draw(var_nom, cut_nom) @@ -89,43 +91,55 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): g_eff = TGraphAsymmErrors() g_eff.Divide(h_nom, h_den, "cl=0.683 b(1,1) mode") - set_style(h_nom, style["color"][i] - 8, style["marker"][i], get_x_axis(dependence), - "Efficiency", "") + set_style(h_nom, style["color"][i] - 8, style["marker"][i], + get_x_axis(dependence), "Efficiency", "") set_style(h_den, kGray, style["marker"][i], get_x_axis(dependence), "Efficiency", "") hist[cat][lab] = {} hist[cat][lab]["nom"] = h_nom hist[cat][lab]["den"] = h_den - set_style(g_eff, style["color"][i], style["marker"][i], get_x_axis(dependence), - "Efficiency", "") - eff[cat][lab] = {} + set_style(g_eff, style["color"][i], style["marker"][i], + get_x_axis(dependence), "Efficiency", "") + eff[cat][lab] = {} eff[cat][lab]["eff"] = g_eff i += 1 return eff, hist + def find_max(gr, gr_type, label): m = -999999.0 for lab in label: - if ( gr[lab][gr_type].GetYaxis().GetXmax() > m ): + if (gr[lab][gr_type].GetYaxis().GetXmax() > m): m = gr[lab][gr_type].GetYaxis().GetXmax() - return m + return m + def find_min(gr, gr_type, label): - m =999999.0 + m = 999999.0 for lab in label: - if ( gr[lab][gr_type].GetYaxis().GetXmin() < m ): + if (gr[lab][gr_type].GetYaxis().GetXmin() < m): m = gr[lab][gr_type].GetYaxis().GetXmin() return m - -def plot(gr, gr_type, prefix, dependence, categories, label, legend=None, hist=None, dist=False): + +def plot(gr, + gr_type, + prefix, + dependence, + categories, + label, + legend=None, + hist=None, + dist=False): for cat in categories: - can = TCanvas('canvas_{depen}_{prefix}_{gr_type}_{cat}'.format(depen=dependence, prefix=prefix, gr_type=gr_type, cat=cat), - "cR", 1200, 800) + can = TCanvas( + 'canvas_{depen}_{prefix}_{gr_type}_{cat}'.format( + depen=dependence, prefix=prefix, gr_type=gr_type, cat=cat), + "cR", 1200, 800) can.SetBottomMargin(0.15) can.SetLeftMargin(0.12) can.SetTopMargin(0.15) @@ -134,16 +148,18 @@ def plot(gr, gr_type, prefix, dependence, categories, label, legend=None, hist=N can.SetRightMargin(0.05) can.cd() - maximum = find_max(gr[cat],gr_type,label) - minimum = find_min(gr[cat],gr_type,label) - if ( abs(maximum) > abs(minimum) and minimum<0): + maximum = find_max(gr[cat], gr_type, label) + minimum = find_min(gr[cat], gr_type, label) + if (abs(maximum) > abs(minimum) and minimum < 0): minimum = -maximum - - gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser(minimum*1.1, maximum*1.1) - if ( gr_type == "eff" ): + + gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser( + minimum * 1.1, maximum * 1.1) + if (gr_type == "eff"): gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser(0.0, 1.1) - if ( gr_type == "sigma"): - gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser(0.0, maximum*1.1) + if (gr_type == "sigma"): + gr[cat][label[0]][gr_type].GetYaxis().SetRangeUser( + 0.0, maximum * 1.1) gr[cat][label[0]][gr_type].Draw("AP") for lab in label: @@ -171,7 +187,6 @@ def plot(gr, gr_type, prefix, dependence, categories, label, legend=None, hist=N can.SaveAs(saveName) - def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, categories, label): @@ -188,8 +203,7 @@ def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, lab=lab, bins=ranges[dependence]["bins"], mins=ranges[dependence]["min"], - maxs=ranges[dependence]["max"] - ) + maxs=ranges[dependence]["max"]) cut = 'nrectrmc>=4 && dz < 2.0 && reco == 1 {cuts}'.format( cuts=categories[cat]["cut"]) @@ -262,8 +276,8 @@ def plot_comparison(hist, prefix, dependence, categories, label, style, norm): for lab in label: hist[cat][lab].DrawNormalized("SAME PE") text = TLatex() - text = set_text(text, style["color"][i], cor["x"][i], cor["y"][i], lab, - hist[cat][lab].GetMean(), + text = set_text(text, style["color"][i], cor["x"][i], + cor["y"][i], lab, hist[cat][lab].GetMean(), hist[cat][lab].GetMeanError(), hist[cat][lab].GetRMS(), hist[cat][lab].GetRMSError(), scale, units) @@ -281,63 +295,85 @@ def plot_comparison(hist, prefix, dependence, categories, label, style, norm): def get_robust_sigma(hist, resol): - - y = array('d',[0.]*3) - x = array('d',[0.]*3) + + y = array('d', [0.] * 3) + x = array('d', [0.] * 3) x[0] = 0.25 x[1] = 0.50 x[2] = 0.75 hist.GetQuantiles(3, y, x) - + _median = y[1] - _approxstdev = (y[2] - y[0]) / 1.34898; #factor gives correspondence between IQR and stdev for a Gaussian + _approxstdev = (y[2] - y[0]) / 1.34898 + #factor gives correspondence between IQR and stdev for a Gaussian mult = 4.0 histclone = hist.Clone() nb = histclone.GetNbinsX() - for i in range(1,nb+1): - if ((histclone.GetBinCenter(i) < (_median - _approxstdev * mult)) or (histclone.GetBinCenter(i) > (_median + _approxstdev * mult))): + for i in range(1, nb + 1): + if ((histclone.GetBinCenter(i) < (_median - _approxstdev * mult)) + or (histclone.GetBinCenter(i) > + (_median + _approxstdev * mult))): histclone.SetBinContent(i, 0) if resol: - robustsigma = {"sigma": {"var":histclone.GetRMS()*1000.0, "err":histclone.GetRMSError()*1000.0}, - "mean": {"var":histclone.GetMean()*1000.0, "err":histclone.GetMeanError()*1000.0}} + robustsigma = { + "sigma": { + "var": histclone.GetRMS() * 1000.0, + "err": histclone.GetRMSError() * 1000.0 + }, + "mean": { + "var": histclone.GetMean() * 1000.0, + "err": histclone.GetMeanError() * 1000.0 + } + } else: - robustsigma = {"sigma": {"var":histclone.GetRMS()*1.0, "err":histclone.GetRMSError()*1.0}, - "mean": {"var":histclone.GetMean(), "err":histclone.GetMeanError()}} - - return robustsigma; + robustsigma = { + "sigma": { + "var": histclone.GetRMS() * 1.0, + "err": histclone.GetRMSError() * 1.0 + }, + "mean": { + "var": histclone.GetMean(), + "err": histclone.GetMeanError() + } + } -def get_dependence(graph, trees, variable, dependence, ranges, style, categories, label): - - var = transfer_variable(variable) - bin_width = (ranges[dependence]["max"]-ranges[dependence]["min"])/ranges[dependence]["bins"] + return robustsigma - resol = True + +def get_dependence(graph, trees, variable, dependence, ranges, style, + categories, label): + + var = transfer_variable(variable) + bin_width = (ranges[dependence]["max"] - + ranges[dependence]["min"]) / ranges[dependence]["bins"] + + resol = True mean = "Mean [#mu m]" if "pull" in variable: resol = False - mean = "Mean" + mean = "Mean" for cat in categories: graph[cat] = {} i = 0 for lab in label: graph[cat][lab] = {} - graph_rms = TGraphAsymmErrors(ranges[dependence]["bins"]) + graph_rms = TGraphAsymmErrors(ranges[dependence]["bins"]) graph_mean = TGraphAsymmErrors(ranges[dependence]["bins"]) bin_min = ranges[dependence]["min"] - for b in range(0,ranges[dependence]["bins"]): + for b in range(0, ranges[dependence]["bins"]): cut_bin = '{variable1}>={mins} && {variable2}<{maxs}'.format( - variable1 = dependence, - mins = bin_min, - variable2 = dependence, - maxs = bin_min+bin_width) + variable1=dependence, + mins=bin_min, + variable2=dependence, + maxs=bin_min + bin_width) hist_string = '{dependence}>>hist_{dep}_{cat}_{lab}_{number}'.format( dependence=var, @@ -346,37 +382,40 @@ def get_dependence(graph, trees, variable, dependence, ranges, style, categories lab=lab, number=int(b), ) - + cut = '{basic} && reco == 1 && {bin_cut} {cuts}'.format( - basic = basic_cut(), - bin_cut = cut_bin, + basic=basic_cut(), + bin_cut=cut_bin, cuts=categories[cat]["cut"]) - a = trees[lab].Draw(hist_string, cut) bin_min += bin_width - + h = gDirectory.Get('hist_{dep}_{cat}_{lab}_{number}'.format( - dep=variable, - cat=cat, - lab=lab, - number=int(b) )) + dep=variable, cat=cat, lab=lab, number=int(b))) robust_sigma = get_robust_sigma(h, resol) - - graph_mean.SetPoint(b, bin_min+bin_width/2.0, robust_sigma["mean"]["var"]) - graph_mean.SetPointError(b, bin_width/2.0, bin_width/2.0, robust_sigma["mean"]["err"],robust_sigma["mean"]["err"]) - - graph_rms.SetPoint(b, bin_min+bin_width/2.0, robust_sigma["sigma"]["var"]) - graph_rms.SetPointError(b, bin_width/2.0, bin_width/2.0, robust_sigma["sigma"]["err"],robust_sigma["sigma"]["err"]) - - set_style(graph_rms, style["color"][i], style["marker"][i], get_x_axis(dependence), get_y_axis(variable), "") - set_style(graph_mean, style["color"][i], style["marker"][i], get_x_axis(dependence), mean, "") + + graph_mean.SetPoint(b, bin_min + bin_width / 2.0, + robust_sigma["mean"]["var"]) + graph_mean.SetPointError(b, bin_width / 2.0, bin_width / 2.0, + robust_sigma["mean"]["err"], + robust_sigma["mean"]["err"]) + + graph_rms.SetPoint(b, bin_min + bin_width / 2.0, + robust_sigma["sigma"]["var"]) + graph_rms.SetPointError(b, bin_width / 2.0, bin_width / 2.0, + robust_sigma["sigma"]["err"], + robust_sigma["sigma"]["err"]) + + set_style(graph_rms, style["color"][i], style["marker"][i], + get_x_axis(dependence), get_y_axis(variable), "") + set_style(graph_mean, style["color"][i], style["marker"][i], + get_x_axis(dependence), mean, "") graph[cat][lab]["sigma"] = graph_rms graph[cat][lab]["mean"] = graph_mean - i+=1 - + i += 1 return graph -- GitLab From 947972d3eff8ed6cb717d8c1b25eff6613b2a651 Mon Sep 17 00:00:00 2001 From: Florian Reiss Date: Tue, 5 May 2020 22:38:52 +0200 Subject: [PATCH 38/54] updates to PV plotting scripts to create plots for figure document --- .../scripts/PrimaryVertexCheckerEfficiency.py | 14 +++- .../scripts/PrimaryVertexCheckerPull.py | 58 +++++++------- .../scripts/PrimaryVertexCheckerResolution.py | 60 +++++++++------ Hlt/RecoConf/scripts/utils/pvconfig.py | 2 +- Hlt/RecoConf/scripts/utils/pvutils.py | 75 ++++++++++++------- 5 files changed, 127 insertions(+), 82 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index a8870f7bcfa..bfc3151734f 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -77,6 +77,13 @@ parser.add_argument( help='tree name to plot', ) +parser.add_argument( + '--offset', + dest='offset', + default=0, + help='offset for plot colors', +) + def get_labels(number_of_files): label = [] @@ -89,6 +96,7 @@ if __name__ == '__main__': args = parser.parse_args() path = args.directory + "/utils/" sys.path.append(os.path.abspath(path)) + offset = int(args.offset) gROOT.SetBatch() @@ -125,11 +133,11 @@ if __name__ == '__main__': eff["tracks"], hist["tracks"] = get_eff(eff["tracks"], hist["tracks"], tr, "nrectrmc", style, ranges, cat, - label) + label, offset) eff["z"], hist["z"] = get_eff(eff["z"], hist["z"], tr, "zMC", style, - ranges, cat, label) + ranges, cat, label, offset) eff["r"], hist["r"] = get_eff(eff["r"], hist["r"], tr, "rMC", style, - ranges, cat, label) + ranges, cat, label, offset) if args.dist: legend = TLegend(0.15, 0.82, 0.88, 0.98) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 6b6b2f7532d..127154700bb 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -77,6 +77,13 @@ parser.add_argument( help='tree name to plot', ) +parser.add_argument( + '--offset', + dest='offset', + default=0, + help='offset for plot colors', +) + def get_labels(number_of_files): label = [] @@ -89,7 +96,7 @@ if __name__ == '__main__': args = parser.parse_args() path = args.directory + "/utils/" sys.path.append(os.path.abspath(path)) - + offset = int(args.offset) gROOT.SetBatch() from pvutils import get_default_tree_name @@ -120,15 +127,15 @@ if __name__ == '__main__': hist_z = {} norm = True #to-do hist_x = get_global(hist_x, tr, "pullx", "#Delta x / #sigma_{x}", - "Candidates Normalized", style, ranges, cat, label) + "Candidates Normalized", style, ranges, cat, label, offset) hist_y = get_global(hist_y, tr, "pully", "#Delta y / #sigma_{y}", - "Candidates Normalized", style, ranges, cat, label) + "Candidates Normalized", style, ranges, cat, label, offset) hist_z = get_global(hist_z, tr, "pullz", "#Delta z / #sigma_{z}", - "Candidates Normalized", style, ranges, cat, label) + "Candidates Normalized", style, ranges, cat, label, offset) - plot_comparison(hist_x, args.prefix, "pullx", cat, label, style, norm) - plot_comparison(hist_y, args.prefix, "pully", cat, label, style, norm) - plot_comparison(hist_z, args.prefix, "pullz", cat, label, style, norm) + plot_comparison(hist_x, args.prefix, "pullx", cat, label, style, norm, offset) + plot_comparison(hist_y, args.prefix, "pully", cat, label, style, norm, offset) + plot_comparison(hist_z, args.prefix, "pullz", cat, label, style, norm, offset) from ROOT import gEnv gEnv.SetValue("Hist.Binning.1D.x", "100") @@ -140,54 +147,55 @@ if __name__ == '__main__': graph["tracks"]["pullz"] = {} graph["tracks"]["pullx"] = get_dependence(graph["tracks"]["pullx"], tr, "pullx", "nrectrmc", ranges, - style, cat, label) + style, cat, label, offset) graph["tracks"]["pully"] = get_dependence(graph["tracks"]["pully"], tr, "pully", "nrectrmc", ranges, - style, cat, label) + style, cat, label, offset) graph["tracks"]["pullz"] = get_dependence(graph["tracks"]["pullz"], tr, "pullz", "nrectrmc", ranges, - style, cat, label) + style, cat, label, offset) legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["pullz"], "sigma") + labelpos=(0.75, 0.75,0.9,0.87) plot(graph["tracks"]["pullx"], "mean", args.prefix + "_ntracks_mean", - "pullx", cat, label, legend) + "pullx", cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["pullx"], "sigma", args.prefix + "_ntracks_sigma", - "pullx", cat, label, legend) + "pullx", cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["pully"], "mean", args.prefix + "_ntracks_mean", - "pully", cat, label, legend) + "pully", cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["pully"], "sigma", args.prefix + "_ntracks_sigma", - "pully", cat, label, legend) + "pully", cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["pullz"], "mean", args.prefix + "_ntracks_mean", - "pullz", cat, label, legend) + "pullz", cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["pullz"], "sigma", args.prefix + "_ntracks_sigma", - "pullz", cat, label, legend) + "pullz", cat, label, legend, labelpos=labelpos) graph["z"] = {} graph["z"]["pullx"] = {} graph["z"]["pully"] = {} graph["z"]["pullz"] = {} graph["z"]["pullx"] = get_dependence(graph["z"]["pullx"], tr, "pullx", - "zMC", ranges, style, cat, label) + "zMC", ranges, style, cat, label, offset) graph["z"]["pully"] = get_dependence(graph["z"]["pully"], tr, "pully", - "zMC", ranges, style, cat, label) + "zMC", ranges, style, cat, label, offset) graph["z"]["pullz"] = get_dependence(graph["z"]["pullz"], tr, "pullz", - "zMC", ranges, style, cat, label) + "zMC", ranges, style, cat, label, offset) plot(graph["z"]["pullx"], "mean", args.prefix + "_z_mean", "pullx", cat, - label, legend) + label, legend, labelpos=labelpos) plot(graph["z"]["pullx"], "sigma", args.prefix + "_z_sigma", "pullx", cat, - label, legend) + label, legend, labelpos=labelpos) plot(graph["z"]["pully"], "mean", args.prefix + "_z_mean", "pully", cat, - label, legend) + label, legend, labelpos=labelpos) plot(graph["z"]["pully"], "sigma", args.prefix + "_z_sigma", "pully", cat, - label, legend) + label, legend, labelpos=labelpos) plot(graph["z"]["pullz"], "mean", args.prefix + "_z_mean", "pullz", cat, - label, legend) + label, legend, labelpos=labelpos) plot(graph["z"]["pullz"], "sigma", args.prefix + "_z_sigma", "pullz", cat, - label, legend) + label, legend, labelpos=labelpos) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index 7a753cf251e..f195826d0df 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -77,6 +77,13 @@ parser.add_argument( help='tree name to plot', ) +parser.add_argument( + '--offset', + dest='offset', + default=0, + help='offset for plot colors', +) + def get_labels(number_of_files): label = [] @@ -89,6 +96,7 @@ if __name__ == '__main__': args = parser.parse_args() path = args.directory + "/utils/" sys.path.append(os.path.abspath(path)) + offset = int(args.offset) gROOT.SetBatch() @@ -120,15 +128,15 @@ if __name__ == '__main__': norm = True hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", - "Candidates Normalized", style, ranges, cat, label) + "Candidates Normalized", style, ranges, cat, label, offset) hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", - "Candidates Normalized", style, ranges, cat, label) + "Candidates Normalized", style, ranges, cat, label, offset) hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", - "Candidates Normalized", style, ranges, cat, label) + "Candidates Normalized", style, ranges, cat, label, offset) - plot_comparison(hist_x, args.prefix, "dx", cat, label, style, norm) - plot_comparison(hist_y, args.prefix, "dy", cat, label, style, norm) - plot_comparison(hist_z, args.prefix, "dz", cat, label, style, norm) + plot_comparison(hist_x, args.prefix, "dx", cat, label, style, norm, offset) + plot_comparison(hist_y, args.prefix, "dy", cat, label, style, norm, offset) + plot_comparison(hist_z, args.prefix, "dz", cat, label, style, norm, offset) from ROOT import gEnv gEnv.SetValue("Hist.Binning.1D.x", "100") @@ -139,52 +147,56 @@ if __name__ == '__main__': graph["tracks"]["dy"] = {} graph["tracks"]["dz"] = {} graph["tracks"]["dx"] = get_dependence( - graph["tracks"]["dx"], tr, "dx", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dx"], tr, "dx", "nrectrmc", ranges, style, cat, label, offset) graph["tracks"]["dy"] = get_dependence( - graph["tracks"]["dy"], tr, "dy", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dy"], tr, "dy", "nrectrmc", ranges, style, cat, label, offset) graph["tracks"]["dz"] = get_dependence( - graph["tracks"]["dz"], tr, "dz", "nrectrmc", ranges, style, cat, label) + graph["tracks"]["dz"], tr, "dz", "nrectrmc", ranges, style, cat, label, offset) legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["dz"], "sigma") + + labelpos=(0.73, 0.75,0.88,0.87) plot(graph["tracks"]["dx"], "mean", args.prefix + "_ntracks_mean", "dx", - cat, label, legend) + cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["dx"], "sigma", args.prefix + "_ntracks_sigma", "dx", - cat, label, legend) + cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["dy"], "mean", args.prefix + "_ntracks_mean", "dy", - cat, label, legend) + cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["dy"], "sigma", args.prefix + "_ntracks_sigma", "dy", - cat, label, legend) + cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["dz"], "mean", args.prefix + "_ntracks_mean", "dz", - cat, label, legend) + cat, label, legend, labelpos=labelpos) plot(graph["tracks"]["dz"], "sigma", args.prefix + "_ntracks_sigma", "dz", - cat, label, legend) + cat, label, legend, labelpos=labelpos) graph["z"] = {} graph["z"]["dx"] = {} graph["z"]["dy"] = {} graph["z"]["dz"] = {} graph["z"]["dx"] = get_dependence(graph["z"]["dx"], tr, "dx", "zMC", - ranges, style, cat, label) + ranges, style, cat, label, offset) graph["z"]["dy"] = get_dependence(graph["z"]["dy"], tr, "dy", "zMC", - ranges, style, cat, label) + ranges, style, cat, label, offset) graph["z"]["dz"] = get_dependence(graph["z"]["dz"], tr, "dz", "zMC", - ranges, style, cat, label) + ranges, style, cat, label, offset) + plot(graph["z"]["dx"], "mean", args.prefix + "_z_mean", "dx", cat, label, - legend) + legend, labelpos=labelpos) plot(graph["z"]["dx"], "sigma", args.prefix + "_z_sigma", "dx", cat, label, - legend) + legend, labelpos=labelpos) plot(graph["z"]["dy"], "mean", args.prefix + "_z_mean", "dy", cat, label, - legend) + legend, labelpos=labelpos) plot(graph["z"]["dy"], "sigma", args.prefix + "_z_sigma", "dy", cat, label, - legend) + legend, labelpos=labelpos) + plot(graph["z"]["dz"], "mean", args.prefix + "_z_mean", "dz", cat, label, - legend) + legend, labelpos=labelpos) plot(graph["z"]["dz"], "sigma", args.prefix + "_z_sigma", "dz", cat, label, - legend) + legend, labelpos=labelpos) diff --git a/Hlt/RecoConf/scripts/utils/pvconfig.py b/Hlt/RecoConf/scripts/utils/pvconfig.py index aa85884257c..09bccd2963f 100644 --- a/Hlt/RecoConf/scripts/utils/pvconfig.py +++ b/Hlt/RecoConf/scripts/utils/pvconfig.py @@ -175,7 +175,7 @@ def set_legend(legend, label, gr, gr_type, hist=None, dist=False): legend.AddEntry(hist["all"][label[0]]["den"], "Distribution MC", "f") for lab in label: legend.AddEntry(hist["all"][lab]["nom"], - "Distribution {lab}".format(lab=lab), "f") + "Distribution {lab}".format(lab=lab), "lep") return legend diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 5065d911ddf..02e0ab776a1 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -15,7 +15,7 @@ # date: 02/2020 # -from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors +from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors, TPaveText, gStyle from ROOT import TCanvas from ROOT import TGraphErrors, TLegend from ROOT import gPad, kGray, TLatex @@ -50,14 +50,14 @@ def get_trees(tf, tr, label, trees, is_checker): return tr -def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): +def get_eff(eff, hist, trees, dependence, style, ranges, categories, label, offset): for cat in categories: eff[cat] = {} hist[cat] = {} - i = 0 + i = offset for lab in label: - var_den = '{dependence}>>hist{code}_{dep}_{cat}_{lab}({bins},{mins},{maxs})'.format( + var_den = '{dependence}>>hist{code}_{dep}_{cat}_denom{i}({bins},{mins},{maxs})'.format( dependence=dependence, code="den", dep=dependence, @@ -65,8 +65,9 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): lab=lab, bins=ranges[dependence]["bins"], mins=ranges[dependence]["min"], - maxs=ranges[dependence]["max"]) - var_nom = '{dependence}>>hist{code}_{dep}_{cat}_{lab}({bins},{mins},{maxs})'.format( + maxs=ranges[dependence]["max"], + i=i) + var_nom = '{dependence}>>hist{code}_{dep}_{cat}_num{i}({bins},{mins},{maxs})'.format( dependence=dependence, code="nom", dep=dependence, @@ -74,7 +75,8 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): lab=lab, bins=ranges[dependence]["bins"], mins=ranges[dependence]["min"], - maxs=ranges[dependence]["max"]) + maxs=ranges[dependence]["max"], + i=i) cut_den = 'nrectrmc>=4 && dz < 2.0 {cuts}'.format( cuts=categories[cat]["cut"]) @@ -83,15 +85,15 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label): trees[lab].Draw(var_nom, cut_nom) trees[lab].Draw(var_den, cut_den) - h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format( - code="nom", dep=dependence, cat=cat, lab=lab)) - h_den = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}'.format( - code="den", dep=dependence, cat=cat, lab=lab)) + h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_num{i}'.format( + code="nom", dep=dependence, cat=cat, lab=lab, i=i)) + h_den = gDirectory.Get('hist{code}_{dep}_{cat}_denom{i}'.format( + code="den", dep=dependence, cat=cat, lab=lab, i=i)) g_eff = TGraphAsymmErrors() g_eff.Divide(h_nom, h_den, "cl=0.683 b(1,1) mode") - set_style(h_nom, style["color"][i] - 8, style["marker"][i], + set_style(h_nom, style["color"][i]-7, style["marker"][i]+4, get_x_axis(dependence), "Efficiency", "") set_style(h_den, kGray, style["marker"][i], get_x_axis(dependence), "Efficiency", "") @@ -133,7 +135,8 @@ def plot(gr, label, legend=None, hist=None, - dist=False): + dist=False, + labelpos=(0.75, 0.78,0.9,0.9)): for cat in categories: can = TCanvas( @@ -173,14 +176,21 @@ def plot(gr, for lab in label: histmax_nom = 1.1 * hist[cat][lab]["nom"].GetMaximum() - scale = gPad.GetUymax() / histmax_nom + #scale = gPad.GetUymax() / histmax_nom hist[cat][lab]["nom"].Scale(scale * 0.75) - hist[cat][lab]["nom"].Draw("SAME") + hist[cat][lab]["nom"].Draw("ep SAME") gr[cat][lab][gr_type].Draw("SAME P") if legend: legend.Draw("SAME") + pavetext = TPaveText(labelpos[0],labelpos[1],labelpos[2],labelpos[3], "NBNDC") + pavetext.AddText("LHCb simulation") + pavetext.SetFillColor(0) + pavetext.SetFillStyle(3000) + pavetext.SetTextSize(0.06) + pavetext.SetTextFont(132) + pavetext.Draw() saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) @@ -188,29 +198,30 @@ def plot(gr, def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, - categories, label): + categories, label, offset): dep = transfer_variable(dependence) for cat in categories: hist[cat] = {} - i = 0 + i = offset for lab in label: - var = '{dependence}>>hist_{dep}_{cat}_{lab}({bins},{mins},{maxs})'.format( + var = '{dependence}>>hist_{dep}_{cat}_{i}({bins},{mins},{maxs})'.format( dependence=dep, dep=dependence, cat=cat, lab=lab, bins=ranges[dependence]["bins"], mins=ranges[dependence]["min"], - maxs=ranges[dependence]["max"]) + maxs=ranges[dependence]["max"], + i=i) cut = 'nrectrmc>=4 && dz < 2.0 && reco == 1 {cuts}'.format( cuts=categories[cat]["cut"]) trees[lab].Draw(var, cut) - h = gDirectory.Get('hist_{dep}_{cat}_{lab}'.format( - dep=dependence, cat=cat, lab=lab)) + h = gDirectory.Get('hist_{dep}_{cat}_{i}'.format( + dep=dependence, cat=cat, lab=lab, i=i)) if i == 0: col = style["color"][i] - 10 else: @@ -249,7 +260,7 @@ def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, return text -def plot_comparison(hist, prefix, dependence, categories, label, style, norm): +def plot_comparison(hist, prefix, dependence, categories, label, style, norm, offset): for cat in categories: can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), @@ -272,7 +283,7 @@ def plot_comparison(hist, prefix, dependence, categories, label, style, norm): if norm: hist[cat][label[0]].DrawNormalized("hist") hist_max = hist[cat][label[0]].GetMaximum() - i = 0 + i = offset for lab in label: hist[cat][lab].DrawNormalized("SAME PE") text = TLatex() @@ -287,6 +298,12 @@ def plot_comparison(hist, prefix, dependence, categories, label, style, norm): hist[cat][label[0]].Draw("hist") for lab in label: hist[cat][lab].Draw("SAME PE") + pavetext = TPaveText(0.72, 0.77 - gStyle.GetPadTopMargin(), 0.87, 0.89 - gStyle.GetPadTopMargin(), "NBNDC") + pavetext.AddText("LHCb simulation") + pavetext.SetFillColor(0) + pavetext.SetTextSize(0.06) + pavetext.SetTextFont(132) + pavetext.Draw() can.Update() saveName = '{prefix}_{dependence}_{cat}.pdf'.format( @@ -346,7 +363,7 @@ def get_robust_sigma(hist, resol): def get_dependence(graph, trees, variable, dependence, ranges, style, - categories, label): + categories, label, offset): var = transfer_variable(variable) bin_width = (ranges[dependence]["max"] - @@ -360,7 +377,7 @@ def get_dependence(graph, trees, variable, dependence, ranges, style, for cat in categories: graph[cat] = {} - i = 0 + i = offset for lab in label: graph[cat][lab] = {} graph_rms = TGraphAsymmErrors(ranges[dependence]["bins"]) @@ -375,11 +392,11 @@ def get_dependence(graph, trees, variable, dependence, ranges, style, variable2=dependence, maxs=bin_min + bin_width) - hist_string = '{dependence}>>hist_{dep}_{cat}_{lab}_{number}'.format( + hist_string = '{dependence}>>hist_{dep}_{cat}_{i}_{number}'.format( dependence=var, dep=variable, cat=cat, - lab=lab, + i=i, number=int(b), ) @@ -392,8 +409,8 @@ def get_dependence(graph, trees, variable, dependence, ranges, style, bin_min += bin_width - h = gDirectory.Get('hist_{dep}_{cat}_{lab}_{number}'.format( - dep=variable, cat=cat, lab=lab, number=int(b))) + h = gDirectory.Get('hist_{dep}_{cat}_{i}_{number}'.format( + dep=variable, cat=cat, i=i, number=int(b))) robust_sigma = get_robust_sigma(h, resol) -- GitLab From 8badc17b321c36eb7c74010b066648d47db9636d Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 6 May 2020 08:20:23 +0000 Subject: [PATCH 39/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/8259820 --- .../scripts/PrimaryVertexCheckerPull.py | 167 ++++++++++++++---- .../scripts/PrimaryVertexCheckerResolution.py | 161 +++++++++++++---- Hlt/RecoConf/scripts/utils/pvutils.py | 16 +- 3 files changed, 264 insertions(+), 80 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 127154700bb..cf30de6cca3 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -127,15 +127,21 @@ if __name__ == '__main__': hist_z = {} norm = True #to-do hist_x = get_global(hist_x, tr, "pullx", "#Delta x / #sigma_{x}", - "Candidates Normalized", style, ranges, cat, label, offset) + "Candidates Normalized", style, ranges, cat, label, + offset) hist_y = get_global(hist_y, tr, "pully", "#Delta y / #sigma_{y}", - "Candidates Normalized", style, ranges, cat, label, offset) + "Candidates Normalized", style, ranges, cat, label, + offset) hist_z = get_global(hist_z, tr, "pullz", "#Delta z / #sigma_{z}", - "Candidates Normalized", style, ranges, cat, label, offset) + "Candidates Normalized", style, ranges, cat, label, + offset) - plot_comparison(hist_x, args.prefix, "pullx", cat, label, style, norm, offset) - plot_comparison(hist_y, args.prefix, "pully", cat, label, style, norm, offset) - plot_comparison(hist_z, args.prefix, "pullz", cat, label, style, norm, offset) + plot_comparison(hist_x, args.prefix, "pullx", cat, label, style, norm, + offset) + plot_comparison(hist_y, args.prefix, "pully", cat, label, style, norm, + offset) + plot_comparison(hist_z, args.prefix, "pullz", cat, label, style, norm, + offset) from ROOT import gEnv gEnv.SetValue("Hist.Binning.1D.x", "100") @@ -158,44 +164,131 @@ if __name__ == '__main__': legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["pullz"], "sigma") - labelpos=(0.75, 0.75,0.9,0.87) - plot(graph["tracks"]["pullx"], "mean", args.prefix + "_ntracks_mean", - "pullx", cat, label, legend, labelpos=labelpos) - plot(graph["tracks"]["pullx"], "sigma", args.prefix + "_ntracks_sigma", - "pullx", cat, label, legend, labelpos=labelpos) + labelpos = (0.75, 0.75, 0.9, 0.87) + plot( + graph["tracks"]["pullx"], + "mean", + args.prefix + "_ntracks_mean", + "pullx", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["tracks"]["pullx"], + "sigma", + args.prefix + "_ntracks_sigma", + "pullx", + cat, + label, + legend, + labelpos=labelpos) - plot(graph["tracks"]["pully"], "mean", args.prefix + "_ntracks_mean", - "pully", cat, label, legend, labelpos=labelpos) - plot(graph["tracks"]["pully"], "sigma", args.prefix + "_ntracks_sigma", - "pully", cat, label, legend, labelpos=labelpos) + plot( + graph["tracks"]["pully"], + "mean", + args.prefix + "_ntracks_mean", + "pully", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["tracks"]["pully"], + "sigma", + args.prefix + "_ntracks_sigma", + "pully", + cat, + label, + legend, + labelpos=labelpos) - plot(graph["tracks"]["pullz"], "mean", args.prefix + "_ntracks_mean", - "pullz", cat, label, legend, labelpos=labelpos) - plot(graph["tracks"]["pullz"], "sigma", args.prefix + "_ntracks_sigma", - "pullz", cat, label, legend, labelpos=labelpos) + plot( + graph["tracks"]["pullz"], + "mean", + args.prefix + "_ntracks_mean", + "pullz", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["tracks"]["pullz"], + "sigma", + args.prefix + "_ntracks_sigma", + "pullz", + cat, + label, + legend, + labelpos=labelpos) graph["z"] = {} graph["z"]["pullx"] = {} graph["z"]["pully"] = {} graph["z"]["pullz"] = {} graph["z"]["pullx"] = get_dependence(graph["z"]["pullx"], tr, "pullx", - "zMC", ranges, style, cat, label, offset) + "zMC", ranges, style, cat, label, + offset) graph["z"]["pully"] = get_dependence(graph["z"]["pully"], tr, "pully", - "zMC", ranges, style, cat, label, offset) + "zMC", ranges, style, cat, label, + offset) graph["z"]["pullz"] = get_dependence(graph["z"]["pullz"], tr, "pullz", - "zMC", ranges, style, cat, label, offset) - - plot(graph["z"]["pullx"], "mean", args.prefix + "_z_mean", "pullx", cat, - label, legend, labelpos=labelpos) - plot(graph["z"]["pullx"], "sigma", args.prefix + "_z_sigma", "pullx", cat, - label, legend, labelpos=labelpos) - - plot(graph["z"]["pully"], "mean", args.prefix + "_z_mean", "pully", cat, - label, legend, labelpos=labelpos) - plot(graph["z"]["pully"], "sigma", args.prefix + "_z_sigma", "pully", cat, - label, legend, labelpos=labelpos) - - plot(graph["z"]["pullz"], "mean", args.prefix + "_z_mean", "pullz", cat, - label, legend, labelpos=labelpos) - plot(graph["z"]["pullz"], "sigma", args.prefix + "_z_sigma", "pullz", cat, - label, legend, labelpos=labelpos) + "zMC", ranges, style, cat, label, + offset) + + plot( + graph["z"]["pullx"], + "mean", + args.prefix + "_z_mean", + "pullx", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["z"]["pullx"], + "sigma", + args.prefix + "_z_sigma", + "pullx", + cat, + label, + legend, + labelpos=labelpos) + + plot( + graph["z"]["pully"], + "mean", + args.prefix + "_z_mean", + "pully", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["z"]["pully"], + "sigma", + args.prefix + "_z_sigma", + "pully", + cat, + label, + legend, + labelpos=labelpos) + + plot( + graph["z"]["pullz"], + "mean", + args.prefix + "_z_mean", + "pullz", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["z"]["pullz"], + "sigma", + args.prefix + "_z_sigma", + "pullz", + cat, + label, + legend, + labelpos=labelpos) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index f195826d0df..e1bdce35d1c 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -128,11 +128,14 @@ if __name__ == '__main__': norm = True hist_x = get_global(hist_x, tr, "dx", "#Delta x [mm]", - "Candidates Normalized", style, ranges, cat, label, offset) + "Candidates Normalized", style, ranges, cat, label, + offset) hist_y = get_global(hist_y, tr, "dy", "#Delta y [mm]", - "Candidates Normalized", style, ranges, cat, label, offset) + "Candidates Normalized", style, ranges, cat, label, + offset) hist_z = get_global(hist_z, tr, "dz", "#Delta z [mm]", - "Candidates Normalized", style, ranges, cat, label, offset) + "Candidates Normalized", style, ranges, cat, label, + offset) plot_comparison(hist_x, args.prefix, "dx", cat, label, style, norm, offset) plot_comparison(hist_y, args.prefix, "dy", cat, label, style, norm, offset) @@ -146,32 +149,76 @@ if __name__ == '__main__': graph["tracks"]["dx"] = {} graph["tracks"]["dy"] = {} graph["tracks"]["dz"] = {} - graph["tracks"]["dx"] = get_dependence( - graph["tracks"]["dx"], tr, "dx", "nrectrmc", ranges, style, cat, label, offset) - graph["tracks"]["dy"] = get_dependence( - graph["tracks"]["dy"], tr, "dy", "nrectrmc", ranges, style, cat, label, offset) - graph["tracks"]["dz"] = get_dependence( - graph["tracks"]["dz"], tr, "dz", "nrectrmc", ranges, style, cat, label, offset) + graph["tracks"]["dx"] = get_dependence(graph["tracks"]["dx"], tr, "dx", + "nrectrmc", ranges, style, cat, + label, offset) + graph["tracks"]["dy"] = get_dependence(graph["tracks"]["dy"], tr, "dy", + "nrectrmc", ranges, style, cat, + label, offset) + graph["tracks"]["dz"] = get_dependence(graph["tracks"]["dz"], tr, "dz", + "nrectrmc", ranges, style, cat, + label, offset) legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["dz"], "sigma") + labelpos = (0.73, 0.75, 0.88, 0.87) + plot( + graph["tracks"]["dx"], + "mean", + args.prefix + "_ntracks_mean", + "dx", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["tracks"]["dx"], + "sigma", + args.prefix + "_ntracks_sigma", + "dx", + cat, + label, + legend, + labelpos=labelpos) - labelpos=(0.73, 0.75,0.88,0.87) - plot(graph["tracks"]["dx"], "mean", args.prefix + "_ntracks_mean", "dx", - cat, label, legend, labelpos=labelpos) - plot(graph["tracks"]["dx"], "sigma", args.prefix + "_ntracks_sigma", "dx", - cat, label, legend, labelpos=labelpos) + plot( + graph["tracks"]["dy"], + "mean", + args.prefix + "_ntracks_mean", + "dy", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["tracks"]["dy"], + "sigma", + args.prefix + "_ntracks_sigma", + "dy", + cat, + label, + legend, + labelpos=labelpos) - plot(graph["tracks"]["dy"], "mean", args.prefix + "_ntracks_mean", "dy", - cat, label, legend, labelpos=labelpos) - plot(graph["tracks"]["dy"], "sigma", args.prefix + "_ntracks_sigma", "dy", - cat, label, legend, labelpos=labelpos) - - plot(graph["tracks"]["dz"], "mean", args.prefix + "_ntracks_mean", "dz", - cat, label, legend, labelpos=labelpos) - plot(graph["tracks"]["dz"], "sigma", args.prefix + "_ntracks_sigma", "dz", - cat, label, legend, labelpos=labelpos) + plot( + graph["tracks"]["dz"], + "mean", + args.prefix + "_ntracks_mean", + "dz", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["tracks"]["dz"], + "sigma", + args.prefix + "_ntracks_sigma", + "dz", + cat, + label, + legend, + labelpos=labelpos) graph["z"] = {} graph["z"]["dx"] = {} @@ -184,19 +231,59 @@ if __name__ == '__main__': graph["z"]["dz"] = get_dependence(graph["z"]["dz"], tr, "dz", "zMC", ranges, style, cat, label, offset) + plot( + graph["z"]["dx"], + "mean", + args.prefix + "_z_mean", + "dx", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["z"]["dx"], + "sigma", + args.prefix + "_z_sigma", + "dx", + cat, + label, + legend, + labelpos=labelpos) - plot(graph["z"]["dx"], "mean", args.prefix + "_z_mean", "dx", cat, label, - legend, labelpos=labelpos) - plot(graph["z"]["dx"], "sigma", args.prefix + "_z_sigma", "dx", cat, label, - legend, labelpos=labelpos) - - plot(graph["z"]["dy"], "mean", args.prefix + "_z_mean", "dy", cat, label, - legend, labelpos=labelpos) - plot(graph["z"]["dy"], "sigma", args.prefix + "_z_sigma", "dy", cat, label, - legend, labelpos=labelpos) - + plot( + graph["z"]["dy"], + "mean", + args.prefix + "_z_mean", + "dy", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["z"]["dy"], + "sigma", + args.prefix + "_z_sigma", + "dy", + cat, + label, + legend, + labelpos=labelpos) - plot(graph["z"]["dz"], "mean", args.prefix + "_z_mean", "dz", cat, label, - legend, labelpos=labelpos) - plot(graph["z"]["dz"], "sigma", args.prefix + "_z_sigma", "dz", cat, label, - legend, labelpos=labelpos) + plot( + graph["z"]["dz"], + "mean", + args.prefix + "_z_mean", + "dz", + cat, + label, + legend, + labelpos=labelpos) + plot( + graph["z"]["dz"], + "sigma", + args.prefix + "_z_sigma", + "dz", + cat, + label, + legend, + labelpos=labelpos) diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 02e0ab776a1..16d61773c5a 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -50,7 +50,8 @@ def get_trees(tf, tr, label, trees, is_checker): return tr -def get_eff(eff, hist, trees, dependence, style, ranges, categories, label, offset): +def get_eff(eff, hist, trees, dependence, style, ranges, categories, label, + offset): for cat in categories: eff[cat] = {} @@ -93,7 +94,7 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label, offs g_eff = TGraphAsymmErrors() g_eff.Divide(h_nom, h_den, "cl=0.683 b(1,1) mode") - set_style(h_nom, style["color"][i]-7, style["marker"][i]+4, + set_style(h_nom, style["color"][i] - 7, style["marker"][i] + 4, get_x_axis(dependence), "Efficiency", "") set_style(h_den, kGray, style["marker"][i], get_x_axis(dependence), "Efficiency", "") @@ -136,7 +137,7 @@ def plot(gr, legend=None, hist=None, dist=False, - labelpos=(0.75, 0.78,0.9,0.9)): + labelpos=(0.75, 0.78, 0.9, 0.9)): for cat in categories: can = TCanvas( @@ -184,7 +185,8 @@ def plot(gr, if legend: legend.Draw("SAME") - pavetext = TPaveText(labelpos[0],labelpos[1],labelpos[2],labelpos[3], "NBNDC") + pavetext = TPaveText(labelpos[0], labelpos[1], labelpos[2], + labelpos[3], "NBNDC") pavetext.AddText("LHCb simulation") pavetext.SetFillColor(0) pavetext.SetFillStyle(3000) @@ -260,7 +262,8 @@ def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, return text -def plot_comparison(hist, prefix, dependence, categories, label, style, norm, offset): +def plot_comparison(hist, prefix, dependence, categories, label, style, norm, + offset): for cat in categories: can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), @@ -298,7 +301,8 @@ def plot_comparison(hist, prefix, dependence, categories, label, style, norm, of hist[cat][label[0]].Draw("hist") for lab in label: hist[cat][lab].Draw("SAME PE") - pavetext = TPaveText(0.72, 0.77 - gStyle.GetPadTopMargin(), 0.87, 0.89 - gStyle.GetPadTopMargin(), "NBNDC") + pavetext = TPaveText(0.72, 0.77 - gStyle.GetPadTopMargin(), 0.87, + 0.89 - gStyle.GetPadTopMargin(), "NBNDC") pavetext.AddText("LHCb simulation") pavetext.SetFillColor(0) pavetext.SetTextSize(0.06) -- GitLab From e73910a57e89af65846c409c6ac632477ab6d3ad Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Fri, 11 Sep 2020 17:25:51 +0200 Subject: [PATCH 40/54] small adjustments after merging with master --- Hlt/RecoConf/options/hlt1_reco_pvchecker.py | 8 +------- Hlt/RecoConf/python/RecoConf/mc_checking.py | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py index 91175618897..abaf275b228 100644 --- a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py +++ b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py @@ -26,11 +26,5 @@ def hlt1_reco_pvchecker(): return Reconstruction('PVperformance', data, [require_gec()]) - +options.ntuple_file = 'Hlt1_PVperformance.root' run_reconstruction(options, hlt1_reco_pvchecker) - -NTupleSvc().Output += [ - "FILE1 DATAFILE='Hlt1_PVperformance.root' TYPE='ROOT' OPT='NEW'" -] -ApplicationMgr().ExtSvc += [NTupleSvc()] -ApplicationMgr().HistogramPersistency = "ROOT" diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index 3f8bd07359a..fcc61ee7d74 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -27,7 +27,7 @@ from PyConf.Algorithms import ( PrLHCbID2MCParticleVPUTFTMU, PrTrackAssociator, PrTrackChecker, PrUTHitChecker, TrackListRefiner, TrackResChecker, TrackIPResolutionCheckerNT, DataPacking__Unpack_LHCb__MCVPHitPacker_, - MCParticle2MCHitAlg, PrTrackerDumper, PVDumper, + MCParticle2MCHitAlg, PrTrackerDumper, PVDumper, PrimaryVertexChecker, LHCb__Converters__RecVertex__v2__fromVectorLHCbRecVertices as FromVectorLHCbRecVertex) -- GitLab From 1982f708e44d675b8f34201b61a7bfaf934bab12 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Fri, 11 Sep 2020 15:42:37 +0000 Subject: [PATCH 41/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/9959385 --- Hlt/RecoConf/options/hlt1_reco_pvchecker.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py index abaf275b228..79fe4af8562 100644 --- a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py +++ b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py @@ -26,5 +26,6 @@ def hlt1_reco_pvchecker(): return Reconstruction('PVperformance', data, [require_gec()]) + options.ntuple_file = 'Hlt1_PVperformance.root' run_reconstruction(options, hlt1_reco_pvchecker) -- GitLab From d08b3025f1e6853c81ba9797553a329880b07c21 Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Fri, 11 Sep 2020 18:13:34 +0200 Subject: [PATCH 42/54] removing not needed imports --- Hlt/RecoConf/options/hlt1_reco_pvchecker.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py index 79fe4af8562..28e85cbe748 100644 --- a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py +++ b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py @@ -10,8 +10,8 @@ ############################################################################### from Moore import options, run_reconstruction from Moore.config import Reconstruction -from RecoConf.hlt1_tracking import require_gec, make_hlt1_tracks, make_VeloKalman_fitted_tracks, make_pvs -from RecoConf.mc_checking import get_pv_checkers, get_track_checkers +from RecoConf.hlt1_tracking import require_gec, make_hlt1_tracks, make_pvs +from RecoConf.mc_checking import get_pv_checkers from Configurables import ApplicationMgr from Configurables import NTupleSvc @@ -26,6 +26,5 @@ def hlt1_reco_pvchecker(): return Reconstruction('PVperformance', data, [require_gec()]) - options.ntuple_file = 'Hlt1_PVperformance.root' run_reconstruction(options, hlt1_reco_pvchecker) -- GitLab From c026511cedfc824f60236cdbc3e31b4ab6a90d55 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Tue, 13 Oct 2020 16:40:24 +0000 Subject: [PATCH 43/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/10390492 --- Hlt/RecoConf/options/hlt1_reco_pvchecker.py | 1 + Hlt/RecoConf/python/RecoConf/mc_checking.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py index 28e85cbe748..e398902fc96 100644 --- a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py +++ b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py @@ -26,5 +26,6 @@ def hlt1_reco_pvchecker(): return Reconstruction('PVperformance', data, [require_gec()]) + options.ntuple_file = 'Hlt1_PVperformance.root' run_reconstruction(options, hlt1_reco_pvchecker) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index fcc61ee7d74..ae684de68ee 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -433,4 +433,4 @@ def pv_dumper(odin_location=make_odin, output_dir="dump/MC_info/PVs"): MCPropertyLocation=make_data_with_FetchDataFromFile( "/Event/MC/TrackInfo"), ODINLocation=odin_location(), - OutputDirectory=output_dir) \ No newline at end of file + OutputDirectory=output_dir) -- GitLab From 4582794ef04c43844289ad0544273ae41b9de278 Mon Sep 17 00:00:00 2001 From: Rosen Matev Date: Thu, 7 Jan 2021 16:34:56 +0100 Subject: [PATCH 44/54] Fix trivial linter issues --- Hlt/RecoConf/options/hlt1_reco_pvchecker.py | 2 -- Hlt/RecoConf/python/RecoConf/mc_checking.py | 10 +--------- Hlt/RecoConf/python/RecoConf/standalone.py | 9 ++++++--- Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py | 4 ---- Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py | 5 ----- Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py | 4 ---- Hlt/RecoConf/scripts/utils/pvconfig.py | 4 ++-- Hlt/RecoConf/scripts/utils/pvutils.py | 6 ++---- 8 files changed, 11 insertions(+), 33 deletions(-) diff --git a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py index e398902fc96..29bcedf2c45 100644 --- a/Hlt/RecoConf/options/hlt1_reco_pvchecker.py +++ b/Hlt/RecoConf/options/hlt1_reco_pvchecker.py @@ -12,8 +12,6 @@ from Moore import options, run_reconstruction from Moore.config import Reconstruction from RecoConf.hlt1_tracking import require_gec, make_hlt1_tracks, make_pvs from RecoConf.mc_checking import get_pv_checkers -from Configurables import ApplicationMgr -from Configurables import NTupleSvc def hlt1_reco_pvchecker(): diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index 7662039960b..1d5c0dd15a2 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -326,19 +326,11 @@ def get_best_tracks_checkers( @configurable -def get_pv_checkers( - pvs, - tracks, - produce_ntuple=False, - make_links_lhcbids_mcparticles=make_links_lhcbids_mcparticles_tracking_system -): +def get_pv_checkers(pvs, tracks, produce_ntuple=False): assert isinstance( pvs, DataHandle), "Please provide reconstructed primary verticies" - links_to_lhcbids = make_links_lhcbids_mcparticles() - links_to_tracks = make_links_tracks_mcparticles( - InputTracks=tracks, LinksToLHCbIDs=links_to_lhcbids) pv_checkers = [] pvchecker = PrimaryVertexChecker( diff --git a/Hlt/RecoConf/python/RecoConf/standalone.py b/Hlt/RecoConf/python/RecoConf/standalone.py index 1d6db334049..31fd582d330 100644 --- a/Hlt/RecoConf/python/RecoConf/standalone.py +++ b/Hlt/RecoConf/python/RecoConf/standalone.py @@ -17,7 +17,9 @@ from .hlt1_tracking import ( from RecoConf.hlt1_muonmatch import make_tracks_with_muonmatch_ipcut from .hlt1_muonid import make_muon_id, make_tracks_with_muon_id from .hlt2_muonid import make_muon_ids as make_muon_id_hlt2 -from .hlt2_tracking import make_hlt2_tracks, make_TrackBestTrackCreator_tracks, get_default_tracks_for_calo, get_default_out_track_types_for_light_reco +from .hlt2_tracking import ( + make_hlt2_tracks, make_TrackBestTrackCreator_tracks, + get_default_tracks_for_calo, get_default_out_track_types_for_light_reco) from .calorimeter_reconstruction import (make_calo, make_calo_resolution_gamma, make_calo_resolution_pi0) from .calorimeter_mc_checking import ( @@ -34,9 +36,10 @@ from PyConf.Algorithms import ( RecVerticesV1FromV2, ) from .mc_checking import (get_track_checkers, get_fitted_tracks_checkers, - get_best_tracks_checkers) + get_best_tracks_checkers, get_pv_checkers) from .reconstruction_objects import reconstruction -from .protoparticles import make_charged_protoparticles, make_neutral_protoparticles +from .protoparticles import (make_charged_protoparticles, + make_neutral_protoparticles) from .calo_data_monitoring import monitor_calo_clusters from .track_data_monitoring import monitor_tracking diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index bfc3151734f..dc5776d105e 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -28,10 +28,7 @@ import os, sys import argparse -import ROOT -from ROOT import TFile, TTree -from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray from ROOT import gROOT, TLegend parser = argparse.ArgumentParser() @@ -100,7 +97,6 @@ if __name__ == '__main__': gROOT.SetBatch() - from pvutils import get_default_tree_name from pvutils import get_files, get_trees, get_eff, plot from pvconfig import get_variable_ranges diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index cf30de6cca3..70413de727e 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -28,10 +28,7 @@ import os, sys import argparse -import ROOT -from ROOT import TFile, TTree -from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray, kYellow from ROOT import gROOT, TLegend parser = argparse.ArgumentParser() @@ -99,7 +96,6 @@ if __name__ == '__main__': offset = int(args.offset) gROOT.SetBatch() - from pvutils import get_default_tree_name from pvutils import get_files, get_trees from pvutils import set_legend, get_global, plot_comparison from pvutils import get_dependence @@ -107,7 +103,6 @@ if __name__ == '__main__': from pvconfig import get_variable_ranges from pvconfig import get_style, get_categories - from pvconfig import get_y_axis ranges = get_variable_ranges(args.smog) style = get_style() diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index e1bdce35d1c..778e4adcbd5 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -28,10 +28,7 @@ import os, sys import argparse -import ROOT -from ROOT import TFile, TTree -from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray, kYellow from ROOT import gROOT, TLegend parser = argparse.ArgumentParser() @@ -100,7 +97,6 @@ if __name__ == '__main__': gROOT.SetBatch() - from pvutils import get_default_tree_name from pvutils import get_files, get_trees from pvutils import set_legend, get_global, plot_comparison from pvutils import get_dependence diff --git a/Hlt/RecoConf/scripts/utils/pvconfig.py b/Hlt/RecoConf/scripts/utils/pvconfig.py index 09bccd2963f..23d03433f84 100644 --- a/Hlt/RecoConf/scripts/utils/pvconfig.py +++ b/Hlt/RecoConf/scripts/utils/pvconfig.py @@ -10,8 +10,8 @@ ############################################################################### #!/usr/bin/python -from ROOT import TH1F, TLegend -from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan, kGray, kYellow +from ROOT import TH1F +from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan def get_categories(multi, smog): diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 16d61773c5a..b00eb77f5e7 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -15,16 +15,14 @@ # date: 02/2020 # -from ROOT import TFile, TTree, TH1F, gDirectory, TGraphAsymmErrors, TPaveText, gStyle +from ROOT import TFile, gDirectory, TGraphAsymmErrors, TPaveText, gStyle from ROOT import TCanvas -from ROOT import TGraphErrors, TLegend from ROOT import gPad, kGray, TLatex from pvconfig import get_default_tree_name from pvconfig import transfer_variable from pvconfig import get_x_axis, get_y_axis from pvconfig import set_style -from pvconfig import set_legend from pvconfig import get_text_cor from pvconfig import basic_cut @@ -409,7 +407,7 @@ def get_dependence(graph, trees, variable, dependence, ranges, style, bin_cut=cut_bin, cuts=categories[cat]["cut"]) - a = trees[lab].Draw(hist_string, cut) + trees[lab].Draw(hist_string, cut) bin_min += bin_width -- GitLab From c1f136e4443a43448913bb4e04b036659c39c7c1 Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Wed, 3 Feb 2021 12:10:47 +0100 Subject: [PATCH 45/54] fixing problems after previous commits --- .../scripts/PrimaryVertexCheckerEfficiency.py | 6 ++-- .../scripts/PrimaryVertexCheckerPull.py | 32 +++++++++--------- .../scripts/PrimaryVertexCheckerResolution.py | 30 ++++++++--------- Hlt/RecoConf/scripts/utils/pvutils.py | 33 +++++++++---------- 4 files changed, 50 insertions(+), 51 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index dc5776d105e..3bf3a6f644a 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -143,8 +143,8 @@ if __name__ == '__main__': args.dist) plot(eff["tracks"], "eff", args.prefix, "ntracks", cat, label, legend, - hist["tracks"], args.dist) + hist["tracks"], args.dist, (0.9,0.65)) plot(eff["z"], "eff", args.prefix, "z", cat, label, legend, hist["z"], - args.dist) + args.dist, (0.9,0.65)) plot(eff["r"], "eff", args.prefix, "r", cat, label, legend, hist["r"], - args.dist) + args.dist, (0.9,0.3)) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 70413de727e..70d44977358 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -97,12 +97,12 @@ if __name__ == '__main__': gROOT.SetBatch() from pvutils import get_files, get_trees - from pvutils import set_legend, get_global, plot_comparison + from pvutils import get_global, plot_comparison from pvutils import get_dependence from pvutils import plot from pvconfig import get_variable_ranges - from pvconfig import get_style, get_categories + from pvconfig import set_legend, get_style, get_categories ranges = get_variable_ranges(args.smog) style = get_style() @@ -159,7 +159,8 @@ if __name__ == '__main__': legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["pullz"], "sigma") - labelpos = (0.75, 0.75, 0.9, 0.87) + lhcbtextpos = (0.9, 0.75) + lhcbtextposdown = (0.9, 0.25) plot( graph["tracks"]["pullx"], "mean", @@ -168,7 +169,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["tracks"]["pullx"], "sigma", @@ -177,7 +178,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextposdown) plot( graph["tracks"]["pully"], @@ -187,7 +188,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["tracks"]["pully"], "sigma", @@ -196,7 +197,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextposdown) plot( graph["tracks"]["pullz"], @@ -206,7 +207,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["tracks"]["pullz"], "sigma", @@ -215,7 +216,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextposdown) graph["z"] = {} graph["z"]["pullx"] = {} @@ -231,6 +232,7 @@ if __name__ == '__main__': "zMC", ranges, style, cat, label, offset) + plot( graph["z"]["pullx"], "mean", @@ -239,7 +241,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["z"]["pullx"], "sigma", @@ -248,7 +250,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextposdown) plot( graph["z"]["pully"], @@ -258,7 +260,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["z"]["pully"], "sigma", @@ -267,7 +269,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextposdown) plot( graph["z"]["pullz"], @@ -277,7 +279,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["z"]["pullz"], "sigma", @@ -286,4 +288,4 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextposdown) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index 778e4adcbd5..69be073cdb2 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -98,12 +98,12 @@ if __name__ == '__main__': gROOT.SetBatch() from pvutils import get_files, get_trees - from pvutils import set_legend, get_global, plot_comparison + from pvutils import get_global, plot_comparison from pvutils import get_dependence from pvutils import plot from pvconfig import get_variable_ranges - from pvconfig import get_style, get_categories + from pvconfig import set_legend, get_style, get_categories ranges = get_variable_ranges(args.smog) style = get_style() @@ -158,7 +158,7 @@ if __name__ == '__main__': legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["dz"], "sigma") - labelpos = (0.73, 0.75, 0.88, 0.87) + lhcbtextpos= (0.9, 0.75) plot( graph["tracks"]["dx"], "mean", @@ -167,7 +167,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["tracks"]["dx"], "sigma", @@ -176,7 +176,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["tracks"]["dy"], @@ -186,7 +186,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["tracks"]["dy"], "sigma", @@ -195,7 +195,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["tracks"]["dz"], @@ -205,7 +205,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["tracks"]["dz"], "sigma", @@ -214,7 +214,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) graph["z"] = {} graph["z"]["dx"] = {} @@ -235,7 +235,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["z"]["dx"], "sigma", @@ -244,7 +244,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["z"]["dy"], @@ -254,7 +254,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["z"]["dy"], "sigma", @@ -263,7 +263,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["z"]["dz"], @@ -273,7 +273,7 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) plot( graph["z"]["dz"], "sigma", @@ -282,4 +282,4 @@ if __name__ == '__main__': cat, label, legend, - labelpos=labelpos) + lhcbtextpos=lhcbtextpos) diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index b00eb77f5e7..04ce62401ab 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -56,7 +56,7 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label, hist[cat] = {} i = offset for lab in label: - var_den = '{dependence}>>hist{code}_{dep}_{cat}_denom{i}({bins},{mins},{maxs})'.format( + var_den = '{dependence}>>hist{code}_{dep}_{cat}_{lab}_denom{i}({bins},{mins},{maxs})'.format( dependence=dependence, code="den", dep=dependence, @@ -66,7 +66,7 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label, mins=ranges[dependence]["min"], maxs=ranges[dependence]["max"], i=i) - var_nom = '{dependence}>>hist{code}_{dep}_{cat}_num{i}({bins},{mins},{maxs})'.format( + var_nom = '{dependence}>>hist{code}_{dep}_{cat}_{lab}_num{i}({bins},{mins},{maxs})'.format( dependence=dependence, code="nom", dep=dependence, @@ -84,9 +84,9 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label, trees[lab].Draw(var_nom, cut_nom) trees[lab].Draw(var_den, cut_den) - h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_num{i}'.format( + h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}_num{i}'.format( code="nom", dep=dependence, cat=cat, lab=lab, i=i)) - h_den = gDirectory.Get('hist{code}_{dep}_{cat}_denom{i}'.format( + h_den = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}_denom{i}'.format( code="den", dep=dependence, cat=cat, lab=lab, i=i)) g_eff = TGraphAsymmErrors() @@ -135,7 +135,7 @@ def plot(gr, legend=None, hist=None, dist=False, - labelpos=(0.75, 0.78, 0.9, 0.9)): + lhcbtextpos=(0.9, 0.6)): for cat in categories: can = TCanvas( @@ -174,8 +174,6 @@ def plot(gr, hist[cat][label[0]]["den"].Draw("hist SAME") for lab in label: - histmax_nom = 1.1 * hist[cat][lab]["nom"].GetMaximum() - #scale = gPad.GetUymax() / histmax_nom hist[cat][lab]["nom"].Scale(scale * 0.75) hist[cat][lab]["nom"].Draw("ep SAME") @@ -183,14 +181,14 @@ def plot(gr, if legend: legend.Draw("SAME") - pavetext = TPaveText(labelpos[0], labelpos[1], labelpos[2], - labelpos[3], "NBNDC") - pavetext.AddText("LHCb simulation") - pavetext.SetFillColor(0) - pavetext.SetFillStyle(3000) - pavetext.SetTextSize(0.06) - pavetext.SetTextFont(132) - pavetext.Draw() + + lhcbtext = TLatex(); + lhcbtext.SetTextFont(132) + lhcbtext.SetTextColor(1) + lhcbtext.SetTextSize(0.07) + lhcbtext.SetTextAlign(132) + + lhcbtext.DrawTextNDC(lhcbtextpos[0],lhcbtextpos[1],"LHCb simulation"); saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) @@ -206,7 +204,7 @@ def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, hist[cat] = {} i = offset for lab in label: - var = '{dependence}>>hist_{dep}_{cat}_{i}({bins},{mins},{maxs})'.format( + var = '{dependence}>>hist_{dep}_{cat}_{lab}_{i}({bins},{mins},{maxs})'.format( dependence=dep, dep=dependence, cat=cat, @@ -220,7 +218,7 @@ def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, cuts=categories[cat]["cut"]) trees[lab].Draw(var, cut) - h = gDirectory.Get('hist_{dep}_{cat}_{i}'.format( + h = gDirectory.Get('hist_{dep}_{cat}_{lab}_{i}'.format( dep=dependence, cat=cat, lab=lab, i=i)) if i == 0: col = style["color"][i] - 10 @@ -283,7 +281,6 @@ def plot_comparison(hist, prefix, dependence, categories, label, style, norm, units = False if norm: hist[cat][label[0]].DrawNormalized("hist") - hist_max = hist[cat][label[0]].GetMaximum() i = offset for lab in label: hist[cat][lab].DrawNormalized("SAME PE") -- GitLab From 9c11a3ac2e5b6f17efe1181a3e614c407e665498 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 3 Feb 2021 11:12:01 +0000 Subject: [PATCH 46/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/11950423 --- .../scripts/PrimaryVertexCheckerEfficiency.py | 6 +++--- Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py | 1 - .../scripts/PrimaryVertexCheckerResolution.py | 2 +- Hlt/RecoConf/scripts/utils/pvutils.py | 16 +++++++++------- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index 3bf3a6f644a..15726f55d38 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -143,8 +143,8 @@ if __name__ == '__main__': args.dist) plot(eff["tracks"], "eff", args.prefix, "ntracks", cat, label, legend, - hist["tracks"], args.dist, (0.9,0.65)) + hist["tracks"], args.dist, (0.9, 0.65)) plot(eff["z"], "eff", args.prefix, "z", cat, label, legend, hist["z"], - args.dist, (0.9,0.65)) + args.dist, (0.9, 0.65)) plot(eff["r"], "eff", args.prefix, "r", cat, label, legend, hist["r"], - args.dist, (0.9,0.3)) + args.dist, (0.9, 0.3)) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 70d44977358..45e1491f27a 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -232,7 +232,6 @@ if __name__ == '__main__': "zMC", ranges, style, cat, label, offset) - plot( graph["z"]["pullx"], "mean", diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index 69be073cdb2..fb6b546c082 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -158,7 +158,7 @@ if __name__ == '__main__': legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend(legend, label, graph["tracks"]["dz"], "sigma") - lhcbtextpos= (0.9, 0.75) + lhcbtextpos = (0.9, 0.75) plot( graph["tracks"]["dx"], "mean", diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 04ce62401ab..afcbe8c8f88 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -84,10 +84,12 @@ def get_eff(eff, hist, trees, dependence, style, ranges, categories, label, trees[lab].Draw(var_nom, cut_nom) trees[lab].Draw(var_den, cut_den) - h_nom = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}_num{i}'.format( - code="nom", dep=dependence, cat=cat, lab=lab, i=i)) - h_den = gDirectory.Get('hist{code}_{dep}_{cat}_{lab}_denom{i}'.format( - code="den", dep=dependence, cat=cat, lab=lab, i=i)) + h_nom = gDirectory.Get( + 'hist{code}_{dep}_{cat}_{lab}_num{i}'.format( + code="nom", dep=dependence, cat=cat, lab=lab, i=i)) + h_den = gDirectory.Get( + 'hist{code}_{dep}_{cat}_{lab}_denom{i}'.format( + code="den", dep=dependence, cat=cat, lab=lab, i=i)) g_eff = TGraphAsymmErrors() g_eff.Divide(h_nom, h_den, "cl=0.683 b(1,1) mode") @@ -181,14 +183,14 @@ def plot(gr, if legend: legend.Draw("SAME") - - lhcbtext = TLatex(); + + lhcbtext = TLatex() lhcbtext.SetTextFont(132) lhcbtext.SetTextColor(1) lhcbtext.SetTextSize(0.07) lhcbtext.SetTextAlign(132) - lhcbtext.DrawTextNDC(lhcbtextpos[0],lhcbtextpos[1],"LHCb simulation"); + lhcbtext.DrawTextNDC(lhcbtextpos[0], lhcbtextpos[1], "LHCb simulation") saveName = '{prefix}_{dependence}_{cat}.pdf'.format( prefix=prefix, dependence=dependence, cat=cat) -- GitLab From c3d99285ecb86f89bc9f56f20a67f19378da43da Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Wed, 3 Feb 2021 12:16:08 +0100 Subject: [PATCH 47/54] fixed formatting --- Hlt/RecoConf/scripts/utils/pvutils.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index afcbe8c8f88..2f765d136ef 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -1,8 +1,8 @@ -############################################################################### +B############################################################################### # (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # # # # This software is distributed under the terms of the GNU General Public # -# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +#1;95;0c Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # # # # In applying this licence, CERN does not waive the privileges and immunities # # granted to it by virtue of its status as an Intergovernmental Organization # @@ -28,7 +28,6 @@ from pvconfig import basic_cut from array import array - def get_files(tf, label, files): i = 0 for f in files: -- GitLab From cef5710007f6f8554054f39828ac9bc79c92657a Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Wed, 3 Feb 2021 11:16:54 +0000 Subject: [PATCH 48/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/11950503 --- Hlt/RecoConf/scripts/utils/pvutils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 2f765d136ef..0e87f3b4f33 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -1,4 +1,4 @@ -B############################################################################### +B ############################################################################### # (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # # # # This software is distributed under the terms of the GNU General Public # @@ -28,6 +28,7 @@ from pvconfig import basic_cut from array import array + def get_files(tf, label, files): i = 0 for f in files: -- GitLab From 4e78124fc7c5d1a08eaff5b6642d9884558167fa Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Wed, 3 Feb 2021 12:27:50 +0100 Subject: [PATCH 49/54] one more fix in python --- Hlt/RecoConf/scripts/utils/pvutils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 0e87f3b4f33..41cfc6b42a9 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -1,4 +1,4 @@ -B ############################################################################### +############################################################################### # (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # # # # This software is distributed under the terms of the GNU General Public # -- GitLab From 60db5844bf6d56b876a12260b357844ee361dcc3 Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Thu, 4 Feb 2021 16:46:25 +0100 Subject: [PATCH 50/54] adding basic script, creating isol option --- .../scripts/PrimaryVertexCheckerBasic.py | 170 ++++++++++++++++++ .../scripts/PrimaryVertexCheckerEfficiency.py | 8 +- .../scripts/PrimaryVertexCheckerPull.py | 8 +- .../scripts/PrimaryVertexCheckerResolution.py | 8 +- Hlt/RecoConf/scripts/utils/pvconfig.py | 47 ++++- Hlt/RecoConf/scripts/utils/pvutils.py | 39 ++-- 6 files changed, 256 insertions(+), 24 deletions(-) create mode 100644 Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py new file mode 100644 index 00000000000..92fc1365013 --- /dev/null +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py @@ -0,0 +1,170 @@ +############################################################################### +# (c) Copyright 2019 CERN for the benefit of the LHCb Collaboration # +# # +# This software is distributed under the terms of the GNU General Public # +# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". # +# # +# In applying this licence, CERN does not waive the privileges and immunities # +# granted to it by virtue of its status as an Intergovernmental Organization # +# or submit itself to any jurisdiction. # +############################################################################### +#!/usr/bin/python + +# The script for plotting PV efficinecy as the function +# of various distributions: nTracks, z, r. +# As input the NTuple created by hlt1_reco_pvchecker.py +# is needed. +# +# The efficency is calculated usig TGraphAsymmErrors +# and Bayesian error bars +# +# author: Agnieszka Dziurda (agnieszka.dziurda@cern.ch) +# date: 02/2020 +# +# Example of usage: +# ../../../run python PrimaryVertexCheckerPull.py +# --file file1.root file2.root --label name1 name2 +# + +import os, sys +import argparse + +from ROOT import gROOT, TLegend + +parser = argparse.ArgumentParser() +parser.add_argument( + '--file', dest='fileName', default="", nargs='+', help='filename to plot') +parser.add_argument( + '--label', dest='label', default="", nargs='+', help='labels for files') +parser.add_argument( + '--tree', + dest='treeName', + default="", + nargs='+', + help='tree name to plot', +) +parser.add_argument( + '--smog', + dest='smog', + default=False, + action='store_true', + help='set true for SMOG') +parser.add_argument( + '--multi', + dest='multi', + default=False, + action='store_true', + help='add multiplicity plots') +parser.add_argument( + '--isol', + dest='isol', + default=False, + action='store_true', + help='add isolated/closed plots') +parser.add_argument( + '--dist', + dest='dist', + default=False, + action='store_true', + help='plot distributions in the canvas') +parser.add_argument( + '--prefix', + dest='prefix', + default="pv_basic", + help='prefix for the plot name', +) +parser.add_argument( + '--dir', + dest='directory', + default=os.getcwd(), + help='tree name to plot', +) + +parser.add_argument( + '--offset', + dest='offset', + default=0, + help='offset for plot colors', +) + + +def get_labels(number_of_files): + label = [] + for i in range(0, number_of_files): + label.append("PV Checker {number}".format(number=str(i + 1))) + return label + + +if __name__ == '__main__': + args = parser.parse_args() + path = args.directory + "/utils/" + sys.path.append(os.path.abspath(path)) + offset = int(args.offset) + gROOT.SetBatch() + + from pvutils import get_files, get_trees + from pvutils import get_global, plot_comparison + from pvutils import get_dependence + from pvutils import plot + + from pvconfig import get_variable_ranges + from pvconfig import set_legend_simple, get_style, get_categories + + ranges = get_variable_ranges(args.smog) + style = get_style() + + cat = get_categories(args.multi, args.isol, args.smog) + label = args.label + if args.label == "": + label = get_labels(len(args.fileName)) + + tr = {} + tf = {} + tf = get_files(tf, label, args.fileName) + tr = get_trees(tf, tr, label, args.treeName, True) + + hist_trueMCPVs = {} + hist_visMCPVs = {} + hist_zMC = {} + hist_xMC = {} + hist_yMC = {} + hist_part = {} + + norm = True #to-do + hist_trueMCPVs = get_global(hist_trueMCPVs, tr, "mtruemcpv", "All MC PVs", + "Candidates Normalized", style, ranges, cat, label, + offset, True) + hist_visMCPVs = get_global(hist_visMCPVs, tr, "nmcpv", "Reconstructible MC PVs}", + "Candidates Normalized", style, ranges, cat, label, + offset, True) + hist_zMC = get_global(hist_zMC, tr, "zMC", "PV z [mm]", + "Candidates Normalized", style, ranges, cat, label, + offset, True) + hist_xMC = get_global(hist_xMC, tr, "xMC", "PV x [mm]", + "Candidates Normalized", style, ranges, cat, label, + offset, True) + hist_yMC = get_global(hist_yMC, tr, "yMC", "PV y [mm]", + "Candidates Normalized", style, ranges, cat, label, + offset, True) + hist_part = get_global(hist_part, tr, "nrectrmc", "MC Particles in MC PVs", + "Candidates Normalized", style, ranges, cat, label, + offset, True) + + legend = TLegend(0.15, 0.86, 0.88, 0.98) + legend = set_legend_simple(legend, label, hist_trueMCPVs) + + plot_comparison(hist_trueMCPVs, args.prefix, "mtruemcpv", cat, label, style, norm, + offset, True, legend) + plot_comparison(hist_visMCPVs, args.prefix, "nmcpv", cat, label, style, norm, + offset, True, legend) + + plot_comparison(hist_zMC, args.prefix, "zMC", cat, label, style, norm, + offset, True, legend) + plot_comparison(hist_xMC, args.prefix, "xMC", cat, label, style, norm, + offset, True, legend) + plot_comparison(hist_yMC, args.prefix, "yMC", cat, label, style, norm, + offset, True, legend) + + plot_comparison(hist_part, args.prefix, "nrectrmc", cat, label, style, norm, + offset, True, legend) + diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py index 15726f55d38..612d9176001 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerEfficiency.py @@ -55,6 +55,12 @@ parser.add_argument( default=False, action='store_true', help='add multiplicity plots') +parser.add_argument( + '--isol', + dest='isol', + default=False, + action='store_true', + help='add isolated/closed plots') parser.add_argument( '--dist', dest='dist', @@ -125,7 +131,7 @@ if __name__ == '__main__': hist["z"] = {} hist["r"] = {} - cat = get_categories(args.multi, args.smog) + cat = get_categories(args.multi, args.isol, args.smog) eff["tracks"], hist["tracks"] = get_eff(eff["tracks"], hist["tracks"], tr, "nrectrmc", style, ranges, cat, diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py index 45e1491f27a..80c7785c269 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerPull.py @@ -55,6 +55,12 @@ parser.add_argument( default=False, action='store_true', help='add multiplicity plots') +parser.add_argument( + '--isol', + dest='isol', + default=False, + action='store_true', + help='add isolated/closed plots') parser.add_argument( '--dist', dest='dist', @@ -107,7 +113,7 @@ if __name__ == '__main__': ranges = get_variable_ranges(args.smog) style = get_style() - cat = get_categories(args.multi, args.smog) + cat = get_categories(args.multi, args.isol, args.smog) label = args.label if args.label == "": label = get_labels(len(args.fileName)) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py index fb6b546c082..dd5424bf0cd 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerResolution.py @@ -55,6 +55,12 @@ parser.add_argument( default=False, action='store_true', help='add multiplicity plots') +parser.add_argument( + '--isol', + dest='isol', + default=False, + action='store_true', + help='add isolated/closed plots') parser.add_argument( '--dist', dest='dist', @@ -108,7 +114,7 @@ if __name__ == '__main__': ranges = get_variable_ranges(args.smog) style = get_style() - cat = get_categories(args.multi, args.smog) + cat = get_categories(args.multi, args.isol, args.smog) label = args.label if args.label == "": label = get_labels(len(args.fileName)) diff --git a/Hlt/RecoConf/scripts/utils/pvconfig.py b/Hlt/RecoConf/scripts/utils/pvconfig.py index 23d03433f84..89c95567077 100644 --- a/Hlt/RecoConf/scripts/utils/pvconfig.py +++ b/Hlt/RecoConf/scripts/utils/pvconfig.py @@ -14,12 +14,13 @@ from ROOT import TH1F from ROOT import kRed, kBlue, kOrange, kMagenta, kGreen, kCyan -def get_categories(multi, smog): +def get_categories(multi, isol, smog): cut = {} cut["all"] = {"cut": ""} - # cut["isolated"] = {"cut": "&&isol==1"} - # if not smog: - # cut["close"] = {"cut": "&&isol==0"} + if isol: + cut["isolated"] = {"cut": "&&isol==1"} + if not smog: + cut["close"] = {"cut": "&&isol==0"} if multi: cut["1st"] = {"cut": "&&multimc==1"} cut["2nd"] = {"cut": "&&multimc==2"} @@ -49,9 +50,6 @@ def transfer_variable(dep): "pullx": "dx/errx", "pully": "dy/erry", "pullz": "dz/errz", - "dx": "dx", - "dy": "dy", - "dz": "dz", } return dictionary[dep] @@ -68,6 +66,16 @@ def get_variable_ranges(smog): "min": 0.0, "max": 0.2 }, + "xMC": { + "bins": 50, + "min": -0.2, + "max": 0.2 + }, + "yMC": { + "bins": 50, + "min": -0.2, + "max": 0.2 + }, "dx": { "bins": 50, "min": -0.10, @@ -102,7 +110,17 @@ def get_variable_ranges(smog): "bins": 66, "min": 4.0, "max": 70.0 - } + }, + "mtruemcpv": { + "bins": 20, + "min": 0.0, + "max": 20.0 + }, + "nmcpv": { + "bins": 20, + "min": 0.0, + "max": 20.0 + }, } if smog: dictionary["zMC"] = {"bins": 100, "min": -500, "max": 200} @@ -160,6 +178,19 @@ def set_style(graph, color, marker, xaxis, yaxis, title): graph.GetYaxis().SetTitle(yaxis) +def set_legend_simple(legend, label, hist): + legend.SetTextSize(0.04) + legend.SetTextFont(12) + legend.SetFillColor(4000) + legend.SetShadowColor(0) + legend.SetBorderSize(0) + legend.SetTextFont(132) + legend.SetNColumns(2) + for lab in label: + legend.AddEntry(hist["all"][lab],"{lab}".format(lab=lab), "lep") + + return legend + def set_legend(legend, label, gr, gr_type, hist=None, dist=False): legend.SetTextSize(0.04) legend.SetTextFont(12) diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 41cfc6b42a9..2a05a638c2d 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -127,7 +127,6 @@ def find_min(gr, gr_type, label): m = gr[lab][gr_type].GetYaxis().GetXmin() return m - def plot(gr, gr_type, prefix, @@ -198,9 +197,12 @@ def plot(gr, def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, - categories, label, offset): + categories, label, offset, simple = False): - dep = transfer_variable(dependence) + if dependence.find("pull") > -1: + dep = transfer_variable(dependence) + else: + dep = dependence for cat in categories: hist[cat] = {} @@ -222,7 +224,7 @@ def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, trees[lab].Draw(var, cut) h = gDirectory.Get('hist_{dep}_{cat}_{lab}_{i}'.format( dep=dependence, cat=cat, lab=lab, i=i)) - if i == 0: + if i == 0 and not simple: col = style["color"][i] - 10 else: col = style["color"][i] @@ -261,7 +263,7 @@ def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, def plot_comparison(hist, prefix, dependence, categories, label, style, norm, - offset): + offset, simple = False, legend=None): for cat in categories: can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), @@ -282,22 +284,29 @@ def plot_comparison(hist, prefix, dependence, categories, label, style, norm, scale = False units = False if norm: - hist[cat][label[0]].DrawNormalized("hist") + if not simple: + hist[cat][label[0]].DrawNormalized("hist") + else: + hist[cat][label[0]].DrawNormalized("PE") i = offset for lab in label: hist[cat][lab].DrawNormalized("SAME PE") - text = TLatex() - text = set_text(text, style["color"][i], cor["x"][i], - cor["y"][i], lab, hist[cat][lab].GetMean(), - hist[cat][lab].GetMeanError(), - hist[cat][lab].GetRMS(), - hist[cat][lab].GetRMSError(), scale, units) + if not simple: + text = TLatex() + text = set_text(text, style["color"][i], cor["x"][i], + cor["y"][i], lab, hist[cat][lab].GetMean(), + hist[cat][lab].GetMeanError(), + hist[cat][lab].GetRMS(), + hist[cat][lab].GetRMSError(), scale, units) i += 1 else: hist[cat][label[0]].Draw("hist") for lab in label: hist[cat][lab].Draw("SAME PE") + if legend: + legend.Draw("SAME") + pavetext = TPaveText(0.72, 0.77 - gStyle.GetPadTopMargin(), 0.87, 0.89 - gStyle.GetPadTopMargin(), "NBNDC") pavetext.AddText("LHCb simulation") @@ -366,7 +375,11 @@ def get_robust_sigma(hist, resol): def get_dependence(graph, trees, variable, dependence, ranges, style, categories, label, offset): - var = transfer_variable(variable) + + if variable.find("pull") > -1: + var = transfer_variable(dependence) + else: + var = variable bin_width = (ranges[dependence]["max"] - ranges[dependence]["min"]) / ranges[dependence]["bins"] -- GitLab From 31b644777fb22630d3b9096232401c3279947beb Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Thu, 4 Feb 2021 15:47:38 +0000 Subject: [PATCH 51/54] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/11980100 --- .../scripts/PrimaryVertexCheckerBasic.py | 49 +++++++++---------- Hlt/RecoConf/scripts/utils/pvconfig.py | 3 +- Hlt/RecoConf/scripts/utils/pvutils.py | 27 ++++++++-- 3 files changed, 48 insertions(+), 31 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py index 92fc1365013..d978cff3f98 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py @@ -132,32 +132,32 @@ if __name__ == '__main__': norm = True #to-do hist_trueMCPVs = get_global(hist_trueMCPVs, tr, "mtruemcpv", "All MC PVs", - "Candidates Normalized", style, ranges, cat, label, - offset, True) - hist_visMCPVs = get_global(hist_visMCPVs, tr, "nmcpv", "Reconstructible MC PVs}", - "Candidates Normalized", style, ranges, cat, label, - offset, True) - hist_zMC = get_global(hist_zMC, tr, "zMC", "PV z [mm]", - "Candidates Normalized", style, ranges, cat, label, - offset, True) - hist_xMC = get_global(hist_xMC, tr, "xMC", "PV x [mm]", - "Candidates Normalized", style, ranges, cat, label, - offset, True) - hist_yMC = get_global(hist_yMC, tr, "yMC", "PV y [mm]", - "Candidates Normalized", style, ranges, cat, label, - offset, True) - hist_part = get_global(hist_part, tr, "nrectrmc", "MC Particles in MC PVs", - "Candidates Normalized", style, ranges, cat, label, - offset, True) + "Candidates Normalized", style, ranges, cat, + label, offset, True) + hist_visMCPVs = get_global( + hist_visMCPVs, tr, "nmcpv", "Reconstructible MC PVs}", + "Candidates Normalized", style, ranges, cat, label, offset, True) + hist_zMC = get_global(hist_zMC, tr, "zMC", "PV z [mm]", + "Candidates Normalized", style, ranges, cat, label, + offset, True) + hist_xMC = get_global(hist_xMC, tr, "xMC", "PV x [mm]", + "Candidates Normalized", style, ranges, cat, label, + offset, True) + hist_yMC = get_global(hist_yMC, tr, "yMC", "PV y [mm]", + "Candidates Normalized", style, ranges, cat, label, + offset, True) + hist_part = get_global(hist_part, tr, "nrectrmc", "MC Particles in MC PVs", + "Candidates Normalized", style, ranges, cat, label, + offset, True) legend = TLegend(0.15, 0.86, 0.88, 0.98) legend = set_legend_simple(legend, label, hist_trueMCPVs) - plot_comparison(hist_trueMCPVs, args.prefix, "mtruemcpv", cat, label, style, norm, - offset, True, legend) - plot_comparison(hist_visMCPVs, args.prefix, "nmcpv", cat, label, style, norm, - offset, True, legend) - + plot_comparison(hist_trueMCPVs, args.prefix, "mtruemcpv", cat, label, + style, norm, offset, True, legend) + plot_comparison(hist_visMCPVs, args.prefix, "nmcpv", cat, label, style, + norm, offset, True, legend) + plot_comparison(hist_zMC, args.prefix, "zMC", cat, label, style, norm, offset, True, legend) plot_comparison(hist_xMC, args.prefix, "xMC", cat, label, style, norm, @@ -165,6 +165,5 @@ if __name__ == '__main__': plot_comparison(hist_yMC, args.prefix, "yMC", cat, label, style, norm, offset, True, legend) - plot_comparison(hist_part, args.prefix, "nrectrmc", cat, label, style, norm, - offset, True, legend) - + plot_comparison(hist_part, args.prefix, "nrectrmc", cat, label, style, + norm, offset, True, legend) diff --git a/Hlt/RecoConf/scripts/utils/pvconfig.py b/Hlt/RecoConf/scripts/utils/pvconfig.py index 89c95567077..c0cf8b2de68 100644 --- a/Hlt/RecoConf/scripts/utils/pvconfig.py +++ b/Hlt/RecoConf/scripts/utils/pvconfig.py @@ -187,10 +187,11 @@ def set_legend_simple(legend, label, hist): legend.SetTextFont(132) legend.SetNColumns(2) for lab in label: - legend.AddEntry(hist["all"][lab],"{lab}".format(lab=lab), "lep") + legend.AddEntry(hist["all"][lab], "{lab}".format(lab=lab), "lep") return legend + def set_legend(legend, label, gr, gr_type, hist=None, dist=False): legend.SetTextSize(0.04) legend.SetTextFont(12) diff --git a/Hlt/RecoConf/scripts/utils/pvutils.py b/Hlt/RecoConf/scripts/utils/pvutils.py index 2a05a638c2d..8112fc72a91 100644 --- a/Hlt/RecoConf/scripts/utils/pvutils.py +++ b/Hlt/RecoConf/scripts/utils/pvutils.py @@ -127,6 +127,7 @@ def find_min(gr, gr_type, label): m = gr[lab][gr_type].GetYaxis().GetXmin() return m + def plot(gr, gr_type, prefix, @@ -196,8 +197,17 @@ def plot(gr, can.SaveAs(saveName) -def get_global(hist, trees, dependence, x_axis, y_axis, style, ranges, - categories, label, offset, simple = False): +def get_global(hist, + trees, + dependence, + x_axis, + y_axis, + style, + ranges, + categories, + label, + offset, + simple=False): if dependence.find("pull") > -1: dep = transfer_variable(dependence) @@ -262,8 +272,16 @@ def set_text(text, color, x, y, lab, mean, mean_err, rms, rms_err, scale, return text -def plot_comparison(hist, prefix, dependence, categories, label, style, norm, - offset, simple = False, legend=None): +def plot_comparison(hist, + prefix, + dependence, + categories, + label, + style, + norm, + offset, + simple=False, + legend=None): for cat in categories: can = TCanvas('canvas_{depen}_{cat}'.format(depen=dependence, cat=cat), @@ -375,7 +393,6 @@ def get_robust_sigma(hist, resol): def get_dependence(graph, trees, variable, dependence, ranges, style, categories, label, offset): - if variable.find("pull") > -1: var = transfer_variable(dependence) else: -- GitLab From c703390c40358a827ab7edd0e356735cc68c5633 Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Thu, 4 Feb 2021 16:55:39 +0100 Subject: [PATCH 52/54] removing unsued imports --- Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py b/Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py index d978cff3f98..0ae38bc39ea 100644 --- a/Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py +++ b/Hlt/RecoConf/scripts/PrimaryVertexCheckerBasic.py @@ -104,8 +104,6 @@ if __name__ == '__main__': from pvutils import get_files, get_trees from pvutils import get_global, plot_comparison - from pvutils import get_dependence - from pvutils import plot from pvconfig import get_variable_ranges from pvconfig import set_legend_simple, get_style, get_categories -- GitLab From e989038e00ccb85a1cb6c3a7b538fbd342f31422 Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Tue, 23 Mar 2021 17:29:17 +0100 Subject: [PATCH 53/54] fixes after merge conflict --- Hlt/RecoConf/python/RecoConf/mc_checking.py | 2 +- Hlt/RecoConf/python/RecoConf/standalone.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Hlt/RecoConf/python/RecoConf/mc_checking.py b/Hlt/RecoConf/python/RecoConf/mc_checking.py index 1dd2c9a18cc..036a82a3098 100644 --- a/Hlt/RecoConf/python/RecoConf/mc_checking.py +++ b/Hlt/RecoConf/python/RecoConf/mc_checking.py @@ -25,7 +25,7 @@ from PyConf.Algorithms import ( PrLHCbID2MCParticle, PrLHCbID2MCParticleVPUTFTMU, PrTrackAssociator, PrTrackChecker, PrUTHitChecker, TrackListRefiner, TrackResChecker, PrMultiplicityChecker, TrackIPResolutionCheckerNT, MCParticle2MCHitAlg, - PrTrackerDumper, PVDumper, + PrTrackerDumper, PVDumper, PrimaryVertexChecker, LHCb__Converters__RecVertex__v2__fromVectorLHCbRecVertices as FromVectorLHCbRecVertex) diff --git a/Hlt/RecoConf/python/RecoConf/standalone.py b/Hlt/RecoConf/python/RecoConf/standalone.py index 7a2da78bebe..292c702c2de 100644 --- a/Hlt/RecoConf/python/RecoConf/standalone.py +++ b/Hlt/RecoConf/python/RecoConf/standalone.py @@ -38,6 +38,7 @@ from PyConf.Algorithms import ( RawBankSizeMonitor, ) from .mc_checking import (get_track_checkers, get_fitted_tracks_checkers, + get_pv_checkers, get_best_tracks_checkers, get_track_checkers_multiplicity) from .reconstruction_objects import reconstruction -- GitLab From 70bf23c4843aca59e4928a057f962ed44f6f919f Mon Sep 17 00:00:00 2001 From: Agnieszka Dziurda Date: Tue, 23 Mar 2021 17:39:09 +0100 Subject: [PATCH 54/54] fixing formatting --- Hlt/RecoConf/python/RecoConf/standalone.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Hlt/RecoConf/python/RecoConf/standalone.py b/Hlt/RecoConf/python/RecoConf/standalone.py index 292c702c2de..fb1c4723a5a 100644 --- a/Hlt/RecoConf/python/RecoConf/standalone.py +++ b/Hlt/RecoConf/python/RecoConf/standalone.py @@ -38,8 +38,7 @@ from PyConf.Algorithms import ( RawBankSizeMonitor, ) from .mc_checking import (get_track_checkers, get_fitted_tracks_checkers, - get_pv_checkers, - get_best_tracks_checkers, + get_pv_checkers, get_best_tracks_checkers, get_track_checkers_multiplicity) from .reconstruction_objects import reconstruction from .protoparticles import (make_charged_protoparticles, -- GitLab