From 3bc0da103456e7a0e04b97a6c292d27b9a56c89c Mon Sep 17 00:00:00 2001 From: Christopher Dilks <c-dilks@users.noreply.github.com> Date: Wed, 7 Jun 2023 19:37:00 -0400 Subject: [PATCH] feat: draw plots to PNGs --- benchmarks/rich/draw_benchmark.py | 112 ++++++++++++++++++++++++++++++ benchmarks/rich/run_benchmark.rb | 11 ++- 2 files changed, 122 insertions(+), 1 deletion(-) create mode 100755 benchmarks/rich/draw_benchmark.py diff --git a/benchmarks/rich/draw_benchmark.py b/benchmarks/rich/draw_benchmark.py new file mode 100755 index 00000000..8d1711b3 --- /dev/null +++ b/benchmarks/rich/draw_benchmark.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python +# Copyright 2023, Christopher Dilks +# Subject to the terms in the LICENSE file found in the top-level directory. + +import ROOT as r +import sys, getopt, pathlib + +# suppress graphics +r.gROOT.SetBatch(True) + +# ARGUMENTS +################################################################ + +ana_file_name = 'out/ana.edm4hep.root' +output_dir = 'out/ana_plots' + +helpStr = f''' +{sys.argv[0]} [OPTIONS] + + -i <input file>: specify an input file, e.g., hepmc + default: {ana_file_name} + + -o <output dir>: specify an output directory + default: {output_dir} + + -h: show this usage guide + + ''' + +try: + opts, args = getopt.getopt(sys.argv[1:], 'i:o:h') +except getopt.GetoptError: + print('\n\nERROR: invalid argument\n', helpStr, file=sys.stderr) + sys.exit(2) +for opt, arg in opts: + if(opt == '-i'): ana_file_name = arg.lstrip() + if(opt == '-o'): output_dir = arg.lstrip() + if(opt == '-h'): + print(helpStr) + sys.exit(2) +print(f''' +ana_file_name = {ana_file_name} +output_dir = {output_dir} +''') + + +# PLOTTING +################################################################ + +# make canvases +ana_file = r.TFile.Open(ana_file_name, "READ") +def make_canv(name, dimx=1200, dimy=800): + return r.TCanvas(name, name, dimx, dimy) +canv_dict = { + "photon_spectra": make_canv("photon_spectra"), + "digitization": make_canv("digitization"), + "pidAerogel": make_canv("pidAerogel"), + "pidGas": make_canv("pidGas"), + "pidMerged": make_canv("pidMerged"), +} + +# draw photon spectra +canv = canv_dict["photon_spectra"] +canv.Divide(1,2) +for i in range(2): + canv.GetPad(i+1).SetGrid(1,1) + canv.GetPad(i+1).SetLogy() +canv.cd(1) +ana_file.Get("phot/phot_spectrum_sim").Draw() +canv.cd(2) +ana_file.Get("digi/phot_spectrum_rec").Draw() + +# draw digitization +canv = canv_dict["digitization"] +canv.Divide(2,2) +for i in range(4): + canv.GetPad(i+1).SetGrid(1,1) + if(i<2): + canv.GetPad(i+1).SetLogy() + else: + canv.GetPad(i+1).SetLogz() +canv.cd(1) +ana_file.Get("digi/adc_dist").Draw() +canv.cd(2) +ana_file.Get("digi/tdc_dist").Draw() +canv.cd(3) +ana_file.Get("digi/tdc_vs_adc").Draw("COLZ") + +# draw CherenkovPID +for rad in ["Aerogel", "Gas", "Merged"]: + pid_name = f'pid{rad}' + canv = canv_dict[pid_name] + canv.Divide(2,2) + for i in range(4): + canv.GetPad(i+1).SetGrid(1,1) + canv.cd(1) + ana_file.Get(f'{pid_name}/npe_dist_{rad}').Draw() + canv.cd(2) + ana_file.Get(f'{pid_name}/theta_dist_{rad}').Draw() + canv.cd(3) + ana_file.Get(f'{pid_name}/thetaResid_dist_{rad}').Draw() + canv.cd(4) + ana_file.Get(f'{pid_name}/highestWeight_dist_{rad}').Draw() + + +# FINISH +################################################################ + +pathlib.Path(output_dir).mkdir(parents=True, exist_ok=True) +for name, canvas in canv_dict.items(): + canvas.SaveAs(f'{output_dir}/{name}.png') +ana_file.Close() diff --git a/benchmarks/rich/run_benchmark.rb b/benchmarks/rich/run_benchmark.rb index f93c05d7..0a1a748e 100755 --- a/benchmarks/rich/run_benchmark.rb +++ b/benchmarks/rich/run_benchmark.rb @@ -1,4 +1,4 @@ -#!/usr/bin/ruby +#!/usr/bin/env ruby # Copyright 2023, Christopher Dilks # Subject to the terms in the LICENSE file found in the top-level directory. @@ -201,6 +201,14 @@ analysis_cmd = [ analysis_cmd.append "-a #{opt.algos.join ' '}" if opt.algos.size > 0 analysis_cmd.append '-' + 'v'*opt.verbosity if opt.verbosity > 0 +# define analysis draw command +# --------------------------------------------------- +draw_cmd = [ + "#{__dir__}/draw_benchmark.py", + "-i #{opt.ana_file}", + "-o #{opt.ana_file.gsub(/edm4hep.root$/,"plots")}" +] + # execute commands # --------------------------------------------------- @@ -229,3 +237,4 @@ puts '-'*50 exe.call evgen_cmd, 'event generation', :sim exe.call recon_cmd, 'reconstruction', :rec exe.call analysis_cmd, 'analysis', :ana +exe.call draw_cmd, 'draw', :ana -- GitLab