Import Geant4 9.4.0 source tree
This commit is contained in:
+191
@@ -0,0 +1,191 @@
|
||||
#!/usr/bin/python3
|
||||
# ==================================================================
|
||||
# python script for TestEm0 python version
|
||||
#
|
||||
# ==================================================================
|
||||
import Geant4 as g4
|
||||
import TestEm0
|
||||
|
||||
# ==================================================================
|
||||
# user actions in python
|
||||
# ==================================================================
|
||||
|
||||
|
||||
# ==================================================================
|
||||
# main
|
||||
# ==================================================================
|
||||
|
||||
myDC= TestEm0.DetectorConstruction()
|
||||
g4.gRunManager.SetUserInitialization(myDC)
|
||||
|
||||
myPL= TestEm0.PhysicsList()
|
||||
g4.gRunManager.SetUserInitialization(myPL)
|
||||
|
||||
# set user actions...
|
||||
myPGA= TestEm0.PrimaryGeneratorAction(myDC)
|
||||
g4.gRunManager.SetUserAction(myPGA)
|
||||
|
||||
myRA= TestEm0.RunAction(myDC,myPGA)
|
||||
|
||||
# set user action classes
|
||||
g4.gRunManager.SetUserAction(myRA)
|
||||
|
||||
|
||||
|
||||
g4.gRunManager.Initialize()
|
||||
|
||||
pg = g4.G4ParticleGun()
|
||||
|
||||
materialList = TestEm0.getMaterialTable();
|
||||
|
||||
particleList = TestEm0.getParticleTable()
|
||||
|
||||
enrgyList = ["eV","keV","MeV","GeV","TeV","PeV"]
|
||||
|
||||
cutsList = ["um", "mm" , "cm", "m", "km"]
|
||||
|
||||
|
||||
|
||||
|
||||
# GUI
|
||||
|
||||
from tkinter import *
|
||||
class App(Frame):
|
||||
|
||||
|
||||
def init(self):
|
||||
|
||||
# title and header
|
||||
title = Label(self, text="TestEm0 empowered by Geant4Py\n\n\n")
|
||||
title.grid(row=0, column=1, columnspan = 4)
|
||||
|
||||
# particle list box
|
||||
particle_title = Label(self, text="Particle")
|
||||
particle_title.grid(row=2, column=0)
|
||||
|
||||
particleFrame = Frame(self)
|
||||
scrollbar2 = Scrollbar(particleFrame)
|
||||
scrollbar2.pack(side = RIGHT, fill = Y)
|
||||
self.particleListBox = Listbox(particleFrame, yscrollcommand=scrollbar2.set, exportselection=FALSE,height = 6)
|
||||
self.particleListBox.pack(side = LEFT)
|
||||
for item in particleList:
|
||||
self.particleListBox.insert(END, item)
|
||||
scrollbar2.config(command=self.particleListBox.yview)
|
||||
particleFrame.grid(row=3, column=0)
|
||||
self.particleListBox.select_set(0)
|
||||
|
||||
# separator frame
|
||||
fblank = Frame(self,width = 40)
|
||||
fblank.grid(row=3,column=1)
|
||||
|
||||
# material list box
|
||||
detmaterial_title = Label(self, text="Material")
|
||||
detmaterial_title.grid(row=2, column=2)
|
||||
|
||||
materialFrame = Frame(self)
|
||||
scrollbar = Scrollbar(materialFrame)
|
||||
scrollbar.pack(side = RIGHT, fill = Y)
|
||||
self.materialListBox = Listbox(materialFrame, yscrollcommand=scrollbar.set, exportselection=FALSE, height = 6)
|
||||
self.materialListBox.pack(side = LEFT, fill = Y)
|
||||
for item in materialList:
|
||||
self.materialListBox.insert(END, item)
|
||||
scrollbar.config(command=self.materialListBox.yview)
|
||||
materialFrame.grid(row=3, column=2)
|
||||
self.materialListBox.select_set(0)
|
||||
|
||||
# separator frame
|
||||
fblank = Frame(self,width = 40)
|
||||
fblank.grid(row=3,column=3)
|
||||
|
||||
# energy
|
||||
fEnergy = Frame(self)
|
||||
energyLabel = Label(self, text="Energy")
|
||||
energyLabel.grid(row = 2, column = 4)
|
||||
|
||||
scrollbarEnergy = Scrollbar(fEnergy)
|
||||
scrollbarEnergy.pack(side = RIGHT, fill = Y)
|
||||
self.energyEntry = Entry(fEnergy, width= 8 );
|
||||
self.energyEntry.pack(side = TOP)
|
||||
self.energyEntry.insert(0, "1.0")
|
||||
|
||||
self.energyListBox = Listbox(fEnergy, yscrollcommand=scrollbarEnergy.set,exportselection=FALSE,width=8,height = 5)
|
||||
self.energyListBox.pack(side = BOTTOM )
|
||||
for item in enrgyList:
|
||||
self.energyListBox.insert(END, item)
|
||||
scrollbarEnergy.config(command=self.energyListBox.yview)
|
||||
fEnergy.grid(row = 3, column = 4 )
|
||||
self.energyListBox.select_set(0)
|
||||
|
||||
# separator frame
|
||||
fblank = Frame(self,width = 40)
|
||||
fblank.grid(row=3,column=5)
|
||||
|
||||
# cuts
|
||||
fCuts = Frame(self)
|
||||
cutsLabel = Label(self, text="Cuts", width= 8)
|
||||
cutsLabel.grid(row = 2, column = 6)
|
||||
|
||||
scrollbarCuts = Scrollbar(fCuts)
|
||||
scrollbarCuts.pack(side = RIGHT, fill = Y)
|
||||
self.cutsEntry = Entry(fCuts, width= 8);
|
||||
self.cutsEntry.pack(side = TOP)
|
||||
self.cutsEntry.insert(0, "1.0")
|
||||
|
||||
self.cutsListBox = Listbox(fCuts, width= 8 ,yscrollcommand=scrollbarCuts.set,exportselection=FALSE,height = 5)
|
||||
self.cutsListBox.pack(side = BOTTOM )
|
||||
for item in cutsList:
|
||||
self.cutsListBox.insert(END, item)
|
||||
scrollbarCuts.config(command=self.cutsListBox.yview)
|
||||
fCuts.grid(row = 3, column = 6 )
|
||||
self.cutsListBox.select_set(0)
|
||||
|
||||
# separator frame
|
||||
fblank = Frame(self,height = 40)
|
||||
fblank.grid(row=4,column=0)
|
||||
|
||||
# start a run button
|
||||
startBut = Button(self, bg="green", text="Start a run", command=self.cmd_beamOn)
|
||||
startBut.grid(row=5, column=2, sticky=W)
|
||||
|
||||
# exit button
|
||||
exitBut = Button(self, bg="grey", text="Exit", command=self.quit)
|
||||
exitBut.grid(row=5, column=6, sticky=E)
|
||||
|
||||
def __init__(self, master=None):
|
||||
Frame.__init__(self, master)
|
||||
self.init()
|
||||
self.grid()
|
||||
|
||||
def cmd_beamOn(self):
|
||||
|
||||
# get and set particle
|
||||
if self.particleListBox.curselection():
|
||||
index =int(self.particleListBox.curselection()[0])
|
||||
g4.gApplyUICommand("/gun/particle " + particleList[index])
|
||||
|
||||
# get and set detector Material
|
||||
if self.materialListBox.curselection():
|
||||
index =int(self.materialListBox.curselection()[0])
|
||||
g4.gApplyUICommand("/testem/det/setMat " + materialList[index])
|
||||
|
||||
# get and set energy
|
||||
energy = self.energyEntry.get()
|
||||
if self.energyListBox.curselection():
|
||||
index = int(self.energyListBox.curselection()[0])
|
||||
unity = enrgyList[index]
|
||||
g4.gApplyUICommand("/gun/energy " + energy + " " + unity)
|
||||
|
||||
# get and set cuts
|
||||
cuts = self.cutsEntry.get()
|
||||
if self.cutsListBox.curselection():
|
||||
index = int(self.cutsListBox.curselection()[0])
|
||||
unity = cutsList[index]
|
||||
g4.gApplyUICommand("/testem/phys/setCuts " + cuts + " " + unity)
|
||||
|
||||
# run beamOn
|
||||
g4.gRunManager.BeamOn(1)
|
||||
|
||||
|
||||
app = App()
|
||||
app.mainloop()
|
||||
|
||||
Reference in New Issue
Block a user