Version:
[ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]
1 -------------------------------------------------------------------
2
3 =========================================================
4 Geant4 - an Object-Oriented Toolkit for Simulation in HEP
5 =========================================================
6
7 Example B3
8 ----------
9
10 This example simulates schematically a Positron Emitted Tomography system.
11
12 1- GEOMETRY DEFINITION
13
14 The support of gamma detection are scintillating crystals. A small number
15 of such crystals are optically grouped in a matrix of crystals. In
16 this example, individual crystals are not described; only the matrix of
17 crystals is and it is still called 'Crystal' hereafter.
18
19 Crystals are circularly arranged to form a ring. Few rings make up the full
20 detector (gamma camera). This is done by positionning Crystals in
21 Ring with an appropriate rotation matrix. Several copies of Ring are
22 then placed in the full detector.
23
24 The head of a patient is schematised as a homogeneous cylinder of brain
25 tissue, placed at the center of full detector.
26
27 The Crystal material, Lu2SiO5, is not included in the G4Nist database.
28 Therefore, it is explicitly built in DefineMaterials().
29
30 2- PHYSICS LIST
31
32 The physics list contains standard electromagnetic processes and the
33 radioactiveDecay module for GenericIon. It is defined in the B3::PhysicsList
34 class as a Geant4 modular physics list with registered physics builders
35 provided in Geant4:
36 - G4DecayPhysics - defines all particles and their decay processes
37 - G4RadioactiveDecayPhysics - defines radioactiveDecay for GenericIon
38 - G4EmStandardPhysics - defines all EM standard processes
39
40 This physics list requires data files for:
41 - low energy electromagnetic processes which path is defined via
42 the G4LEDATA envirnoment variable
43 - nuclides properties which path is defined via
44 the G4ENSDFSTATEDATA envirnoment variable
45 - radioactive decay hadronic processes which path is defined via
46 the G4RADIOACTIVEDATA envirnoment variable.
47
48 See more on installation of the datasets in Geant4 Installation Guide,
49 Chapter 3.3: Note On Geant4 Datasets:
50 http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides
51 /InstallationGuide/html/ch03s03.html
52 3- ACTION INITALIZATION
53
54 B3[a,b]::ActionInitialization class instantiates and registers to Geant4 kernel
55 all user action classes.
56
57 While in sequential mode the action classes are instatiated just once,
58 via invoking the method:
59 B3[a,b]::ActionInitialization::Build()
60 in multi-threading mode the same method is invoked for each thread worker
61 and so all user action classes are defined thread-local.
62
63 A run action class is instantiated both thread-local
64 and global that's why its instance is created also in the method
65 B3[a,b]::ActionInitialization::BuildForMaster()
66 which is invoked only in multi-threading mode.
67
68 4- PRIMARY GENERATOR
69
70 The default particle beam is an ion (F18), at rest, randomly distributed
71 within a zone inside a patient and is defined in
72 B3::PrimaryGeneratorAction::GeneratePrimaries().
73 The type of a primary particle can be changed with G4ParticleGun commands
74 (see run2.mac).
75
76 5- DETECTOR RESPONSE: scorers
77
78 A 'good' event is an event in which an identical energy of 511 keV is
79 deposited in two separate Crystals. A count of the number of such events
80 corresponds to a measure of the efficiency of the PET system.
81 The total dose deposited in a patient during a run is also computed.
82
83 Scorers are defined in B3::DetectorConstruction::ConstructSDandField(). There are
84 two G4MultiFunctionalDetector objects: one for the Crystal (EnergyDeposit),
85 and one for the Patient (DoseDeposit)
86
87 The scorers hits are saved in form of ntuples in a Root file using Geant4
88 analysis tools. This feature is activated in the main () function with instantiating
89 G4TScoreNtupleWriter.
90
91 Two variants of accumulation event statistics in a run are demonstrated
92 in this example:
93
94 B3a:
95
96 At the end of event, the values acummulated in B3a::EventAction are passed
97 in B3a::RunAction and summed over the whole run (see B3a::EventAction::EndOfevent()).
98 In multi-threading mode the data accumulated in G4Accumulable objects per
99 workers is merged to the master in B3a::RunAction::EndOfRunAction() and the final
100 result is printed on the screen.
101
102 G4Accumulable<> type instead of G4double and G4int types is used for the B3a::RunAction
103 data members in order to facilitate merging of the values accumulated on workers
104 to the master. Currently the accumulables have to be registered to G4AccumulablesManager
105 and G4AccumulablesManager::Merge() has to be called from the users code. This is planned
106 to be further simplified with a closer integration of G4Accumulable classes in
107 the Geant4 kernel next year.
108
109 B3b:
110
111 B3b::Run::RecordEvent(), called at end of event, collects informations
112 event per event from the hits collections, and accumulates statistic for
113 B3b::RunAction::EndOfRunAction().
114 In addition, results for dose are accumulated in a
115 standard floating-point summation and using a new lightweight statistical
116 class called G4StatAnalysis. The G4StatAnalysis class records four values:
117 (1) the sum, (2) sum^2, (3) number of entries, and (4) the number of entries
118 less than mean * machine-epsilon (the machine epsilon is the difference
119 between 1.0 and the next value representable by the floating-point type).
120 From these 4 values, G4StatAnalysis provides the mean, FOM, relative error,
121 standard deviation, variance, coefficient of variation, efficiency, r2int,
122 and r2eff.
123
124 In multi-threading mode the statistics accumulated per workers is merged
125 to the master in B3b::Run::Merge().
126
127 6- STACKING ACTION
128
129 Beta decay of Fluor generates a neutrino. One wishes not to track this
130 neutrino; therefore one kills it immediately, before created particles
131 are put in a stack.
132 The function B3::StackingAction::ClassifyNewTrack() is invoked by G4 kernel
133 each time a new particle is created.
134
135 The following paragraphs are common to all basic examples
136
137 A- VISUALISATION
138
139 The visualization manager is set via the G4VisExecutive class
140 in the main() function in exampleB3.cc.
141 The initialisation of the drawing is done via a set of /vis/ commands
142 in the macro vis.mac. This macro is automatically read from
143 the main function when the example is used in interactive running mode.
144
145 By default, vis.mac opens an OpenGL viewer (/vis/open OGL).
146 The user can change the initial viewer by commenting out this line
147 and instead uncommenting one of the other /vis/open statements, such as
148 HepRepFile or DAWNFILE (which produce files that can be viewed with the
149 HepRApp and DAWN viewers, respectively). Note that one can always
150 open new viewers at any time from the command line. For example, if
151 you already have a view in, say, an OpenGL window with a name
152 "viewer-0", then
153 /vis/open DAWNFILE
154 then to get the same view
155 /vis/viewer/copyView viewer-0
156 or to get the same view *plus* scene-modifications
157 /vis/viewer/set/all viewer-0
158 then to see the result
159 /vis/viewer/flush
160
161 The DAWNFILE, HepRepFile drivers are always available
162 (since they require no external libraries), but the OGL driver requires
163 that the Geant4 libraries have been built with the OpenGL option.
164
165 Since 11.1, the TSG visualization driver can also produce the "offscrean"
166 file output in png, jpeg, gl2ps formats without drawing on the screen.
167 It can be controlled via UI commands provided in '/vis/tsg' which are
168 demonstrated in the tsg_offscreen.mac macro in example B5.
169
170 For more information on visualization, including information on how to
171 install and run DAWN, OpenGL and HepRApp, see the visualization tutorials,
172 for example,
173 http://geant4.slac.stanford.edu/Presentations/vis/G4[VIS]Tutorial/G4[VIS]Tutorial.html
174 (where [VIS] can be replaced by DAWN, OpenGL and HepRApp)
175
176 The tracks are automatically drawn at the end of each event, accumulated
177 for all events and erased at the beginning of the next run.
178
179 B- USER INTERFACES
180
181 The user command interface is set via the G4UIExecutive class
182 in the main() function in exampleB3.cc
183
184 The selection of the user command interface is then done automatically
185 according to the Geant4 configuration or it can be done explicitly via
186 the third argument of the G4UIExecutive constructor (see exampleB4a.cc).
187
188 The gui.mac macros are provided in examples B2, B4 and B5. This macro
189 is automatically executed if Geant4 is built with any GUI session.
190 It is also possible to customise the icons menu bar which is
191 demonstrated in the icons.mac macro in example B5.
192
193 C- HOW TO RUN
194
195 - Execute exampleB3a in the 'interactive mode' with visualization
196 % ./exampleB3a
197 and type in the commands from run1.mac line by line:
198 Idle> /control/verbose 2
199 Idle> /tracking/verbose 2
200 Idle> /run/beamOn 1
201 Idle> ...
202 Idle> exit
203 or
204 Idle> /control/execute run1.mac
205 ....
206 Idle> exit
207
208 - Execute exampleB3a in the 'batch' mode from macro files
209 (without visualization)
210 % ./exampleB3a run2.mac
211 % ./exampleB3a exampleB3.in > exampleB3.out
212
213