[1337] | 1 | #!/usr/bin/python |
---|
| 2 | # ================================================================== |
---|
| 3 | # python script for Geant4Py |
---|
| 4 | # |
---|
| 5 | # ExN03 : geant4/examples/novice/N03 |
---|
| 6 | # using site-module packages |
---|
| 7 | # ================================================================== |
---|
| 8 | from Geant4 import * |
---|
| 9 | import g4py.Qmaterials, g4py.NISTmaterials |
---|
| 10 | import g4py.ExN03geom |
---|
| 11 | import g4py.ExN03pl |
---|
| 12 | import g4py.ParticleGun, g4py.MedicalBeam |
---|
| 13 | import sys |
---|
| 14 | from time import * |
---|
| 15 | from subprocess import * |
---|
| 16 | import os |
---|
| 17 | |
---|
| 18 | # ================================================================== |
---|
| 19 | # main |
---|
| 20 | # ================================================================== |
---|
| 21 | # ------------------------------------------------------------------ |
---|
| 22 | # randum number |
---|
| 23 | # ------------------------------------------------------------------ |
---|
| 24 | rand_engine= Ranlux64Engine() |
---|
| 25 | HepRandom.setTheEngine(rand_engine) |
---|
| 26 | HepRandom.setTheSeed(20050830L) |
---|
| 27 | |
---|
| 28 | # ------------------------------------------------------------------ |
---|
| 29 | # setup for materials |
---|
| 30 | # ------------------------------------------------------------------ |
---|
| 31 | |
---|
| 32 | # NIST materials |
---|
| 33 | #g4py.NISTmaterials.Construct() |
---|
| 34 | |
---|
| 35 | # ------------------------------------------------------------------ |
---|
| 36 | # setup for geometry |
---|
| 37 | # ------------------------------------------------------------------ |
---|
| 38 | # normal way for constructing user geometry |
---|
| 39 | |
---|
| 40 | |
---|
| 41 | exN03geom= g4py.ExN03geom.ExN03DetectorConstruction() |
---|
| 42 | gRunManager.SetUserInitialization(exN03geom) |
---|
| 43 | |
---|
| 44 | # 2nd way, short-cut way |
---|
| 45 | |
---|
| 46 | #g4py.ExN01geom.Construct() |
---|
| 47 | #g4py.ExN03geom.Construct() |
---|
| 48 | |
---|
| 49 | # magnetic field |
---|
| 50 | #exN03geom.SetMagField(0.1 * tesla) |
---|
| 51 | |
---|
| 52 | # ------------------------------------------------------------------ |
---|
| 53 | # setup for physics list |
---|
| 54 | # ------------------------------------------------------------------ |
---|
| 55 | # normal way for constructing user physics list |
---|
| 56 | exN03PL= g4py.ExN03pl.ExN03PhysicsList() |
---|
| 57 | gRunManager.SetUserInitialization(exN03PL) |
---|
| 58 | |
---|
| 59 | # 2nd way, short-cut way |
---|
| 60 | #g4py.ExN01pl.Construct() |
---|
| 61 | #g4py.EMSTDpl.Construct() |
---|
| 62 | |
---|
| 63 | # ------------------------------------------------------------------ |
---|
| 64 | # setup for primary generator action |
---|
| 65 | # ------------------------------------------------------------------ |
---|
| 66 | # normal way for constructing user physics list |
---|
| 67 | #pgPGA= g4py.ParticleGun.ParticleGunAction() |
---|
| 68 | #gRunManager.SetUserAction(pgPGA) |
---|
| 69 | #pg= pgPGA.GetParticleGun() |
---|
| 70 | |
---|
| 71 | # 2nd way, short-cut way |
---|
| 72 | pg= g4py.ParticleGun.Construct() |
---|
| 73 | |
---|
| 74 | # set parameters of particle gun |
---|
| 75 | pg.SetParticleByName("e-") |
---|
| 76 | pg.SetParticleEnergy(50.*MeV) |
---|
| 77 | pg.SetParticlePosition(G4ThreeVector(-40.,0.,0.)*cm) |
---|
| 78 | pg.SetParticleMomentumDirection(G4ThreeVector(1.,0.,0.)) |
---|
| 79 | |
---|
| 80 | # medical beam |
---|
| 81 | #beam= MedicalBeam.Construct() |
---|
| 82 | |
---|
| 83 | # ------------------------------------------------------------------ |
---|
| 84 | # go... |
---|
| 85 | # ------------------------------------------------------------------ |
---|
| 86 | gRunManager.Initialize() |
---|
| 87 | |
---|
| 88 | # beamOn |
---|
| 89 | #gRunManager.BeamOn(3) |
---|
| 90 | |
---|
| 91 | |
---|
| 92 | #TEST |
---|
| 93 | #gProcessTable.SetProcessActivation("msc", 0) |
---|
| 94 | #gProcessTable.SetProcessActivation("conv", 0) |
---|
| 95 | #gProcessTable.SetProcessActivation("eBrem", 0) |
---|
| 96 | #gProcessTable.SetProcessActivation("eIoni", 0) |
---|
| 97 | #gProcessTable.SetProcessActivation("annihil", 0) |
---|
| 98 | |
---|
| 99 | |
---|
| 100 | # visualization |
---|
| 101 | # OGLSX, VRML and HEPREP sceneHandlers are all created with names |
---|
| 102 | gApplyUICommand("/vis/sceneHandler/create OGLSX OGLSX") |
---|
| 103 | gApplyUICommand("/vis/sceneHandler/create VRML2FILE VRML") |
---|
| 104 | gApplyUICommand("/vis/sceneHandler/create HepRepFile HEPREP") |
---|
| 105 | |
---|
| 106 | # OGLSX is the default so, viewer is created and volume is drawn |
---|
| 107 | gApplyUICommand("/vis/viewer/create OGLSX oglsxviewer") |
---|
| 108 | gApplyUICommand("/vis/drawVolume") |
---|
| 109 | gApplyUICommand("/vis/scene/add/trajectories") |
---|
| 110 | |
---|
| 111 | gApplyUICommand("/tracking/storeTrajectory 1") |
---|
| 112 | gApplyUICommand("/vis/scene/endOfEventAction accumulate") |
---|
| 113 | gApplyUICommand("/vis/scene/endOfRunAction accumulate") |
---|
| 114 | gApplyUICommand("/vis/viewer/select oglsxviewer") |
---|
| 115 | |
---|
| 116 | # viewers VRML and Wired are tested by their envs vars |
---|
| 117 | # if their envs var are set, then viewers are created and drawVolume |
---|
| 118 | |
---|
| 119 | global heprepViewer, heprepDir, heprepName |
---|
| 120 | heprepViewer = os.environ.get("G4HEPREPFILE_VIEWER") |
---|
| 121 | heprepDir = os.environ.get("G4HEPREPFILE_DIR") |
---|
| 122 | heprepName = os.environ.get("G4HEPREPFILE_NAME") |
---|
| 123 | if heprepViewer is not None: |
---|
| 124 | gApplyUICommand("/vis/viewer/create HEPREP wired") |
---|
| 125 | gApplyUICommand("/vis/drawVolume") |
---|
| 126 | |
---|
| 127 | # VRML viewers name is user defined |
---|
| 128 | vrmlDir = os.environ.get("G4VRML_DEST_DIR") |
---|
| 129 | vrmlViewer = os.environ.get("G4VRMLFILE_VIEWER") |
---|
| 130 | |
---|
| 131 | if vrmlViewer is not None: |
---|
| 132 | gApplyUICommand("/vis/viewer/create VRML vrmlviewer") |
---|
| 133 | gApplyUICommand("/vis/drawVolume") |
---|
| 134 | |
---|
| 135 | |
---|
| 136 | |
---|
| 137 | # creating widgets using grid layout |
---|
| 138 | |
---|
| 139 | from Tkinter import * |
---|
| 140 | |
---|
| 141 | class App(Frame): |
---|
| 142 | |
---|
| 143 | g4pipe = 0 |
---|
| 144 | |
---|
| 145 | def init(self): |
---|
| 146 | |
---|
| 147 | #title and header row=0, 1 |
---|
| 148 | title = Label(self, text="exampleN03") |
---|
| 149 | title.grid(row=0, column=1, columnspan=3) |
---|
| 150 | header = Label(self, text="empowered by \n Geant4Py") |
---|
| 151 | header.grid(row=1, column=1, columnspan=3) |
---|
| 152 | # number of layers |
---|
| 153 | layerLabel = Label(self, bg="green", text="No of layers") |
---|
| 154 | self.layerVar=IntVar() |
---|
| 155 | self.layerVar.set(10) |
---|
| 156 | layer = Scale(self, orient=HORIZONTAL, length=400, from_=0, to=10, tickinterval=1, resolution=1, variable=self.layerVar ) |
---|
| 157 | layerLabel.grid(row=2, column=0, sticky=W) |
---|
| 158 | layer.grid(row=2, column=1, columnspan=5, sticky=W) |
---|
| 159 | |
---|
| 160 | #absorber material selection row=3 |
---|
| 161 | absorbermaterialLabel = Label(self, bg="green", text="Absorber Material") |
---|
| 162 | absorbermaterialLabel.grid(row=3, column=0, sticky=W) |
---|
| 163 | self.absorbermaterialVar = StringVar() |
---|
| 164 | self.absorbermaterialVar.set("Lead") |
---|
| 165 | ra1 = { } |
---|
| 166 | pos=1 |
---|
| 167 | for i in ("Aluminium", "Lead"): |
---|
| 168 | ra1[i] = Radiobutton(self, text=i, variable=self.absorbermaterialVar, value=i) |
---|
| 169 | ra1[i].grid(row=3, column=pos, sticky=W) |
---|
| 170 | pos=pos+1 |
---|
| 171 | |
---|
| 172 | #absorber thickness row=4 |
---|
| 173 | absorberthickLabel = Label(self, bg="green", text="Thickness (mm)") |
---|
| 174 | self.absorberthickVar = DoubleVar() |
---|
| 175 | self.absorberthickVar.set(10.0) |
---|
| 176 | absorberthick = Scale(self, orient=HORIZONTAL, length=400, from_=0., to=100., resolution=0.05, tickinterval=10.0, digits=4, variable=self.absorberthickVar) |
---|
| 177 | absorberthickLabel.grid(row=4, column=0, sticky=W) |
---|
| 178 | absorberthick.grid(row=4, column=1, columnspan=5, sticky=W) |
---|
| 179 | |
---|
| 180 | |
---|
| 181 | #gap material selection row=5 |
---|
| 182 | gapmaterialLabel = Label(self, bg="green", text="Gap Material") |
---|
| 183 | gapmaterialLabel.grid(row=5, column=0, sticky=W) |
---|
| 184 | self.gapmaterialVar = StringVar() |
---|
| 185 | self.gapmaterialVar.set("liquidArgon") |
---|
| 186 | ra2 = { } |
---|
| 187 | pos=1 |
---|
| 188 | for i in ("liquidArgon","Scintillator", "Air", "Aerogel", "Galactic" ): |
---|
| 189 | ra2[i] = Radiobutton(self, text=i, variable=self.gapmaterialVar, value=i) |
---|
| 190 | ra2[i].grid(row=5, column=pos, sticky=W) |
---|
| 191 | pos=pos+1 |
---|
| 192 | |
---|
| 193 | #gap thickness row=6 |
---|
| 194 | gapthickLabel = Label(self, bg="green", text="Thickness (mm)") |
---|
| 195 | self.gapthickVar = DoubleVar() |
---|
| 196 | self.gapthickVar.set(5.0) |
---|
| 197 | gapthick = Scale(self, orient=HORIZONTAL, length=400, from_=0., to=100., resolution=0.05, tickinterval=10.0, digits=4, variable=self.gapthickVar) |
---|
| 198 | gapthickLabel.grid(row=6, column=0, sticky=W) |
---|
| 199 | gapthick.grid(row=6, column=1, columnspan=5, sticky=W) |
---|
| 200 | |
---|
| 201 | #calorSizeYZ row=7 |
---|
| 202 | calorsizeYZLabel = Label(self, bg="green", text="SizeYZ (mm)") |
---|
| 203 | self.calorsizeYZVar = DoubleVar() |
---|
| 204 | self.calorsizeYZVar.set(100.0) |
---|
| 205 | calorsizeYZ = Scale(self, orient=HORIZONTAL, length=400, from_=0., to=200., resolution=0.05, tickinterval=20.0, digits=4, variable=self.calorsizeYZVar) |
---|
| 206 | calorsizeYZLabel.grid(row=7, column=0, sticky=W) |
---|
| 207 | calorsizeYZ.grid(row=7, column=1, columnspan=5, sticky=W) |
---|
| 208 | |
---|
| 209 | |
---|
| 210 | #particle row=8 |
---|
| 211 | particleLabel = Label(self, bg="green", text="Particle") |
---|
| 212 | particleLabel.grid(row=8, column=0, sticky=W) |
---|
| 213 | self.particleVar = StringVar() |
---|
| 214 | self.particleVar.set("e-") |
---|
| 215 | ra1 = { } |
---|
| 216 | pos1=1 |
---|
| 217 | for i in ("proton", "gamma", "e-", "e+", "mu-", "mu+"): |
---|
| 218 | ra1[i] = Radiobutton(self, text=i, variable=self.particleVar, value=i) |
---|
| 219 | ra1[i].grid(row=8, column=pos1, sticky=W) |
---|
| 220 | pos1=pos1+1 |
---|
| 221 | |
---|
| 222 | #energy row=9 |
---|
| 223 | energyLabel = Label(self, bg="green", text="Energy (MeV)") |
---|
| 224 | |
---|
| 225 | self.energyVar=StringVar() |
---|
| 226 | self.energyVar.set(50) |
---|
| 227 | energy = Scale(self, orient=HORIZONTAL, length=400, from_=0., to=1000., tickinterval=100.0, resolution=0.1, variable=self.energyVar, digits=5 ) |
---|
| 228 | energyLabel.grid(row=9, column=0, sticky=W) |
---|
| 229 | energy.grid(row=9, column=1, columnspan=5, sticky=W) |
---|
| 230 | |
---|
| 231 | #number of event row=10 |
---|
| 232 | eventLabel = Label(self, bg="green", text="Events") |
---|
| 233 | self.eventVar=IntVar() |
---|
| 234 | self.eventVar.set(3) |
---|
| 235 | event = Scale(self, orient=HORIZONTAL, length=400, from_=0, to=100, tickinterval=10, resolution=1, variable=self.eventVar ) |
---|
| 236 | eventLabel.grid(row=10, column=0, sticky=W) |
---|
| 237 | event.grid(row=10, column=1, columnspan=5, sticky=W) |
---|
| 238 | |
---|
| 239 | #start a run button row=0 |
---|
| 240 | startBut = Button(self, bg="orange", text="Start a run", command=self.cmd_beamOn) |
---|
| 241 | startBut.grid(row=0, column=0, sticky=W) |
---|
| 242 | |
---|
| 243 | #Zoom in/out Pan X Y row=13 |
---|
| 244 | # visLabel = Label(self, text="viewer", bg="orange") |
---|
| 245 | # expandBut = Button(self, text="Zoom in", command=self.cmd_expand) |
---|
| 246 | # shrinkBut = Button(self, text="Zoom out", command=self.cmd_shrink) |
---|
| 247 | # visLabel.grid(row=13, column=0, sticky=W) |
---|
| 248 | # expandBut.grid(row=13, column=1, sticky=W) |
---|
| 249 | # shrinkBut.grid(row=13, column=2, sticky=W) |
---|
| 250 | # panLabel = Label(self, text="Pan X Y(mm)") |
---|
| 251 | # self.panXYVar = StringVar() |
---|
| 252 | # panXYEnt = Entry(self, textvariable=self.panXYVar, width=6) |
---|
| 253 | # panBut = Button(self, bg="orange", text="OK", command=self.cmd_pan) |
---|
| 254 | # panLabel.grid(row=13, column=3, sticky=W) |
---|
| 255 | # panXYEnt.grid(row=13, column=4) |
---|
| 256 | # panBut.grid(row=13, column=5) |
---|
| 257 | |
---|
| 258 | # process activate row 11 - 13 |
---|
| 259 | processLabel=Label(self, text="Process on/off", bg="green") |
---|
| 260 | processLabel.grid(row=11, column=0, sticky=W) |
---|
| 261 | procTab = {} |
---|
| 262 | |
---|
| 263 | self.processList = ["phot", "compt", "conv", "msc", "eIoni", "eBrem", "annihil","muIoni", "muBrems", "hIoni"] |
---|
| 264 | pos=1 |
---|
| 265 | self.processVar = {} |
---|
| 266 | for i in self.processList: |
---|
| 267 | self.processVar[i] = IntVar() |
---|
| 268 | procTab[i] = Checkbutton(self, text=i, variable=self.processVar[i], command=self.cmd_setProcess) |
---|
| 269 | if pos <= 3: |
---|
| 270 | procTab[i].grid(row=11, column=pos, sticky=W) |
---|
| 271 | if 4<= pos <= 7: |
---|
| 272 | procTab[i].grid(row=12, column=pos-3, sticky=W) |
---|
| 273 | if pos >= 8: |
---|
| 274 | procTab[i].grid(row=13, column=pos-7, sticky=W) |
---|
| 275 | pos=pos+1 |
---|
| 276 | procTab[i].select() |
---|
| 277 | # set cuts row 14 |
---|
| 278 | cutLabel = Label(self, bg="green", text="Cut (mm)") |
---|
| 279 | |
---|
| 280 | self.cutVar=DoubleVar() |
---|
| 281 | self.cutVar.set(1.) |
---|
| 282 | cut = Scale(self, orient=HORIZONTAL, length=400, from_=0., to=10., tickinterval=1., resolution=0.005, variable=self.cutVar, digits=5 ) |
---|
| 283 | cutLabel.grid(row=14, column=0, sticky=W) |
---|
| 284 | cut.grid(row=14, column=1, columnspan=5, sticky=W) |
---|
| 285 | |
---|
| 286 | # set mag field row 15 |
---|
| 287 | magLabel = Label(self, bg="green", text="Magnetic (T)") |
---|
| 288 | |
---|
| 289 | self.magVar=DoubleVar() |
---|
| 290 | self.magVar.set(0.) |
---|
| 291 | mag = Scale(self, orient=HORIZONTAL, length=400, from_=0., to=5., tickinterval=1., resolution=0.1, variable=self.magVar, digits=3 ) |
---|
| 292 | magLabel.grid(row=15, column=0, sticky=W) |
---|
| 293 | mag.grid(row=15, column=1, columnspan=5, sticky=W) |
---|
| 294 | |
---|
| 295 | |
---|
| 296 | # viewer selection row=16 |
---|
| 297 | viewerLabel = Label(self, bg="green", text="Viewer") |
---|
| 298 | viewerLabel.grid(row=16, column=0, sticky=W) |
---|
| 299 | self.viewerVar = StringVar() |
---|
| 300 | self.viewerVar.set("") |
---|
| 301 | stateOfViewer = {"OpenGL":"normal", "VRML":"normal", "Wired":"normal"} |
---|
| 302 | if vrmlViewer is None: stateOfViewer["VRML"] = "disabled" |
---|
| 303 | if heprepViewer is None: stateOfViewer["Wired"] = "disabled" |
---|
| 304 | viewers = { } |
---|
| 305 | pos=1 |
---|
| 306 | for i in ("OpenGL", "VRML", "Wired"): |
---|
| 307 | viewers[i] = Radiobutton(self, text=i, variable=self.viewerVar, value=i, command=self.cmd_viewer, state=stateOfViewer[i]) |
---|
| 308 | viewers[i].grid(row=16, column=pos, sticky=W) |
---|
| 309 | pos=pos+1 |
---|
| 310 | |
---|
| 311 | |
---|
| 312 | #Geant4 command entry row = 17 |
---|
| 313 | g4comLabel = Label(self, text="Geant4 command", bg="orange") |
---|
| 314 | self.g4commandVar = StringVar() |
---|
| 315 | commandEntry = Entry(self, textvariable=self.g4commandVar, width=15) |
---|
| 316 | self.g4commandVar.set("/vis/viewer/zoom 1.2") |
---|
| 317 | comBut = Button(self, bg="orange", text="Execute", command=self.cmd_g4command) |
---|
| 318 | g4comLabel.grid(row=17, column=0, sticky=W) |
---|
| 319 | commandEntry.grid(row=17, column=1, columnspan=3, sticky=E+W) |
---|
| 320 | comBut.grid(row=17, column=5) |
---|
| 321 | |
---|
| 322 | #exit row = 0 |
---|
| 323 | exitBut = Button(self, bg="red", text="End all", command=sys.exit) |
---|
| 324 | exitBut.grid(row=0, column=5, sticky=W) |
---|
| 325 | |
---|
| 326 | #on Run butto do... |
---|
| 327 | def cmd_beamOn(self): |
---|
| 328 | exN03geom.SetNbOfLayers(self.layerVar.get()) |
---|
| 329 | exN03geom.SetAbsorberMaterial(self.absorbermaterialVar.get()) |
---|
| 330 | exN03geom.SetAbsorberThickness(self.absorberthickVar.get() * mm/2.0) |
---|
| 331 | exN03geom.SetGapMaterial(self.gapmaterialVar.get()) |
---|
| 332 | exN03geom.SetGapThickness(self.gapthickVar.get() * mm/2.0) |
---|
| 333 | exN03geom.SetCalorSizeYZ(self.calorsizeYZVar.get() * mm) |
---|
| 334 | position = -self.layerVar.get()*(self.absorberthickVar.get() + self.gapthickVar.get())*1.2 |
---|
| 335 | |
---|
| 336 | exN03geom.UpdateGeometry() |
---|
| 337 | exN03PL.SetDefaultCutValue(self.cutVar.get() * mm) |
---|
| 338 | exN03PL.SetCutsWithDefault() |
---|
| 339 | exN03geom.SetMagField(self.magVar.get() * tesla) |
---|
| 340 | |
---|
| 341 | print "Now geometry updated" |
---|
| 342 | |
---|
| 343 | |
---|
| 344 | self.cmd_particle(self.particleVar.get()) |
---|
| 345 | self.cmd_energy(self.energyVar.get()) |
---|
| 346 | |
---|
| 347 | print position |
---|
| 348 | |
---|
| 349 | eventNum = self.eventVar.get() |
---|
| 350 | for i in range(eventNum): |
---|
| 351 | |
---|
| 352 | pg.SetParticlePosition(G4ThreeVector(position*mm, (i-eventNum/2)*5.*mm, 0.*cm)) |
---|
| 353 | gRunManager.BeamOn(1) |
---|
| 354 | sleep(0.01) |
---|
| 355 | gApplyUICommand("/vis/viewer/update") |
---|
| 356 | |
---|
| 357 | def cmd_setProcess(self): |
---|
| 358 | for i in self.processList: |
---|
| 359 | if self.processVar[i].get() == 0: |
---|
| 360 | gProcessTable.SetProcessActivation(i, 0) |
---|
| 361 | print "Process " + i + " inactivated" |
---|
| 362 | else: |
---|
| 363 | gProcessTable.SetProcessActivation(i, 1) |
---|
| 364 | print "Process " + i + " activated" |
---|
| 365 | |
---|
| 366 | def cmd_g4command(self): |
---|
| 367 | gApplyUICommand(self.g4commandVar.get()) |
---|
| 368 | |
---|
| 369 | def cmd_particle(self, particle): |
---|
| 370 | gApplyUICommand("/gun/particle " + particle) |
---|
| 371 | |
---|
| 372 | |
---|
| 373 | def cmd_energy(self, penergy): |
---|
| 374 | gApplyUICommand("/gun/energy " + penergy + " MeV") |
---|
| 375 | |
---|
| 376 | |
---|
| 377 | def cmd_viewer(self): |
---|
| 378 | if self.viewerVar.get() == "OpenGL": |
---|
| 379 | gApplyUICommand("/vis/viewer/select oglsxviewer") |
---|
| 380 | gApplyUICommand("/vis/scene/add/trajectories") |
---|
| 381 | |
---|
| 382 | gApplyUICommand("/tracking/storeTrajectory 1") |
---|
| 383 | gApplyUICommand("/vis/scene/endOfEventAction accumulate") |
---|
| 384 | gApplyUICommand("/vis/scene/endOfRunAction accumulate") |
---|
| 385 | |
---|
| 386 | if self.viewerVar.get() == "VRML": |
---|
| 387 | gApplyUICommand("/vis/viewer/select vrmlviewer") |
---|
| 388 | gApplyUICommand("/vis/scene/add/trajectories") |
---|
| 389 | |
---|
| 390 | gApplyUICommand("/tracking/storeTrajectory 1") |
---|
| 391 | gApplyUICommand("/vis/scene/endOfEventAction accumulate") |
---|
| 392 | gApplyUICommand("/vis/scene/endOfRunAction accumulate") |
---|
| 393 | |
---|
| 394 | if self.viewerVar.get() == "Wired": |
---|
| 395 | gApplyUICommand("/vis/viewer/select wired") |
---|
| 396 | gApplyUICommand("/vis/scene/add/trajectories") |
---|
| 397 | |
---|
| 398 | gApplyUICommand("/tracking/storeTrajectory 1") |
---|
| 399 | gApplyUICommand("/vis/scene/endOfEventAction accumulate") |
---|
| 400 | gApplyUICommand("/vis/scene/endOfRunAction accumulate") |
---|
| 401 | |
---|
| 402 | if self.g4pipe == 0: |
---|
| 403 | Popen(heprepViewer + " -file " + heprepDir + "/" + heprepName +".heprep", shell=True) |
---|
| 404 | self.g4pipe = 1 |
---|
| 405 | |
---|
| 406 | |
---|
| 407 | def cmd_expand(self): |
---|
| 408 | gApplyUICommand("/vis/viewer/zoom 1.2") |
---|
| 409 | |
---|
| 410 | def cmd_pan(self): |
---|
| 411 | gApplyUICommand("/vis/viewer/pan " + self.panXYVar.get() + " " + " mm") |
---|
| 412 | |
---|
| 413 | |
---|
| 414 | def cmd_shrink(self): |
---|
| 415 | gApplyUICommand("/vis/viewer/zoom 0.8") |
---|
| 416 | |
---|
| 417 | |
---|
| 418 | |
---|
| 419 | def __init__(self, master=None): |
---|
| 420 | Frame.__init__(self, master) |
---|
| 421 | self.init() |
---|
| 422 | self.grid() |
---|
| 423 | |
---|
| 424 | |
---|
| 425 | app = App() |
---|
| 426 | app.mainloop() |
---|