57def execute() -> None:
58 N_MUONS = 2
59 canvas = ROOT.gROOT.FindObject("Root Canvas EnergyLoss")
60 if not canvas:
61 print("add particle flower not started!")
62 return
63 lsOfGlobals = ROOT.gROOT.GetListOfGlobals()
64 c1 = canvas.cd(1)
65 c1.Clear()
66
67
68 SHiPDisplay = eveGlobal.SHiPDisplay
69 v = ROOT.gEve.GetViewers().FindChild("Bar Embedded Viewer side")
70 vw = v.GetGLViewer()
71 cam = vw.CurrentCamera()
72 ed = v.GetEditorObject()
73 co = ed.GetCameraOverlay()
74 ax = co.GetAttAxis()
75 fr = vw.GetFrame()
76 test = ROOT.TGLVertex3(0.0, 0.0, 0.0)
77 vtest = cam.ViewportToWorld(test)
78 zmin = vtest.Z()
79 test = ROOT.TGLVertex3(fr.GetWidth(), 0.0, 0.0)
80 vtest = cam.ViewportToWorld(test)
81 zmax = vtest.Z()
82
83 checked_muons = set()
84 all_muons_hitlist = [collect_hits(lsOfGlobals, checked_muons) for _ in range(N_MUONS)]
85 all_muons_hitlist = list(filter(lambda x: x, all_muons_hitlist))
86 trajectories = [
87 trajectory_init(lsOfGlobals, "SHiP MuonTraj_" + str(index)) for index in range(len(all_muons_hitlist))
88 ]
89
90 emin, emax = 1e9, -1e9
91 for trajectory, hitlist in zip(trajectories, all_muons_hitlist):
92 for index, z in enumerate(sorted(hitlist.keys())):
93 E = hitlist[z][2]
94 trajectory.SetPoint(index, z, E)
95 emax = max(emax, E)
96 emin = min(emin, E)
97
98 emin, emax = emin * 0.9, emax * 1.1
99 print("zmin/max", zmin, zmax)
100 hist = c1.DrawFrame(zmin, emin, zmax, emax)
101 hist.SetYTitle("p (GeV/c)")
102 hist.SetXTitle("z cm")
103 xaxis = hist.GetXaxis()
104 xaxis.SetNdivisions(ax.GetNdivisions())
105 for trajectory in trajectories:
106 trajectory.Draw()
107 txt = ROOT.TLatex()
108 txt.DrawLatexNDC(0.6, 0.8, "event index:" + str(SHiPDisplay.n))
109 c1.Update()
110
111