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