1 | #!/usr/bin/python |
---|
2 | # ================================================================== |
---|
3 | # python script for Geant4Py test |
---|
4 | # |
---|
5 | # gtest07 |
---|
6 | # - test for checking overlapped geometries |
---|
7 | # ================================================================== |
---|
8 | from Geant4 import * |
---|
9 | import g4py.ExN01pl, g4py.ParticleGun |
---|
10 | |
---|
11 | # ================================================================== |
---|
12 | # user actions in python |
---|
13 | # ================================================================== |
---|
14 | class MyDetectorConstruction(G4VUserDetectorConstruction): |
---|
15 | "My Detector Construction" |
---|
16 | |
---|
17 | def __init__(self): |
---|
18 | G4VUserDetectorConstruction.__init__(self) |
---|
19 | |
---|
20 | # ----------------------------------------------------------------- |
---|
21 | def Construct(self): |
---|
22 | # Python has automatic garbage collection system. |
---|
23 | # Geometry objects must be defined as GLOBAL not to be deleted. |
---|
24 | air= gNistManager.FindOrBuildMaterial("G4_AIR") |
---|
25 | |
---|
26 | # world volume |
---|
27 | global sld_world, lv_world, pv_world |
---|
28 | sld_world= G4Box("world", 1.*m, 1.*m, 1.*m) |
---|
29 | lv_world= G4LogicalVolume(sld_world, air, "world") |
---|
30 | pv_world= G4PVPlacement(G4Transform3D(), lv_world, "world", |
---|
31 | None, False, 0) |
---|
32 | |
---|
33 | # box |
---|
34 | global sld_box, lv_box, pv_box |
---|
35 | sld_box= G4Box("box", 10.*cm, 10.*cm, 10.*cm); |
---|
36 | lv_box= G4LogicalVolume(sld_box, air, "box") |
---|
37 | pv_box= G4PVPlacement(None, G4ThreeVector(), "box", lv_box, |
---|
38 | pv_world, False, 0, True) |
---|
39 | |
---|
40 | # cylinder |
---|
41 | global sld_cyl, lv_cyl, pv_cyl1, pv_cyl2, pv_cyl3 |
---|
42 | sld_cyl= G4Tubs("cylinder",0., 2.*cm, 2.*cm, 0., twopi) |
---|
43 | lv_cyl= G4LogicalVolume(sld_cyl, air, "cylinder") |
---|
44 | |
---|
45 | # |
---|
46 | # the following placements are !! overlapped !! |
---|
47 | # |
---|
48 | # doubly placed |
---|
49 | pv_cyl1= G4PVPlacement(None, G4ThreeVector(), "cylinder", lv_cyl, |
---|
50 | pv_world, False, 0, True) |
---|
51 | |
---|
52 | # overlaped |
---|
53 | pv_cyl2= G4PVPlacement(None, G4ThreeVector(10.*cm,0.,0.), |
---|
54 | "cylinder", lv_cyl, |
---|
55 | pv_world, False, 1, True) |
---|
56 | |
---|
57 | # sticked out |
---|
58 | pv_cyl3= G4PVPlacement(None, G4ThreeVector(10.*cm,0.,0.), |
---|
59 | "cylinder", lv_cyl, |
---|
60 | pv_box, False, 0, True) |
---|
61 | |
---|
62 | return pv_world |
---|
63 | |
---|
64 | # ================================================================== |
---|
65 | # main |
---|
66 | # ================================================================== |
---|
67 | # set geometry |
---|
68 | myDC= MyDetectorConstruction() |
---|
69 | gRunManager.SetUserInitialization(myDC) |
---|
70 | |
---|
71 | # minimal physics list |
---|
72 | g4py.ExN01pl.Construct() |
---|
73 | |
---|
74 | # set primary generator action |
---|
75 | g4py.ParticleGun.Construct() |
---|
76 | |
---|
77 | # initialize |
---|
78 | gRunManager.Initialize() # overlap should be detected !! |
---|
79 | |
---|
80 | |
---|