560 def __init__(self) -> None:
561 self.master = tkinter.Tk()
562 self.master.title("SHiP Event Display GUI")
563 self.master.geometry("320x580+165+820")
564 self.fram1 = tkinter.Frame(self.master)
565 b = tkinter.Button(self.fram1, text="Next Event", command=self.nextEvent)
566 b.pack(fill=tkinter.BOTH, expand=1)
567 label = tkinter.Label(self.fram1, text="Event number:")
568 label["relief"] = tkinter.RAISED
569 entry = tkinter.Entry(self.fram1)
570 entry["foreground"] = "blue"
571 label.pack(side=tkinter.LEFT)
572 entry.pack(side=tkinter.RIGHT)
573 self.contents = tkinter.IntVar()
574
575 self.n = 0
576 self.contents.set(self.n)
577
578 entry["textvariable"] = self.contents
579
580
581
582 entry.bind("<Key-Return>", self.nextEvent)
583 self.lbut = {}
584 x = "withMC"
585 a = tkinter.IntVar()
586 if globals()["withMCTracks"]:
587 a.set(1)
588 else:
589 a.set(0)
590 self.lbut[x] = tkinter.Checkbutton(self.master, text="with MC Tracks", compound=tkinter.LEFT, variable=a)
591 self.lbut[x].var = a
592 self.lbut[x]["command"] = self.toggleMCTracks
593 self.lbut[x].pack(side=tkinter.TOP)
594 self.geoscene = ROOT.gEve.GetScenes().FindChild("Geometry scene")
595 for v in top.GetNodes():
596 x = v.GetName()
597 a = tkinter.IntVar()
598 assembly = "Assembly" in v.GetVolume().__str__()
599 if v.IsVisible() or (assembly and v.IsVisDaughters()):
600 a.set(1)
601 else:
602 a.set(0)
603 self.lbut[x] = tkinter.Checkbutton(self.master, text=x.replace("_1", ""), compound=tkinter.LEFT, variable=a)
604 self.lbut[x].var = a
605 self.lbut[x]["command"] = lambda x=x: self.toggle(x)
606 self.lbut[x].pack(side=tkinter.BOTTOM)
607 self.fram1.pack()
608
609 gEve = ROOT.gEve
610 slot = ROOT.TEveWindow.CreateWindowInTab(gEve.GetBrowser().GetTabLeft())
611 slot.SetShowTitleBar(ROOT.kFALSE)
612 packs = slot.MakePack()
613 packs.SetShowTitleBar(ROOT.kFALSE)
614 packs.SetElementName("SHiP actions")
615 packs.SetHorizontal()
616 slot = packs.NewSlot()
617 frame = slot.MakeFrame()
618 frame.SetElementName("commands")
619 frame.SetShowTitleBar(ROOT.kFALSE)
620 cf = frame.GetGUICompositeFrame()
621 hf = ROOT.TGVerticalFrame(cf)
622 hf.SetCleanup(ROOT.kLocalCleanup)
623 hf.SetWidth(150)
624 cf.AddFrame(hf)
625 guiFrame = ROOT.TGVerticalFrame(hf)
626 hf.AddFrame(guiFrame, ROOT.TGLayoutHints(ROOT.kLHintsExpandX))
627 guiFrame.SetCleanup(ROOT.kDeepCleanup)
628 b = ROOT.TGTextButton(guiFrame, "Add particle follower")
629 b.SetWidth(150)
630 b.SetToolTipText("start new window with top projection and energy loss")
631 b.SetCommand('TPython::ExecScript("' + os.environ["FAIRSHIP"] + '/macro/evd_addParticleFollower.py")')
632 guiFrame.AddFrame(b, ROOT.TGLayoutHints(ROOT.kLHintsExpandX))
633 bn = ROOT.TGTextButton(guiFrame, "fill histogram")
634 bn.SetWidth(150)
635 bn.SetToolTipText("Fill histogram with energy along flight path")
636 bn.SetCommand('TPython::ExecScript("' + os.environ["FAIRSHIP"] + '/macro/evd_fillEnergy.py")')
637 guiFrame.AddFrame(bn, ROOT.TGLayoutHints(ROOT.kLHintsExpandX))
638 bt = ROOT.TGTextButton(guiFrame, "switch transparent mode on/off")
639 bt.SetWidth(150)
640 bt.SetToolTipText("switch transparent mode on/off for better visibility of tracks")
641 bt.SetCommand('TPython::ExecScript("' + os.environ["FAIRSHIP"] + '/macro/evd_transparentMode.py")')
642 guiFrame.AddFrame(bt, ROOT.TGLayoutHints(ROOT.kLHintsExpandX))
643 bnx = ROOT.TGTextButton(guiFrame, "next event")
644 bnx.SetWidth(150)
645 bnx.SetToolTipText("click for next event")
646 bnx.SetCommand('TPython::ExecScript("' + os.environ["FAIRSHIP"] + '/macro/evd_nextEvent.py")')
647 guiFrame.AddFrame(bnx, ROOT.TGLayoutHints(ROOT.kLHintsExpandX))
648
649 cf.MapSubwindows()
650 cf.Layout()
651 cf.MapWindow()
652