source: trunk/environments/g4py/tests/gtest05/test.py @ 1337

Last change on this file since 1337 was 1337, checked in by garnier, 14 years ago

tag geant4.9.4 beta 1 + modifs locales

  • Property svn:executable set to *
File size: 11.5 KB
Line 
1#!/usr/bin/python
2# ==================================================================
3# python script for Geant4Py test
4#
5#   gtest05
6#   - test for CSG geometry construction in Python
7# ==================================================================
8from Geant4 import *
9import g4py.ExN01pl, g4py.ParticleGun
10import os, math
11
12# ==================================================================
13# user actions in python
14# ==================================================================
15class MyDetectorConstruction(G4VUserDetectorConstruction):
16  "My Detector Construction"
17
18  def __init__(self):
19    G4VUserDetectorConstruction.__init__(self)
20    self.air= gNistManager.FindOrBuildMaterial("G4_AIR")
21    self.lv_object= None
22    self.world= self.ConstructWorld()
23   
24    self.va_red= G4VisAttributes(G4Color(1.,0.,0.))
25    self.va_cyan= G4VisAttributes(G4Color(0.,1.,1.))
26    self.va_green= G4VisAttributes(G4Color(0.,1.,0.))
27    self.va_blue= G4VisAttributes(G4Color(0.,0.,1.))
28    self.va_magenta= G4VisAttributes(G4Color(1.,0.,1.))
29
30  # -----------------------------------------------------------------
31  def ConstructWorld(self):
32    # Python has automatic garbage collection system.
33    # Geometry objects must be defined as GLOBAL not to be deleted.
34    global sld_world, lv_world, pv_world, va_world
35
36    sld_world= G4Box("world", 1.*m, 1.*m, 1.*m)
37    lv_world= G4LogicalVolume(sld_world, self.air, "world")   
38    pv_world= G4PVPlacement(G4Transform3D(), lv_world, "world",
39                            None, False, 0)
40
41    va_world= G4VisAttributes()
42    va_world.SetVisibility(False)
43    lv_world.SetVisAttributes(va_world)
44
45    # solid object (dummy)
46    global sld_sld, lv_sld, pv_sld
47    sld_sld= G4Box("dummy", 10.*cm, 10.*cm, 10.*cm)
48    self.lv_object= lv_sld= G4LogicalVolume(sld_sld, self.air, "dummy")
49    pv_sld= G4PVPlacement(None, G4ThreeVector(), "dummy", lv_sld,
50                          pv_world, False, 0)
51
52    return pv_world
53
54  # -----------------------------------------------------------------
55  def ConstructBox(self):
56    global sld_box
57    sld_box= G4Box("box", 30.*cm, 40.*cm, 60.*cm)
58    self.lv_object.SetSolid(sld_box)
59    self.lv_object.SetVisAttributes(self.va_red)
60    gRunManager.GeometryHasBeenModified()
61   
62  # -----------------------------------------------------------------
63  def ConstructTubs(self):
64    global sld_tubs
65    sld_tubs= G4Tubs("tubs", 10.*cm, 15.*cm, 20.*cm, 0., pi)
66    self.lv_object.SetSolid(sld_tubs)
67    self.lv_object.SetVisAttributes(self.va_cyan)
68    gRunManager.GeometryHasBeenModified()
69       
70  # -----------------------------------------------------------------
71  def ConstructCons(self):
72    global sld_cons
73    sld_cons= G4Cons("cons", 5.*cm, 10.*cm, 20.*cm, 25.*cm,
74                     40.*cm, 0., 4./3.*pi)
75    self.lv_object.SetSolid(sld_cons)
76    self.lv_object.SetVisAttributes(self.va_green)
77    gRunManager.GeometryHasBeenModified()
78
79  # -----------------------------------------------------------------
80  def ConstructPara(self):
81    global sld_para
82    sld_para= G4Para("para", 30.*cm, 40.*cm, 60.*cm, pi/4., pi/8., 0.)
83    self.lv_object.SetSolid(sld_para)
84    self.lv_object.SetVisAttributes(self.va_blue)
85    gRunManager.GeometryHasBeenModified()
86
87  # -----------------------------------------------------------------
88  def ConstructTrd(self):
89    global sld_trd
90    sld_trd= G4Trd("trd", 30.*cm, 10.*cm, 40.*cm, 15.*cm, 60.*cm)
91    self.lv_object.SetSolid(sld_trd)
92    self.lv_object.SetVisAttributes(self.va_blue)
93    gRunManager.GeometryHasBeenModified()
94
95  # -----------------------------------------------------------------
96  def ConstructTrap(self):
97    global sld_trap
98    sld_trap= G4Trap("trap", 60.*cm, 20.*degree, 5.*degree,
99                     40.*cm, 30.*cm, 40.*cm, 10.*degree,
100                     16.*cm, 10*cm, 14.*cm, 10.*deg)
101    self.lv_object.SetSolid(sld_trap)
102    self.lv_object.SetVisAttributes(self.va_green)
103    gRunManager.GeometryHasBeenModified()
104
105  # -----------------------------------------------------------------
106  def ConstructSphere(self):
107    global sld_sphere
108    sld_sphere= G4Sphere("sphere", 100.*cm, 120.*cm, 0., 180.*deg,
109                         0., 180.*deg)
110    self.lv_object.SetSolid(sld_sphere)
111    self.lv_object.SetVisAttributes(self.va_cyan)
112    gRunManager.GeometryHasBeenModified()
113
114  # -----------------------------------------------------------------
115  def ConstructOrb(self):
116    global sld_orb
117    sld_orb= G4Orb("orb", 100.*cm)   
118    self.lv_object.SetSolid(sld_orb)
119    self.lv_object.SetVisAttributes(self.va_red)
120    gRunManager.GeometryHasBeenModified()
121
122  # -----------------------------------------------------------------
123  def ConstructTorus(self):
124    global sld_torus
125    sld_torus= G4Torus("torus", 40.*cm, 60.*cm, 200.*cm, 0., 90.*deg)   
126    self.lv_object.SetSolid(sld_torus)
127    self.lv_object.SetVisAttributes(self.va_magenta)
128    gRunManager.GeometryHasBeenModified()
129
130  # -----------------------------------------------------------------
131  def ConstructPolycone(self):
132    zvec= G4doubleVector()
133    rinvec= G4doubleVector()
134    routvec= G4doubleVector()
135
136    zvec[:]= [ 5.*cm, 7.*cm, 9.*cm, 11.*cm, 25.*cm, 27.*cm, 29.*cm,
137               31.*cm, 35.*cm ]
138    rinvec[:]= [0.,0.,0.,0.,0.,0.,0.,0.,0.]
139    routvec[:]= [ 0., 10.*cm, 10.*cm, 5.*cm, 5.*cm, 10.*cm,
140                  10.*cm, 2.*cm, 2.*cm ]
141
142    global sld_pcon
143    sld_pcon= CreatePolycone("pcon", 0., twopi, 9, zvec, rinvec,routvec)
144    self.lv_object.SetSolid(sld_pcon)
145    self.lv_object.SetVisAttributes(self.va_cyan)
146    gRunManager.GeometryHasBeenModified()
147
148  # -----------------------------------------------------------------
149  def ConstructPolyhedra(self):
150    zvec= G4doubleVector()
151    rinvec= G4doubleVector()
152    routvec= G4doubleVector()
153
154    zvec[:]= [ 0., 5.*cm, 8.*cm, 13.*cm, 30.*cm, 32.*cm, 35.*cm ]
155    rinvec[:]= [0.,0.,0.,0.,0.,0.,0. ]
156    routvec[:]= [ 0., 15.*cm, 15.*cm, 4.*cm, 4.*cm, 10.*cm, 10.*cm ]
157
158    global sld_pgon
159    sld_pgon= CreatePolyhedra("pgon", 0., twopi, 5, 7, zvec, rinvec,routvec)
160    self.lv_object.SetSolid(sld_pgon)
161    self.lv_object.SetVisAttributes(self.va_green)
162    gRunManager.GeometryHasBeenModified()
163
164  # -----------------------------------------------------------------
165  def ConstructEllipticalTube(self):
166    global sld_et
167    sld_et= G4EllipticalTube("ellipticaltube", 5.*cm, 10.*cm, 20.*cm)   
168    self.lv_object.SetSolid(sld_et)
169    self.lv_object.SetVisAttributes(self.va_cyan)
170    gRunManager.GeometryHasBeenModified()
171
172  # -----------------------------------------------------------------
173  def ConstructEllipsoid(self):
174    global sld_es
175    sld_es= G4Ellipsoid("ellipsoid", 10.*cm, 20.*cm, 50.*cm,
176                        -10.*cm, 40.*cm)
177    self.lv_object.SetSolid(sld_es)
178    self.lv_object.SetVisAttributes(self.va_red)
179    gRunManager.GeometryHasBeenModified()
180
181  # -----------------------------------------------------------------
182  def ConstructEllipticalCone(self):
183    global sld_ec
184    sld_ec= G4EllipticalCone("ellipticalcone", 30.*cm, 60.*cm,
185                             50.*cm, 25.*cm)   
186    self.lv_object.SetSolid(sld_ec)
187    self.lv_object.SetVisAttributes(self.va_magenta)
188    gRunManager.GeometryHasBeenModified()
189
190  # -----------------------------------------------------------------
191  def ConstructHype(self):
192    global sld_hype
193    sld_hype= G4Hype("hype", 20.*cm, 30.*cm, 0.7, 0.7, 50.*cm)
194    self.lv_object.SetSolid(sld_hype)
195    self.lv_object.SetVisAttributes(self.va_blue)
196    gRunManager.GeometryHasBeenModified()
197
198  # -----------------------------------------------------------------
199  def ConstructTet(self):
200    global sld_tet
201    p1= G4ThreeVector(0., 0., math.sqrt(3.)*cm)
202    p2= G4ThreeVector(0., 2*math.sqrt(2./3.)*cm, -1./math.sqrt(3)*cm)
203    p3= G4ThreeVector(-math.sqrt(2.)*cm, -math.sqrt(2./3.)*cm,
204                      -1./math.sqrt(3)*cm)
205    p4= G4ThreeVector(math.sqrt(2)*cm, -math.sqrt(2./3.)*cm,
206                      -1./math.sqrt(3)*cm)
207
208    sld_tet= G4Tet("tet", 20.*p1, 20.*p2, 20.*p3, 20.*p4)
209    self.lv_object.SetSolid(sld_tet)
210    self.lv_object.SetVisAttributes(self.va_green)
211    gRunManager.GeometryHasBeenModified()
212
213  # -----------------------------------------------------------------
214  def ConstructTwistedBox(self):
215    global sld_twb
216    sld_twb= G4TwistedBox("twistedbox", 30.*deg, 30.*cm, 40.*cm, 60.*cm)
217    self.lv_object.SetSolid(sld_twb)
218    self.lv_object.SetVisAttributes(self.va_cyan)
219    gRunManager.GeometryHasBeenModified()
220
221  # -----------------------------------------------------------------
222  def ConstructTwistedTrap(self):
223    global sld_twtrp
224    sld_twtrp= G4TwistedTrap("twistedtrap", 30.*deg,
225                             60.*cm, 20.*deg, 5.*deg,
226                             40.*cm, 30.*cm, 40.*cm,
227                             16.*cm, 10.*cm, 14.*cm, 10.*deg)
228    self.lv_object.SetSolid(sld_twtrp)
229    self.lv_object.SetVisAttributes(self.va_blue)
230    gRunManager.GeometryHasBeenModified()
231
232  # -----------------------------------------------------------------
233  def ConstructTwistedTrd(self):
234    global sld_twtrd
235    sld_twtrd= G4TwistedTrd("twistedtrd", 30.*cm, 10.*cm,
236                            40.*cm, 15.*cm, 60.*cm, 30.*deg)
237    self.lv_object.SetSolid(sld_twtrd)
238    self.lv_object.SetVisAttributes(self.va_green)
239    gRunManager.GeometryHasBeenModified()
240
241  # -----------------------------------------------------------------
242  def ConstructTwistedTubs(self):
243    global sld_twt
244    sld_twt= G4TwistedTubs("twistedtube", 60.*deg,
245                           10.*cm, 15.*cm, 20.*cm, 90.*deg)
246    self.lv_object.SetSolid(sld_twt)
247    self.lv_object.SetVisAttributes(self.va_magenta)
248    gRunManager.GeometryHasBeenModified()
249
250  # -----------------------------------------------------------------
251  def Construct(self): # return the world volume
252    return self.world 
253 
254# ==================================================================
255# main
256# ==================================================================
257os.environ["G4VRML_DEST_DIR"]= "."
258os.environ["G4VRMLFILE_MAX_FILE_NUM"]= "1"
259os.environ["G4VRMLFILE_VIEWER"]= "echo"
260
261# set geometry
262myDC= MyDetectorConstruction()
263gRunManager.SetUserInitialization(myDC)
264
265# minimal physics list
266g4py.ExN01pl.Construct()
267
268# set primary generator action
269g4py.ParticleGun.Construct()
270
271# initialize
272gRunManager.Initialize()
273
274# visualization
275gApplyUICommand("/vis/open VRML2FILE")
276gApplyUICommand("/vis/scene/create")
277gApplyUICommand("/vis/scene/add/volume")
278gApplyUICommand("/vis/sceneHandler/attach")
279gApplyUICommand("/vis/scene/add/axes 0. 0. 0. 10. cm")
280
281# create a vrml file for each solid type
282f_list= (
283  ("g4box",            myDC.ConstructBox),
284  ("g4tubs",           myDC.ConstructTubs),
285  ("g4cons",           myDC.ConstructCons),
286  ("g4para",           myDC.ConstructPara),
287  ("g4trd",            myDC.ConstructTrd),
288  ("g4trap",           myDC.ConstructTrap),
289  ("g4sphere",         myDC.ConstructSphere),
290  ("g4orb",            myDC.ConstructOrb),
291  ("g4torus",          myDC.ConstructTorus),
292  ("g4polycone",       myDC.ConstructPolycone),
293  ("g4polyhedra",      myDC.ConstructPolyhedra),
294  ("g4ellipticaltube", myDC.ConstructEllipticalTube),
295  ("g4ellipsoid",      myDC.ConstructEllipsoid),
296  ("g4ellipticalcone", myDC.ConstructEllipticalCone),
297  ("g4hype",           myDC.ConstructHype),
298  ("g4tet",            myDC.ConstructTet),
299  ("g4twistedbox",     myDC.ConstructTwistedBox),
300  ("g4twistedtrap",    myDC.ConstructTwistedTrap),
301  ("g4twistedtrd",     myDC.ConstructTwistedTrd),
302  ("g4twistedtubs",    myDC.ConstructTwistedTubs)
303  )
304
305for s,f in f_list:
306  f.__call__()
307  gRunManager.BeamOn(1) 
308  fname= "%s.wrl" % (s)
309  os.rename("g4_00.wrl", fname)
310 
Note: See TracBrowser for help on using the repository browser.