1 | // $Id: README.TXT,v 1.1 1999/01/07 16:14:15 gunter Exp $ |
---|
2 | |
---|
3 | GEANT4 |
---|
4 | |
---|
5 | This directory contains several examples of GEANT4 main programs, |
---|
6 | from very simple cases (a purely batch program), |
---|
7 | to interactive programs based on the G4 command line interface, |
---|
8 | to more complex cases programs touching most of the G4 functionality. |
---|
9 | |
---|
10 | Those main programs provide just examples of initialization and usage |
---|
11 | of the GEANT4 toolkit classes, but the user is also free to define his |
---|
12 | own way and functions to initialize G4 and write the main program. |
---|
13 | |
---|
14 | A typical GEANT4 main program looks like the following: |
---|
15 | |
---|
16 | int main() { |
---|
17 | |
---|
18 | // Create Run Manager |
---|
19 | G4RunManager * runManager = new G4RunManager; |
---|
20 | |
---|
21 | // Register User Classes to the RunManager |
---|
22 | // Mandatory classes ----------------------- |
---|
23 | // Detector geometry |
---|
24 | runManager-> set_userInitialization(new MyDetectorConstruction); |
---|
25 | // Physics List |
---|
26 | runManager-> set_userInitialization(new MyPhysicsList); |
---|
27 | // Primary Generator |
---|
28 | runManager->set_userAction(new MyPrimaryGeneratorAction); |
---|
29 | |
---|
30 | // Optiolnal classes ----------------------- |
---|
31 | // User Actions |
---|
32 | runManager->set_userAction(new MyRunAction); |
---|
33 | runManager->set_userAction(new MyEventAction); |
---|
34 | runManager->set_userAction(new MyStackingAction); |
---|
35 | runManager->set_userAction(new MyTrackingAction); |
---|
36 | runManager->set_userAction(new MySteppingAction); |
---|
37 | |
---|
38 | |
---|
39 | // Define (G)UI terminal for interactive mode |
---|
40 | G4UIsession * session = new G4UIterminal; |
---|
41 | |
---|
42 | // User interactions |
---|
43 | session->sessionStart(); |
---|
44 | |
---|
45 | // Termination |
---|
46 | delete session; |
---|
47 | delete runManager; |
---|
48 | return 0; |
---|
49 | } |
---|
50 | |
---|
51 | First of all, user must create the RunManager. The RunManager controles |
---|
52 | run sequence by receiving messages from the user via UIsession. |
---|
53 | The following are a part of commands for run controle; |
---|
54 | /run/initialize * Initialize G4 kernel. |
---|
55 | /run/beamOn * Start a Run. |
---|
56 | /run/verbose * Set the verbose level of G4RunManager. |
---|
57 | /run/abort * Abort current run processing. |
---|
58 | For example, event loop will start by using "/run/beamOn" commands. |
---|
59 | |
---|
60 | In order to execute simulation, user must provide geometrical |
---|
61 | configuration of his own detector. In addition information of |
---|
62 | primary events must be given with a list of particle types and |
---|
63 | processes for them. |
---|
64 | |
---|
65 | So, user must provide his own classes derived from the following |
---|
66 | three abstract classes by implementing their pure virtual functions |
---|
67 | and register those user classes to the RunManager. |
---|
68 | |
---|
69 | G4VUserDetectorConstruction - Detector Geometry, Materials |
---|
70 | pure virtual functions |
---|
71 | G4VPhysicalVolume* construct() |
---|
72 | - construct detectors; |
---|
73 | normally implemented to serve as the entry point |
---|
74 | for the tree of methods describing solids, volumes, |
---|
75 | materials and sensitive detectors. |
---|
76 | |
---|
77 | G4VUserPhysicsList - Particle types and Processes |
---|
78 | pure virtual functions |
---|
79 | void constructParticle() |
---|
80 | - construct particles; |
---|
81 | normally implemented to select desired particle types. |
---|
82 | void constructPhysics() |
---|
83 | - construct procesess; |
---|
84 | normally implemented to select desired physics processes |
---|
85 | for each particle types and register them to the ProcessManager. |
---|
86 | void setCuts(G4double aValue) |
---|
87 | - sets a cut value; |
---|
88 | normally implemented to set cut value in range for all |
---|
89 | particle types. |
---|
90 | |
---|
91 | G4VUserPrimaryGeneratorAction - Event Generator selection |
---|
92 | pure virtual functions |
---|
93 | void generatePrimaries(G4Event* anEvent) |
---|
94 | - generate a event with primary particles |
---|
95 | normally implemented to select the desired event generation |
---|
96 | mechanism, such as the ParticleGun or the PYTHIA interface. |
---|
97 | |
---|
98 | In addition to the above mandatory classes, there are 5 user classes |
---|
99 | to customize the default functionality of GEANT4 simulation. |
---|
100 | |
---|
101 | G4UserRunAction - Actions for each Run |
---|
102 | G4UserEventAction - Actions for each Event |
---|
103 | G4UserStackingAction - Tracks Stacking selection |
---|
104 | G4UserTrackingAction - Actions for each Track |
---|
105 | G4UserSteppingAction - Actions for each Step |
---|
106 | |
---|
107 | The virtual functions belonging to the classes above are: |
---|
108 | |
---|
109 | G4UserRunAction - void beginOfRunAction(G4Run*) |
---|
110 | - void endOfRunAction(G4Run*) |
---|
111 | |
---|
112 | G4UserEventAction - void beginOfEventAction(G4Event*) |
---|
113 | - void endOfEventAction(G4Event*) |
---|
114 | |
---|
115 | G4UserStackingAction - G4ClassificationOfNewTrack |
---|
116 | classifyNewTrack(G4Track *const) |
---|
117 | - void newStage() |
---|
118 | - void prepareNewEvent() |
---|
119 | |
---|
120 | G4UserTrackingAction - void preUserTrackingAction() |
---|
121 | - void postUserTrackingAction() |
---|
122 | |
---|
123 | G4UserSteppingAction - void userSteppingAction() |
---|
124 | |
---|
125 | Finally, more details can be found in the header files and in the source |
---|
126 | code relative to the classes outlined above. |
---|
127 | |
---|
128 | |
---|
129 | |
---|
130 | |
---|
131 | |
---|
132 | |
---|