Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
297 changes: 297 additions & 0 deletions 297 examples/smearing/draw.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,297 @@
#!/usr/bin/env python3

"""
Script to plot the content of the LUT in terms of pointing resolution, efficiency, momentum resolution
"""

from ROOT import gROOT, TLatex, TCanvas, TLegend, TColor, gPad
from ROOT import TFile
from os import path
import argparse


def main(reader_name,
tags,
lut_path,
ptmin,
ptmax,
ymin=None,
ymax=None,
tag_name=None,
logx=False,
logy=False,
leg_pos=[0.74, 0.2, 0.90, 0.4],
particles=None,
eta=0,
rmin=None,
add_eta_label=True,
add_alice3_label=True,
save=None,
background=False,
aod=None):
gROOT.LoadMacro(reader_name)
gROOT.LoadMacro("style.C")
reader_name = reader_name.split(".")[-2]
reader = getattr(__import__('ROOT', fromlist=[reader_name]),
reader_name)
style = getattr(__import__('ROOT', fromlist=["style"]),
"style")

style()

p = {"el": "e", "pi": "#pi", "ka": "K", "pr": "p"}
p_colors = {"el": "#e41a1c", "pi": "#377eb8",
"ka": "#4daf4a", "pr": "#984ea3"}
if particles is not None:
to_remove = []
for i in p:
if i not in particles:
to_remove.append(i)
for i in to_remove:
p.pop(i)

latex = TLatex()
latex.SetTextAlign(33)
canvas = reader_name
canvas = canvas.replace("lutRead_", "")
canvas = TCanvas(canvas, canvas, 800, 800)
canvas.Divide(2, 2)
drawn = [canvas]
drawn_graphs = {}
drawn_frames = {}
if ymin is None:
if "_dca" in reader_name:
ymin = 0.1
elif "_pt" in reader_name:
ymin = 1.
elif "_eff" in reader_name:
ymin = 0.
if ymax is None:
if "_dca" in reader_name:
ymax = 1e4
elif "_pt" in reader_name:
ymax = 100.
elif "_eff" in reader_name:
ymax = 115.

def adjust_pad():
if logx:
gPad.SetLogx()
if logy:
gPad.SetLogy()

counter = 1
leg = None
if tag_name is not None:
leg = TLegend(*leg_pos)
if add_eta_label:
label = f"#eta = {int(eta)}"
if rmin is not None:
label += " R_{min} = " + rmin
else:
leg.SetHeader()
leg.SetHeader(label)
leg.SetLineColor(0)
drawn.append(leg)

def draw_alice3_label(x=0.5, y=0.9):
latex = TLatex()
latex.SetTextAlign(13)
drawn.append(latex.DrawLatexNDC(x, y, "ALICE 3 study"))
for i in p:
c = f"{canvas.GetName()}_{i}"
c = TCanvas(c, c, 800, 800)
drawn.append(c)
adjust_pad()

frame = c.DrawFrame(ptmin, ymin,
ptmax, ymax, "")
frame.SetDirectory(0)
drawn_frames[i] = frame
g_list = []
extra = {}
cols = ['#e41a1c', '#377eb8', '#4daf4a',
'#984ea3', '#ff7f00', '#ffff33']
for k, j in enumerate(tags):
lut = f"{lut_path}/lutCovm.{i}.{j}.dat"
if not path.isfile(lut):
print("LUT file", lut, "does not exist")
return
g = reader(lut, eta)
if g.GetN() <= 0:
print("Skipping", g.GetName())
continue
if len(g_list) == 0:
frame.GetXaxis().SetTitle(g.GetXaxis().GetTitle())
frame.GetYaxis().SetTitle(g.GetYaxis().GetTitle())
col = TColor.GetColor(cols[len(g_list)])
g.SetLineColor(col)
g.SetLineStyle(1)
g.SetLineWidth(3)
g.Draw("samel")
if aod is not None:
if "_eff" in reader_name:
f_aod = TFile(aod, "READ")
extra[g.GetName()] = f_aod.Get(
"qa-tracking-efficiency-kaon/pt/num")
extra[g.GetName()].Divide(f_aod.Get("qa-tracking-efficiency-kaon/pt/num"),
f_aod.Get("qa-tracking-efficiency-kaon/pt/den"), 1, 1, "B")
extra[g.GetName()].Scale(100)
extra[g.GetName()].Draw("SAME")
extra[g.GetName()].SetDirectory(0)
f_aod.Close()
print("Drawing", g.GetName())
if tag_name is not None and counter == 1:
leg.AddEntry(g, tag_name[k], "l")
g_list.append(g)
drawn_graphs[i] = g_list
if len(g_list) <= 0:
print("Nothing drawn!")
continue
drawn.append(latex.DrawLatexNDC(0.9, 0.9, p[i]))
if leg is not None:
leg.Draw()
draw_alice3_label(.4, .91)
gPad.Update()
canvas.cd(counter)
clone = c.DrawClonePad()
if counter != 1:
l = gPad.GetListOfPrimitives()
for i in l:
cn = i.ClassName()
if cn == "TLegend":
l.Remove(i)
elif cn == "TLatex":
if "ALICE" in i.GetTitle():
l.Remove(i)
drawn.append(clone)
c.SaveAs(f"/tmp/{c.GetName()}.png")
gPad.Update()
counter += 1
if save is None:
canvas.SaveAs(f"/tmp/lut_{canvas.GetName()}.root")
else:
fo = TFile(save, "RECREATE")
fo.cd()
canvas.Write()
for i in drawn_graphs:
for j in drawn_graphs[i]:
j.Write()
if len(tags) == 1:
canvas_all_species = TCanvas("all_spec_"+canvas.GetName(),
"all_spec_"+canvas.GetName(), 800, 800)
drawn.append(canvas_all_species)
canvas_all_species.cd()
drawn_graphs_all_spec = {}
leg_all_spec = TLegend(*leg_pos)
leg_all_spec.SetNColumns(2)
leg_all_spec.SetLineColor(0)
drawn.append(leg_all_spec)
for i in drawn_graphs:
if canvas_all_species.GetListOfPrimitives().GetEntries() == 0:
drawn_frames[i].Draw()
g_list = []
for j in drawn_graphs[i]:
g_list.append(j.Clone())
g_list[-1].SetLineColor(TColor.GetColor(p_colors[i]))
g_list[-1].Draw("same")
leg_all_spec.AddEntry(g_list[-1], p[i], "L")
drawn_graphs_all_spec[i] = g_list
leg_all_spec.Draw()
if add_alice3_label:
draw_alice3_label()
latex = TLatex()
latex.SetTextAlign(13)
latex.SetTextSize(0.04)
if tag_name is not None:
drawn.append(latex.DrawLatexNDC(0.5, 0.80, tag_name[0]))
drawn.append(latex.DrawLatexNDC(0.5, 0.75, f"#eta = {int(eta)}" +
" R_{min} = " + rmin))

adjust_pad()
canvas_all_species.Update()
if not background:
input("Done, press enter to continue")


if __name__ == "__main__":
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("reader", type=str,
help="Reader macro to access the information e.g. lutRead_eff.C")
parser.add_argument("--path", "-p",
type=str,
default="/tmp/myluts/",
help="Path of the LUTs")
parser.add_argument("--particles", "-P",
type=str,
nargs="+",
default=None,
help="Particles to show e.g. el pi ka mu pr")
parser.add_argument("--ptmin",
type=float,
default=1e-2,
help="Minimum pT of the plot")
parser.add_argument("--ptmax",
type=float,
default=100.,
help="Maximum pT of the plot")
parser.add_argument("--tags", "-t", type=str, nargs="+",
default=[".5kG.20cm.its3", ".5kG.50cm.its3",
".5kG.100cm.its3", ".5kG.20cm.scenario3"],
help="Tags to collect")
parser.add_argument("--tags_name", "-T",
type=str, nargs="+",
default=None,
help="Title of the tags that can be used in legend making")
parser.add_argument("--eta",
type=float,
default=0,
help="Eta position")
parser.add_argument("--ymin",
type=float,
default=None,
help="Minimum y")
parser.add_argument("--ymax",
type=float,
default=None,
help="Maximum y")
parser.add_argument("--rmin",
type=str,
default=None,
help="Label for the minimum radius")
parser.add_argument("--aod",
type=str,
default=None,
help="Results from aod to show")
parser.add_argument("--save",
type=str,
default=None,
help="Name to save the figure to")
parser.add_argument("--leg_pos", "-l",
type=float, nargs="+",
default=[0.74, 0.2, 0.90, 0.4],
help="Position of the legend in NDC coordinates")
parser.add_argument("--logx", action="store_true",
help="Log x")
parser.add_argument("--logy", action="store_true",
help="Log y")
parser.add_argument("-b", action="store_true",
help="Background mode")
args = parser.parse_args()
main(args.reader,
args.tags,
lut_path=args.path,
ptmin=args.ptmin,
ptmax=args.ptmax,
logx=args.logx,
logy=args.logy,
tag_name=args.tags_name,
particles=args.particles,
leg_pos=args.leg_pos,
ymin=args.ymin,
ymax=args.ymax,
rmin=args.rmin,
eta=args.eta,
save=args.save,
background=args.b,
aod=args.aod)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.