From 84f33a068c5e0acb278dc4e4acb6a2822c6e7bca Mon Sep 17 00:00:00 2001 From: Gabriele Cosmo Date: Sun, 12 Dec 2021 17:16:06 +0100 Subject: [PATCH] Import Geant4 11.0.0 source tree --- README.rst | 1 - environments/g4py/README.md | 78 + environments/g4py/examples/README | 33 + .../g4py/examples/education/lesson1/README | 54 + .../g4py/examples/education/lesson2/README | 82 + environments/g4py/tests/CMakeLists.txt | 10 + environments/g4py/tests/History | 57 + environments/g4py/tests/README.md | 45 + .../g4py/tests/g4pytest/CMakeLists.txt | 35 + .../tests/g4pytest/EMSTDpl/CMakeLists.txt | 4 + .../g4pytest/EMSTDpl/PhysicsListEMstd.cc | 133 + .../g4pytest/EMSTDpl/PhysicsListEMstd.hh | 56 + .../g4py/tests/g4pytest/EMSTDpl/__init__.py | 1 + .../g4py/tests/g4pytest/EMSTDpl/pyEMSTDpl.cc | 75 + .../tests/g4pytest/ExN01geom/CMakeLists.txt | 4 + .../ExN01geom/ExN01DetectorConstruction.cc | 155 ++ .../ExN01geom/ExN01DetectorConstruction.hh | 73 + .../g4py/tests/g4pytest/ExN01geom/__init__.py | 1 + .../tests/g4pytest/ExN01geom/pyExN01geom.cc | 71 + .../tests/g4pytest/ExN01pl/CMakeLists.txt | 4 + .../g4pytest/ExN01pl/ExN01PhysicsList.cc | 77 + .../g4pytest/ExN01pl/ExN01PhysicsList.hh | 56 + .../g4py/tests/g4pytest/ExN01pl/__init__.py | 1 + .../g4py/tests/g4pytest/ExN01pl/pyExN01pl.cc | 75 + .../tests/g4pytest/ExN03geom/CMakeLists.txt | 4 + .../ExN03geom/ExN03DetectorConstruction.cc | 473 ++++ .../ExN03geom/ExN03DetectorConstruction.hh | 157 ++ .../ExN03geom/ExN03DetectorMessenger.cc | 148 + .../ExN03geom/ExN03DetectorMessenger.hh | 74 + .../g4py/tests/g4pytest/ExN03geom/__init__.py | 1 + .../tests/g4pytest/ExN03geom/pyExN03geom.cc | 101 + .../g4py/tests/g4pytest/MCScore/mcscore.py | 136 + .../tests/g4pytest/MCScore/mcscorerootio.py | 189 ++ .../g4py/tests/g4pytest/MCScore/reaction.dat | 1842 +++++++++++++ .../tests/g4pytest/MedicalBeam/CMakeLists.txt | 4 + .../tests/g4pytest/MedicalBeam/MedicalBeam.cc | 136 + .../tests/g4pytest/MedicalBeam/MedicalBeam.hh | 143 + .../tests/g4pytest/MedicalBeam/__init__.py | 1 + .../g4pytest/MedicalBeam/pyMedicalBeam.cc | 162 ++ .../g4pytest/NISTmaterials/CMakeLists.txt | 4 + .../g4pytest/NISTmaterials/NISTmaterials.cc | 61 + .../tests/g4pytest/NISTmaterials/__init__.py | 1 + .../g4pytest/NISTmaterials/pyNISTmaterials.cc | 49 + .../tests/g4pytest/ParticleGun/CMakeLists.txt | 4 + .../g4pytest/ParticleGun/ParticleGunAction.cc | 60 + .../g4pytest/ParticleGun/ParticleGunAction.hh | 63 + .../tests/g4pytest/ParticleGun/__init__.py | 1 + .../g4pytest/ParticleGun/pyParticleGun.cc | 79 + .../g4py/tests/g4pytest/Qgeom/CMakeLists.txt | 4 + .../g4pytest/Qgeom/QDetectorConstruction.cc | 144 + .../g4pytest/Qgeom/QDetectorConstruction.hh | 52 + .../g4py/tests/g4pytest/Qgeom/__init__.py | 1 + .../g4py/tests/g4pytest/Qgeom/pyQgeom.cc | 71 + .../tests/g4pytest/Qmaterials/CMakeLists.txt | 4 + .../tests/g4pytest/Qmaterials/Qmaterials.cc | 142 + .../tests/g4pytest/Qmaterials/__init__.py | 1 + .../tests/g4pytest/Qmaterials/pyQmaterials.cc | 49 + environments/g4py/tests/g4pytest/__init__.py | 3 + .../g4pytest/emcalculator/emcalculator.py | 149 + .../g4py/tests/g4pytest/ezgeom/CMakeLists.txt | 10 + .../g4pytest/ezgeom/EzDetectorConstruction.cc | 58 + .../g4pytest/ezgeom/EzDetectorConstruction.hh | 52 + .../g4py/tests/g4pytest/ezgeom/G4EzVolume.cc | 311 +++ .../g4py/tests/g4pytest/ezgeom/G4EzVolume.hh | 165 ++ .../ezgeom/G4EzVoxelParameterization.cc | 89 + .../ezgeom/G4EzVoxelParameterization.hh | 63 + .../g4py/tests/g4pytest/ezgeom/G4EzWorld.cc | 137 + .../g4py/tests/g4pytest/ezgeom/G4EzWorld.hh | 75 + .../g4py/tests/g4pytest/ezgeom/__init__.py | 1 + .../g4py/tests/g4pytest/ezgeom/pyEzgeom.cc | 158 ++ .../g4py/tests/gtest01/CMakeLists.txt | 4 + environments/g4py/tests/gtest01/gun.mac | 8 + .../g4py/tests/gtest01/module/CMakeLists.txt | 16 + .../g4py/tests/gtest01/module/Particles.cc | 80 + .../g4py/tests/gtest01/module/Particles.hh | 53 + .../tests/gtest01/module/PhysicsListEMstd.cc | 121 + .../tests/gtest01/module/PhysicsListEMstd.hh | 53 + .../gtest01/module/QDetectorConstruction.cc | 144 + .../gtest01/module/QDetectorConstruction.hh | 52 + .../g4py/tests/gtest01/module/QEventAction.cc | 68 + .../g4py/tests/gtest01/module/QEventAction.hh | 52 + .../g4py/tests/gtest01/module/QMaterials.cc | 163 ++ .../g4py/tests/gtest01/module/QMaterials.hh | 50 + .../g4py/tests/gtest01/module/QPhysicsList.cc | 72 + .../g4py/tests/gtest01/module/QPhysicsList.hh | 51 + .../gtest01/module/QPrimaryGeneratorAction.cc | 60 + .../gtest01/module/QPrimaryGeneratorAction.hh | 63 + .../g4py/tests/gtest01/module/gtest01.cc | 73 + environments/g4py/tests/gtest01/root_test.py | 143 + environments/g4py/tests/gtest01/run.py | 123 + environments/g4py/tests/gtest01/test.py | 118 + environments/g4py/tests/gtest01/vis.mac | 16 + environments/g4py/tests/gtest01/vrml.mac | 11 + .../g4py/tests/gtest02/CMakeLists.txt | 3 + environments/g4py/tests/gtest02/gun.mac | 8 + environments/g4py/tests/gtest02/run.py | 133 + environments/g4py/tests/gtest02/test.py | 133 + environments/g4py/tests/gtest02/vis.mac | 16 + .../g4py/tests/gtest03/CMakeLists.txt | 3 + environments/g4py/tests/gtest03/gun.mac | 8 + environments/g4py/tests/gtest03/run.py | 100 + environments/g4py/tests/gtest03/test.py | 100 + environments/g4py/tests/gtest03/test_voxel.py | 85 + environments/g4py/tests/gtest03/vis.mac | 15 + .../g4py/tests/gtest04/CMakeLists.txt | 3 + environments/g4py/tests/gtest04/test.py | 36 + .../g4py/tests/gtest05/CMakeLists.txt | 3 + environments/g4py/tests/gtest05/test.py | 311 +++ .../g4py/tests/gtest05/vrml/g4box.wrl | 102 + .../g4py/tests/gtest05/vrml/g4cons.wrl | 222 ++ .../g4py/tests/gtest05/vrml/g4ellipsoid.wrl | 403 +++ .../tests/gtest05/vrml/g4ellipticalcone.wrl | 210 ++ .../tests/gtest05/vrml/g4ellipticaltube.wrl | 210 ++ .../g4py/tests/gtest05/vrml/g4hype.wrl | 2392 +++++++++++++++++ .../g4py/tests/gtest05/vrml/g4orb.wrl | 643 +++++ .../g4py/tests/gtest05/vrml/g4para.wrl | 102 + .../g4py/tests/gtest05/vrml/g4polycone.wrl | 505 ++++ .../g4py/tests/gtest05/vrml/g4polyhedra.wrl | 160 ++ .../g4py/tests/gtest05/vrml/g4sphere.wrl | 690 +++++ .../g4py/tests/gtest05/vrml/g4tet.wrl | 96 + .../g4py/tests/gtest05/vrml/g4torus.wrl | 760 ++++++ .../g4py/tests/gtest05/vrml/g4trap.wrl | 102 + .../g4py/tests/gtest05/vrml/g4trd.wrl | 102 + .../g4py/tests/gtest05/vrml/g4tubs.wrl | 190 ++ .../g4py/tests/gtest05/vrml/g4twistedbox.wrl | 198 ++ .../g4py/tests/gtest05/vrml/g4twistedtrap.wrl | 198 ++ .../g4py/tests/gtest05/vrml/g4twistedtrd.wrl | 198 ++ .../g4py/tests/gtest05/vrml/g4twistedtubs.wrl | 566 ++++ .../g4py/tests/gtest06/CMakeLists.txt | 3 + .../g4py/tests/gtest06/jpg/intersection.jpg | Bin 0 -> 18138 bytes .../g4py/tests/gtest06/jpg/subtraction.jpg | Bin 0 -> 31923 bytes environments/g4py/tests/gtest06/jpg/union.jpg | Bin 0 -> 30020 bytes environments/g4py/tests/gtest06/test.py | 126 + .../g4py/tests/gtest07/CMakeLists.txt | 3 + environments/g4py/tests/gtest07/test.py | 80 + .../g4py/tests/gtest08/CMakeLists.txt | 3 + environments/g4py/tests/gtest08/test.py | 74 + environments/zmq/README.md | 14 + examples/.README.HowToRun.txt | 90 + examples/.README.HowToRunMT.txt | 86 + examples/.doxygen/.README.HowToNavigate.txt | 24 + examples/.doxygen/.README.novice.txt | 25 + examples/.doxygen/README | 25 + examples/README | 50 + examples/README.HowToRun | 80 + examples/README.HowToRunMT | 80 + examples/advanced/CaTS/README.md | 118 + examples/advanced/ChargeExchangeMC/README | 104 + .../ChargeExchangeMC/doc/CexmcSetupImages.pdf | Bin 0 -> 721387 bytes .../ChargeExchangeMC/doc/CexmcUsersManual.pdf | Bin 0 -> 544235 bytes examples/advanced/HGCal_testbeam/README | 227 ++ .../advanced/ICRP110_HumanPhantoms/README | 288 ++ examples/advanced/README | 17 + examples/advanced/STCyclotron/README | 323 +++ examples/advanced/air_shower/README | 111 + examples/advanced/amsEcal/README | 132 + examples/advanced/brachytherapy/README | 192 ++ .../test_macro/FlexiSourceMacro_livermore.mac | 30 + .../test_macro/FlexiSourceMacro_opt0.mac | 30 + .../test_macro/FlexiSourceMacro_opt3.mac | 30 + .../test_macro/FlexiSourceMacro_opt4.mac | 30 + .../test_macro/FlexiSourceMacro_penelope.mac | 29 + .../test_macro/iridium_source_primary.mac | 129 + .../advanced/composite_calorimeter/README | 515 ++++ examples/advanced/doiPET/README | 139 + examples/advanced/eRosita/README.txt | 214 ++ examples/advanced/fastAerosol/README.txt | 157 ++ examples/advanced/gammaknife/README | 119 + examples/advanced/gammaray_telescope/README | 291 ++ examples/advanced/gorad/README | 106 + examples/advanced/hadrontherapy/README | 455 ++++ .../experimentalData/proton/BraggPeak/README | 13 + examples/advanced/human_phantom/README | 145 + examples/advanced/iort_therapy/README | 233 ++ examples/advanced/lAr_calorimeter/README | 106 + examples/advanced/medical_linac/README | 137 + examples/advanced/microbeam/README | 173 ++ examples/advanced/microelectronics/README | 127 + examples/advanced/nanobeam/README | 135 + examples/advanced/nanobeam/results/README | 1 + examples/advanced/purging_magnet/README | 124 + examples/advanced/radioprotection/README | 141 + examples/advanced/underground_physics/README | 209 ++ .../advanced/underground_physics/README_stt | 38 + examples/advanced/xray_fluorescence/README | 83 + examples/advanced/xray_telescope/README | 87 + examples/basic/.README.txt | 56 + examples/basic/B1/.README.txt | 197 ++ examples/basic/B1/README | 172 ++ examples/basic/B2/.README.txt | 230 ++ examples/basic/B2/README | 205 ++ examples/basic/B3/.README.txt | 221 ++ examples/basic/B3/README | 202 ++ examples/basic/B4/.README.txt | 322 +++ examples/basic/B4/README | 269 ++ examples/basic/B5/.README.txt | 341 +++ examples/basic/B5/README | 314 +++ examples/basic/README | 57 + examples/extended/.README.txt | 64 + examples/extended/analysis/.README.txt | 23 + .../extended/analysis/AnaEx01/.README.txt | 145 + examples/extended/analysis/AnaEx01/README | 140 + .../extended/analysis/AnaEx02/.README.txt | 149 + examples/extended/analysis/AnaEx02/README | 145 + examples/extended/analysis/B1Con/.README.txt | 113 + examples/extended/analysis/B1Con/README | 102 + examples/extended/analysis/B1Con/README.B1 | 167 ++ examples/extended/analysis/README | 22 + examples/extended/biasing/.README.txt | 129 + examples/extended/biasing/GB01/.README.txt | 49 + examples/extended/biasing/GB01/README | 50 + examples/extended/biasing/GB02/.README.txt | 52 + examples/extended/biasing/GB02/README | 49 + examples/extended/biasing/GB03/.README.txt | 54 + examples/extended/biasing/GB03/README | 45 + examples/extended/biasing/GB04/.README.txt | 41 + examples/extended/biasing/GB04/README | 36 + examples/extended/biasing/GB05/.README.txt | 53 + examples/extended/biasing/GB05/README | 47 + examples/extended/biasing/GB06/.README.txt | 108 + examples/extended/biasing/GB06/README | 100 + examples/extended/biasing/GB07/.README.txt | 88 + examples/extended/biasing/GB07/README | 84 + examples/extended/biasing/README | 149 + .../extended/biasing/ReverseMC01/.README.txt | 487 ++++ examples/extended/biasing/ReverseMC01/README | 542 ++++ examples/extended/common/.README.txt | 24 + examples/extended/common/README | 26 + examples/extended/electromagnetic/.README.txt | 119 + examples/extended/electromagnetic/README | 118 + .../electromagnetic/TestEm0/.README.txt | 41 + .../extended/electromagnetic/TestEm0/README | 39 + .../electromagnetic/TestEm1/.README.txt | 164 ++ .../extended/electromagnetic/TestEm1/README | 157 ++ .../electromagnetic/TestEm10/.README.txt | 103 + .../extended/electromagnetic/TestEm10/README | 94 + .../electromagnetic/TestEm11/.README.txt | 192 ++ .../extended/electromagnetic/TestEm11/README | 185 ++ .../TestEm11/sandia/EGSnrc/README | 26 + .../electromagnetic/TestEm12/.README.txt | 174 ++ .../extended/electromagnetic/TestEm12/README | 163 ++ .../TestEm12/berger/EGSnrc/README | 27 + .../electromagnetic/TestEm13/.README.txt | 84 + .../extended/electromagnetic/TestEm13/README | 79 + .../electromagnetic/TestEm14/.README.txt | 132 + .../extended/electromagnetic/TestEm14/README | 121 + .../electromagnetic/TestEm15/.README.txt | 124 + .../extended/electromagnetic/TestEm15/README | 128 + .../electromagnetic/TestEm15/README.gamma | 48 + .../electromagnetic/TestEm16/.README.txt | 143 + .../extended/electromagnetic/TestEm16/README | 124 + .../electromagnetic/TestEm17/.README.txt | 118 + .../extended/electromagnetic/TestEm17/README | 112 + .../electromagnetic/TestEm18/.README.txt | 135 + .../extended/electromagnetic/TestEm18/README | 123 + .../electromagnetic/TestEm2/.README.txt | 171 ++ .../extended/electromagnetic/TestEm2/README | 161 ++ .../electromagnetic/TestEm3/.README.txt | 209 ++ .../extended/electromagnetic/TestEm3/README | 195 ++ .../electromagnetic/TestEm3/geant3/README | 51 + .../TestEm3/geant3/g4mat/README | 23 + .../electromagnetic/TestEm4/.README.txt | 94 + .../extended/electromagnetic/TestEm4/README | 86 + .../electromagnetic/TestEm5/.README.txt | 271 ++ .../extended/electromagnetic/TestEm5/README | 252 ++ .../electromagnetic/TestEm6/.README.txt | 140 + .../extended/electromagnetic/TestEm6/README | 125 + .../electromagnetic/TestEm7/.README.txt | 177 ++ .../extended/electromagnetic/TestEm7/README | 156 ++ .../electromagnetic/TestEm8/.README.txt | 88 + .../extended/electromagnetic/TestEm8/README | 87 + .../electromagnetic/TestEm9/.README.txt | 120 + .../extended/electromagnetic/TestEm9/README | 108 + .../extended/errorpropagation/.README.txt | 37 + examples/extended/errorpropagation/README | 33 + examples/extended/eventgenerator/.README.txt | 49 + .../extended/eventgenerator/HepMC/.README.txt | 120 + .../HepMC/HepMCEx01/.README.txt | 56 + .../eventgenerator/HepMC/HepMCEx01/README | 57 + .../HepMC/HepMCEx02/.README.txt | 47 + .../eventgenerator/HepMC/HepMCEx02/README | 48 + .../eventgenerator/HepMC/MCTruth/.README.txt | 168 ++ .../eventgenerator/HepMC/MCTruth/README | 165 ++ examples/extended/eventgenerator/HepMC/README | 118 + examples/extended/eventgenerator/README | 51 + .../extended/eventgenerator/exgps/.README.txt | 101 + examples/extended/eventgenerator/exgps/README | 92 + .../eventgenerator/exgps/macros/README | 167 ++ .../eventgenerator/particleGun/.README.txt | 158 ++ .../eventgenerator/particleGun/README | 152 ++ .../eventgenerator/pythia/.README.txt | 27 + .../extended/eventgenerator/pythia/README | 16 + .../pythia/decayer6/.README.txt | 96 + .../eventgenerator/pythia/decayer6/README | 85 + .../pythia/decayer6/common/.README.txt | 24 + .../pythia/decayer6/common/README | 26 + .../pythia/py8decayer/.README.txt | 128 + .../eventgenerator/pythia/py8decayer/README | 120 + .../userPrimaryGenerator/.README.txt | 47 + .../userPrimaryGenerator/README | 49 + examples/extended/exoticphysics/.README.txt | 38 + examples/extended/exoticphysics/README | 39 + .../exoticphysics/channeling/.README.txt | 92 + .../extended/exoticphysics/channeling/README | 71 + .../exoticphysics/dmparticle/.README.txt | 70 + .../extended/exoticphysics/dmparticle/README | 79 + .../exoticphysics/monopole/.README.txt | 118 + .../extended/exoticphysics/monopole/README | 111 + .../extended/exoticphysics/phonon/.README.txt | 105 + examples/extended/exoticphysics/phonon/README | 99 + .../extended/exoticphysics/saxs/.README.txt | 253 ++ examples/extended/exoticphysics/saxs/README | 217 ++ .../extended/exoticphysics/ucn/.README.txt | 122 + examples/extended/exoticphysics/ucn/README | 106 + examples/extended/field/.README.txt | 46 + .../extended/field/BlineTracer/.README.txt | 184 ++ examples/extended/field/BlineTracer/README | 155 ++ examples/extended/field/README | 41 + examples/extended/field/field01/.README.txt | 275 ++ examples/extended/field/field01/README | 276 ++ examples/extended/field/field02/.README.txt | 88 + examples/extended/field/field02/README | 86 + examples/extended/field/field03/.README.txt | 85 + examples/extended/field/field03/README | 81 + examples/extended/field/field04/.README.txt | 397 +++ examples/extended/field/field04/README | 377 +++ examples/extended/field/field04/random/README | 2 + examples/extended/field/field05/.README.txt | 84 + examples/extended/field/field05/README | 82 + examples/extended/field/field06/.README.txt | 68 + examples/extended/field/field06/README | 67 + examples/extended/g3tog4/.README.txt | 16 + examples/extended/g3tog4/README | 13 + .../extended/g3tog4/clGeometry/.README.txt | 40 + examples/extended/g3tog4/clGeometry/README | 31 + .../g3tog4/clGeometry/common/.README.txt | 24 + .../extended/g3tog4/clGeometry/common/README | 26 + examples/extended/geometry/.README.txt | 20 + examples/extended/geometry/README | 17 + .../extended/geometry/transforms/.README.txt | 104 + examples/extended/geometry/transforms/README | 94 + .../geometry/vecGeomNavigation/.README.txt | 39 + .../geometry/vecGeomNavigation/README | 32 + examples/extended/hadronic/.README.txt | 93 + .../hadronic/FissionFragment/.README.txt | 126 + .../extended/hadronic/FissionFragment/README | 114 + examples/extended/hadronic/Hadr00/.README.txt | 113 + examples/extended/hadronic/Hadr00/README | 91 + examples/extended/hadronic/Hadr01/.README.txt | 160 ++ examples/extended/hadronic/Hadr01/README | 136 + examples/extended/hadronic/Hadr02/.README.txt | 231 ++ examples/extended/hadronic/Hadr02/README | 238 ++ .../hadronic/Hadr02/hijing1_383/README | 118 + examples/extended/hadronic/Hadr03/.README.txt | 158 ++ examples/extended/hadronic/Hadr03/README | 145 + examples/extended/hadronic/Hadr04/.README.txt | 132 + examples/extended/hadronic/Hadr04/README | 124 + examples/extended/hadronic/Hadr05/.README.txt | 188 ++ examples/extended/hadronic/Hadr05/README | 172 ++ examples/extended/hadronic/Hadr06/.README.txt | 162 ++ examples/extended/hadronic/Hadr06/README | 152 ++ examples/extended/hadronic/Hadr07/.README.txt | 170 ++ examples/extended/hadronic/Hadr07/README | 161 ++ examples/extended/hadronic/Hadr08/.README.txt | 57 + examples/extended/hadronic/Hadr08/README | 40 + examples/extended/hadronic/Hadr09/.README.txt | 53 + examples/extended/hadronic/Hadr09/README | 46 + examples/extended/hadronic/Hadr10/.README.txt | 78 + examples/extended/hadronic/Hadr10/README | 71 + .../hadronic/NeutronSource/.README.txt | 154 ++ .../extended/hadronic/NeutronSource/README | 143 + examples/extended/hadronic/README | 101 + examples/extended/medical/.README.txt | 50 + examples/extended/medical/DICOM/.README.txt | 354 +++ examples/extended/medical/DICOM/README | 331 +++ examples/extended/medical/DICOM2/.README.txt | 69 + examples/extended/medical/DICOM2/README | 65 + .../extended/medical/GammaTherapy/.README.txt | 70 + examples/extended/medical/GammaTherapy/README | 67 + examples/extended/medical/README | 55 + examples/extended/medical/dna/.README.txt | 55 + .../extended/medical/dna/AuNP/.README.txt | 100 + examples/extended/medical/dna/AuNP/README | 105 + examples/extended/medical/dna/README | 89 + .../extended/medical/dna/chem1/.README.txt | 51 + examples/extended/medical/dna/chem1/README | 52 + .../extended/medical/dna/chem2/.README.txt | 53 + examples/extended/medical/dna/chem2/README | 54 + .../extended/medical/dna/chem3/.README.txt | 68 + examples/extended/medical/dna/chem3/README | 68 + .../extended/medical/dna/chem4/.README.txt | 194 ++ examples/extended/medical/dna/chem4/README | 177 ++ .../extended/medical/dna/chem5/.README.txt | 159 ++ examples/extended/medical/dna/chem5/README | 165 ++ .../extended/medical/dna/chem6/.README.txt | 218 ++ examples/extended/medical/dna/chem6/README | 213 ++ .../medical/dna/clustering/.README.txt | 127 + .../extended/medical/dna/clustering/README | 109 + .../medical/dna/dnadamage1/.README.txt | 95 + .../medical/dna/dnadamage1/README.txt | 90 + .../medical/dna/dnaphysics/.README.txt | 183 ++ .../extended/medical/dna/dnaphysics/README | 181 ++ .../extended/medical/dna/icsd/.README.txt | 67 + examples/extended/medical/dna/icsd/README | 61 + examples/extended/medical/dna/mfp/.README.txt | 85 + examples/extended/medical/dna/mfp/README | 79 + .../medical/dna/microdosimetry/.README.txt | 191 ++ .../medical/dna/microdosimetry/README | 184 ++ .../medical/dna/microprox/.README.txt | 70 + .../extended/medical/dna/microprox/README | 52 + examples/extended/medical/dna/microyz/.README | 73 + .../extended/medical/dna/microyz/.README.txt | 73 + examples/extended/medical/dna/microyz/README | 59 + examples/extended/medical/dna/neuron/.README | 164 ++ .../extended/medical/dna/neuron/.README.txt | 173 ++ examples/extended/medical/dna/neuron/README | 165 ++ .../extended/medical/dna/pdb4dna/.README.txt | 134 + examples/extended/medical/dna/pdb4dna/README | 133 + .../extended/medical/dna/range/.README.txt | 97 + examples/extended/medical/dna/range/README | 93 + .../medical/dna/scavenger/.README.txt | 294 ++ .../extended/medical/dna/scavenger/README | 254 ++ .../extended/medical/dna/slowing/.README.txt | 75 + examples/extended/medical/dna/slowing/README | 77 + .../medical/dna/splitting/.README.txt | 109 + .../extended/medical/dna/splitting/README | 100 + .../extended/medical/dna/spower/.README.txt | 87 + examples/extended/medical/dna/spower/README | 85 + .../extended/medical/dna/svalue/.README.txt | 82 + examples/extended/medical/dna/svalue/README | 106 + .../medical/dna/wholeNuclearDNA/.README.txt | 122 + .../medical/dna/wholeNuclearDNA/README | 103 + .../extended/medical/dna/wvalue/.README.txt | 98 + examples/extended/medical/dna/wvalue/README | 97 + .../medical/electronScattering/.README.txt | 139 + .../electronScattering/EGS_13MeV/README | 34 + .../medical/electronScattering/README | 126 + .../medical/electronScattering2/.README.txt | 182 ++ .../medical/electronScattering2/README | 170 ++ .../extended/medical/fanoCavity/.README.txt | 181 ++ examples/extended/medical/fanoCavity/README | 171 ++ .../extended/medical/fanoCavity2/.README.txt | 157 ++ examples/extended/medical/fanoCavity2/README | 146 + examples/extended/optical/.README.txt | 35 + examples/extended/optical/LXe/.README.txt | 385 +++ examples/extended/optical/LXe/README | 356 +++ .../extended/optical/OpNovice/.README.txt | 124 + examples/extended/optical/OpNovice/README | 124 + .../extended/optical/OpNovice2/.README.txt | 158 ++ examples/extended/optical/OpNovice2/README | 137 + examples/extended/optical/README | 34 + examples/extended/optical/wls/.README.txt | 100 + examples/extended/optical/wls/README | 95 + examples/extended/parallel/.README.txt | 29 + examples/extended/parallel/MPI/.README.txt | 238 ++ examples/extended/parallel/MPI/README.md | 253 ++ .../parallel/MPI/ctests-definitions.cmake | 134 + .../parallel/MPI/examples/exMPI01/.README.txt | 46 + .../parallel/MPI/examples/exMPI01/README.html | 245 ++ .../parallel/MPI/examples/exMPI01/README.md | 37 + .../parallel/MPI/examples/exMPI02/.README.txt | 50 + .../parallel/MPI/examples/exMPI02/README.html | 246 ++ .../parallel/MPI/examples/exMPI02/README.md | 44 + .../parallel/MPI/examples/exMPI03/.README.txt | 59 + .../parallel/MPI/examples/exMPI03/README.html | 255 ++ .../parallel/MPI/examples/exMPI03/README.md | 54 + .../parallel/MPI/examples/exMPI04/.README.txt | 58 + .../parallel/MPI/examples/exMPI04/README.md | 53 + examples/extended/parallel/README | 21 + examples/extended/parallel/TBB/.README.txt | 27 + .../extended/parallel/TBB/B2b/.README.txt | 51 + examples/extended/parallel/TBB/B2b/README | 47 + examples/extended/parallel/TBB/README | 22 + .../parallel/ThreadsafeScorers/.README.txt | 202 ++ .../parallel/ThreadsafeScorers/README | 188 ++ .../parallel/TopC/ParN02/.README.N02.txt | 124 + .../extended/parallel/TopC/ParN02/.README.txt | 199 ++ .../TopC/ParN02/AnnotatedFiles/000README | 47 + examples/extended/parallel/TopC/ParN02/README | 155 ++ .../extended/parallel/TopC/ParN02/README.N02 | 123 + .../extended/parallel/TopC/ParN04/.README.N04 | 47 + .../parallel/TopC/ParN04/.README.N04.txt | 47 + .../extended/parallel/TopC/ParN04/.README.txt | 200 ++ .../TopC/ParN04/AnnotatedFiles/000README | 47 + examples/extended/parallel/TopC/ParN04/README | 157 ++ .../extended/parallel/TopC/ParN04/README.N04 | 47 + .../parallel/TopC/info/NEW_APP_README | 46 + .../extended/parallel/TopC/info/README.html | 114 + .../extended/parameterisations/.README.txt | 39 + .../parameterisations/Par01/.README.txt | 76 + .../extended/parameterisations/Par01/README | 72 + .../parameterisations/Par02/.README.txt | 250 ++ .../extended/parameterisations/Par02/README | 254 ++ .../parameterisations/Par03/.README.txt | 134 + .../extended/parameterisations/Par03/README | 130 + .../parameterisations/Par04/.README.txt | 191 ++ .../extended/parameterisations/Par04/README | 200 ++ examples/extended/parameterisations/README | 39 + .../parameterisations/gflash/.README.txt | 165 ++ .../extended/parameterisations/gflash/README | 175 ++ .../gflash/gflasha/.README.txt | 119 + .../parameterisations/gflash/gflasha/README | 110 + examples/extended/persistency/.README.txt | 17 + examples/extended/persistency/P01/.README.txt | 83 + examples/extended/persistency/P01/README | 82 + examples/extended/persistency/P02/.README.txt | 64 + examples/extended/persistency/P02/README | 61 + examples/extended/persistency/P03/.README.txt | 133 + examples/extended/persistency/P03/README | 117 + examples/extended/persistency/README | 13 + .../extended/persistency/gdml/.README.txt | 24 + .../extended/persistency/gdml/G01/.README.txt | 58 + examples/extended/persistency/gdml/G01/README | 49 + .../extended/persistency/gdml/G02/.README.txt | 57 + examples/extended/persistency/gdml/G02/README | 47 + .../extended/persistency/gdml/G03/.README.txt | 49 + examples/extended/persistency/gdml/G03/README | 37 + .../extended/persistency/gdml/G04/.README.txt | 39 + examples/extended/persistency/gdml/G04/README | 34 + examples/extended/persistency/gdml/README | 17 + examples/extended/physicslists/.README.txt | 26 + examples/extended/physicslists/README | 26 + .../extensibleFactory/.README.txt | 95 + .../physicslists/extensibleFactory/README | 93 + .../extended/physicslists/factory/.README.txt | 69 + examples/extended/physicslists/factory/README | 69 + .../physicslists/genericPL/.README.txt | 86 + .../extended/physicslists/genericPL/README | 85 + examples/extended/polarisation/.README.txt | 16 + .../extended/polarisation/Pol01/.README.txt | 140 + examples/extended/polarisation/Pol01/README | 128 + examples/extended/polarisation/README | 13 + .../extended/radioactivedecay/.README.txt | 25 + .../radioactivedecay/Activation/.README.txt | 183 ++ .../radioactivedecay/Activation/README | 163 ++ examples/extended/radioactivedecay/README | 24 + .../radioactivedecay/rdecay01/.README.txt | 163 ++ .../extended/radioactivedecay/rdecay01/README | 153 ++ .../radioactivedecay/rdecay02/.README.txt | 211 ++ .../extended/radioactivedecay/rdecay02/README | 208 ++ examples/extended/runAndEvent/.README.txt | 63 + .../extended/runAndEvent/RE01/.README.txt | 70 + examples/extended/runAndEvent/RE01/README | 66 + .../extended/runAndEvent/RE02/.README.txt | 250 ++ examples/extended/runAndEvent/RE02/README | 238 ++ .../extended/runAndEvent/RE03/.README.txt | 59 + examples/extended/runAndEvent/RE03/README | 55 + .../extended/runAndEvent/RE04/.README.txt | 97 + examples/extended/runAndEvent/RE04/README | 92 + .../extended/runAndEvent/RE05/.README.txt | 64 + examples/extended/runAndEvent/RE05/README | 61 + .../extended/runAndEvent/RE06/.README.txt | 213 ++ examples/extended/runAndEvent/RE06/README | 222 ++ .../extended/runAndEvent/RE07/.README.txt | 54 + examples/extended/runAndEvent/RE07/README | 52 + examples/extended/runAndEvent/README | 68 + examples/extended/visualization/.README.txt | 28 + examples/extended/visualization/README | 27 + .../extended/visualization/movies/.README.txt | 92 + examples/extended/visualization/movies/README | 91 + .../visualization/perspective/.README.txt | 28 + .../extended/visualization/perspective/README | 25 + .../visualization/standalone/.README.txt | 41 + .../extended/visualization/standalone/README | 39 + .../visualization/userVisAction/.README.txt | 38 + .../visualization/userVisAction/README | 33 + source/externals/expat/README | 139 + source/externals/ptl/.clang-tidy | 40 + source/externals/ptl/README.md | 2 + source/externals/zlib/README | 157 ++ source/g3tog4/README | 105 + .../physics_lists/constructors/decay/README | 14 + .../constructors/electromagnetic/README | 91 + .../physics_lists/constructors/factory/README | 9 + .../constructors/gamma_lepto_nuclear/README | 48 + .../constructors/hadron_elastic/README | 104 + .../constructors/hadron_inelastic/README | 282 ++ source/physics_lists/constructors/ions/README | 44 + .../constructors/limiters/README | 72 + .../constructors/stopping/README | 19 + .../photon_evaporation/README-LevelGammaData | 81 + .../hadronic/models/im_r_matrix/README | 2 + .../models/radioactive_decay/README_RDM | 38 + source/processes/solidstate/phonon/README | 38 + source/run/README.TXT | 131 + source/tasking/README.md | 226 ++ source/visualization/FukuiRenderer/README | 30 + source/visualization/HepRep/README | 152 ++ source/visualization/HepRep/include/README | 23 + .../OpenInventor/README.OIXExtendedViewer | 186 ++ source/visualization/RayTracer/README | 82 + source/visualization/gMocren/README | 13 + source/visualization/modeling/README | 6 + 593 files changed, 68589 insertions(+), 1 deletion(-) create mode 100644 environments/g4py/README.md create mode 100644 environments/g4py/examples/README create mode 100644 environments/g4py/examples/education/lesson1/README create mode 100644 environments/g4py/examples/education/lesson2/README create mode 100644 environments/g4py/tests/CMakeLists.txt create mode 100644 environments/g4py/tests/History create mode 100644 environments/g4py/tests/README.md create mode 100644 environments/g4py/tests/g4pytest/CMakeLists.txt create mode 100644 environments/g4py/tests/g4pytest/EMSTDpl/CMakeLists.txt create mode 100644 environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.cc create mode 100644 environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.hh create mode 100644 environments/g4py/tests/g4pytest/EMSTDpl/__init__.py create mode 100644 environments/g4py/tests/g4pytest/EMSTDpl/pyEMSTDpl.cc create mode 100644 environments/g4py/tests/g4pytest/ExN01geom/CMakeLists.txt create mode 100644 environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.cc create mode 100644 environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.hh create mode 100644 environments/g4py/tests/g4pytest/ExN01geom/__init__.py create mode 100644 environments/g4py/tests/g4pytest/ExN01geom/pyExN01geom.cc create mode 100644 environments/g4py/tests/g4pytest/ExN01pl/CMakeLists.txt create mode 100644 environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.cc create mode 100644 environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.hh create mode 100644 environments/g4py/tests/g4pytest/ExN01pl/__init__.py create mode 100644 environments/g4py/tests/g4pytest/ExN01pl/pyExN01pl.cc create mode 100644 environments/g4py/tests/g4pytest/ExN03geom/CMakeLists.txt create mode 100644 environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.cc create mode 100644 environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.hh create mode 100644 environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.cc create mode 100644 environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.hh create mode 100644 environments/g4py/tests/g4pytest/ExN03geom/__init__.py create mode 100644 environments/g4py/tests/g4pytest/ExN03geom/pyExN03geom.cc create mode 100644 environments/g4py/tests/g4pytest/MCScore/mcscore.py create mode 100644 environments/g4py/tests/g4pytest/MCScore/mcscorerootio.py create mode 100644 environments/g4py/tests/g4pytest/MCScore/reaction.dat create mode 100644 environments/g4py/tests/g4pytest/MedicalBeam/CMakeLists.txt create mode 100644 environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.cc create mode 100644 environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.hh create mode 100644 environments/g4py/tests/g4pytest/MedicalBeam/__init__.py create mode 100644 environments/g4py/tests/g4pytest/MedicalBeam/pyMedicalBeam.cc create mode 100644 environments/g4py/tests/g4pytest/NISTmaterials/CMakeLists.txt create mode 100644 environments/g4py/tests/g4pytest/NISTmaterials/NISTmaterials.cc create mode 100644 environments/g4py/tests/g4pytest/NISTmaterials/__init__.py create mode 100644 environments/g4py/tests/g4pytest/NISTmaterials/pyNISTmaterials.cc create mode 100644 environments/g4py/tests/g4pytest/ParticleGun/CMakeLists.txt create mode 100644 environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.cc create mode 100644 environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.hh create mode 100644 environments/g4py/tests/g4pytest/ParticleGun/__init__.py create mode 100644 environments/g4py/tests/g4pytest/ParticleGun/pyParticleGun.cc create mode 100644 environments/g4py/tests/g4pytest/Qgeom/CMakeLists.txt create mode 100644 environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.cc create mode 100644 environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.hh create mode 100644 environments/g4py/tests/g4pytest/Qgeom/__init__.py create mode 100644 environments/g4py/tests/g4pytest/Qgeom/pyQgeom.cc create mode 100644 environments/g4py/tests/g4pytest/Qmaterials/CMakeLists.txt create mode 100644 environments/g4py/tests/g4pytest/Qmaterials/Qmaterials.cc create mode 100644 environments/g4py/tests/g4pytest/Qmaterials/__init__.py create mode 100644 environments/g4py/tests/g4pytest/Qmaterials/pyQmaterials.cc create mode 100644 environments/g4py/tests/g4pytest/__init__.py create mode 100644 environments/g4py/tests/g4pytest/emcalculator/emcalculator.py create mode 100644 environments/g4py/tests/g4pytest/ezgeom/CMakeLists.txt create mode 100644 environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.cc create mode 100644 environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.hh create mode 100644 environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.cc create mode 100644 environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.hh create mode 100644 environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.cc create mode 100644 environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.hh create mode 100644 environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.cc create mode 100644 environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.hh create mode 100644 environments/g4py/tests/g4pytest/ezgeom/__init__.py create mode 100644 environments/g4py/tests/g4pytest/ezgeom/pyEzgeom.cc create mode 100644 environments/g4py/tests/gtest01/CMakeLists.txt create mode 100644 environments/g4py/tests/gtest01/gun.mac create mode 100644 environments/g4py/tests/gtest01/module/CMakeLists.txt create mode 100644 environments/g4py/tests/gtest01/module/Particles.cc create mode 100644 environments/g4py/tests/gtest01/module/Particles.hh create mode 100644 environments/g4py/tests/gtest01/module/PhysicsListEMstd.cc create mode 100644 environments/g4py/tests/gtest01/module/PhysicsListEMstd.hh create mode 100644 environments/g4py/tests/gtest01/module/QDetectorConstruction.cc create mode 100644 environments/g4py/tests/gtest01/module/QDetectorConstruction.hh create mode 100644 environments/g4py/tests/gtest01/module/QEventAction.cc create mode 100644 environments/g4py/tests/gtest01/module/QEventAction.hh create mode 100644 environments/g4py/tests/gtest01/module/QMaterials.cc create mode 100644 environments/g4py/tests/gtest01/module/QMaterials.hh create mode 100644 environments/g4py/tests/gtest01/module/QPhysicsList.cc create mode 100644 environments/g4py/tests/gtest01/module/QPhysicsList.hh create mode 100644 environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.cc create mode 100644 environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.hh create mode 100644 environments/g4py/tests/gtest01/module/gtest01.cc create mode 100755 environments/g4py/tests/gtest01/root_test.py create mode 100755 environments/g4py/tests/gtest01/run.py create mode 100755 environments/g4py/tests/gtest01/test.py create mode 100644 environments/g4py/tests/gtest01/vis.mac create mode 100644 environments/g4py/tests/gtest01/vrml.mac create mode 100644 environments/g4py/tests/gtest02/CMakeLists.txt create mode 100644 environments/g4py/tests/gtest02/gun.mac create mode 100755 environments/g4py/tests/gtest02/run.py create mode 100755 environments/g4py/tests/gtest02/test.py create mode 100644 environments/g4py/tests/gtest02/vis.mac create mode 100644 environments/g4py/tests/gtest03/CMakeLists.txt create mode 100644 environments/g4py/tests/gtest03/gun.mac create mode 100755 environments/g4py/tests/gtest03/run.py create mode 100755 environments/g4py/tests/gtest03/test.py create mode 100755 environments/g4py/tests/gtest03/test_voxel.py create mode 100644 environments/g4py/tests/gtest03/vis.mac create mode 100644 environments/g4py/tests/gtest04/CMakeLists.txt create mode 100755 environments/g4py/tests/gtest04/test.py create mode 100644 environments/g4py/tests/gtest05/CMakeLists.txt create mode 100755 environments/g4py/tests/gtest05/test.py create mode 100644 environments/g4py/tests/gtest05/vrml/g4box.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4cons.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4ellipsoid.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4ellipticalcone.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4ellipticaltube.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4hype.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4orb.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4para.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4polycone.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4polyhedra.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4sphere.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4tet.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4torus.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4trap.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4trd.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4tubs.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4twistedbox.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4twistedtrap.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4twistedtrd.wrl create mode 100644 environments/g4py/tests/gtest05/vrml/g4twistedtubs.wrl create mode 100644 environments/g4py/tests/gtest06/CMakeLists.txt create mode 100644 environments/g4py/tests/gtest06/jpg/intersection.jpg create mode 100644 environments/g4py/tests/gtest06/jpg/subtraction.jpg create mode 100644 environments/g4py/tests/gtest06/jpg/union.jpg create mode 100755 environments/g4py/tests/gtest06/test.py create mode 100644 environments/g4py/tests/gtest07/CMakeLists.txt create mode 100755 environments/g4py/tests/gtest07/test.py create mode 100644 environments/g4py/tests/gtest08/CMakeLists.txt create mode 100755 environments/g4py/tests/gtest08/test.py create mode 100644 environments/zmq/README.md create mode 100644 examples/.README.HowToRun.txt create mode 100644 examples/.README.HowToRunMT.txt create mode 100644 examples/.doxygen/.README.HowToNavigate.txt create mode 100644 examples/.doxygen/.README.novice.txt create mode 100644 examples/.doxygen/README create mode 100644 examples/README create mode 100644 examples/README.HowToRun create mode 100644 examples/README.HowToRunMT create mode 100644 examples/advanced/CaTS/README.md create mode 100644 examples/advanced/ChargeExchangeMC/README create mode 100644 examples/advanced/ChargeExchangeMC/doc/CexmcSetupImages.pdf create mode 100644 examples/advanced/ChargeExchangeMC/doc/CexmcUsersManual.pdf create mode 100644 examples/advanced/HGCal_testbeam/README create mode 100644 examples/advanced/ICRP110_HumanPhantoms/README create mode 100644 examples/advanced/README create mode 100644 examples/advanced/STCyclotron/README create mode 100644 examples/advanced/air_shower/README create mode 100644 examples/advanced/amsEcal/README create mode 100644 examples/advanced/brachytherapy/README create mode 100644 examples/advanced/brachytherapy/test_macro/FlexiSourceMacro_livermore.mac create mode 100644 examples/advanced/brachytherapy/test_macro/FlexiSourceMacro_opt0.mac create mode 100644 examples/advanced/brachytherapy/test_macro/FlexiSourceMacro_opt3.mac create mode 100644 examples/advanced/brachytherapy/test_macro/FlexiSourceMacro_opt4.mac create mode 100644 examples/advanced/brachytherapy/test_macro/FlexiSourceMacro_penelope.mac create mode 100644 examples/advanced/brachytherapy/test_macro/iridium_source_primary.mac create mode 100644 examples/advanced/composite_calorimeter/README create mode 100644 examples/advanced/doiPET/README create mode 100644 examples/advanced/eRosita/README.txt create mode 100644 examples/advanced/fastAerosol/README.txt create mode 100644 examples/advanced/gammaknife/README create mode 100644 examples/advanced/gammaray_telescope/README create mode 100644 examples/advanced/gorad/README create mode 100644 examples/advanced/hadrontherapy/README create mode 100644 examples/advanced/hadrontherapy/experimentalData/proton/BraggPeak/README create mode 100644 examples/advanced/human_phantom/README create mode 100644 examples/advanced/iort_therapy/README create mode 100644 examples/advanced/lAr_calorimeter/README create mode 100644 examples/advanced/medical_linac/README create mode 100644 examples/advanced/microbeam/README create mode 100644 examples/advanced/microelectronics/README create mode 100644 examples/advanced/nanobeam/README create mode 100644 examples/advanced/nanobeam/results/README create mode 100644 examples/advanced/purging_magnet/README create mode 100644 examples/advanced/radioprotection/README create mode 100644 examples/advanced/underground_physics/README create mode 100644 examples/advanced/underground_physics/README_stt create mode 100644 examples/advanced/xray_fluorescence/README create mode 100644 examples/advanced/xray_telescope/README create mode 100644 examples/basic/.README.txt create mode 100644 examples/basic/B1/.README.txt create mode 100644 examples/basic/B1/README create mode 100644 examples/basic/B2/.README.txt create mode 100644 examples/basic/B2/README create mode 100644 examples/basic/B3/.README.txt create mode 100644 examples/basic/B3/README create mode 100644 examples/basic/B4/.README.txt create mode 100644 examples/basic/B4/README create mode 100644 examples/basic/B5/.README.txt create mode 100644 examples/basic/B5/README create mode 100644 examples/basic/README create mode 100644 examples/extended/.README.txt create mode 100644 examples/extended/analysis/.README.txt create mode 100644 examples/extended/analysis/AnaEx01/.README.txt create mode 100644 examples/extended/analysis/AnaEx01/README create mode 100644 examples/extended/analysis/AnaEx02/.README.txt create mode 100644 examples/extended/analysis/AnaEx02/README create mode 100644 examples/extended/analysis/B1Con/.README.txt create mode 100644 examples/extended/analysis/B1Con/README create mode 100644 examples/extended/analysis/B1Con/README.B1 create mode 100644 examples/extended/analysis/README create mode 100644 examples/extended/biasing/.README.txt create mode 100644 examples/extended/biasing/GB01/.README.txt create mode 100644 examples/extended/biasing/GB01/README create mode 100644 examples/extended/biasing/GB02/.README.txt create mode 100644 examples/extended/biasing/GB02/README create mode 100644 examples/extended/biasing/GB03/.README.txt create mode 100644 examples/extended/biasing/GB03/README create mode 100644 examples/extended/biasing/GB04/.README.txt create mode 100644 examples/extended/biasing/GB04/README create mode 100644 examples/extended/biasing/GB05/.README.txt create mode 100644 examples/extended/biasing/GB05/README create mode 100644 examples/extended/biasing/GB06/.README.txt create mode 100644 examples/extended/biasing/GB06/README create mode 100644 examples/extended/biasing/GB07/.README.txt create mode 100644 examples/extended/biasing/GB07/README create mode 100644 examples/extended/biasing/README create mode 100644 examples/extended/biasing/ReverseMC01/.README.txt create mode 100644 examples/extended/biasing/ReverseMC01/README create mode 100644 examples/extended/common/.README.txt create mode 100644 examples/extended/common/README create mode 100644 examples/extended/electromagnetic/.README.txt create mode 100644 examples/extended/electromagnetic/README create mode 100644 examples/extended/electromagnetic/TestEm0/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm0/README create mode 100644 examples/extended/electromagnetic/TestEm1/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm1/README create mode 100644 examples/extended/electromagnetic/TestEm10/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm10/README create mode 100644 examples/extended/electromagnetic/TestEm11/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm11/README create mode 100644 examples/extended/electromagnetic/TestEm11/sandia/EGSnrc/README create mode 100644 examples/extended/electromagnetic/TestEm12/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm12/README create mode 100644 examples/extended/electromagnetic/TestEm12/berger/EGSnrc/README create mode 100644 examples/extended/electromagnetic/TestEm13/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm13/README create mode 100644 examples/extended/electromagnetic/TestEm14/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm14/README create mode 100644 examples/extended/electromagnetic/TestEm15/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm15/README create mode 100644 examples/extended/electromagnetic/TestEm15/README.gamma create mode 100644 examples/extended/electromagnetic/TestEm16/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm16/README create mode 100644 examples/extended/electromagnetic/TestEm17/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm17/README create mode 100644 examples/extended/electromagnetic/TestEm18/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm18/README create mode 100644 examples/extended/electromagnetic/TestEm2/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm2/README create mode 100644 examples/extended/electromagnetic/TestEm3/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm3/README create mode 100644 examples/extended/electromagnetic/TestEm3/geant3/README create mode 100644 examples/extended/electromagnetic/TestEm3/geant3/g4mat/README create mode 100644 examples/extended/electromagnetic/TestEm4/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm4/README create mode 100644 examples/extended/electromagnetic/TestEm5/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm5/README create mode 100644 examples/extended/electromagnetic/TestEm6/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm6/README create mode 100644 examples/extended/electromagnetic/TestEm7/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm7/README create mode 100644 examples/extended/electromagnetic/TestEm8/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm8/README create mode 100644 examples/extended/electromagnetic/TestEm9/.README.txt create mode 100644 examples/extended/electromagnetic/TestEm9/README create mode 100644 examples/extended/errorpropagation/.README.txt create mode 100644 examples/extended/errorpropagation/README create mode 100644 examples/extended/eventgenerator/.README.txt create mode 100644 examples/extended/eventgenerator/HepMC/.README.txt create mode 100644 examples/extended/eventgenerator/HepMC/HepMCEx01/.README.txt create mode 100644 examples/extended/eventgenerator/HepMC/HepMCEx01/README create mode 100644 examples/extended/eventgenerator/HepMC/HepMCEx02/.README.txt create mode 100644 examples/extended/eventgenerator/HepMC/HepMCEx02/README create mode 100644 examples/extended/eventgenerator/HepMC/MCTruth/.README.txt create mode 100644 examples/extended/eventgenerator/HepMC/MCTruth/README create mode 100644 examples/extended/eventgenerator/HepMC/README create mode 100644 examples/extended/eventgenerator/README create mode 100644 examples/extended/eventgenerator/exgps/.README.txt create mode 100644 examples/extended/eventgenerator/exgps/README create mode 100644 examples/extended/eventgenerator/exgps/macros/README create mode 100644 examples/extended/eventgenerator/particleGun/.README.txt create mode 100644 examples/extended/eventgenerator/particleGun/README create mode 100644 examples/extended/eventgenerator/pythia/.README.txt create mode 100644 examples/extended/eventgenerator/pythia/README create mode 100644 examples/extended/eventgenerator/pythia/decayer6/.README.txt create mode 100644 examples/extended/eventgenerator/pythia/decayer6/README create mode 100644 examples/extended/eventgenerator/pythia/decayer6/common/.README.txt create mode 100644 examples/extended/eventgenerator/pythia/decayer6/common/README create mode 100644 examples/extended/eventgenerator/pythia/py8decayer/.README.txt create mode 100644 examples/extended/eventgenerator/pythia/py8decayer/README create mode 100644 examples/extended/eventgenerator/userPrimaryGenerator/.README.txt create mode 100644 examples/extended/eventgenerator/userPrimaryGenerator/README create mode 100644 examples/extended/exoticphysics/.README.txt create mode 100644 examples/extended/exoticphysics/README create mode 100644 examples/extended/exoticphysics/channeling/.README.txt create mode 100644 examples/extended/exoticphysics/channeling/README create mode 100644 examples/extended/exoticphysics/dmparticle/.README.txt create mode 100644 examples/extended/exoticphysics/dmparticle/README create mode 100644 examples/extended/exoticphysics/monopole/.README.txt create mode 100644 examples/extended/exoticphysics/monopole/README create mode 100644 examples/extended/exoticphysics/phonon/.README.txt create mode 100644 examples/extended/exoticphysics/phonon/README create mode 100644 examples/extended/exoticphysics/saxs/.README.txt create mode 100644 examples/extended/exoticphysics/saxs/README create mode 100644 examples/extended/exoticphysics/ucn/.README.txt create mode 100644 examples/extended/exoticphysics/ucn/README create mode 100644 examples/extended/field/.README.txt create mode 100644 examples/extended/field/BlineTracer/.README.txt create mode 100644 examples/extended/field/BlineTracer/README create mode 100644 examples/extended/field/README create mode 100644 examples/extended/field/field01/.README.txt create mode 100644 examples/extended/field/field01/README create mode 100644 examples/extended/field/field02/.README.txt create mode 100644 examples/extended/field/field02/README create mode 100644 examples/extended/field/field03/.README.txt create mode 100644 examples/extended/field/field03/README create mode 100644 examples/extended/field/field04/.README.txt create mode 100644 examples/extended/field/field04/README create mode 100644 examples/extended/field/field04/random/README create mode 100644 examples/extended/field/field05/.README.txt create mode 100644 examples/extended/field/field05/README create mode 100644 examples/extended/field/field06/.README.txt create mode 100644 examples/extended/field/field06/README create mode 100644 examples/extended/g3tog4/.README.txt create mode 100644 examples/extended/g3tog4/README create mode 100644 examples/extended/g3tog4/clGeometry/.README.txt create mode 100644 examples/extended/g3tog4/clGeometry/README create mode 100644 examples/extended/g3tog4/clGeometry/common/.README.txt create mode 100644 examples/extended/g3tog4/clGeometry/common/README create mode 100644 examples/extended/geometry/.README.txt create mode 100644 examples/extended/geometry/README create mode 100644 examples/extended/geometry/transforms/.README.txt create mode 100644 examples/extended/geometry/transforms/README create mode 100644 examples/extended/geometry/vecGeomNavigation/.README.txt create mode 100644 examples/extended/geometry/vecGeomNavigation/README create mode 100644 examples/extended/hadronic/.README.txt create mode 100644 examples/extended/hadronic/FissionFragment/.README.txt create mode 100644 examples/extended/hadronic/FissionFragment/README create mode 100644 examples/extended/hadronic/Hadr00/.README.txt create mode 100644 examples/extended/hadronic/Hadr00/README create mode 100644 examples/extended/hadronic/Hadr01/.README.txt create mode 100644 examples/extended/hadronic/Hadr01/README create mode 100644 examples/extended/hadronic/Hadr02/.README.txt create mode 100644 examples/extended/hadronic/Hadr02/README create mode 100644 examples/extended/hadronic/Hadr02/hijing1_383/README create mode 100644 examples/extended/hadronic/Hadr03/.README.txt create mode 100644 examples/extended/hadronic/Hadr03/README create mode 100644 examples/extended/hadronic/Hadr04/.README.txt create mode 100644 examples/extended/hadronic/Hadr04/README create mode 100644 examples/extended/hadronic/Hadr05/.README.txt create mode 100644 examples/extended/hadronic/Hadr05/README create mode 100644 examples/extended/hadronic/Hadr06/.README.txt create mode 100644 examples/extended/hadronic/Hadr06/README create mode 100644 examples/extended/hadronic/Hadr07/.README.txt create mode 100644 examples/extended/hadronic/Hadr07/README create mode 100644 examples/extended/hadronic/Hadr08/.README.txt create mode 100644 examples/extended/hadronic/Hadr08/README create mode 100644 examples/extended/hadronic/Hadr09/.README.txt create mode 100644 examples/extended/hadronic/Hadr09/README create mode 100644 examples/extended/hadronic/Hadr10/.README.txt create mode 100644 examples/extended/hadronic/Hadr10/README create mode 100644 examples/extended/hadronic/NeutronSource/.README.txt create mode 100644 examples/extended/hadronic/NeutronSource/README create mode 100644 examples/extended/hadronic/README create mode 100644 examples/extended/medical/.README.txt create mode 100644 examples/extended/medical/DICOM/.README.txt create mode 100644 examples/extended/medical/DICOM/README create mode 100644 examples/extended/medical/DICOM2/.README.txt create mode 100644 examples/extended/medical/DICOM2/README create mode 100644 examples/extended/medical/GammaTherapy/.README.txt create mode 100644 examples/extended/medical/GammaTherapy/README create mode 100644 examples/extended/medical/README create mode 100644 examples/extended/medical/dna/.README.txt create mode 100644 examples/extended/medical/dna/AuNP/.README.txt create mode 100644 examples/extended/medical/dna/AuNP/README create mode 100644 examples/extended/medical/dna/README create mode 100644 examples/extended/medical/dna/chem1/.README.txt create mode 100644 examples/extended/medical/dna/chem1/README create mode 100644 examples/extended/medical/dna/chem2/.README.txt create mode 100644 examples/extended/medical/dna/chem2/README create mode 100644 examples/extended/medical/dna/chem3/.README.txt create mode 100644 examples/extended/medical/dna/chem3/README create mode 100644 examples/extended/medical/dna/chem4/.README.txt create mode 100644 examples/extended/medical/dna/chem4/README create mode 100644 examples/extended/medical/dna/chem5/.README.txt create mode 100644 examples/extended/medical/dna/chem5/README create mode 100644 examples/extended/medical/dna/chem6/.README.txt create mode 100644 examples/extended/medical/dna/chem6/README create mode 100644 examples/extended/medical/dna/clustering/.README.txt create mode 100644 examples/extended/medical/dna/clustering/README create mode 100644 examples/extended/medical/dna/dnadamage1/.README.txt create mode 100644 examples/extended/medical/dna/dnadamage1/README.txt create mode 100644 examples/extended/medical/dna/dnaphysics/.README.txt create mode 100644 examples/extended/medical/dna/dnaphysics/README create mode 100644 examples/extended/medical/dna/icsd/.README.txt create mode 100644 examples/extended/medical/dna/icsd/README create mode 100644 examples/extended/medical/dna/mfp/.README.txt create mode 100644 examples/extended/medical/dna/mfp/README create mode 100644 examples/extended/medical/dna/microdosimetry/.README.txt create mode 100644 examples/extended/medical/dna/microdosimetry/README create mode 100644 examples/extended/medical/dna/microprox/.README.txt create mode 100644 examples/extended/medical/dna/microprox/README create mode 100644 examples/extended/medical/dna/microyz/.README create mode 100644 examples/extended/medical/dna/microyz/.README.txt create mode 100644 examples/extended/medical/dna/microyz/README create mode 100644 examples/extended/medical/dna/neuron/.README create mode 100644 examples/extended/medical/dna/neuron/.README.txt create mode 100644 examples/extended/medical/dna/neuron/README create mode 100644 examples/extended/medical/dna/pdb4dna/.README.txt create mode 100644 examples/extended/medical/dna/pdb4dna/README create mode 100644 examples/extended/medical/dna/range/.README.txt create mode 100644 examples/extended/medical/dna/range/README create mode 100644 examples/extended/medical/dna/scavenger/.README.txt create mode 100755 examples/extended/medical/dna/scavenger/README create mode 100644 examples/extended/medical/dna/slowing/.README.txt create mode 100644 examples/extended/medical/dna/slowing/README create mode 100644 examples/extended/medical/dna/splitting/.README.txt create mode 100644 examples/extended/medical/dna/splitting/README create mode 100644 examples/extended/medical/dna/spower/.README.txt create mode 100644 examples/extended/medical/dna/spower/README create mode 100644 examples/extended/medical/dna/svalue/.README.txt create mode 100644 examples/extended/medical/dna/svalue/README create mode 100644 examples/extended/medical/dna/wholeNuclearDNA/.README.txt create mode 100644 examples/extended/medical/dna/wholeNuclearDNA/README create mode 100644 examples/extended/medical/dna/wvalue/.README.txt create mode 100644 examples/extended/medical/dna/wvalue/README create mode 100644 examples/extended/medical/electronScattering/.README.txt create mode 100644 examples/extended/medical/electronScattering/EGS_13MeV/README create mode 100644 examples/extended/medical/electronScattering/README create mode 100644 examples/extended/medical/electronScattering2/.README.txt create mode 100644 examples/extended/medical/electronScattering2/README create mode 100644 examples/extended/medical/fanoCavity/.README.txt create mode 100644 examples/extended/medical/fanoCavity/README create mode 100644 examples/extended/medical/fanoCavity2/.README.txt create mode 100644 examples/extended/medical/fanoCavity2/README create mode 100644 examples/extended/optical/.README.txt create mode 100644 examples/extended/optical/LXe/.README.txt create mode 100644 examples/extended/optical/LXe/README create mode 100644 examples/extended/optical/OpNovice/.README.txt create mode 100644 examples/extended/optical/OpNovice/README create mode 100644 examples/extended/optical/OpNovice2/.README.txt create mode 100644 examples/extended/optical/OpNovice2/README create mode 100644 examples/extended/optical/README create mode 100644 examples/extended/optical/wls/.README.txt create mode 100644 examples/extended/optical/wls/README create mode 100644 examples/extended/parallel/.README.txt create mode 100644 examples/extended/parallel/MPI/.README.txt create mode 100644 examples/extended/parallel/MPI/README.md create mode 100644 examples/extended/parallel/MPI/ctests-definitions.cmake create mode 100644 examples/extended/parallel/MPI/examples/exMPI01/.README.txt create mode 100644 examples/extended/parallel/MPI/examples/exMPI01/README.html create mode 100644 examples/extended/parallel/MPI/examples/exMPI01/README.md create mode 100644 examples/extended/parallel/MPI/examples/exMPI02/.README.txt create mode 100644 examples/extended/parallel/MPI/examples/exMPI02/README.html create mode 100644 examples/extended/parallel/MPI/examples/exMPI02/README.md create mode 100644 examples/extended/parallel/MPI/examples/exMPI03/.README.txt create mode 100644 examples/extended/parallel/MPI/examples/exMPI03/README.html create mode 100644 examples/extended/parallel/MPI/examples/exMPI03/README.md create mode 100644 examples/extended/parallel/MPI/examples/exMPI04/.README.txt create mode 100644 examples/extended/parallel/MPI/examples/exMPI04/README.md create mode 100644 examples/extended/parallel/README create mode 100644 examples/extended/parallel/TBB/.README.txt create mode 100644 examples/extended/parallel/TBB/B2b/.README.txt create mode 100644 examples/extended/parallel/TBB/B2b/README create mode 100644 examples/extended/parallel/TBB/README create mode 100644 examples/extended/parallel/ThreadsafeScorers/.README.txt create mode 100644 examples/extended/parallel/ThreadsafeScorers/README create mode 100644 examples/extended/parallel/TopC/ParN02/.README.N02.txt create mode 100644 examples/extended/parallel/TopC/ParN02/.README.txt create mode 100644 examples/extended/parallel/TopC/ParN02/AnnotatedFiles/000README create mode 100644 examples/extended/parallel/TopC/ParN02/README create mode 100644 examples/extended/parallel/TopC/ParN02/README.N02 create mode 100644 examples/extended/parallel/TopC/ParN04/.README.N04 create mode 100644 examples/extended/parallel/TopC/ParN04/.README.N04.txt create mode 100644 examples/extended/parallel/TopC/ParN04/.README.txt create mode 100644 examples/extended/parallel/TopC/ParN04/AnnotatedFiles/000README create mode 100644 examples/extended/parallel/TopC/ParN04/README create mode 100644 examples/extended/parallel/TopC/ParN04/README.N04 create mode 100644 examples/extended/parallel/TopC/info/NEW_APP_README create mode 100644 examples/extended/parallel/TopC/info/README.html create mode 100644 examples/extended/parameterisations/.README.txt create mode 100644 examples/extended/parameterisations/Par01/.README.txt create mode 100644 examples/extended/parameterisations/Par01/README create mode 100644 examples/extended/parameterisations/Par02/.README.txt create mode 100644 examples/extended/parameterisations/Par02/README create mode 100644 examples/extended/parameterisations/Par03/.README.txt create mode 100644 examples/extended/parameterisations/Par03/README create mode 100644 examples/extended/parameterisations/Par04/.README.txt create mode 100644 examples/extended/parameterisations/Par04/README create mode 100644 examples/extended/parameterisations/README create mode 100644 examples/extended/parameterisations/gflash/.README.txt create mode 100644 examples/extended/parameterisations/gflash/README create mode 100644 examples/extended/parameterisations/gflash/gflasha/.README.txt create mode 100644 examples/extended/parameterisations/gflash/gflasha/README create mode 100644 examples/extended/persistency/.README.txt create mode 100644 examples/extended/persistency/P01/.README.txt create mode 100644 examples/extended/persistency/P01/README create mode 100644 examples/extended/persistency/P02/.README.txt create mode 100644 examples/extended/persistency/P02/README create mode 100644 examples/extended/persistency/P03/.README.txt create mode 100644 examples/extended/persistency/P03/README create mode 100644 examples/extended/persistency/README create mode 100644 examples/extended/persistency/gdml/.README.txt create mode 100644 examples/extended/persistency/gdml/G01/.README.txt create mode 100644 examples/extended/persistency/gdml/G01/README create mode 100644 examples/extended/persistency/gdml/G02/.README.txt create mode 100644 examples/extended/persistency/gdml/G02/README create mode 100644 examples/extended/persistency/gdml/G03/.README.txt create mode 100644 examples/extended/persistency/gdml/G03/README create mode 100644 examples/extended/persistency/gdml/G04/.README.txt create mode 100644 examples/extended/persistency/gdml/G04/README create mode 100644 examples/extended/persistency/gdml/README create mode 100644 examples/extended/physicslists/.README.txt create mode 100644 examples/extended/physicslists/README create mode 100644 examples/extended/physicslists/extensibleFactory/.README.txt create mode 100644 examples/extended/physicslists/extensibleFactory/README create mode 100644 examples/extended/physicslists/factory/.README.txt create mode 100644 examples/extended/physicslists/factory/README create mode 100644 examples/extended/physicslists/genericPL/.README.txt create mode 100644 examples/extended/physicslists/genericPL/README create mode 100644 examples/extended/polarisation/.README.txt create mode 100644 examples/extended/polarisation/Pol01/.README.txt create mode 100644 examples/extended/polarisation/Pol01/README create mode 100644 examples/extended/polarisation/README create mode 100644 examples/extended/radioactivedecay/.README.txt create mode 100644 examples/extended/radioactivedecay/Activation/.README.txt create mode 100644 examples/extended/radioactivedecay/Activation/README create mode 100644 examples/extended/radioactivedecay/README create mode 100644 examples/extended/radioactivedecay/rdecay01/.README.txt create mode 100644 examples/extended/radioactivedecay/rdecay01/README create mode 100644 examples/extended/radioactivedecay/rdecay02/.README.txt create mode 100644 examples/extended/radioactivedecay/rdecay02/README create mode 100644 examples/extended/runAndEvent/.README.txt create mode 100644 examples/extended/runAndEvent/RE01/.README.txt create mode 100644 examples/extended/runAndEvent/RE01/README create mode 100644 examples/extended/runAndEvent/RE02/.README.txt create mode 100644 examples/extended/runAndEvent/RE02/README create mode 100644 examples/extended/runAndEvent/RE03/.README.txt create mode 100644 examples/extended/runAndEvent/RE03/README create mode 100644 examples/extended/runAndEvent/RE04/.README.txt create mode 100644 examples/extended/runAndEvent/RE04/README create mode 100644 examples/extended/runAndEvent/RE05/.README.txt create mode 100644 examples/extended/runAndEvent/RE05/README create mode 100644 examples/extended/runAndEvent/RE06/.README.txt create mode 100644 examples/extended/runAndEvent/RE06/README create mode 100644 examples/extended/runAndEvent/RE07/.README.txt create mode 100644 examples/extended/runAndEvent/RE07/README create mode 100644 examples/extended/runAndEvent/README create mode 100644 examples/extended/visualization/.README.txt create mode 100644 examples/extended/visualization/README create mode 100644 examples/extended/visualization/movies/.README.txt create mode 100644 examples/extended/visualization/movies/README create mode 100644 examples/extended/visualization/perspective/.README.txt create mode 100644 examples/extended/visualization/perspective/README create mode 100644 examples/extended/visualization/standalone/.README.txt create mode 100644 examples/extended/visualization/standalone/README create mode 100644 examples/extended/visualization/userVisAction/.README.txt create mode 100644 examples/extended/visualization/userVisAction/README create mode 100644 source/externals/expat/README create mode 100644 source/externals/ptl/.clang-tidy create mode 100644 source/externals/ptl/README.md create mode 100644 source/externals/zlib/README create mode 100644 source/g3tog4/README create mode 100644 source/physics_lists/constructors/decay/README create mode 100644 source/physics_lists/constructors/electromagnetic/README create mode 100644 source/physics_lists/constructors/factory/README create mode 100644 source/physics_lists/constructors/gamma_lepto_nuclear/README create mode 100644 source/physics_lists/constructors/hadron_elastic/README create mode 100644 source/physics_lists/constructors/hadron_inelastic/README create mode 100644 source/physics_lists/constructors/ions/README create mode 100644 source/physics_lists/constructors/limiters/README create mode 100644 source/physics_lists/constructors/stopping/README create mode 100644 source/processes/hadronic/models/de_excitation/photon_evaporation/README-LevelGammaData create mode 100644 source/processes/hadronic/models/im_r_matrix/README create mode 100644 source/processes/hadronic/models/radioactive_decay/README_RDM create mode 100644 source/processes/solidstate/phonon/README create mode 100644 source/run/README.TXT create mode 100644 source/tasking/README.md create mode 100644 source/visualization/FukuiRenderer/README create mode 100644 source/visualization/HepRep/README create mode 100644 source/visualization/HepRep/include/README create mode 100644 source/visualization/OpenInventor/README.OIXExtendedViewer create mode 100644 source/visualization/RayTracer/README create mode 100644 source/visualization/gMocren/README create mode 100644 source/visualization/modeling/README diff --git a/README.rst b/README.rst index e0440db0bb..d0f8ca284f 100644 --- a/README.rst +++ b/README.rst @@ -38,4 +38,3 @@ If you think you have found a bug in Geant4, please open a ticket on our `Bugzil Contributing to Geant4 ===== Please see the main `Contribution Guide <./CONTRIBUTING.rst>`_. - diff --git a/environments/g4py/README.md b/environments/g4py/README.md new file mode 100644 index 0000000000..76ec00d0c3 --- /dev/null +++ b/environments/g4py/README.md @@ -0,0 +1,78 @@ +Geant4Py +======== + +_A set of python modules for using Geant4_ + + +System Requirements +------------------- + +### CMake +Building system is migrated to CMake system. + +### Python + +Python2.x and Python 3.x (experimental) + +### Boost + +Boost_Python is needed. + +### (Optional) + +ROOT for histogramming/analysis + +### Tested Platforms + +* CentOS7 (Python2) +* Ubuntu 18.04 LTS (Python3) + +How to Install +-------------- +Before building library, *GEANT4_INSTALL* environment variable should be set. + + # export GEANT4_INSTALL= (zsh, bash) + # setenv GEANT4_INSTALL (csh) + (G4 install path is the path specified by "CMAKE_INSTALL_PREFIX" when building Geant4) + +then + + # mkdir build + # cd build + # cmake .. + # make + # make install + +By default, g4py is installed in \/lib(64) directory. + +Before doing tests with CTest, you have to set environment variables +for Geant4 data. + + # make + # make install + # ctest + +performs automatic unit/integration tests with CTest. + +How to Use: +----------- +Some environment variables are required at run time. + +### *PYTHONPATH* + +Python module search directories, given by a colon-separated list of directories, like + + + # export PYTHONPATH=/lib64:/lib64/examples:/lib64/tests (zsh, bash) + # setenv PYTHONPATH /lib64:/lib64/examples:/lib64/tests (csh) + +### *LD_LIBRARY_PATH* + +You might need define LD_LIBRARY_PATH for Geant4 libraries. + # export LD_LIBRARY_PATH=/lib (zsh, bash) + # setenv LD_LIBRARY_PATH=/lib (csh) + +### Getting started +You can import Geant4Py modules in Python just like + + >>> import Geant4 diff --git a/environments/g4py/examples/README b/environments/g4py/examples/README new file mode 100644 index 0000000000..c445d98866 --- /dev/null +++ b/environments/g4py/examples/README @@ -0,0 +1,33 @@ +------------------------------------------------------------------- + +This directory contains a set of examples for Geant4Py. + +[demos/water_phantom] +An example of "water phantom dosimetry" + +This demo program shows that a Geant4 application well coworks with ROOT +on Python front end. VisManager, PrimaryGeneratorAction, UserAction-s, +histogramming with ROOT are implemented in Python; + + dose calculation in a water phantom + + Python overloading of user actions + + on-line histogramming with ROOT + + visualization + + +[education] +Educational examples with Graphical User Interface using TKinter + +* lesson1 +The first version of the courseware of the mass attenuation coefficient. + +* lesson2 +GUI interface of ExN03, which can control geometry configuration, +intial particle condition, physics processes, cut value, +magnetic field and visualization outputs. + +[emplot] +Examples of plotting photon cross sections and stopping powers with ROOT + +[gdml] +Examples of writing/reading user's geometry to/from a GDML file + diff --git a/environments/g4py/examples/education/lesson1/README b/environments/g4py/examples/education/lesson1/README new file mode 100644 index 0000000000..3d8a1fb187 --- /dev/null +++ b/environments/g4py/examples/education/lesson1/README @@ -0,0 +1,54 @@ +Hajime Yoshida + +******* README of lesson1 ****** + +26 September 2006 + - Lesson1.py as before + - Lesson1withN03.py + - physics is list is taken from examples/novice/N03 + - process on/off + - Leson1Wx.py + - same as Lesson1withN03 but + - New GUI toolkit is used and the default Python isn't enough + - wxPython is necessary + + +26 May 2006 Geant4.8.1 + + + +The first version of the courseware of the mass attenuation coefficient + + - Lesson1.py + select absorber material + set its thickness upto 500 mm + select beam particle + set its energy upto 100 MeV + set nu of events up to 100 + run + + and then + zoom in (x1.1) or zoom out (x0.9) + pan in up/down and/or right/left in the unit of mm (type in two + numbers separated by a space) + + execute any G4 command but /gun/particle or /gun/energy which are + defined by the above + + -oglx.mac + OGLSX => important to make zooming effective after showing trajectories. + + if you want to use VRML, you have to specify the directory where *.wrl + file is stored and the VRML viewer to which the path is set: + G4VRMLFILE_DEST_DIR=/home/yoshidah/tmp/ + G4VRMLFILE_VIEWER=vrmlview + + And you have VRML drivers built. + G4VIS_BUILD_VRML_DRIVER=1 + G4VIS_USE_VRMLFILE=1 + G4VIS_BUILD_VRMLFILE_DRIVER=1 + G4VIS_USE_VRML=1 + + + -gun.mac + This is used only at the initialization time. \ No newline at end of file diff --git a/environments/g4py/examples/education/lesson2/README b/environments/g4py/examples/education/lesson2/README new file mode 100644 index 0000000000..7bc5adc31a --- /dev/null +++ b/environments/g4py/examples/education/lesson2/README @@ -0,0 +1,82 @@ +26 Sep 2006 + - added Lesson2Wx.py + New version using wxPython + functionas are identical with ExN03.py + +26 May 2006 +revised 02 July 2006 +Geant4.8.1 release +=============================================== +Prerequisites for G4 environment variables. +============================================== + +This scripts offers the choice of visualization systems; +one among OGLSX (OpenGL stored mode), or VRML2FILE or Wired3. + +OGLSX is the default viewer and you need no environment variables. + +To use VRML2FILE you have to specify its viewer which is found in your +search path and the destination directory where *.wrl file is stored. +If you don't specify the name of the viewer, you can't choose it on the panel. +For example, + setenv G4VRMLFILE_VIEWER $HOME/bin/vrmlview + setenv G4VRMLFILE_DEST_DIR $HOME/tmp/ <= terminate with / + +To use Wired, download it and install under your directory. Java Runtime +Environment is necessary. +Then set, for example; + setenv G4HEPREPFILE_VIEWER $HOME/Wired/bin/wired <= any path you use + setenv G4HEPREPFILE_DIR $HOME/tmp/ + setenv G4HEPREPFILE_NAME lesson2_00 <= any name you choose. + setenv G4HEPREPFILE_OVERWRITE 1 <= to reuse the file for "next event" +G4HEPREPFILE_VIEWER isn't an official Geant4 environment variable but is employed +here to control the vissssualization viewers. +The name of the HepRepFile is ${G4HEPREPFILE_NAME}.heprep which will be +stored in ${G4HEPREPFILE_DIR}. + +ExN03.py script don't use VRML or Wired if their *_VIEWER isn't set. +But other env variables are also used in the script to look for the +file and to activate the viewer, you have to set all of the above variables +in the shell where you activate ExN03.py script. + + +NOTICE) VRML viewer blocks the window (modal), so that you have to exit it to +display another run. + +********* ExN03.py script *********** + +This example id derived from examples/novice/N03. +You can + - choose the materials of absorber and gap + - set the thickness of the absorber and gap + - set the lateral (in YZ plane) size of the sandwitch cal. + - choose an incedent particle + - set its energy + - set the number of events to run + - toggle on/off of the electromagnetic processes + - set cut length + - set magnetic field + - typein any Geant4 command (except related with the above functions) and execute it + +How to run it? + %python ExN03.py + +You can visualize with OpenGL stored mode or VRML or Wired3 +You can choose either of the active viewers by pushing the +radio buttons. +========================= +NOTICE) + +VRML viewer runs in the modal action, and you have to exit it +to have a new diaplay for the new run, or you want to switch to +another viewer. + +Wired has the "next"/"previous" event button. So to see the next +event, first run and then "next" event. Wired doesn't block G4 +and you can have Wired and OGLSX both open. + + + +ExN03-Wired.py is OBSOLETE. Please use ExN03.py + + diff --git a/environments/g4py/tests/CMakeLists.txt b/environments/g4py/tests/CMakeLists.txt new file mode 100644 index 0000000000..172298ade7 --- /dev/null +++ b/environments/g4py/tests/CMakeLists.txt @@ -0,0 +1,10 @@ +# - add tests components +add_subdirectory(g4pytest) +add_subdirectory(gtest01) +add_subdirectory(gtest02) +add_subdirectory(gtest03) +add_subdirectory(gtest04) +add_subdirectory(gtest05) +add_subdirectory(gtest06) +add_subdirectory(gtest07) +add_subdirectory(gtest08) diff --git a/environments/g4py/tests/History b/environments/g4py/tests/History new file mode 100644 index 0000000000..9eaf9b3d09 --- /dev/null +++ b/environments/g4py/tests/History @@ -0,0 +1,57 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Category History file + --------------------- + +A set of tests for python wrapping of C++ elements. + + ---------------------------------------------------------- + * Reverse chronological order (last date on top), please * + ---------------------------------------------------------- + +Nov.30, 2008 K.Murakami +- gtest01-07: modified with g4py namespace + +Aug.07, 2007 K.Murakami +- gtest06 is added. +- gtest07 is added. + +Jul.10, 2007 K.Murakami +- gtest05 is added. + +Aug.07, 2006 K.Murakami +- gtest04 is added. + +Oct.05, 2005 K.Murakami +- test13 is added. + +Aug.31, 2005 K.Murakami +- gtest03 is added. + +Aug.28, 2005 K.Murakami +- gtest02 is added. + +Aug.24, 2005 K.Murakami +- test12 is added. + +Aug.09, 2005 K.Murakami +- test11 is added. + +Jun.22, 2005 K.Murakami +- gtest00 is removed + +Jun.15, 2005 K.Murakami +- test10 is added. + +Jun.14, 2005 K.Murakami +- test00- test09 are finished. +- gtest00 is closed. +- gtest01 is launched for Geant4Py basic tests + +May 18, 2005 K.Murakami +- just created. + diff --git a/environments/g4py/tests/README.md b/environments/g4py/tests/README.md new file mode 100644 index 0000000000..56ce126653 --- /dev/null +++ b/environments/g4py/tests/README.md @@ -0,0 +1,45 @@ +Test Modules +============ + +This module collects a set of tests for python wrapping of C++ elements. + +>**Notes:**
+"*testXX*" directories contain tests without Geant4 package.
+"*gtestXX*" directories contain tests with Geant4 package. + + +Basic tests +----------- + +| Test | Description | +|:------:|------------- +|test00 | hallo world +|test01 | simple class wrapping +|test02 | simple inheritance +|test03 | singleton w/o public constructor
can NOT be compiled. +|test04 | call policies +|test05 | function overloading & default arguments +|test06 | python inheritance from base class +|test07 | enums +|test08 | static member function +|test09 | operators +|test10 | call by-reference +|test11 | no_init +|test12 | indexing a STL vector +|test13 | test for a list argument/return + + +Function tests +-------------- + +| Test | Description | +|:------:|------------- +|gtest01 | user application +|gtest02 | test for using site-module packages +|gtest03 | test for EZsim package +|gtest04 | test for getting command tree and command information +|gtest05 | test for constructing CSG geometries in Python +|gtest06 | test for constructing/visualizing boolean geoemtries +|gtest07 | test for checking overlapped geometries + + diff --git a/environments/g4py/tests/g4pytest/CMakeLists.txt b/environments/g4py/tests/g4pytest/CMakeLists.txt new file mode 100644 index 0000000000..75306d0972 --- /dev/null +++ b/environments/g4py/tests/g4pytest/CMakeLists.txt @@ -0,0 +1,35 @@ +# - Function to build the C++ modules +function(g4pytest_add_module _TARGET) + g4py_add_module(${_TARGET} ${ARGN}) + + # Filthy temp hack for submodule paths.... + string(REGEX REPLACE "^_" "" _SUBMODULE "${_TARGET}") + set_property(TARGET ${_TARGET} APPEND_STRING PROPERTY LIBRARY_OUTPUT_DIRECTORY "/g4pytest/${_SUBMODULE}") + foreach(_conftype ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER ${_conftype} _conftype_uppercase) + set_property(TARGET ${_TARGET} APPEND_STRING PROPERTY LIBRARY_OUTPUT_DIRECTORY_${_conftype_uppercase} "/g4pytest/${_SUBMODULE}") + endforeach() +endfunction() + + +# - add libs components +add_subdirectory(ExN01geom) +add_subdirectory(ExN03geom) +add_subdirectory(Qgeom) +add_subdirectory(ezgeom) +add_subdirectory(NISTmaterials) +add_subdirectory(Qmaterials) +add_subdirectory(EMSTDpl) +add_subdirectory(ExN01pl) +add_subdirectory(MedicalBeam) +add_subdirectory(ParticleGun) +# Remainder are pure python + +# Copy/configure pure python components +file(GLOB_RECURSE PY_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.py) +foreach(_pyfile ${PY_FILES}) + file(GENERATE + OUTPUT ${GEANT4_PYTHON_OUTPUT_DIR}/g4pytest/${_pyfile} + INPUT ${CMAKE_CURRENT_SOURCE_DIR}/${_pyfile} + ) +endforeach() diff --git a/environments/g4py/tests/g4pytest/EMSTDpl/CMakeLists.txt b/environments/g4py/tests/g4pytest/EMSTDpl/CMakeLists.txt new file mode 100644 index 0000000000..82112c5a98 --- /dev/null +++ b/environments/g4py/tests/g4pytest/EMSTDpl/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _EMSTDpl) +g4pytest_add_module(${_TARGET} PhysicsListEMstd.cc pyEMSTDpl.cc) +target_link_libraries(${_TARGET} PRIVATE G4particles G4processes G4run) diff --git a/environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.cc b/environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.cc new file mode 100644 index 0000000000..89d33286a9 --- /dev/null +++ b/environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.cc @@ -0,0 +1,133 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// PhysicsListEMstd.cc +// +// 2006 Q +// ==================================================================== +#include "PhysicsListEMstd.hh" +#include "G4SystemOfUnits.hh" + +#include "G4ProcessManager.hh" +#include "G4ParticleDefinition.hh" + +#include "G4Gamma.hh" +#include "G4Electron.hh" +#include "G4Positron.hh" + +#include "G4ComptonScattering.hh" +#include "G4GammaConversion.hh" +#include "G4PhotoElectricEffect.hh" +#include "G4eMultipleScattering.hh" +#include "G4eIonisation.hh" +#include "G4eBremsstrahlung.hh" +#include "G4eplusAnnihilation.hh" + + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////////////////// +PhysicsListEMstd::PhysicsListEMstd() +//////////////////////////////////// +{ + SetVerboseLevel(1); + defaultCutValue = 1.*mm; // default cut value (1.0mm) +} + + +///////////////////////////////////// +PhysicsListEMstd::~PhysicsListEMstd() +///////////////////////////////////// +{ +} + + +////////////////////////////////////////// +void PhysicsListEMstd::ConstructParticle() +////////////////////////////////////////// +{ + G4Gamma::GammaDefinition(); + G4Electron::ElectronDefinition(); + G4Positron::PositronDefinition(); +} + + +///////////////////////////////////////// +void PhysicsListEMstd::ConstructProcess() +///////////////////////////////////////// +{ + AddTransportation(); + + G4ProcessManager* pm; + + // ---------------------------------------------------------- + // gamma physics + // ---------------------------------------------------------- + pm= G4Gamma::Gamma()-> GetProcessManager(); + pm-> AddDiscreteProcess(new G4PhotoElectricEffect); + pm-> AddDiscreteProcess(new G4ComptonScattering); + pm-> AddDiscreteProcess(new G4GammaConversion); + + // ---------------------------------------------------------- + // electron physics + // ---------------------------------------------------------- + G4eMultipleScattering* msc= new G4eMultipleScattering; + G4eIonisation* eion= new G4eIonisation; + G4eBremsstrahlung* ebrems= new G4eBremsstrahlung; + + pm= G4Electron::Electron()->GetProcessManager(); + pm-> AddProcess(msc, ordInActive, 1, 1); + pm-> AddProcess(eion, ordInActive, 2, 2); + pm-> AddProcess(ebrems, ordInActive, ordInActive, 3); + + // ---------------------------------------------------------- + // positron physics + // ---------------------------------------------------------- + msc= new G4eMultipleScattering; + eion= new G4eIonisation; + ebrems= new G4eBremsstrahlung; + G4eplusAnnihilation* annihilation= new G4eplusAnnihilation; + + pm= G4Positron::Positron()-> GetProcessManager(); + pm-> AddProcess(msc, ordInActive, 1, 1); + pm-> AddProcess(eion, ordInActive, 2, 2); + pm-> AddProcess(ebrems, ordInActive, ordInActive, 3); + pm-> AddProcess(annihilation, 0, ordInActive, 4); + +} + + +//////////////////////////////// +void PhysicsListEMstd::SetCuts() +//////////////////////////////// +{ + SetCutsWithDefault(); +} + diff --git a/environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.hh b/environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.hh new file mode 100644 index 0000000000..a53d62ce96 --- /dev/null +++ b/environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.hh @@ -0,0 +1,56 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// PhysicsListEMstd.hh +// +// Physics list for electron/positron/gamma +// EM-standard package +// +// 2006 Q +// ==================================================================== +#ifndef PHYSICS_LIST_EMSTD_H +#define PHYSICS_LIST_EMSTD_H + +#include "G4VUserPhysicsList.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class PhysicsListEMstd: public G4VUserPhysicsList { +public: + PhysicsListEMstd(); + ~PhysicsListEMstd(); + + virtual void ConstructParticle(); + virtual void ConstructProcess(); + virtual void SetCuts(); + +}; + +#endif diff --git a/environments/g4py/tests/g4pytest/EMSTDpl/__init__.py b/environments/g4py/tests/g4pytest/EMSTDpl/__init__.py new file mode 100644 index 0000000000..30c93286ec --- /dev/null +++ b/environments/g4py/tests/g4pytest/EMSTDpl/__init__.py @@ -0,0 +1 @@ +from ._EMSTDpl import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/EMSTDpl/pyEMSTDpl.cc b/environments/g4py/tests/g4pytest/EMSTDpl/pyEMSTDpl.cc new file mode 100644 index 0000000000..c21c4ef42d --- /dev/null +++ b/environments/g4py/tests/g4pytest/EMSTDpl/pyEMSTDpl.cc @@ -0,0 +1,75 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// pyEMSTDpl.cc +// +// [Qgeom] +// a site-module of Geant4Py +// +// Electron/Gamma EM-standard physics list +// +// 2005 Q +// ==================================================================== +#include +#include "G4RunManager.hh" +#include "PhysicsListEMstd.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyEMSTDpl { + +PhysicsListEMstd* Construct() +{ + PhysicsListEMstd* pl= new PhysicsListEMstd; + + G4RunManager* runMgr= G4RunManager::GetRunManager(); + runMgr-> SetUserInitialization(pl); + + return pl; +} + +} + +using namespace pyEMSTDpl; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_EMSTDpl) { + + class_ > + ("PhysicsListEMstd", "Electron/Gamma EM-standard physics list") + ; + + // --- + def("Construct", Construct, + return_value_policy()); + +} diff --git a/environments/g4py/tests/g4pytest/ExN01geom/CMakeLists.txt b/environments/g4py/tests/g4pytest/ExN01geom/CMakeLists.txt new file mode 100644 index 0000000000..c92f18b2ee --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01geom/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _ExN01geom) +g4pytest_add_module(${_TARGET} ExN01DetectorConstruction.cc pyExN01geom.cc) +target_link_libraries(${_TARGET} PRIVATE G4materials G4geometry G4run) diff --git a/environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.cc b/environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.cc new file mode 100644 index 0000000000..f5fbce61a2 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.cc @@ -0,0 +1,155 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// ExN01DetectorConstruction.cc +// +// 2005 Q +// ==================================================================== +#include "ExN01DetectorConstruction.hh" + +#include "G4Material.hh" +#include "G4Box.hh" +#include "G4Tubs.hh" +#include "G4LogicalVolume.hh" +#include "G4ThreeVector.hh" +#include "G4PVPlacement.hh" +#include "G4SystemOfUnits.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +////////////////////////////////////////////////////// +ExN01DetectorConstruction::ExN01DetectorConstruction() + : experimentalHall_log(0), tracker_log(0), + calorimeterBlock_log(0), calorimeterLayer_log(0), + experimentalHall_phys(0), calorimeterLayer_phys(0), + calorimeterBlock_phys(0), tracker_phys(0) +////////////////////////////////////////////////////// +{ +} + +/////////////////////////////////////////////////////// +ExN01DetectorConstruction::~ExN01DetectorConstruction() +/////////////////////////////////////////////////////// +{ +} + +///////////////////////////////////////////////////////// +G4VPhysicalVolume* ExN01DetectorConstruction::Construct() +///////////////////////////////////////////////////////// +{ + //------------------------------------------------------ materials + G4double a; // atomic mass + G4double z; // atomic number + G4double density; + + G4Material* Ar = + new G4Material("ArgonGas", z= 18., a= 39.95*g/mole, density= 1.782*mg/cm3); + + G4Material* Al = + new G4Material("Aluminum", z= 13., a= 26.98*g/mole, density= 2.7*g/cm3); + + G4Material* Pb = + new G4Material("Lead", z= 82., a= 207.19*g/mole, density= 11.35*g/cm3); + + //------------------------------------------------------ volumes + + //------------------------------ experimental hall (world volume) + //------------------------------ beam line along x axis + + G4double expHall_x = 3.0*m; + G4double expHall_y = 1.0*m; + G4double expHall_z = 1.0*m; + G4Box* experimentalHall_box + = new G4Box("expHall_box",expHall_x,expHall_y,expHall_z); + experimentalHall_log = new G4LogicalVolume(experimentalHall_box, + Ar,"expHall_log",0,0,0); + experimentalHall_phys = new G4PVPlacement(0,G4ThreeVector(), + experimentalHall_log, + "expHall",0,false,0); + + //------------------------------ a tracker tube + + G4double innerRadiusOfTheTube = 0.*cm; + G4double outerRadiusOfTheTube = 60.*cm; + G4double hightOfTheTube = 50.*cm; + G4double startAngleOfTheTube = 0.*deg; + G4double spanningAngleOfTheTube = 360.*deg; + G4Tubs* tracker_tube = new G4Tubs("tracker_tube",innerRadiusOfTheTube, + outerRadiusOfTheTube,hightOfTheTube, + startAngleOfTheTube, + spanningAngleOfTheTube); + tracker_log = new G4LogicalVolume(tracker_tube,Al,"tracker_log",0,0,0); + G4double trackerPos_x = -1.0*m; + G4double trackerPos_y = 0.*m; + G4double trackerPos_z = 0.*m; + tracker_phys = new G4PVPlacement(0, + G4ThreeVector(trackerPos_x,trackerPos_y,trackerPos_z), + tracker_log,"tracker",experimentalHall_log,false,0); + + //------------------------------ a calorimeter block + + G4double block_x = 1.0*m; + G4double block_y = 50.0*cm; + G4double block_z = 50.0*cm; + G4Box* calorimeterBlock_box = new G4Box("calBlock_box",block_x, + block_y,block_z); + calorimeterBlock_log = new G4LogicalVolume(calorimeterBlock_box, + Pb,"caloBlock_log",0,0,0); + G4double blockPos_x = 1.0*m; + G4double blockPos_y = 0.0*m; + G4double blockPos_z = 0.0*m; + calorimeterBlock_phys = new G4PVPlacement(0, + G4ThreeVector(blockPos_x,blockPos_y,blockPos_z), + calorimeterBlock_log,"caloBlock",experimentalHall_log,false,0); + + //------------------------------ calorimeter layers + + G4double calo_x = 1.*cm; + G4double calo_y = 40.*cm; + G4double calo_z = 40.*cm; + G4Box* calorimeterLayer_box = new G4Box("caloLayer_box", + calo_x,calo_y,calo_z); + calorimeterLayer_log = new G4LogicalVolume(calorimeterLayer_box, + Al,"caloLayer_log",0,0,0); + for(G4int i=0;i<19;i++) // loop for 19 layers + { + G4double caloPos_x = (i-9)*10.*cm; + G4double caloPos_y = 0.0*m; + G4double caloPos_z = 0.0*m; + calorimeterLayer_phys = new G4PVPlacement(0, + G4ThreeVector(caloPos_x,caloPos_y,caloPos_z), + calorimeterLayer_log,"caloLayer",calorimeterBlock_log,false,i); + } + + //------------------------------------------------------------------ + + return experimentalHall_phys; +} + diff --git a/environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.hh b/environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.hh new file mode 100644 index 0000000000..2437df674a --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.hh @@ -0,0 +1,73 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// ExN01DetectorConstruction.hh +// +// 2005 Q +// ==================================================================== +#ifndef EXN01_DETECTOR_CONSTRUCTION_H +#define EXN01_DETECTOR_CONSTRUCTION_H + +#include "G4VUserDetectorConstruction.hh" +#include "globals.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class G4LogicalVolume; +class G4VPhysicalVolume; + +#include "G4VUserDetectorConstruction.hh" + +class ExN01DetectorConstruction : public G4VUserDetectorConstruction { +public: + + ExN01DetectorConstruction(); + ~ExN01DetectorConstruction(); + + G4VPhysicalVolume* Construct(); + +private: + // Logical volumes + // + G4LogicalVolume* experimentalHall_log; + G4LogicalVolume* tracker_log; + G4LogicalVolume* calorimeterBlock_log; + G4LogicalVolume* calorimeterLayer_log; + + // Physical volumes + // + G4VPhysicalVolume* experimentalHall_phys; + G4VPhysicalVolume* calorimeterLayer_phys; + G4VPhysicalVolume* calorimeterBlock_phys; + G4VPhysicalVolume* tracker_phys; + +}; + +#endif + diff --git a/environments/g4py/tests/g4pytest/ExN01geom/__init__.py b/environments/g4py/tests/g4pytest/ExN01geom/__init__.py new file mode 100644 index 0000000000..b6ad7e2ac7 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01geom/__init__.py @@ -0,0 +1 @@ +from ._ExN01geom import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/ExN01geom/pyExN01geom.cc b/environments/g4py/tests/g4pytest/ExN01geom/pyExN01geom.cc new file mode 100644 index 0000000000..ddf290ec23 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01geom/pyExN01geom.cc @@ -0,0 +1,71 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// pyExN01geom.cc +// +// [Qgeom] +// a site-module of Geant4Py +// +// geometry presented in ExN01 of Geant4 example +// +// 2005 Q +// ==================================================================== +#include +#include "G4RunManager.hh" +#include "ExN01DetectorConstruction.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyExN03geom { + +void Construct() +{ + G4RunManager* runMgr= G4RunManager::GetRunManager(); + runMgr-> SetUserInitialization(new ExN01DetectorConstruction); +} + +} + +using namespace pyExN03geom; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_ExN01geom) { + + class_ > + ("ExN01DetectorConstruction", "ExN01 detector") + ; + + // --- + def("Construct", Construct); +} + diff --git a/environments/g4py/tests/g4pytest/ExN01pl/CMakeLists.txt b/environments/g4py/tests/g4pytest/ExN01pl/CMakeLists.txt new file mode 100644 index 0000000000..7f519ce7b8 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01pl/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _ExN01pl) +g4pytest_add_module(${_TARGET} ExN01PhysicsList.cc pyExN01pl.cc) +target_link_libraries(${_TARGET} PRIVATE G4particles G4processes G4run) diff --git a/environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.cc b/environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.cc new file mode 100644 index 0000000000..f270c88385 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.cc @@ -0,0 +1,77 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// ExN01PhysicsList.cc +// +// 2005 Q +// ==================================================================== +#include "ExN01PhysicsList.hh" +#include "G4ParticleTypes.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////////////////// +ExN01PhysicsList::ExN01PhysicsList() +//////////////////////////////////// +{ +} + +///////////////////////////////////// +ExN01PhysicsList::~ExN01PhysicsList() +///////////////////////////////////// +{ +} + +////////////////////////////////////////// +void ExN01PhysicsList::ConstructParticle() +////////////////////////////////////////// +{ + G4Geantino::GeantinoDefinition(); +} + +///////////////////////////////////////// +void ExN01PhysicsList::ConstructProcess() +///////////////////////////////////////// +{ + AddTransportation(); +} + +//////////////////////////////// +void ExN01PhysicsList::SetCuts() +//////////////////////////////// +{ + G4int temp = GetVerboseLevel(); + SetVerboseLevel(0); + + SetCutsWithDefault(); + + SetVerboseLevel(temp); +} + diff --git a/environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.hh b/environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.hh new file mode 100644 index 0000000000..69e9ca06d1 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.hh @@ -0,0 +1,56 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// ExN01PhysicsList.hh +// +// 2005 Q +// ==================================================================== +#ifndef EXN01_PHYSICS_LIST_H +#define EXN01_PHYSICS_LIST_H + +#include "G4VUserPhysicsList.hh" +#include "globals.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class ExN01PhysicsList: public G4VUserPhysicsList { +public: + ExN01PhysicsList(); + ~ExN01PhysicsList(); + +protected: + // Construct particle and physics process + void ConstructParticle(); + void ConstructProcess(); + void SetCuts(); + +}; + +#endif diff --git a/environments/g4py/tests/g4pytest/ExN01pl/__init__.py b/environments/g4py/tests/g4pytest/ExN01pl/__init__.py new file mode 100644 index 0000000000..a0371b4b0d --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01pl/__init__.py @@ -0,0 +1 @@ +from ._ExN01pl import * diff --git a/environments/g4py/tests/g4pytest/ExN01pl/pyExN01pl.cc b/environments/g4py/tests/g4pytest/ExN01pl/pyExN01pl.cc new file mode 100644 index 0000000000..6ce4846307 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01pl/pyExN01pl.cc @@ -0,0 +1,75 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// pyExN01pl.cc +// +// [ExN01pl] +// a site-module of Geant4Py +// +// minimal physics list, which is presnted in ExN01 of Geant4 example +// +// 2005 Q +// ==================================================================== +#include +#include "G4RunManager.hh" +#include "ExN01PhysicsList.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyExN01pl { + +ExN01PhysicsList* Construct() +{ + ExN01PhysicsList* pl= new ExN01PhysicsList; + + G4RunManager* runMgr= G4RunManager::GetRunManager(); + runMgr-> SetUserInitialization(pl); + + return pl; +} + +} + +using namespace pyExN01pl; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_ExN01pl) { + + class_ > + ("ExN01PhysicsList", "ExN01 physics list") + ; + + // --- + def("Construct", Construct, + return_value_policy()); + +} diff --git a/environments/g4py/tests/g4pytest/ExN03geom/CMakeLists.txt b/environments/g4py/tests/g4pytest/ExN03geom/CMakeLists.txt new file mode 100644 index 0000000000..836ecd73d5 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _ExN03geom) +g4pytest_add_module(${_TARGET} ExN03DetectorConstruction.cc ExN03DetectorMessenger.cc pyExN03geom.cc) +target_link_libraries(${_TARGET} PRIVATE G4materials G4geometry G4run) diff --git a/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.cc b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.cc new file mode 100644 index 0000000000..b32ae99172 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.cc @@ -0,0 +1,473 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// +// +// + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "ExN03DetectorConstruction.hh" +#include "ExN03DetectorMessenger.hh" + +#include "G4Material.hh" +#include "G4Box.hh" +#include "G4LogicalVolume.hh" +#include "G4PVPlacement.hh" +#include "G4PVReplica.hh" +#include "G4UniformMagField.hh" + +#include "G4GeometryManager.hh" +#include "G4PhysicalVolumeStore.hh" +#include "G4LogicalVolumeStore.hh" +#include "G4SolidStore.hh" + +#include "G4VisAttributes.hh" +#include "G4Colour.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ExN03DetectorConstruction::ExN03DetectorConstruction() +:AbsorberMaterial(0),GapMaterial(0),defaultMaterial(0), + solidWorld(0),logicWorld(0),physiWorld(0), + solidCalor(0),logicCalor(0),physiCalor(0), + solidLayer(0),logicLayer(0),physiLayer(0), + solidAbsorber(0),logicAbsorber(0),physiAbsorber(0), + solidGap (0),logicGap (0),physiGap (0), + magField(0) +{ + // default parameter values of the calorimeter + AbsorberThickness = 10.*mm; + GapThickness = 5.*mm; + NbOfLayers = 10; + CalorSizeYZ = 10.*cm; + ComputeCalorParameters(); + + // materials + DefineMaterials(); + SetAbsorberMaterial("Lead"); + SetGapMaterial("liquidArgon"); + + // create commands for interactive definition of the calorimeter + detectorMessenger = new ExN03DetectorMessenger(this); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ExN03DetectorConstruction::~ExN03DetectorConstruction() +{ delete detectorMessenger;} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VPhysicalVolume* ExN03DetectorConstruction::Construct() +{ + return ConstructCalorimeter(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::DefineMaterials() +{ + //This function illustrates the possible ways to define materials + +G4String symbol; //a=mass of a mole; +G4double a, z, density; //z=mean number of protons; +G4int iz, n; //iz=number of protons in an isotope; + // n=number of nucleons in an isotope; + +G4int ncomponents, natoms; +G4double abundance, fractionmass; + +// +// define Elements +// + +G4Element* H = new G4Element("Hydrogen",symbol="H" , z= 1., a= 1.01*g/mole); +G4Element* C = new G4Element("Carbon" ,symbol="C" , z= 6., a= 12.01*g/mole); +G4Element* N = new G4Element("Nitrogen",symbol="N" , z= 7., a= 14.01*g/mole); +G4Element* O = new G4Element("Oxygen" ,symbol="O" , z= 8., a= 16.00*g/mole); +G4Element* Si = new G4Element("Silicon",symbol="Si" , z= 14., a= 28.09*g/mole); + +// +// define an Element from isotopes, by relative abundance +// + +G4Isotope* U5 = new G4Isotope("U235", iz=92, n=235, a=235.01*g/mole); +G4Isotope* U8 = new G4Isotope("U238", iz=92, n=238, a=238.03*g/mole); + +G4Element* U = new G4Element("enriched Uranium",symbol="U",ncomponents=2); +U->AddIsotope(U5, abundance= 90.*perCent); +U->AddIsotope(U8, abundance= 10.*perCent); + +// +// define simple materials +// + +new G4Material("Aluminium", z=13., a=26.98*g/mole, density=2.700*g/cm3); +new G4Material("liquidArgon", z=18., a= 39.95*g/mole, density= 1.390*g/cm3); +new G4Material("Lead" , z=82., a= 207.19*g/mole, density= 11.35*g/cm3); + +// +// define a material from elements. case 1: chemical molecule +// + +G4Material* H2O = +new G4Material("Water", density= 1.000*g/cm3, ncomponents=2); +H2O->AddElement(H, natoms=2); +H2O->AddElement(O, natoms=1); +// overwrite computed meanExcitationEnergy with ICRU recommended value +H2O->GetIonisation()->SetMeanExcitationEnergy(75.0*eV); + +G4Material* Sci = +new G4Material("Scintillator", density= 1.032*g/cm3, ncomponents=2); +Sci->AddElement(C, natoms=9); +Sci->AddElement(H, natoms=10); + +G4Material* Myl = +new G4Material("Mylar", density= 1.397*g/cm3, ncomponents=3); +Myl->AddElement(C, natoms=10); +Myl->AddElement(H, natoms= 8); +Myl->AddElement(O, natoms= 4); + +G4Material* SiO2 = +new G4Material("quartz",density= 2.200*g/cm3, ncomponents=2); +SiO2->AddElement(Si, natoms=1); +SiO2->AddElement(O , natoms=2); + +// +// define a material from elements. case 2: mixture by fractional mass +// + +G4Material* Air = +new G4Material("Air" , density= 1.290*mg/cm3, ncomponents=2); +Air->AddElement(N, fractionmass=0.7); +Air->AddElement(O, fractionmass=0.3); + +// +// define a material from elements and/or others materials (mixture of mixtures) +// + +G4Material* Aerog = +new G4Material("Aerogel", density= 0.200*g/cm3, ncomponents=3); +Aerog->AddMaterial(SiO2, fractionmass=62.5*perCent); +Aerog->AddMaterial(H2O , fractionmass=37.4*perCent); +Aerog->AddElement (C , fractionmass= 0.1*perCent); + +// +// examples of gas in non STP conditions +// + +G4Material* CO2 = +new G4Material("CarbonicGas", density= 27.*mg/cm3, ncomponents=2, + kStateGas, 325.*kelvin, 50.*atmosphere); +CO2->AddElement(C, natoms=1); +CO2->AddElement(O, natoms=2); + +G4Material* steam = +new G4Material("WaterSteam", density= 0.3*mg/cm3, ncomponents=1, + kStateGas, 500.*kelvin, 2.*atmosphere); +steam->AddMaterial(H2O, fractionmass=1.); + +// +// examples of vacuum +// + +G4Material* Vacuum = +new G4Material("Galactic", z=1., a=1.01*g/mole,density= universe_mean_density, + kStateGas, 2.73*kelvin, 3.e-18*pascal); + +G4Material* beam = +new G4Material("Beam", density= 1.e-5*g/cm3, ncomponents=1, + kStateGas, STP_Temperature, 2.e-2*bar); +beam->AddMaterial(Air, fractionmass=1.); + +G4cout << *(G4Material::GetMaterialTable()) << G4endl; + +//default materials of the World +defaultMaterial = Vacuum; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VPhysicalVolume* ExN03DetectorConstruction::ConstructCalorimeter() +{ + + // Clean old geometry, if any + // + G4GeometryManager::GetInstance()->OpenGeometry(); + G4PhysicalVolumeStore::GetInstance()->Clean(); + G4LogicalVolumeStore::GetInstance()->Clean(); + G4SolidStore::GetInstance()->Clean(); + + // complete the Calor parameters definition + ComputeCalorParameters(); + + // + // World + // + solidWorld = new G4Box("World", //its name + WorldSizeX/2,WorldSizeYZ/2,WorldSizeYZ/2); //its size + + logicWorld = new G4LogicalVolume(solidWorld, //its solid + defaultMaterial, //its material + "World"); //its name + + physiWorld = new G4PVPlacement(0, //no rotation + G4ThreeVector(), //at (0,0,0) + logicWorld, //its logical volume + "World", //its name + 0, //its mother volume + false, //no boolean operation + 0); //copy number + + // + // Calorimeter + // + solidCalor=0; logicCalor=0; physiCalor=0; + solidLayer=0; logicLayer=0; physiLayer=0; + + if (CalorThickness > 0.) + { solidCalor = new G4Box("Calorimeter", //its name + CalorThickness/2,CalorSizeYZ/2,CalorSizeYZ/2);//size + + logicCalor = new G4LogicalVolume(solidCalor, //its solid + defaultMaterial, //its material + "Calorimeter"); //its name + + physiCalor = new G4PVPlacement(0, //no rotation + G4ThreeVector(), //at (0,0,0) + logicCalor, //its logical volume + "Calorimeter", //its name + logicWorld, //its mother volume + false, //no boolean operation + 0); //copy number + + // + // Layer + // + solidLayer = new G4Box("Layer", //its name + LayerThickness/2,CalorSizeYZ/2,CalorSizeYZ/2); //size + + logicLayer = new G4LogicalVolume(solidLayer, //its solid + defaultMaterial, //its material + "Layer"); //its name + if (NbOfLayers > 1) + physiLayer = new G4PVReplica("Layer", //its name + logicLayer, //its logical volume + logicCalor, //its mother + kXAxis, //axis of replication + NbOfLayers, //number of replica + LayerThickness); //witdth of replica + else + physiLayer = new G4PVPlacement(0, //no rotation + G4ThreeVector(), //at (0,0,0) + logicLayer, //its logical volume + "Layer", //its name + logicCalor, //its mother volume + false, //no boolean operation + 0); //copy number + } + + // + // Absorber + // + solidAbsorber=0; logicAbsorber=0; physiAbsorber=0; + + if (AbsorberThickness > 0.) + { solidAbsorber = new G4Box("Absorber", //its name + AbsorberThickness/2,CalorSizeYZ/2,CalorSizeYZ/2); + + logicAbsorber = new G4LogicalVolume(solidAbsorber, //its solid + AbsorberMaterial, //its material + AbsorberMaterial->GetName()); //name + + physiAbsorber = new G4PVPlacement(0, //no rotation + G4ThreeVector(-GapThickness/2,0.,0.), //its position + logicAbsorber, //its logical volume + AbsorberMaterial->GetName(), //its name + logicLayer, //its mother + false, //no boulean operat + 0); //copy number + + } + + // + // Gap + // + solidGap=0; logicGap=0; physiGap=0; + + if (GapThickness > 0.) + { solidGap = new G4Box("Gap", + GapThickness/2,CalorSizeYZ/2,CalorSizeYZ/2); + + logicGap = new G4LogicalVolume(solidGap, + GapMaterial, + GapMaterial->GetName()); + + physiGap = new G4PVPlacement(0, //no rotation + G4ThreeVector(AbsorberThickness/2,0.,0.), //its position + logicGap, //its logical volume + GapMaterial->GetName(), //its name + logicLayer, //its mother + false, //no boulean operat + 0); //copy number + } + + PrintCalorParameters(); + + // + // Visualization attributes + // + logicWorld->SetVisAttributes (G4VisAttributes::GetInvisible()); + + G4VisAttributes* simpleBoxVisAtt= new G4VisAttributes(G4Colour(1.0,1.0,1.0)); + simpleBoxVisAtt->SetVisibility(true); + logicCalor->SetVisAttributes(simpleBoxVisAtt); + + /* + // Below are vis attributes that permits someone to test / play + // with the interactive expansion / contraction geometry system of the + // vis/OpenInventor driver : + {G4VisAttributes* simpleBoxVisAtt= new G4VisAttributes(G4Colour(1.0,1.0,0.0)); + simpleBoxVisAtt->SetVisibility(true); + delete logicCalor->GetVisAttributes(); + logicCalor->SetVisAttributes(simpleBoxVisAtt);} + + {G4VisAttributes* atb= new G4VisAttributes(G4Colour(1.0,0.0,0.0)); + logicLayer->SetVisAttributes(atb);} + + {G4VisAttributes* atb= new G4VisAttributes(G4Colour(0.0,1.0,0.0)); + atb->SetForceSolid(true); + logicAbsorber->SetVisAttributes(atb);} + + {//Set opacity = 0.2 then transparency = 1 - 0.2 = 0.8 + G4VisAttributes* atb= new G4VisAttributes(G4Colour(0.0,0.0,1.0,0.2)); + atb->SetForceSolid(true); + logicGap->SetVisAttributes(atb);} + */ + + // + //always return the physical World + // + return physiWorld; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::PrintCalorParameters() +{ + G4cout << "\n------------------------------------------------------------" + << "\n---> The calorimeter is " << NbOfLayers << " layers of: [ " + << AbsorberThickness/mm << "mm of " << AbsorberMaterial->GetName() + << " + " + << GapThickness/mm << "mm of " << GapMaterial->GetName() << " ] " + << "\n------------------------------------------------------------\n"; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::SetAbsorberMaterial(G4String materialChoice) +{ + // search the material by its name + G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice); + if (pttoMaterial) AbsorberMaterial = pttoMaterial; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::SetGapMaterial(G4String materialChoice) +{ + // search the material by its name + G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice); + if (pttoMaterial) GapMaterial = pttoMaterial; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::SetAbsorberThickness(G4double val) +{ + // change Absorber thickness and recompute the calorimeter parameters + AbsorberThickness = val; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::SetGapThickness(G4double val) +{ + // change Gap thickness and recompute the calorimeter parameters + GapThickness = val; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::SetCalorSizeYZ(G4double val) +{ + // change the transverse size and recompute the calorimeter parameters + CalorSizeYZ = val; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::SetNbOfLayers(G4int val) +{ + NbOfLayers = val; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "G4FieldManager.hh" +#include "G4TransportationManager.hh" + +void ExN03DetectorConstruction::SetMagField(G4double fieldValue) +{ + //apply a global uniform magnetic field along Z axis + G4FieldManager* fieldMgr + = G4TransportationManager::GetTransportationManager()->GetFieldManager(); + + if(magField) delete magField; //delete the existing magn field + + if(fieldValue!=0.) // create a new one if non nul + { magField = new G4UniformMagField(G4ThreeVector(0.,0.,fieldValue)); + fieldMgr->SetDetectorField(magField); + fieldMgr->CreateChordFinder(magField); + } else { + magField = 0; + fieldMgr->SetDetectorField(magField); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "G4RunManager.hh" + +void ExN03DetectorConstruction::UpdateGeometry() +{ + G4RunManager::GetRunManager()->DefineWorldVolume(ConstructCalorimeter()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.hh b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.hh new file mode 100644 index 0000000000..f72027d868 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.hh @@ -0,0 +1,157 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// +// +// + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef ExN03DetectorConstruction_h +#define ExN03DetectorConstruction_h 1 + +#include "G4VUserDetectorConstruction.hh" +#include "globals.hh" + +class G4Box; +class G4LogicalVolume; +class G4VPhysicalVolume; +class G4Material; +class G4UniformMagField; +class ExN03DetectorMessenger; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class ExN03DetectorConstruction : public G4VUserDetectorConstruction +{ + public: + + ExN03DetectorConstruction(); + ~ExN03DetectorConstruction(); + + public: + + void SetAbsorberMaterial (G4String); + void SetAbsorberThickness(G4double); + + void SetGapMaterial (G4String); + void SetGapThickness(G4double); + + void SetCalorSizeYZ(G4double); + void SetNbOfLayers (G4int); + + void SetMagField(G4double); + + G4VPhysicalVolume* Construct(); + + void UpdateGeometry(); + + public: + + void PrintCalorParameters(); + + G4double GetWorldSizeX() {return WorldSizeX;}; + G4double GetWorldSizeYZ() {return WorldSizeYZ;}; + + G4double GetCalorThickness() {return CalorThickness;}; + G4double GetCalorSizeYZ() {return CalorSizeYZ;}; + + G4int GetNbOfLayers() {return NbOfLayers;}; + + G4Material* GetAbsorberMaterial() {return AbsorberMaterial;}; + G4double GetAbsorberThickness() {return AbsorberThickness;}; + + G4Material* GetGapMaterial() {return GapMaterial;}; + G4double GetGapThickness() {return GapThickness;}; + + const G4VPhysicalVolume* GetphysiWorld() {return physiWorld;}; + const G4VPhysicalVolume* GetAbsorber() {return physiAbsorber;}; + const G4VPhysicalVolume* GetGap() {return physiGap;}; + + private: + + G4Material* AbsorberMaterial; + G4double AbsorberThickness; + + G4Material* GapMaterial; + G4double GapThickness; + + G4int NbOfLayers; + G4double LayerThickness; + + G4double CalorSizeYZ; + G4double CalorThickness; + + G4Material* defaultMaterial; + G4double WorldSizeYZ; + G4double WorldSizeX; + + G4Box* solidWorld; //pointer to the solid World + G4LogicalVolume* logicWorld; //pointer to the logical World + G4VPhysicalVolume* physiWorld; //pointer to the physical World + + G4Box* solidCalor; //pointer to the solid Calor + G4LogicalVolume* logicCalor; //pointer to the logical Calor + G4VPhysicalVolume* physiCalor; //pointer to the physical Calor + + G4Box* solidLayer; //pointer to the solid Layer + G4LogicalVolume* logicLayer; //pointer to the logical Layer + G4VPhysicalVolume* physiLayer; //pointer to the physical Layer + + G4Box* solidAbsorber; //pointer to the solid Absorber + G4LogicalVolume* logicAbsorber; //pointer to the logical Absorber + G4VPhysicalVolume* physiAbsorber; //pointer to the physical Absorber + + G4Box* solidGap; //pointer to the solid Gap + G4LogicalVolume* logicGap; //pointer to the logical Gap + G4VPhysicalVolume* physiGap; //pointer to the physical Gap + + G4UniformMagField* magField; //pointer to the magnetic field + + ExN03DetectorMessenger* detectorMessenger; //pointer to the Messenger + + private: + + void DefineMaterials(); + void ComputeCalorParameters(); + G4VPhysicalVolume* ConstructCalorimeter(); +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +inline void ExN03DetectorConstruction::ComputeCalorParameters() +{ + // Compute derived parameters of the calorimeter + LayerThickness = AbsorberThickness + GapThickness; + CalorThickness = NbOfLayers*LayerThickness; + + WorldSizeX = 1.2*CalorThickness; WorldSizeYZ = 1.2*CalorSizeYZ; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif + diff --git a/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.cc b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.cc new file mode 100644 index 0000000000..6759778215 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.cc @@ -0,0 +1,148 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// +// +// + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "ExN03DetectorMessenger.hh" + +#include "ExN03DetectorConstruction.hh" +#include "G4UIdirectory.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithoutParameter.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ExN03DetectorMessenger::ExN03DetectorMessenger( + ExN03DetectorConstruction* ExN03Det) +:ExN03Detector(ExN03Det) +{ + N03Dir = new G4UIdirectory("/N03/"); + N03Dir->SetGuidance("UI commands of this example"); + + detDir = new G4UIdirectory("/N03/det/"); + detDir->SetGuidance("detector control"); + + AbsMaterCmd = new G4UIcmdWithAString("/N03/det/setAbsMat",this); + AbsMaterCmd->SetGuidance("Select Material of the Absorber."); + AbsMaterCmd->SetParameterName("choice",false); + AbsMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + + GapMaterCmd = new G4UIcmdWithAString("/N03/det/setGapMat",this); + GapMaterCmd->SetGuidance("Select Material of the Gap."); + GapMaterCmd->SetParameterName("choice",false); + GapMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + + AbsThickCmd = new G4UIcmdWithADoubleAndUnit("/N03/det/setAbsThick",this); + AbsThickCmd->SetGuidance("Set Thickness of the Absorber"); + AbsThickCmd->SetParameterName("Size",false); + AbsThickCmd->SetRange("Size>=0."); + AbsThickCmd->SetUnitCategory("Length"); + AbsThickCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + + GapThickCmd = new G4UIcmdWithADoubleAndUnit("/N03/det/setGapThick",this); + GapThickCmd->SetGuidance("Set Thickness of the Gap"); + GapThickCmd->SetParameterName("Size",false); + GapThickCmd->SetRange("Size>=0."); + GapThickCmd->SetUnitCategory("Length"); + GapThickCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + + SizeYZCmd = new G4UIcmdWithADoubleAndUnit("/N03/det/setSizeYZ",this); + SizeYZCmd->SetGuidance("Set tranverse size of the calorimeter"); + SizeYZCmd->SetParameterName("Size",false); + SizeYZCmd->SetRange("Size>0."); + SizeYZCmd->SetUnitCategory("Length"); + SizeYZCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + + NbLayersCmd = new G4UIcmdWithAnInteger("/N03/det/setNbOfLayers",this); + NbLayersCmd->SetGuidance("Set number of layers."); + NbLayersCmd->SetParameterName("NbLayers",false); + NbLayersCmd->SetRange("NbLayers>0 && NbLayers<500"); + NbLayersCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + + UpdateCmd = new G4UIcmdWithoutParameter("/N03/det/update",this); + UpdateCmd->SetGuidance("Update calorimeter geometry."); + UpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" "); + UpdateCmd->SetGuidance("if you changed geometrical value(s)."); + UpdateCmd->AvailableForStates(G4State_Idle); + + MagFieldCmd = new G4UIcmdWithADoubleAndUnit("/N03/det/setField",this); + MagFieldCmd->SetGuidance("Define magnetic field."); + MagFieldCmd->SetGuidance("Magnetic field will be in Z direction."); + MagFieldCmd->SetParameterName("Bz",false); + MagFieldCmd->SetUnitCategory("Magnetic flux density"); + MagFieldCmd->AvailableForStates(G4State_PreInit,G4State_Idle); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ExN03DetectorMessenger::~ExN03DetectorMessenger() +{ + delete NbLayersCmd; + delete AbsMaterCmd; delete GapMaterCmd; + delete AbsThickCmd; delete GapThickCmd; + delete SizeYZCmd; delete UpdateCmd; + delete MagFieldCmd; + delete detDir; + delete N03Dir; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue) +{ + if( command == AbsMaterCmd ) + { ExN03Detector->SetAbsorberMaterial(newValue);} + + if( command == GapMaterCmd ) + { ExN03Detector->SetGapMaterial(newValue);} + + if( command == AbsThickCmd ) + { ExN03Detector->SetAbsorberThickness(AbsThickCmd + ->GetNewDoubleValue(newValue));} + + if( command == GapThickCmd ) + { ExN03Detector->SetGapThickness(GapThickCmd->GetNewDoubleValue(newValue));} + + if( command == SizeYZCmd ) + { ExN03Detector->SetCalorSizeYZ(SizeYZCmd->GetNewDoubleValue(newValue));} + + if( command == NbLayersCmd ) + { ExN03Detector->SetNbOfLayers(NbLayersCmd->GetNewIntValue(newValue));} + + if( command == UpdateCmd ) + { ExN03Detector->UpdateGeometry(); } + + if( command == MagFieldCmd ) + { ExN03Detector->SetMagField(MagFieldCmd->GetNewDoubleValue(newValue));} +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.hh b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.hh new file mode 100644 index 0000000000..40ec817aaf --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.hh @@ -0,0 +1,74 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// +// +// + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef ExN03DetectorMessenger_h +#define ExN03DetectorMessenger_h 1 + +#include "globals.hh" +#include "G4UImessenger.hh" + +class ExN03DetectorConstruction; +class G4UIdirectory; +class G4UIcmdWithAString; +class G4UIcmdWithAnInteger; +class G4UIcmdWithADoubleAndUnit; +class G4UIcmdWithoutParameter; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class ExN03DetectorMessenger: public G4UImessenger +{ + public: + ExN03DetectorMessenger(ExN03DetectorConstruction* ); + ~ExN03DetectorMessenger(); + + void SetNewValue(G4UIcommand*, G4String); + + private: + ExN03DetectorConstruction* ExN03Detector; + + G4UIdirectory* N03Dir; + G4UIdirectory* detDir; + G4UIcmdWithAString* AbsMaterCmd; + G4UIcmdWithAString* GapMaterCmd; + G4UIcmdWithADoubleAndUnit* AbsThickCmd; + G4UIcmdWithADoubleAndUnit* GapThickCmd; + G4UIcmdWithADoubleAndUnit* SizeYZCmd; + G4UIcmdWithAnInteger* NbLayersCmd; + G4UIcmdWithADoubleAndUnit* MagFieldCmd; + G4UIcmdWithoutParameter* UpdateCmd; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif + diff --git a/environments/g4py/tests/g4pytest/ExN03geom/__init__.py b/environments/g4py/tests/g4pytest/ExN03geom/__init__.py new file mode 100644 index 0000000000..ae5f5fd590 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/__init__.py @@ -0,0 +1 @@ +from ._ExN03geom import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/ExN03geom/pyExN03geom.cc b/environments/g4py/tests/g4pytest/ExN03geom/pyExN03geom.cc new file mode 100644 index 0000000000..c2d10ffb5e --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/pyExN03geom.cc @@ -0,0 +1,101 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// pyExN03geom.cc +// +// [ExN03geom] +// a site-module of Geant4Py +// +// geometry presented in ExN03 of Geant4 example +// +// 2005 Q +// ==================================================================== +#include +#include "G4RunManager.hh" +#include "ExN03DetectorConstruction.hh" + +using namespace boost::python; + +typedef ExN03DetectorConstruction XXX; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyExN03geom { + +void Construct() +{ + G4RunManager* runMgr= G4RunManager::GetRunManager(); + runMgr-> SetUserInitialization(new ExN03DetectorConstruction); +} + +} + +using namespace pyExN03geom; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_ExN03geom) { + class_ > + ("ExN03DetectorConstruction", "ExN03 detector") + // --- + .def("SetAbsorberMaterial", &XXX::SetAbsorberMaterial) + .def("SetAbsorberThickness", &XXX::SetAbsorberThickness) + .def("SetGapMaterial", &XXX::SetGapMaterial) + .def("SetGapThickness", &XXX::SetGapThickness) + .def("SetCalorSizeYZ", &XXX::SetCalorSizeYZ) + .def("SetNbOfLayers", &XXX::SetNbOfLayers) + .def("SetMagField", &XXX::SetMagField) + // --- + .def("GetWorldSizeX", &XXX::GetWorldSizeX) + .def("GetWorldSizeYZ", &XXX::GetWorldSizeYZ) + .def("GetCalorThickness", &XXX::GetCalorThickness) + .def("GetCalorSizeYZ", &XXX::GetCalorSizeYZ) + .def("GetNbOfLayers", &XXX::GetNbOfLayers) + .def("GetAbsorberMaterial", &XXX::GetAbsorberMaterial, + return_value_policy()) + .def("GetAbsorberThickness", &XXX::GetAbsorberThickness) + .def("GetGapMaterial", &XXX::GetGapMaterial, + return_value_policy()) + .def("GetGapThickness", &XXX::GetGapThickness) + .def("GetphysiWorld", &XXX::GetphysiWorld, + return_value_policy()) + .def("GetAbsorber", &XXX::GetAbsorber, + return_value_policy()) + .def("GetGap", &XXX::GetGap, + return_value_policy()) + // --- + .def("UpdateGeometry", &XXX::UpdateGeometry) + .def("PrintCalorParameters", &XXX::PrintCalorParameters) + ; + + // --- + def("Construct", Construct); +} + diff --git a/environments/g4py/tests/g4pytest/MCScore/mcscore.py b/environments/g4py/tests/g4pytest/MCScore/mcscore.py new file mode 100644 index 0000000000..eb9321cb64 --- /dev/null +++ b/environments/g4py/tests/g4pytest/MCScore/mcscore.py @@ -0,0 +1,136 @@ +""" +Python module (Python3) + +This module provides classes and functions for scoring reactions + + [C] MCVertex: + [C] MCParticle: + [f] read_next_vertex(stream): + + Q, 2006 +""" +import string +from Geant4.hepunit import * + +# ================================================================== +# public symbols +# ================================================================== +__all__ = [ 'MCParticle', 'MCVertex', 'read_next_vertex' ] + + +# ================================================================== +# class definition +# ================================================================== + +# ------------------------------------------------------------------ +# MCParticle +# ------------------------------------------------------------------ +class MCParticle: + "MC particle" + def __init__(self, aname, aZ, aA, akE, apx, apy, apz): + self.name = aname + self.Z = aZ + self.A = aA + self.kineticE = akE + self.px = apx + self.py = apy + self.pz = apz + + def printout(self): + print("--- particle: %s, Z=%2d, A=%2d, kE=%g" % \ + (self.name, self.Z, self.A, self.kineticE/MeV)) + +# ------------------------------------------------------------------ +# MCVertex +# ------------------------------------------------------------------ +class MCVertex : + "MC vertex" + def __init__(self, ax, ay, az): + self.x = ax + self.y = ay + self.z = az + self.nparticle = 0 + self.particle_list = [] + + def append_particle(self, aparticle): + self.particle_list.append(aparticle) + self.nparticle= self.nparticle+1 + + def printout(self): + print("@@@ vertex: x=(%g,%g,%g) Nsec=%3d" % \ + (self.x/cm, self.y/cm, self.z/cm, self.nparticle)) + for p in self.particle_list: + p.printout() + + def dump_vertex(self, stream): + aline = "%g %g %g %d\n" % \ + (self.x/m, self.y/m, self.z/m, self.nparticle) + stream.write(aline) + for p in self.particle_list: + aline = " %s %d %d %g %g %g %g\n" % \ + (p.name, p.Z, p.A, p.kineticE/MeV, p.px/MeV, p.py/MeV, p.pz/MeV) + stream.write(aline) + + def __del__(self): + np = len(self.particle_list) + del self.particle_list[0:np] + + +# ================================================================== +# I/O interface +# ================================================================== +def read_next_vertex(stream): + "read next vertex from a file stream" + line= stream.readline() + if line == "": # EOF + return 0 + + # reading vertex + data = line.split() + x = string.atof(data[0]) * m + y = string.atof(data[1]) * m + z = string.atof(data[2]) * m + nsec = string.atoi(data[3]) + + vertex = MCVertex(x,y,z) + + # reading particles + for p in range(0, nsec): + data = stream.readline().split() + pname = data[0] + Z = string.atoi(data[1]) + A = string.atoi(data[2]) + kE = string.atof(data[3]) * MeV + px = string.atof(data[4]) * MeV + py = string.atof(data[5]) * MeV + pz = string.atof(data[6]) * MeV + + particle = MCParticle(pname, Z, A, kE, px, py, pz) + vertex.append_particle(particle) + + return vertex + + +# ================================================================== +# test +# ================================================================== +def test(): + f = open("reaction.dat") + f.seek(0) + + while(1): + vertex = read_next_vertex(f) + if vertex == 0: + break + vertex.printout() + del vertex + f.close() + print(">>> EOF") + + +# ================================================================== +# main +# ================================================================== +if __name__ == "__main__": + test() + diff --git a/environments/g4py/tests/g4pytest/MCScore/mcscorerootio.py b/environments/g4py/tests/g4pytest/MCScore/mcscorerootio.py new file mode 100644 index 0000000000..d3f1130356 --- /dev/null +++ b/environments/g4py/tests/g4pytest/MCScore/mcscorerootio.py @@ -0,0 +1,189 @@ +""" +Python module + +This module provides ROOT IO interface for MCScore data + + [C] MCScoreROOTIO + [f] loop_tree(tfile, analyze_vertex): + + Q, 2006 +""" +from array import array +import string +from Geant4.hepunit import * +import mcscore +import ROOT + +# ================================================================== +# public symbols +# ================================================================== +__all__ = [ 'MCScoreROOTIO', 'loop_tree' ] + + +# ================================================================== +# class definition +# ================================================================== +# ------------------------------------------------------------------ +# MCScoreROOTIO +# ------------------------------------------------------------------ +class MCScoreROOTIO: + "ROOT IO interface for MCScore" + def __init__(self, bsize=250): + self.maxparticle = bsize # buffer size for #particles/vertex + + # ------------------------------------------------------------------ + def define_tree(self): + "define ROOT tree" + # defining tree header... + self.vtree = ROOT.TTree('vertex', 'mc vertex') + self.ptree = ROOT.TTree('particle', 'mc particle') + + # vertex... + self.a_x = array('d', [0.]); self.vtree.Branch('x', self.a_x, 'x/d') + self.a_y = array('d', [0.]); self.vtree.Branch('y', self.a_y, 'y/d') + self.a_z = array('d', [0.]); self.vtree.Branch('z', self.a_z, 'z/d') + + #global a_np, a_namelist, a_Z, a_A, a_ke, a_px, a_py, a_pz + self.a_np = array('i', [0]); self.ptree.Branch('np', self.a_np, 'np/i') + + self.a_namelist = array('c', self.maxparticle*10*['\0']) + # 10 characters/particle + self.ptree.Branch('namelist', self.a_namelist, 'namelist/C') + + self.a_Z = array('i', self.maxparticle*[0]) + self.ptree.Branch('Z', self.a_Z, 'Z[np]/I') + + self.a_A = array('i', self.maxparticle*[0]) + self.ptree.Branch('A', self.a_A, 'A[np]/i') + + self.a_ke = array('d', self.maxparticle*[0.]) + self.ptree.Branch('kE', self.a_ke, 'kE[np]/d') + + self.a_px = array('d', self.maxparticle*[0.]) + self.ptree.Branch('px', self.a_px, 'px[np]/d') + + self.a_py = array('d', self.maxparticle*[0.]) + self.ptree.Branch('py', self.a_py, 'py[np]/d') + + self.a_pz = array('d', self.maxparticle*[0.]) + self.ptree.Branch('pz', self.a_pz, 'pz[np]/d') + + # ------------------------------------------------------------------ + def fill_tree(self, vertex): + "fill vertex information to ROOT tree" + # ------------------------------------------------------------------ + def push_pname(i0, pname): # local function + n = len(pname) + for i in xrange(n): + self.a_namelist[i0+i] = pname[i] + self.a_namelist[i0+n] = ' ' + + self.a_x[0] = vertex.x + self.a_y[0] = vertex.y + self.a_z[0] = vertex.z + self.vtree.Fill() + + if vertex.nparticle > self.maxparticle: + raise """ + *** buffer overflow in #particles/vertex. + *** please increment buffersize in MCScoreROOTIO(bsize). + """, self.maxparticle + + idx_namelist = 0 + self.a_np[0] = vertex.nparticle + for ip in range(vertex.nparticle): + particle = vertex.particle_list[ip] + push_pname(idx_namelist, particle.name) + idx_namelist += (len(particle.name)+1) + self.a_Z[ip] = particle.Z + self.a_A[ip] = particle.A + self.a_ke[ip] = particle.kineticE + self.a_px[ip] = particle.px + self.a_py[ip] = particle.py + self.a_pz[ip] = particle.pz + + self.a_namelist[idx_namelist] = '\0' + self.ptree.Fill() + + +# ================================================================== +# functions +# ================================================================== +def loop_tree(tfile, analyze_vertex): + """ + loop ROOT tree in a ROOT file. + * analyze_vertex: user function : analyze_vertex(MCVertex) + """ + avtree = tfile.Get("vertex") + aptree = tfile.Get("particle") + + # reading vertex... + n_vertex = avtree.GetEntries() + for ivtx in xrange(n_vertex): + avtree.GetEntry(ivtx) + aptree.GetEntry(ivtx) + + # vertex + vertex = MCScore.MCVertex(avtree.x, avtree.y, avtree.z) + + # reading secondary particles... + nsec = aptree.np + namelist = aptree.namelist + pname = namelist.split() + for ip in xrange(nsec): + particle = MCScore.MCParticle(pname[ip], aptree.Z[ip], aptree.A[ip], + aptree.kE[ip], aptree.px[ip], + aptree.py[ip], aptree.pz[ip]) + vertex.append_particle(particle) + + analyze_vertex(vertex) + + return n_vertex + + +# ================================================================== +# test +# ================================================================== +def test_t2root(): + g = ROOT.TFile("reaction.root", 'recreate') + + rootio = MCScoreROOTIO() + rootio.define_tree() + + f = open("reaction.dat") + f.seek(0) + + while(1): + vertex = MCScore.read_next_vertex(f) + if vertex == 0: + break + + # filling ... + rootio.fill_tree(vertex) + + del vertex + + print ">>> EOF" + f.close() + + # closing ROOT file + g.Write() + g.Close() + +# ------------------------------------------------------------------ +def test_loop(): + def my_analysis(vertex): + vertex.printout() + + f = ROOT.TFile("reaction.root", 'read') + nv = loop_tree(f, my_analysis) + print "*** # of vertex= ", nv + + +# ================================================================== +# main +# ================================================================== +if __name__ == "__main__": + test_t2root() + test_loop() + diff --git a/environments/g4py/tests/g4pytest/MCScore/reaction.dat b/environments/g4py/tests/g4pytest/MCScore/reaction.dat new file mode 100644 index 0000000000..edc6e64f25 --- /dev/null +++ b/environments/g4py/tests/g4pytest/MCScore/reaction.dat @@ -0,0 +1,1842 @@ +0 0 -0.0305023 38 + proton 1 1 1000 0 0 1696.04 + proton 1 1 129.268 63.2281 -276.735 -422.739 + proton 1 1 111.814 34.3858 -242.184 403.102 + proton 1 1 82.1695 -236.712 94.2294 309.895 + neutron 0 1 74.3269 110.42 -247.06 268.26 + proton 1 1 44.7926 -124.531 251.567 85.2512 + neutron 0 1 44.511 -167.561 97.6229 -219.126 + proton 1 1 21.6735 -109.453 -139.936 -97.8724 + neutron 0 1 20.6685 124.985 -151.837 -24.2931 + neutron 0 1 19.8292 180.072 41.4736 -59.2368 + neutron 0 1 17.1647 144.898 77.0015 74.9989 + proton 1 1 14.2603 86.8485 138.55 14.9869 + neutron 0 1 8.81332 -66.3887 39.6594 103.241 + neutron 0 1 8.72505 -120.6 -36.3695 24.586 + neutron 0 1 5.00497 5.93651 16.3492 -95.538 + pi0 0 0 4.70288 -5.35245 -35.4667 2.26739 + neutron 0 1 4.62225 49.0102 -63.7755 47.3061 + neutron 0 1 4.48452 -4.04534 56.6136 -72.2886 + neutron 0 1 4.4182 -8.41472 51.6727 74.7063 + neutron 0 1 4.33618 -29.8664 -13.4453 -84.2275 + neutron 0 1 4.26413 70.3882 -46.7754 29.8092 + neutron 0 1 3.93701 27.6721 76.9943 -26.8286 + neutron 0 1 2.90508 -32.7165 4.86698 66.1318 + neutron 0 1 2.7312 -27.372 -57.9427 32.1429 + neutron 0 1 1.93394 21.5104 56.0088 -6.17988 + neutron 0 1 1.14687 -7.1144 -43.8711 13.4591 + gamma 0 0 0.917356 0.279188 -0.173667 0.856409 + neutron 0 1 0.833069 -32.0686 -18.5144 -13.9629 + gamma 0 0 0.643895 -0.382244 0.169259 0.489736 + neutron 0 1 0.562189 11.9617 -20.913 21.8244 + neutron 0 1 0.48924 7.09163 1.57869 -29.4415 + neutron 0 1 0.300866 15.105 6.83708 -17.0455 + neutron 0 1 0.182086 11.2883 -13.1121 -6.54553 + neutron 0 1 0.176325 5.08395 15.104 8.79729 + gamma 0 0 0.157846 0.150406 0.0125644 -0.0462096 + alpha 2 4 3.8739 -114.48 112.613 55.7415 + alpha 2 4 2.39579 40.929 73.5402 103.84 + Yb160[0.0] 70 160 4.43207 75.8139 195.65 1129.72 +0 0 -0.0414305 27 + proton 1 1 1000 0 0 1696.04 + proton 1 1 430.313 460.692 127.735 874.137 + proton 1 1 222.668 -51.8758 -28.1707 681.134 + proton 1 1 96.9347 370.567 -210.029 -99.3302 + neutron 0 1 28.701 -189.926 7.78062 136.472 + proton 1 1 27.176 -181.127 -106.335 87.3004 + proton 1 1 11.5799 -64.529 132.284 -14.1802 + neutron 0 1 11.2564 50.4159 -33.6421 132.685 + neutron 0 1 10.3315 3.34717 139.549 5.99554 + neutron 0 1 6.91773 -5.99949 2.85351 -114.031 + neutron 0 1 3.31254 73.404 -26.0186 13.0595 + gamma 0 0 2.45819 0.13254 -2.02832 1.3824 + gamma 0 0 1.72781 -0.317077 1.03555 1.34626 + neutron 0 1 1.67011 -39.988 21.2127 -33.0475 + neutron 0 1 1.66598 40.8877 13.3526 35.8228 + gamma 0 0 1.49572 -0.70336 -0.474581 1.23176 + gamma 0 0 1.2594 -1.17736 0.313256 0.319032 + neutron 0 1 1.12877 -41.43 19.7894 3.78324 + neutron 0 1 0.825729 14.8311 -9.15606 -35.3347 + neutron 0 1 0.800743 -22.8961 18.2172 -25.4803 + neutron 0 1 0.795167 -30.7879 -20.4541 -11.3397 + gamma 0 0 0.62935 -0.107782 0.619122 -0.033952 + neutron 0 1 0.539156 20.9258 -3.69161 23.7048 + neutron 0 1 0.487198 -26.3143 7.93839 -12.6605 + neutron 0 1 0.344635 -13.1302 -8.77096 -19.96 + neutron 0 1 0.0888052 12.6351 2.12594 -1.64934 + Re178[0.0] 75 178 0.449053 -377.531 -46.0358 64.7126 +0 0 0.0137304 29 + proton 1 1 1000 0 0 1696.04 + pi0 0 0 375.32 16.1036 94.8819 482.619 + proton 1 1 237.972 299.56 272.31 582.5 + proton 1 1 27.2745 -206.634 -43.5755 85.6114 + proton 1 1 15.4573 21.7815 -111.35 -127.953 + neutron 0 1 10.7386 49.8314 1.65693 133.449 + proton 1 1 7.99409 -41.4639 -107.006 43.5384 + neutron 0 1 7.33562 -46.6519 -106.987 -14.6882 + neutron 0 1 5.37089 20.6709 0.372525 -98.4583 + neutron 0 1 5.24916 91.9101 28.0406 25.6452 + neutron 0 1 4.29006 -89.1402 -11.5712 0.347478 + neutron 0 1 4.20598 49.9591 17.5451 71.537 + neutron 0 1 4.10522 74.2517 39.7345 25.2775 + neutron 0 1 2.97932 -47.9919 40.1956 41.0915 + neutron 0 1 2.58721 -12.0844 66.3424 -17.9179 + neutron 0 1 2.4495 13.944 -34.9591 56.5009 + gamma 0 0 2.21931 -1.3602 -0.114166 -1.7499 + neutron 0 1 2.00405 -28.3684 53.9038 7.71419 + neutron 0 1 1.83414 39.9355 -33.4969 27.0754 + neutron 0 1 1.68767 29.4276 -10.1823 -46.9525 + gamma 0 0 1.66925 0.865172 1.27067 0.650592 + gamma 0 0 1.21644 0.985299 -0.121476 -0.702957 + neutron 0 1 1.14211 -38.6415 7.7864 24.3656 + gamma 0 0 0.80498 -0.352971 -0.694617 0.202266 + neutron 0 1 0.648926 15.3145 -23.766 -20.5056 + gamma 0 0 0.185356 0.170901 0.0612552 -0.0373822 + gamma 0 0 0.111191 0.0991238 -0.00678745 -0.0499174 + neutron 0 1 0.080779 9.87314 -1.11166 7.28603 + Os178[0.0] 76 178 0.713393 -221.995 -139.16 409.641 +0.00135391 -0.00702061 0.0354987 40 + proton 1 1 999.963 31.6597 -164.169 1687.73 + neutron 0 1 128.463 -326.916 -105.999 373.888 + neutron 0 1 78.283 98.6729 -378.353 18.5776 + neutron 0 1 62.8393 -339.742 -15.262 -79.8399 + neutron 0 1 48.5852 297.396 -4.14148 72.088 + pi0 0 0 46.1365 -79.9301 -23.0658 -87.5352 + proton 1 1 36.6064 -26.147 79.5878 251.029 + proton 1 1 28.0541 -122.356 -13.514 195.648 + neutron 0 1 27.9402 -229.321 -1.54266 -26.3318 + neutron 0 1 18.1933 26.3762 58.2524 -174.441 + neutron 0 1 17.5209 -178.907 25.7852 -23.6327 + neutron 0 1 15.8987 172.951 -14.5004 -2.47505 + proton 1 1 13.8158 107.516 79.6217 90.651 + proton 1 1 11.0929 134.547 -51.8965 -11.9696 + neutron 0 1 8.87635 -29.8733 76.7107 99.9083 + neutron 0 1 6.8636 -33.7157 -61.1989 89.7923 + neutron 0 1 6.52619 -70.7113 53.0923 66.9871 + neutron 0 1 6.30204 -15.2451 -45.3499 -97.9442 + neutron 0 1 5.47428 -65.487 -75.3991 -18.5277 + neutron 0 1 5.06741 8.46403 59.0701 77.3764 + neutron 0 1 4.38308 -48.7097 -55.8302 52.5922 + neutron 0 1 3.30057 39.8806 64.5173 -21.4509 + neutron 0 1 2.89532 0.187221 70.9393 -20.4117 + neutron 0 1 2.87371 -68.9515 16.6387 19.4209 + neutron 0 1 2.33978 -38.8737 -0.641931 -53.7648 + neutron 0 1 2.25958 -45.5363 44.1507 15.1103 + proton 1 1 2.15462 41.007 -33.7247 35.0564 + neutron 0 1 1.71017 8.57055 -26.6898 49.3027 + gamma 0 0 1.47882 -0.935624 -0.8663 0.749033 + neutron 0 1 1.35078 27.2873 -9.59266 41.2735 + gamma 0 0 1.30673 1.30569 0.041371 -0.0314311 + neutron 0 1 1.1184 42.8773 7.62906 -14.3601 + gamma 0 0 0.835305 0.308833 0.417564 0.654215 + neutron 0 1 0.65755 -30.6393 14.6345 9.11689 + neutron 0 1 0.467727 -6.32551 -7.57318 -27.9602 + gamma 0 0 0.379497 -0.315466 0.167079 -0.12878 + neutron 0 1 0.191734 8.99574 14.0381 -9.07407 + deuteron 1 2 0.507704 -23.2628 -28.2547 -23.7756 + alpha 2 4 16.7499 -11.4916 46.4755 -350.508 + Hf161[0.0] 72 161 6.78888 808.714 77.4594 1172.68 +-0.00163755 -0.000756256 0.0334764 33 + proton 1 1 999.997 -34.1538 -19.0016 1695.58 + pi+ 1 0 486.487 -259.173 273.918 479.861 + neutron 0 1 72.0535 249.897 -82.284 267.152 + proton 1 1 16.0872 -56.2283 98.1551 132.857 + neutron 0 1 15.2527 135.61 -102.345 -5.46558 + neutron 0 1 10.5771 137.254 30.3542 -15.0849 + neutron 0 1 9.13129 1.06112 -84.1648 100.784 + neutron 0 1 7.37985 -85.1761 69.5671 -42.7507 + neutron 0 1 6.90285 9.7081 0.305195 -113.687 + neutron 0 1 6.30553 -27.6887 95.097 45.5913 + neutron 0 1 6.15617 -20.3296 -18.8435 104.105 + neutron 0 1 5.94086 -18.5245 -25.1564 101.109 + neutron 0 1 5.67959 8.89711 -100.769 21.7112 + neutron 0 1 5.66523 -25.9014 18.5439 98.3008 + neutron 0 1 5.60256 46.2258 -9.90915 -91.2377 + neutron 0 1 5.04722 -10.4482 -64.8291 -72.0964 + neutron 0 1 4.46668 65.1524 45.4704 45.8369 + neutron 0 1 4.14363 -56.5061 -67.1912 9.79842 + neutron 0 1 3.77434 51.2354 -49.6569 -44.8982 + neutron 0 1 3.38761 -21.2226 68.0027 -36.0897 + neutron 0 1 2.47239 40.9204 -52.2691 15.6696 + gamma 0 0 2.11587 -0.74022 0.349491 1.95111 + neutron 0 1 1.97753 31.8607 36.0281 -37.5076 + gamma 0 0 1.25071 0.608326 0.497684 0.972896 + gamma 0 0 0.831477 0.436272 -0.094289 0.70152 + gamma 0 0 0.756609 -0.50435 0.50359 0.253941 + gamma 0 0 0.420739 -0.412424 0.0741764 -0.0377647 + gamma 0 0 0.37844 -0.192928 -0.307849 0.105944 + neutron 0 1 0.327118 11.2105 -8.49943 20.4179 + gamma 0 0 0.239672 0.14148 0.107635 0.16075 + neutron 0 1 0.10021 3.41853 2.85435 12.9802 + alpha 2 4 2.1136 -29.6467 38.1687 -115.867 + Os172[0.0] 76 172 2.2462 -215.099 -130.679 809.988 +0 0 -0.0203515 32 + proton 1 1 1000 0 0 1696.04 + proton 1 1 268.845 449.941 -465.101 397.505 + proton 1 1 95.5122 -414.665 -121.41 40.8388 + neutron 0 1 81.122 -107.543 -217.131 316.715 + proton 1 1 71.6025 166.49 -38.048 332.153 + proton 1 1 64.3589 -107.31 216.925 257.57 + proton 1 1 60.4916 223.35 61.2405 252.069 + neutron 0 1 45.3978 -140.421 109.132 -236.097 + neutron 0 1 25.3327 45.7169 -214.611 -9.8537 + proton 1 1 22.4741 2.24056 -194.684 69.0802 + neutron 0 1 10.3341 33.5682 -124.812 53.1137 + neutron 0 1 8.65003 85.2646 -95.0151 5.60621 + neutron 0 1 8.31007 -12.7549 -36.5648 119.101 + neutron 0 1 8.07827 -106.441 0.620053 62.5723 + neutron 0 1 6.56177 -96.8161 -54.239 -7.63306 + neutron 0 1 6.10938 4.35927 91.5879 55.7702 + neutron 0 1 4.94328 66.868 9.27546 68.9647 + neutron 0 1 4.21448 -31.1466 -76.4044 33.6093 + neutron 0 1 3.54667 -35.621 64.1783 -35.91 + gamma 0 0 3.14129 -2.2987 0.576096 -2.062 + neutron 0 1 2.22437 6.49008 -63.0128 13.1183 + neutron 0 1 1.86527 -3.03393 58.0744 -11.2572 + neutron 0 1 0.799211 -11.0824 36.8501 4.65939 + neutron 0 1 0.767088 19.8639 -28.3916 -15.5366 + gamma 0 0 0.756483 -0.322803 -0.669528 -0.140698 + neutron 0 1 0.674893 -32.5124 -0.661824 14.5317 + neutron 0 1 0.51384 -15.3158 3.25853 26.8448 + neutron 0 1 0.458241 -19.6158 -16.5522 14.232 + neutron 0 1 0.222935 12.3447 13.733 -8.83102 + neutron 0 1 0.16529 -13.8712 -8.62285 -6.62313 + gamma 0 0 0.111394 0.0579524 0.0882334 -0.0355656 + W171[0.0] 74 171 3.77446 34.2175 1090.4 -108.037 +0 0 0.0121258 40 + proton 1 1 1000 0 0 1696.04 + proton 1 1 247.878 -345.406 356.486 529.349 + neutron 0 1 82.0244 72.8112 -222.938 325.361 + proton 1 1 78.9377 133.896 -39.2953 -367.272 + neutron 0 1 70.3247 -302.676 111.57 181.754 + proton 1 1 54.332 -311.883 -72.5492 48.7229 + neutron 0 1 40.2193 -194.501 -192.378 -48.531 + neutron 0 1 23.4728 206.703 34.142 -27.7056 + neutron 0 1 22.6246 -45.4347 150.357 135.48 + neutron 0 1 18.3625 34.2388 166.628 -76.847 + neutron 0 1 18.305 108.134 -121.708 -90.7018 + proton 1 1 16.1053 112.977 102.117 85.3824 + proton 1 1 13.7549 -21.376 -34.7101 156.01 + neutron 0 1 12.7379 -63.0411 92.4069 107.635 + neutron 0 1 10.8797 59.7578 -104.964 77.293 + neutron 0 1 9.05671 -89.85 -1.21229 95.0067 + neutron 0 1 6.22837 82.7297 26.0846 64.9469 + neutron 0 1 5.59348 64.2011 62.4248 50.2348 + neutron 0 1 5.45178 65.8184 33.5883 69.3837 + neutron 0 1 4.79177 -54.6573 60.2782 -49.0556 + neutron 0 1 4.51501 -49.1752 65.407 42.5253 + neutron 0 1 4.38322 37.8995 5.29383 82.4104 + neutron 0 1 3.62314 12.7078 80.7525 -11.7907 + proton 1 1 3.32888 -31.2236 -8.79364 -72.1501 + neutron 0 1 2.66629 33.5545 -50.5271 36.5859 + neutron 0 1 2.43237 -53.0857 -19.5891 37.0788 + gamma 0 0 2.10076 1.75116 -0.490854 -1.05152 + gamma 0 0 1.6264 -0.710273 -0.227909 -1.44525 + gamma 0 0 1.56994 0.512778 -0.810091 -1.24319 + gamma 0 0 1.33113 -0.316479 -1.28587 -0.135248 + neutron 0 1 0.968281 18.2085 -36.2716 -13.164 + neutron 0 1 0.79996 26.9992 -14.117 23.9922 + neutron 0 1 0.594598 -3.67941 29.3798 15.5232 + gamma 0 0 0.444307 0.351399 -0.0834007 -0.258789 + gamma 0 0 0.39268 0.25319 -0.299968 0.0105509 + neutron 0 1 0.0488556 2.95668 -7.93859 4.47721 + alpha 2 4 0.589452 -7.65497 -53.6039 -38.2444 + deuteron 1 2 1.97403 6.21242 77.0241 -37.9161 + deuteron 1 2 0.0734221 -15.1024 -6.49413 -2.27441 + Yb161[0.0] 70 161 2.02352 507.099 -463.654 366.66 +0 0 0.0326312 6 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 614.196 -667.103 88.8057 1038.5 + proton 1 1 369.711 676.64 -187.141 581.035 + gamma 0 0 0.99598 0.226343 0.564437 0.788769 + neutron 0 1 0.208848 -7.62567 -6.55389 17.0702 + Au195[0.0] 79 195 0.0394541 -2.13538 104.324 58.6443 +0 0 -0.0496447 23 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 501.696 -633.095 52.7984 889.3 + neutron 0 1 131.814 137.561 409.46 280.161 + neutron 0 1 98.3359 -17.7252 -415.387 -146.954 + proton 1 1 48.8339 242.233 -117.686 146.618 + neutron 0 1 37.3357 214.734 11.0134 159.124 + neutron 0 1 6.67105 70.8053 -85.4504 -16.2821 + neutron 0 1 5.23053 18.9688 8.76373 -97.0546 + neutron 0 1 4.11501 -49.6551 -72.6474 -2.51009 + neutron 0 1 3.11687 17.5502 -19.4726 -71.969 + neutron 0 1 2.59323 -61.1317 33.8013 0.352055 + proton 1 1 2.31383 34.2741 -25.6483 50.1478 + neutron 0 1 1.76351 52.4441 15.6818 -17.9071 + neutron 0 1 1.35406 43.6426 18.0308 -17.7906 + neutron 0 1 1.15083 -1.34473 24.3595 39.6066 + neutron 0 1 0.782915 -23.7162 -13.0148 27.2024 + neutron 0 1 0.767871 31.6893 11.422 17.5739 + neutron 0 1 0.72959 -36.9167 -2.02643 -2.14002 + gamma 0 0 0.681846 -0.339163 -0.481692 -0.343302 + gamma 0 0 0.572155 0.248476 0.231396 0.460518 + neutron 0 1 0.457795 -8.40569 -3.32 -27.9068 + deuteron 1 2 6.47685 -62.4645 -101.112 101.058 + Ir178[0.0] 77 178 0.671751 30.6426 270.686 385.292 +0 0 -0.0443798 20 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 380.748 -384.838 -442.484 718.716 + neutron 0 1 175.673 475.417 -97.1996 354.266 + proton 1 1 139.475 -164.127 76.7665 498.351 + neutron 0 1 28.9198 -59.75 211.721 82.3689 + neutron 0 1 14.7796 133.273 -91.2448 43.6339 + pi0 0 0 12.7887 4.24767 -39.2528 -45.355 + gamma 0 0 2.86286 -0.916605 1.80947 -2.0203 + neutron 0 1 2.66593 45.6257 -8.17381 -53.5558 + gamma 0 0 2.26418 -2.26198 0.00871487 0.0993462 + neutron 0 1 2.10388 53.636 2.63942 32.7736 + gamma 0 0 1.95145 -0.339457 -1.76596 -0.757828 + neutron 0 1 1.17094 40.7089 -20.0195 11.9884 + neutron 0 1 1.15343 -43.2954 3.70576 16.7496 + gamma 0 0 0.946093 0.0748376 0.139229 -0.932795 + neutron 0 1 0.768556 28.192 25.4834 -0.783382 + neutron 0 1 0.660616 20.149 -25.8237 12.9991 + neutron 0 1 0.492457 -9.94975 17.5447 22.7776 + neutron 0 1 0.297173 6.47431 4.88728 22.1971 + Au185[0.0] 79 185 0.481616 -142.321 381.262 -17.4798 +0 0 -0.0368631 36 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 167.212 -324.339 -17.6075 486.484 + proton 1 1 155.718 -74.1016 -173.07 530.108 + neutron 0 1 83.5892 192.247 -86.1371 345.953 + neutron 0 1 52.1651 -226.414 165.249 148.914 + proton 1 1 51.745 192.436 -107.869 226.079 + proton 1 1 43.0557 -77.5507 260.712 -93.0848 + neutron 0 1 26.3037 125.977 76.8098 168.375 + proton 1 1 25.4415 216.731 34.6916 -14.6077 + proton 1 1 23.2238 -150.59 -144.491 23.7683 + neutron 0 1 21.2637 152.591 13.8609 -130.128 + neutron 0 1 18.5346 -140.355 -120.712 30.022 + neutron 0 1 16.5786 -76.3541 -136.804 82.9634 + neutron 0 1 16.2944 112.433 126.841 46.4214 + neutron 0 1 14.9044 -6.28885 105.397 -130.695 + proton 1 1 13.5456 -142.402 -72.2578 10.1437 + neutron 0 1 11.0073 121.958 -74.0681 -21.1079 + neutron 0 1 10.6465 131.778 -17.13 49.6056 + neutron 0 1 5.55535 -33.9925 -29.7092 91.8258 + neutron 0 1 4.99786 -73.6637 13.3286 61.7465 + neutron 0 1 4.5916 64.7392 17.7728 -64.3605 + proton 1 1 4.36809 -3.02326 -18.6826 88.6443 + neutron 0 1 4.09599 65.1471 -38.6807 -44.4222 + neutron 0 1 3.54628 72.8602 9.08733 35.8513 + neutron 0 1 2.97438 24.7329 -8.51819 70.0987 + neutron 0 1 2.87897 11.3788 54.2681 -48.4122 + neutron 0 1 2.02636 44.4185 -23.3538 35.9653 + neutron 0 1 0.861151 1.89424 26.1997 -30.4786 + gamma 0 0 0.750641 0.0245751 -0.0376836 -0.749291 + gamma 0 0 0.284971 -0.0713801 -0.0311435 0.274123 + neutron 0 1 0.183149 -9.26623 11.8143 10.8975 + gamma 0 0 0.179586 0.00361654 -0.151333 0.0966238 + neutron 0 1 0.121478 -12.787 -1.78605 -7.84805 + gamma 0 0 0.0956871 0.0751168 -0.0310095 0.0505163 + neutron 0 1 0.0807492 -6.28183 0.903879 -10.5578 + Ta168[0.0] 73 168 0.37542 -173.945 154.192 -251.801 +0 0 -0.0437085 31 + proton 1 1 1000 0 0 1696.04 + proton 1 1 198.425 -338.856 165.488 519.15 + neutron 0 1 162.289 -70.8761 45.8032 569.367 + proton 1 1 154.519 351.789 335.903 277.941 + neutron 0 1 97.3337 56.4374 298.943 315.951 + proton 1 1 60.8447 10.8578 -312.932 140.838 + neutron 0 1 48.7806 -213.841 127.506 -179.05 + proton 1 1 42.6702 -134.595 -149.482 203.551 + neutron 0 1 7.94864 -78.1525 80.4564 49.1799 + neutron 0 1 5.68805 54.8408 -60.5116 63.6536 + neutron 0 1 5.43137 -88.6395 18.4129 -45.1636 + neutron 0 1 5.37632 -36.3907 69.1716 -63.4249 + neutron 0 1 5.20933 -50.2579 -83.7889 -16.4227 + proton 1 1 3.69581 -69.3681 -44.7267 11.6879 + neutron 0 1 3.69326 39.4531 30.4228 -66.8705 + neutron 0 1 2.91473 -71.411 19.406 -3.08962 + neutron 0 1 2.69104 67.1819 -9.43717 -21.4846 + neutron 0 1 2.58243 -44.8661 52.851 7.29349 + gamma 0 0 2.0054 -1.02152 0.942247 1.44579 + neutron 0 1 1.89477 19.477 -48.1094 29.5 + neutron 0 1 1.40956 -24.9502 -41.8471 -16.6442 + neutron 0 1 1.31738 -34.125 -0.933494 36.22 + neutron 0 1 1.30512 -35.6927 -12.875 -31.8506 + neutron 0 1 1.02288 1.48376 -5.59093 -43.4709 + gamma 0 0 0.774287 -0.621982 -0.404922 0.220675 + gamma 0 0 0.701166 -0.353058 -0.257974 -0.548118 + gamma 0 0 0.344291 -0.268497 -0.0034541 0.215485 + neutron 0 1 0.166452 10.9655 -9.4963 -10.1188 + neutron 0 1 0.0927631 8.83138 -6.26341 7.55639 + neutron 0 1 0.041252 8.63055 -0.229227 1.72651 + Re173[0.0] 75 173 2.02773 664.341 -458.42 -41.3202 +-2.77519e-05 0.000305943 -0.0311234 24 + proton 1 1 999.994 -5.83293 64.3035 1694.8 + pi0 0 0 376.177 268.195 -76.9212 406.465 + proton 1 1 186.956 -430.961 125.221 429.389 + neutron 0 1 105.862 -368.386 -150.956 227.242 + proton 1 1 29.9689 66.0746 67.3479 -219.624 + proton 1 1 13.5651 -0.11873 77.2821 -140.239 + neutron 0 1 4.98436 -48.8882 -55.9655 -62.2005 + neutron 0 1 4.41978 -37.0878 -31.7721 -77.0707 + gamma 0 0 3.76735 -3.24109 -1.67531 0.938936 + neutron 0 1 3.35204 -56.2718 -56.0673 0.300571 + neutron 0 1 2.45489 38.1581 47.4682 30.1629 + gamma 0 0 2.39148 -0.225075 2.23395 0.823379 + neutron 0 1 2.13739 -47.3442 -41.7233 6.22113 + neutron 0 1 1.94074 -58.7208 12.3363 -7.09651 + neutron 0 1 1.74815 45.4693 23.6586 25.7074 + neutron 0 1 0.753432 23.8939 23.6438 16.9239 + gamma 0 0 0.704592 -0.494891 0.0599755 0.497932 + neutron 0 1 0.496559 -8.57311 -2.4747 29.2185 + neutron 0 1 0.42369 15.6739 4.85999 22.9578 + neutron 0 1 0.371686 -0.302659 -24.871 8.9401 + gamma 0 0 0.308685 -0.240306 0.0864206 -0.17341 + neutron 0 1 0.148709 15.8089 0.425494 5.41869 + neutron 0 1 0.129239 8.42193 -12.4759 4.03693 + Ir181[0.0] 77 181 3.91321 573.328 134.583 985.962 +-0.00110813 -0.000140969 0.0169009 37 + proton 1 1 999.996 -52.7477 -6.71022 1695.2 + neutron 0 1 201.376 158.87 -134.116 612.974 + neutron 0 1 88.0073 -93.8074 386.855 -121.102 + pi0 0 0 86.7384 73.9872 -108.732 116.799 + neutron 0 1 41.2707 -126.17 -244.225 60.7598 + proton 1 1 40.947 -53.4807 83.9894 261.918 + proton 1 1 22.7592 103.771 91.1056 155.428 + neutron 0 1 18.1833 -1.80291 -178.089 52.7317 + neutron 0 1 15.6817 8.18895 50.4707 164.619 + neutron 0 1 13.4706 48.7156 96.6262 117.408 + neutron 0 1 12.515 -92.0716 -100.221 71.7808 + neutron 0 1 11.069 103.889 74.1752 68.0282 + proton 1 1 10.3926 57.1226 -127.421 10.5379 + neutron 0 1 9.4002 72.5204 108.45 -27.0548 + neutron 0 1 7.79437 92.6717 77.0608 -13.4534 + neutron 0 1 5.66001 -53.0261 86.0196 21.3728 + proton 1 1 5.26062 7.61965 -38.9595 91.2336 + neutron 0 1 5.18717 67.1992 63.9453 34.1984 + neutron 0 1 3.75774 1.08246 -74.2755 -39.4636 + neutron 0 1 3.47035 23.8339 41.203 65.3264 + neutron 0 1 3.01985 65.1156 -30.8164 -22.2289 + neutron 0 1 2.68308 20.0122 -17.2049 65.974 + neutron 0 1 2.43132 -41.2 0.202518 -53.6396 + proton 1 1 2.26682 -59.0215 -21.3955 17.8219 + neutron 0 1 1.57312 52.3954 -12.0678 8.22569 + neutron 0 1 1.37143 18.1549 -14.9155 -45.0211 + neutron 0 1 1.05826 21.7819 22.6523 -31.6568 + neutron 0 1 1.04507 35.2098 3.85233 -26.6521 + neutron 0 1 1.00273 -29.1913 -13.2861 -29.2682 + neutron 0 1 0.681787 -0.837777 -28.3836 21.8014 + gamma 0 0 0.245054 -0.0486103 -0.197172 -0.137157 + neutron 0 1 0.229053 -16.7395 -6.80746 10.1942 + neutron 0 1 0.160768 10.1905 -13.461 -4.13361 + alpha 2 4 3.0034 20.87 119.892 87.1165 + alpha 2 4 5.93333 -29.5652 -133.069 160.268 + deuteron 1 2 10.874 -77.2701 164.382 -88.979 + Yb158[0.0] 70 158 0.794316 -441.719 -179.949 -78.5301 +0 0 -0.0412204 37 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 201.802 -50.9944 132.156 632.354 + proton 1 1 141.977 353.518 114.079 385.479 + proton 1 1 96.5286 -319.291 -97.1344 -281.205 + neutron 0 1 91.9858 -45.8618 -346.489 243.221 + proton 1 1 44.3286 169.764 29.697 235.474 + proton 1 1 29.6873 111.643 -168.941 -124.842 + neutron 0 1 24.4702 -72.6475 195.361 -56.0162 + neutron 0 1 19.6147 -81.4422 163.668 61.8324 + neutron 0 1 12.6568 120.297 -63.6385 -73.6386 + proton 1 1 11.6994 40.7513 129.782 59.8953 + neutron 0 1 11.409 105.383 -94.3401 -39.5413 + neutron 0 1 9.92673 126.33 -50.0223 17.0477 + neutron 0 1 9.80127 -24.5911 28.1831 -130.824 + neutron 0 1 6.96757 88.4137 -56.0768 46.6897 + neutron 0 1 5.3538 -39.9604 -86.4103 32.0248 + neutron 0 1 2.4535 -25.388 61.4098 -14.1686 + neutron 0 1 2.16569 55.2227 29.4424 12.5664 + neutron 0 1 1.93892 -35.0022 43.2835 -23.4227 + neutron 0 1 1.91645 6.3227 -57.9031 -14.5666 + neutron 0 1 1.87941 47.3163 -9.44006 -34.7454 + neutron 0 1 1.76413 -53.1241 20.482 8.74468 + gamma 0 0 1.54232 1.19168 0.413206 -0.887644 + neutron 0 1 1.53609 35.6211 32.93 23.1436 + neutron 0 1 1.17776 -1.49529 -46.9615 -2.63281 + proton 1 1 1.16222 22.8004 40.5238 -4.50207 + neutron 0 1 1.15222 30.9007 5.23745 34.4125 + neutron 0 1 0.895703 -5.55801 -38.8901 11.8581 + neutron 0 1 0.570148 7.7613 30.222 -9.90473 + neutron 0 1 0.423501 -27.3851 4.48066 5.09635 + neutron 0 1 0.395704 25.871 -1.1757 8.54669 + neutron 0 1 0.26885 1.17686 19.0363 -11.8959 + gamma 0 0 0.16558 -0.164198 0.0211886 -0.00260392 + neutron 0 1 0.0925129 1.60908 13.0783 -0.46998 + deuteron 1 2 7.30129 17.8425 80.4085 143.73 + deuteron 1 2 5.28051 22.3732 -131.259 45.8991 + Hf163[0.0] 72 163 2.10262 -609.206 74.7887 511.288 +0 0 0.0346371 31 + proton 1 1 1000 0 0 1696.04 + proton 1 1 169.941 356.047 -216.935 417.075 + neutron 0 1 165.626 -289.941 450.58 227.105 + neutron 0 1 95.8639 41.0174 152.748 405.36 + proton 1 1 62.223 -157.669 87.0597 296.98 + neutron 0 1 45.8574 -89.83 47.1957 -279.246 + pi+ 1 0 43.1584 57.1888 -101.172 20.0904 + neutron 0 1 30.424 -188.113 68.3499 134.306 + proton 1 1 14.8187 -56.3786 -148.954 -51.5909 + neutron 0 1 5.73917 -33.2674 11.7251 97.8437 + neutron 0 1 5.36648 6.91662 100.173 5.53984 + neutron 0 1 4.54705 17.8838 -71.0103 56.594 + neutron 0 1 4.12983 -47.066 31.774 -67.4741 + neutron 0 1 3.40259 -61.7575 50.899 -0.887969 + neutron 0 1 3.37329 -26.7338 27.7521 -69.7521 + neutron 0 1 2.87309 51.8533 -51.0948 -10.3789 + neutron 0 1 2.79856 -39.8925 -17.3253 58.0957 + gamma 0 0 2.74698 1.63515 1.78386 1.3 + neutron 0 1 2.38065 -11.5451 64.0188 -15.7329 + neutron 0 1 2.31504 -49.1682 39.1113 -20.2093 + neutron 0 1 1.01988 -28.1844 -14.2559 30.3305 + neutron 0 1 0.995722 -12.7493 35.6096 -21.0119 + neutron 0 1 0.845014 -24.2326 9.9018 30.0556 + neutron 0 1 0.751326 17.1785 8.00043 32.4546 + gamma 0 0 0.619064 -0.387055 0.0272165 -0.482377 + neutron 0 1 0.533251 1.53984 -5.5114 -31.1382 + neutron 0 1 0.479384 25.6014 -12.3233 -9.68299 + neutron 0 1 0.294771 -9.18503 -17.8262 -12.3232 + gamma 0 0 0.120834 -0.0864513 0.0560964 -0.0630886 + neutron 0 1 0.0488459 2.29152 -2.15492 9.04961 + Os173[0.0] 76 173 2.46283 547.039 -528.207 463.834 +0.000252546 0.000401177 -0.00447463 48 + proton 1 1 999.997 24.9339 39.6083 1695.39 + proton 1 1 135.827 -505.988 -23.8645 -129.389 + neutron 0 1 102.136 280.055 210.652 282.053 + neutron 0 1 55.2627 180.988 -47.9951 268.029 + neutron 0 1 53.2529 169.537 -261.875 -74.7225 + neutron 0 1 51.2843 263.138 -91.7253 146.1 + proton 1 1 37.9851 -202.168 -23.1408 176.964 + proton 1 1 30.172 -86.3329 -217.518 52.5533 + neutron 0 1 19.7998 -180.546 3.29283 70.6467 + neutron 0 1 16.5053 54.8546 138.388 95.5395 + neutron 0 1 16.1691 100.68 117.565 -81.7749 + neutron 0 1 14.8976 -37.0504 -131.631 -97.556 + proton 1 1 13.2451 -43.6368 151.153 16.7096 + neutron 0 1 12.5253 51.9541 69.8133 126.966 + neutron 0 1 11.3844 24.0987 130.076 -63.4187 + neutron 0 1 8.16412 110.586 -49.1864 -27.5595 + proton 1 1 7.7937 -31.2677 -22.1617 -114.966 + proton 1 1 7.27366 -7.69796 32.4398 -112.208 + neutron 0 1 6.56131 71.929 75.7952 -38.1303 + neutron 0 1 6.34574 71.8212 16.3915 -80.8566 + neutron 0 1 5.94172 -25.2184 88.1224 52.9061 + neutron 0 1 5.80637 4.70485 104.51 -0.389702 + neutron 0 1 5.73374 -36.4166 -28.4565 93.1203 + neutron 0 1 5.53046 -9.37639 -88.4225 -50.1657 + neutron 0 1 5.22839 21.6799 3.85769 96.7846 + neutron 0 1 4.30841 -63.8047 -25.6493 58.1869 + neutron 0 1 3.95636 -11.4137 -61.8011 -59.1652 + proton 1 1 3.4614 5.62365 47.9215 64.6479 + gamma 0 0 3.45505 -2.44251 -2.44224 0.0832732 + neutron 0 1 3.27045 -64.5869 8.58041 43.7175 + neutron 0 1 2.8303 16.3092 -52.0021 48.5418 + neutron 0 1 2.14588 -36.3436 43.2877 29.0227 + gamma 0 0 1.83862 1.59217 0.426592 0.814588 + neutron 0 1 1.60956 47.1863 -12.0738 25.59 + gamma 0 0 1.45483 -1.16383 -0.858746 -0.156765 + neutron 0 1 1.21875 44.4695 4.59652 17.1176 + neutron 0 1 1.02136 -17.4697 -29.7755 -26.9914 + neutron 0 1 0.945017 28.6711 -20.7135 -22.9264 + gamma 0 0 0.371024 -0.280903 -0.122064 0.209411 + neutron 0 1 0.239261 -9.32373 9.853 16.2987 + gamma 0 0 0.118366 -0.0736628 0.0423379 -0.0824121 + neutron 0 1 0.0638138 6.99408 -7.95153 2.78829 + neutron 0 1 0.0331735 0.498623 -4.11124 6.72217 + alpha 2 4 2.65311 10.9303 74.5957 -118.75 + triton 1 3 15.4248 -270.501 55.98 102.944 + He3 2 3 3.20395 52.9019 -73.3538 -99.1571 + alpha 2 4 20.9291 -187.701 316.326 145.49 + Dy147[0.0] 66 147 3.40887 234.523 -387.232 853.198 +0 0 -0.0476242 15 + proton 1 1 1000 0 0 1696.04 + proton 1 1 713.946 357.566 -150.345 1303.46 + neutron 0 1 169 -26.4757 440.351 389.261 + neutron 0 1 41.0582 -254 84.2138 -85.0383 + neutron 0 1 5.38567 -74.7964 67.4483 -2.36788 + neutron 0 1 3.94753 -37.9407 -9.55971 76.8285 + gamma 0 0 1.87704 1.81415 0.240256 -0.417613 + gamma 0 0 1.22448 -0.747418 -0.40017 -0.883512 + neutron 0 1 0.487567 -15.3857 -3.86069 -25.784 + neutron 0 1 0.335593 14.4446 19.9854 -4.76172 + neutron 0 1 0.26718 -7.68413 -4.99212 20.4492 + gamma 0 0 0.209232 -0.100997 0.168607 -0.0717573 + gamma 0 0 0.0873146 -0.003785 0.0169188 -0.0855761 + neutron 0 1 0.0293857 5.42541 -5.00873 0.835437 + Au189[0.0] 79 189 0.551522 37.8862 -438.26 24.6123 +0 0 -0.0317025 20 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 260.558 43.2663 -527.592 526.58 + pi0 0 0 253.506 -184.212 235.233 208.402 + proton 1 1 196.96 -63.1527 -34.3957 635.001 + proton 1 1 28.8785 -60.1655 -153.185 167.153 + neutron 0 1 5.8167 -5.53544 101.843 23.6973 + neutron 0 1 4.71979 -62.3723 0.361671 70.7174 + neutron 0 1 4.0151 -19.1691 29.3354 -79.5802 + neutron 0 1 2.79158 26.8323 6.86109 -66.9813 + gamma 0 0 2.50272 -0.973648 2.21766 -0.630556 + gamma 0 0 2.17967 0.653551 1.33137 1.59728 + neutron 0 1 2.0815 -3.39914 -43.5973 44.76 + neutron 0 1 1.35194 -12.9766 -17.7383 45.379 + neutron 0 1 0.73657 -11.4798 -5.07904 -35.0296 + neutron 0 1 0.509472 6.53565 -10.4887 -28.3707 + neutron 0 1 0.267383 -5.37885 -4.98335 21.1838 + gamma 0 0 0.184739 -0.0944509 0.106261 0.117967 + neutron 0 1 0.0742412 0.999984 7.89365 -8.72953 + neutron 0 1 0.044622 7.64152 -3.00157 4.0559 + Pt184[0.0] 78 184 0.926794 342.982 414.878 166.713 +0 0 0.00269011 16 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 339.902 -69.3022 -19.4106 865.491 + proton 1 1 308.532 -84.3337 -208.541 789.661 + neutron 0 1 106.936 164.997 411.465 125.912 + proton 1 1 65.9581 47.2276 5.41116 354.773 + proton 1 1 44.6071 -45.1182 122.576 -261.986 + neutron 0 1 17.3158 -85.6533 86.6516 -134.14 + proton 1 1 14.4829 -154.512 -57.6487 13.7906 + neutron 0 1 11.8917 85.9194 -122.757 6.01301 + proton 1 1 10.9894 135.499 40.0468 -27.9113 + neutron 0 1 1.8661 31.7599 47.7081 15.0129 + neutron 0 1 0.844506 -2.26688 -6.6745 39.2169 + gamma 0 0 0.65654 -0.478346 -0.353859 -0.277513 + neutron 0 1 0.354081 17.8887 10.634 15.2447 + gamma 0 0 0.192957 -0.182744 0.055204 -0.0281006 + Re186[0.0] 75 186 0.312594 -41.4448 -309.163 -104.735 +0 0 0.00247784 8 + proton 1 1 1000 0 0 1696.04 + proton 1 1 820.319 496.627 466.11 1322.27 + neutron 0 1 169.302 -404.829 -305.077 299.741 + gamma 0 0 0.718764 0.196566 0.106531 -0.683106 + gamma 0 0 0.651187 0.399552 0.0263312 -0.513526 + gamma 0 0 0.521136 0.506481 -0.0994891 -0.0718451 + gamma 0 0 0.181355 0.025827 0.0183782 0.178564 + Au196[0.0] 79 196 0.110207 -92.9253 -161.083 75.1203 +0 0 -0.0348524 35 + proton 1 1 1000 0 0 1696.04 + proton 1 1 274.999 199.932 285.558 685.68 + proton 1 1 157.982 -378.089 -292.351 -304.956 + neutron 0 1 42.3118 -116.184 259.015 26.6915 + proton 1 1 39.8791 -50.5824 -271.191 -17.9416 + proton 1 1 26.539 -4.33551 -60.3032 216.45 + pi- -1 0 17.0072 -7.80245 32.2012 -62.7602 + neutron 0 1 14.7612 158.147 -51.1572 18.1301 + neutron 0 1 13.6796 65.5665 77.1457 -125.069 + neutron 0 1 13.5004 -76.7313 108.862 -88.3893 + neutron 0 1 12.7911 13.386 -121.479 96.2465 + proton 1 1 12.3118 32.2918 -135.53 62.0016 + neutron 0 1 10.9819 -35.7318 -60.7307 125.667 + neutron 0 1 6.45457 -47.0395 -48.1877 -87.3834 + neutron 0 1 5.81287 -75.5367 -72.2979 -4.91435 + neutron 0 1 2.56832 1.24211 -46.8024 51.3888 + gamma 0 0 2.55674 -0.473685 -2.3848 0.79074 + neutron 0 1 2.36112 45.8553 47.1471 -10.8108 + gamma 0 0 1.87357 -0.226288 -0.911662 -1.62109 + neutron 0 1 1.73283 -0.193021 51.335 -24.9782 + gamma 0 0 1.6915 0.322679 -1.27561 1.06295 + neutron 0 1 1.59531 22.9717 -22.1777 -44.5062 + gamma 0 0 1.31435 1.05374 -0.78317 -0.0616173 + neutron 0 1 1.20353 31.0943 11.8393 34.0001 + neutron 0 1 0.85938 -34.2251 0.387282 -21.0741 + neutron 0 1 0.749642 -17.8662 -24.2894 -22.362 + neutron 0 1 0.382571 7.43482 -23.4592 -10.6507 + neutron 0 1 0.309556 -15.5561 -7.86498 16.6716 + neutron 0 1 0.246908 -16.4571 9.19348 10.4248 + neutron 0 1 0.155372 8.99377 13.2434 -5.9761 + neutron 0 1 0.107391 0.626226 11.1849 -8.73612 + gamma 0 0 0.0963916 0.0144924 0.0240692 -0.0922063 + neutron 0 1 0.0144331 2.05263 -1.63366 4.49887 + alpha 2 4 0.42224 -53.1114 12.5426 13.0297 + W168[0.0] 74 168 5.12352 339.158 325.132 1175.59 +0 0 -0.0396177 30 + proton 1 1 1000 0 0 1696.04 + proton 1 1 374.274 576.797 -128.643 702.266 + proton 1 1 146.145 -35.7216 523.054 144.031 + neutron 0 1 100.512 -405.23 -171.058 74.208 + proton 1 1 50.2151 57.5754 -164.931 257.362 + proton 1 1 35.5228 -80.4978 22.1024 246.888 + neutron 0 1 22.9198 7.37518 -205.804 34.4213 + neutron 0 1 19.9793 125.153 94.243 -115.75 + proton 1 1 11.1096 123.718 -19.7427 72.6308 + neutron 0 1 10.4945 27.586 -101.667 93.4534 + neutron 0 1 9.4769 84.1952 -75.6791 71.2881 + proton 1 1 7.82555 -59.0713 100.865 -32.9106 + neutron 0 1 7.37483 99.8275 7.87543 62.3308 + neutron 0 1 7.25246 -88.0083 26.2466 -72.4333 + neutron 0 1 6.0962 4.22579 -53.9697 -92.5319 + neutron 0 1 2.63656 -60.4246 33.0538 -14.7549 + neutron 0 1 2.51449 -12.9268 -8.72943 -66.9931 + neutron 0 1 2.39517 48.4474 13.0033 44.6133 + neutron 0 1 2.14056 61.4752 -13.1893 -8.59199 + neutron 0 1 1.93202 32.5024 50.362 -6.44318 + neutron 0 1 1.45958 -10.3497 -43.8878 -26.676 + neutron 0 1 1.40814 -31.7593 -10.3766 -39.1375 + neutron 0 1 0.956485 -6.69461 41.7933 -2.60341 + neutron 0 1 0.92684 4.36924 37.3063 -18.2116 + gamma 0 0 0.828924 0.293898 0.154085 0.759603 + neutron 0 1 0.637538 -10.9649 11.9302 30.5919 + neutron 0 1 0.489794 -3.96997 -4.34686 29.7653 + gamma 0 0 0.478071 -0.16137 -0.439979 -0.0944981 + gamma 0 0 0.104689 0.0301614 0.0859369 -0.0516222 + W173[0.0] 74 173 0.96278 -447.792 40.391 328.615 +0 0 -0.0407712 10 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 582.456 13.7092 66.1013 1195.5 + pi0 0 0 144.154 -140.423 -190.11 61.9256 + proton 1 1 115.771 248.202 140.129 386.539 + gamma 0 0 2.88543 -0.807229 2.75847 0.254776 + gamma 0 0 2.27332 -1.03734 1.34207 1.51353 + gamma 0 0 1.94936 0.211747 -1.18969 1.52964 + gamma 0 0 0.484548 -0.0683908 0.19039 0.440297 + neutron 0 1 0.157305 -13.6437 -9.35714 -4.68123 + Au195[0.0] 79 195 0.0390323 -106.141 -9.86309 53.0178 +0.000606011 -0.000421807 0.00181001 12 + proton 1 1 999.996 45.455 -31.6385 1695.13 + pi+ 1 0 268.821 42.024 -254.762 283.962 + proton 1 1 266.398 -48.0187 307.707 688.395 + proton 1 1 142.089 422.549 18.8784 328.513 + neutron 0 1 121.547 -193.079 -346.195 293.335 + neutron 0 1 5.62642 -26.6352 -26.1717 -95.969 + neutron 0 1 1.90746 44.165 0.388457 40.4637 + neutron 0 1 1.39603 -33.5676 35.3637 15.7445 + gamma 0 0 1.02809 0.696127 -0.51146 -0.557488 + neutron 0 1 0.588855 -0.41263 -4.22819 -32.9975 + neutron 0 1 0.0844421 0.701113 12.0474 3.61299 + Ir190[0.0] 77 190 0.301506 -162.966 225.846 170.627 +0 0 -0.0414863 45 + proton 1 1 1000 0 0 1696.04 + pi+ 1 0 126.778 209.789 -14.6046 -85.0671 + proton 1 1 105.246 -240.16 -18.2035 388.031 + proton 1 1 80.5551 296.782 59.2146 257.038 + neutron 0 1 70.6397 -100.891 57.7224 352.449 + proton 1 1 29.1649 -180.779 1.39505 -151.317 + proton 1 1 14.4291 129.452 38.0205 -95.2976 + neutron 0 1 12.9941 -88.9446 -13.2054 128.456 + neutron 0 1 12.1036 -98.7125 105.203 45.5961 + proton 1 1 9.26012 -11.9501 122.765 47.4197 + neutron 0 1 8.80582 4.12042 -127.571 -18.263 + neutron 0 1 8.24049 -109.423 54.5034 -24.673 + neutron 0 1 7.77623 -92.7499 73.3979 -26.1391 + neutron 0 1 7.75632 33.9153 15.7964 115.046 + proton 1 1 6.69397 17.9749 -108.051 24.6612 + neutron 0 1 6.2801 15.2413 87.6528 -62.652 + neutron 0 1 6.25545 18.682 81.4145 -69.4017 + neutron 0 1 4.14589 -26.8945 -36.1603 76.0064 + proton 1 1 4.00596 50.3321 -35.2792 -61.2819 + neutron 0 1 3.95547 42.4683 62.7329 41.3463 + neutron 0 1 3.40328 31.5521 -73.031 -8.81596 + gamma 0 0 3.40078 -0.861605 2.40546 2.24426 + neutron 0 1 2.90227 -54.1007 -43.9121 24.6377 + proton 1 1 2.90202 -35.246 22.3573 60.9267 + neutron 0 1 2.7158 -28.3285 49.6217 42.9639 + neutron 0 1 2.63678 34.9742 44.8618 41.5456 + neutron 0 1 2.45087 41.9512 0.0460011 53.4004 + neutron 0 1 2.43755 12.2602 43.3311 -50.5818 + neutron 0 1 1.75246 24.2516 50.7835 -11.3606 + neutron 0 1 1.73394 -7.17525 -55.8582 9.47074 + neutron 0 1 1.48458 12.0942 14.0802 49.4713 + neutron 0 1 1.38379 30.9852 -32.0309 24.8229 + gamma 0 0 1.34905 -0.169627 1.33231 0.126941 + neutron 0 1 1.3076 -22.3321 20.2758 -39.3577 + neutron 0 1 1.2728 35.0907 -22.7741 25.3645 + proton 1 1 0.936433 -36.4634 -13.7056 -15.5149 + neutron 0 1 0.863906 -29.9646 -18.8493 19.2605 + gamma 0 0 0.509071 0.318728 -0.00548473 -0.396907 + neutron 0 1 0.492376 12.8012 -1.82515 -27.5369 + neutron 0 1 0.416007 -4.29697 -26.3122 -8.43244 + neutron 0 1 0.382983 24.7707 -1.09149 10.249 + neutron 0 1 0.269373 -19.5813 -2.41554 10.8166 + deuteron 1 2 13.8304 -188.153 60.6285 113.995 + deuteron 1 2 5.07415 -45.8058 -77.191 104.897 + Er157[0.0] 68 157 1.3149 343.178 -347.467 381.883 +0 0 -0.0422503 18 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 596.413 301.758 -982.139 648.685 + proton 1 1 124.66 12.5802 219.268 448.591 + proton 1 1 61.2432 -162.637 303.615 6.58371 + proton 1 1 57.6063 287.623 169.38 -1.70786 + proton 1 1 29.5065 -187.441 39.7518 -139.737 + neutron 0 1 13.7478 -78.2277 -23.044 -139.185 + neutron 0 1 8.00788 -90.6956 -69.5225 45.309 + proton 1 1 7.73996 -92.1095 42.62 65.4497 + neutron 0 1 3.36952 -45.7035 52.4348 38.793 + neutron 0 1 2.58859 -7.90935 -67.5402 -15.7087 + gamma 0 0 1.6874 -1.67505 -0.129125 -0.157688 + neutron 0 1 1.30829 -37.7749 -32.0929 1.80608 + neutron 0 1 0.656028 -34.7083 2.4905 4.72504 + gamma 0 0 0.327895 0.0158196 0.210962 -0.25052 + neutron 0 1 0.157203 -0.651781 2.30964 17.0197 + neutron 0 1 0.120321 -6.08025 5.88631 12.4296 + Re184[0.0] 75 184 1.83472 143.637 336.503 703.391 +0 0 -0.0476869 7 + proton 1 1 1000 0 0 1696.04 + proton 1 1 979.222 33.7645 -316.452 1641.69 + proton 1 1 4.54186 -18.0119 77.1781 47.5683 + gamma 0 0 1.76484 -1.0796 0.493266 1.30606 + neutron 0 1 0.376162 8.37797 22.3221 11.7699 + gamma 0 0 0.236234 0.062544 0.149938 0.171503 + Pt195[0.0] 78 195 0.130434 -23.1136 216.309 -6.46712 +0 0 -0.0341388 10 + proton 1 1 1000 0 0 1696.04 + pi0 0 0 330.958 119.404 31.3346 428.529 + neutron 0 1 289.849 298.405 389.677 622.723 + proton 1 1 223.147 -460.634 -90.364 498.187 + gamma 0 0 3.14904 0.474497 1.21991 -2.86411 + gamma 0 0 1.64039 1.49713 -0.518536 0.424971 + gamma 0 0 0.760468 0.751174 -0.116342 -0.0226801 + neutron 0 1 0.165874 -2.75207 10.676 13.7904 + gamma 0 0 0.118891 0.025969 0.0912787 -0.0716167 + Au195[0.0] 79 195 0.377584 42.8262 -342.001 135.338 +0 0 0.0193621 33 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 216.956 252.285 400.274 480.513 + neutron 0 1 114.163 -244.782 177.688 368.876 + neutron 0 1 102.304 -375.457 147.236 200.153 + neutron 0 1 91.5373 233.985 255.097 246.103 + proton 1 1 81.1121 -228.871 -293.931 -141.466 + neutron 0 1 49.3574 -18.329 -299.109 73.3701 + proton 1 1 27.8861 -29.4482 -43.6103 224.362 + neutron 0 1 11.9275 -12.2047 78.8922 127.211 + neutron 0 1 9.507 -84.9456 -101.787 19.4652 + neutron 0 1 8.63062 -58.0773 -81.9105 78.8051 + neutron 0 1 8.5278 115.756 51.5078 -6.71821 + neutron 0 1 8.51064 35.0656 48.4097 111.767 + neutron 0 1 6.36581 15.481 -88.2272 -63.0794 + neutron 0 1 5.86293 21.0658 84.2148 59.2934 + neutron 0 1 4.62007 5.797 32.6783 87.1871 + neutron 0 1 4.52257 -6.58508 -77.7795 49.2539 + proton 1 1 4.32316 39.1326 -73.6456 -34.2966 + neutron 0 1 4.10721 82.0971 27.1532 16.0504 + neutron 0 1 2.89203 -44.8468 -9.11985 57.8658 + neutron 0 1 2.65645 -56.5549 31.8235 -28.0659 + neutron 0 1 2.55456 -31.4667 41.1 -46.1249 + proton 1 1 1.91562 26.1119 -28.2354 -46.0364 + neutron 0 1 1.88463 21.6781 -48.7673 26.3974 + neutron 0 1 1.37473 7.43484 -20.6819 -45.8494 + gamma 0 0 1.31988 -0.610696 1.16684 0.0872912 + neutron 0 1 1.2053 37.7293 -11.5622 26.6304 + neutron 0 1 0.5955 11.3989 14.2337 28.0508 + neutron 0 1 0.0724742 -4.25628 -10.3128 3.42408 + triton 1 3 1.67064 22.8994 -31.5961 -88.6937 + alpha 2 4 0.832298 -54.2052 35.8823 -44.4927 + deuteron 1 2 0.908966 53.7674 3.21248 -22.568 + Hf162[0.0] 72 162 0.387966 268.958 -210.298 -21.4472 +-0.000621136 0.000169369 -0.00421895 30 + proton 1 1 999.992 -74.395 20.2857 1694.28 + proton 1 1 220.055 27.7659 -361.275 574.522 + neutron 0 1 167.433 -419.539 293.163 284.087 + pi- -1 0 87.9421 -173.672 44.4745 -11.9206 + neutron 0 1 54.8 -189.278 -172.285 201.174 + neutron 0 1 39.4695 197.217 -76.8721 175.847 + proton 1 1 24.3027 -53.0366 167.847 123.329 + proton 1 1 11.9388 -89.8335 -90.336 79.4703 + neutron 0 1 11.4304 -45.7433 -131.188 -48.0333 + neutron 0 1 6.256 48.3707 32.8759 91.512 + neutron 0 1 5.52432 73.3768 44.8134 -54.9459 + neutron 0 1 4.43845 1.97197 67.1698 -62.0037 + proton 1 1 4.42958 -77.8602 -6.88522 47.1414 + proton 1 1 3.98083 22.6705 -80.6858 21.492 + neutron 0 1 3.85632 71.1587 -34.6412 31.5885 + neutron 0 1 3.41773 31.3966 32.306 66.3673 + neutron 0 1 3.24265 62.8697 -40.8343 -21.9967 + neutron 0 1 3.23903 -41.6954 -59.4768 -28.6539 + neutron 0 1 3.01241 -17.1979 57.1745 -45.8814 + neutron 0 1 2.97775 58.6692 -24.3848 -39.5949 + neutron 0 1 1.74955 -46.9686 -31.1853 -10.589 + neutron 0 1 1.47757 -38.1982 -9.22401 35.136 + neutron 0 1 1.46973 0.224827 -52.1956 -6.28824 + neutron 0 1 1.37487 39.3205 4.53232 -31.9188 + neutron 0 1 0.799144 11.5566 24.6559 27.5838 + neutron 0 1 0.779305 12.346 -23.1601 27.8605 + neutron 0 1 0.664935 -9.92457 -17.9488 28.7973 + neutron 0 1 0.636537 -12.6793 3.62067 31.9792 + alpha 2 4 1.79601 13.0185 -56.3875 -100.215 + W168[0.0] 74 168 1.86134 469.299 516.619 308.429 +0 0 -0.0302484 44 + proton 1 1 1000 0 0 1696.04 + proton 1 1 103.586 269.968 87.5356 352.942 + proton 1 1 99.407 -26.5336 -114.544 427.316 + proton 1 1 69.9025 -82.8923 -65.3129 -353.447 + proton 1 1 65.0253 -233.487 -65.863 259.609 + neutron 0 1 60.1423 132.081 247.289 195.026 + neutron 0 1 46.3473 286.195 -69.0485 50.6501 + neutron 0 1 45.2173 -209.911 195.03 70.1034 + proton 1 1 26.876 -205.227 18.0596 -93.3386 + neutron 0 1 19.5151 100.537 154.226 56.2055 + neutron 0 1 15.9121 -7.1424 -154.544 78.8615 + neutron 0 1 14.6476 -18.7103 147.876 74.3101 + neutron 0 1 14.508 160.971 -16.6513 35.8343 + proton 1 1 13.3227 -54.7663 -46.9561 -141.329 + neutron 0 1 11.4609 120.777 30.3215 -78.4951 + proton 1 1 10.5856 -53.1486 79.9331 103.742 + neutron 0 1 10.3179 90.2765 55.8503 -90.6972 + proton 1 1 9.76942 -105.704 -85.1708 -0.882739 + neutron 0 1 9.29702 -35.0206 -60.4658 112.58 + proton 1 1 9.06729 24.2198 -41.231 121.7 + proton 1 1 8.15115 73.2641 -32.0142 -94.7096 + neutron 0 1 7.62735 -81.6626 0.943429 87.8708 + neutron 0 1 6.33592 -78.9886 -33.306 -67.8063 + neutron 0 1 5.7406 -62.0171 -74.0488 -38.6128 + neutron 0 1 5.4728 91.156 44.0889 -7.79865 + neutron 0 1 5.44835 -1.69876 62.6907 -79.5918 + neutron 0 1 4.36389 12.5013 -79.1647 42.3796 + neutron 0 1 3.65669 36.2517 9.83606 73.9854 + neutron 0 1 2.10827 -3.17401 4.97246 -62.7006 + neutron 0 1 1.91129 -44.9211 33.1978 -21.7997 + proton 1 1 1.764 -32.3204 44.3396 17.3991 + gamma 0 0 1.73391 0.999042 0.392896 -1.36161 + neutron 0 1 1.35586 -7.31465 -9.99411 -48.952 + neutron 0 1 1.1161 24.4151 4.57235 38.4908 + proton 1 1 1.03003 30.6906 -10.8518 -29.5683 + neutron 0 1 0.867879 -6.24563 -7.00473 -39.2879 + gamma 0 0 0.796323 -0.622478 0.294615 -0.399816 + neutron 0 1 0.790231 -18.0621 31.2153 13.5991 + neutron 0 1 0.477298 -6.77452 21.9792 -19.1874 + neutron 0 1 0.442115 8.6015 -23.6307 14.0923 + neutron 0 1 0.438893 -6.82757 24.2781 13.7437 + neutron 0 1 0.257563 14.2322 16.5403 2.81481 + deuteron 1 2 6.87051 -7.50258 -78.7272 139.878 + Ho157[0.0] 67 157 1.39654 -86.4618 -246.935 582.872 +-0.000219484 0.00185551 0.0153427 28 + proton 1 1 999.995 -7.01752 59.3258 1694.98 + neutron 0 1 291.143 504.535 549.403 274.699 + neutron 0 1 223.772 -349.824 -304.061 505.708 + neutron 0 1 184.332 46.9306 174.068 589.797 + proton 1 1 66.6069 -302.397 -193.516 -23.1308 + proton 1 1 18.971 156.337 -106.382 -14.1921 + neutron 0 1 13.6836 111.114 115.999 9.92011 + neutron 0 1 11.6899 138.819 24.3788 -47.3148 + neutron 0 1 9.32855 -74.1859 -73.8906 81.5672 + neutron 0 1 5.52122 -37.0035 -24.6205 91.8158 + neutron 0 1 4.83819 -47.6868 73.996 -36.9535 + proton 1 1 4.12553 65.9168 -39.5342 43.0207 + neutron 0 1 2.68732 -67.7369 20.2161 -7.75067 + proton 1 1 2.48166 5.42693 -11.7527 67.0487 + neutron 0 1 2.45295 10.5088 -34.1872 -57.7601 + neutron 0 1 2.43995 24.2358 -35.412 -52.4362 + gamma 0 0 1.98153 -1.20182 -0.458392 1.5073 + neutron 0 1 1.82833 38.6696 -40.2766 17.9294 + gamma 0 0 1.3294 0.849902 1.01327 0.13517 + neutron 0 1 0.855873 -17.351 -35.3328 -7.71774 + neutron 0 1 0.76029 7.59924 24.4692 -27.7988 + neutron 0 1 0.587878 6.87661 -11.5924 30.3871 + neutron 0 1 0.50187 9.59213 -17.9929 22.969 + gamma 0 0 0.400591 -0.155365 -0.357197 0.093513 + neutron 0 1 0.387287 23.7594 -12.4475 2.90964 + gamma 0 0 0.0587857 -0.0415206 -0.00924991 -0.0405739 + gamma 0 0 0.041512 0.0380733 -0.00356763 0.0161535 + Os177[0.0] 76 177 0.368334 -260.645 17.6083 230.55 +-0.00113077 0.000300594 0.0210945 16 + proton 1 1 999.995 -58.6493 15.5908 1694.95 + neutron 0 1 353.608 697.36 -462.01 299.584 + proton 1 1 296.636 -555.849 301.619 494.673 + proton 1 1 120.01 -257.934 -163.059 382.736 + proton 1 1 95.2565 246.081 191.005 301.311 + neutron 0 1 37.1155 139.924 -53.5532 220.626 + neutron 0 1 11.4645 -90.3067 85.0667 79.2658 + neutron 0 1 1.88186 -49.7597 -15.4946 28.7001 + gamma 0 0 1.42543 0.204566 -0.63755 -1.25838 + neutron 0 1 1.29334 25.3798 -6.39938 -41.7965 + neutron 0 1 0.952939 23.8091 -31.1292 -15.9908 + neutron 0 1 0.897723 -20.9829 -15.3454 -31.8117 + gamma 0 0 0.28801 0.157295 -0.221653 0.0952789 + neutron 0 1 0.224495 2.24016 12.6773 16.0054 + neutron 0 1 0.0120356 0.00268767 1.05741 4.63665 + Ir186[0.0] 77 186 0.228926 -218.977 172.017 -41.8299 +0 0 -0.041257 23 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 236.479 383.336 295.749 515.639 + pi0 0 0 178.339 144.088 82.2491 228.958 + proton 1 1 157.601 -267.592 73.3777 493.553 + neutron 0 1 96.5987 -245.934 -344.881 106.893 + proton 1 1 20.4458 196.818 4.79959 5.02697 + neutron 0 1 10.6937 -137.965 0.943875 -34.2622 + neutron 0 1 10.2438 105.487 -3.10901 -90.6496 + neutron 0 1 5.40551 42.5508 79.4485 -45.434 + neutron 0 1 3.70856 14.6647 -52.5813 63.2675 + neutron 0 1 2.66775 -11.4107 -49.2554 49.6374 + neutron 0 1 2.60666 48.2081 50.7919 1.10213 + neutron 0 1 2.40891 14.3843 -43.7945 -49.0672 + neutron 0 1 1.59174 -0.835615 21.5855 50.2691 + neutron 0 1 1.40131 12.7088 -49.1891 7.35768 + neutron 0 1 1.00894 -3.4648 -0.941776 43.4058 + gamma 0 0 0.520491 -0.169496 0.157646 0.466187 + gamma 0 0 0.463193 0.095267 -0.147963 -0.428461 + neutron 0 1 0.381701 4.80314 25.8533 5.09424 + neutron 0 1 0.188205 -18.0537 5.20213 -0.836303 + neutron 0 1 0.0500438 -2.2579 -7.77647 5.33571 + neutron 0 1 0.0296208 0.475408 -0.696268 7.41293 + Pt180[0.0] 78 180 0.588194 -279.937 -87.7857 333.296 +0 0 0.0339516 40 + proton 1 1 1000 0 0 1696.04 + proton 1 1 261.682 428.366 -26.4035 612.65 + proton 1 1 132.478 -163.793 443.138 207.247 + neutron 0 1 44.5716 -106.949 49.8172 267.997 + proton 1 1 44.1902 128.792 261.193 -8.27047 + proton 1 1 38.26 -263.756 -9.21724 60.0708 + proton 1 1 32.9993 -120.677 143.716 -166.722 + proton 1 1 27.4951 -191.181 120.901 34.4147 + neutron 0 1 25.834 -148.946 -155.44 53.5384 + neutron 0 1 19.9443 79.8794 168.348 56.1596 + proton 1 1 18.5738 -7.19846 -108.259 153.061 + neutron 0 1 16.7257 71.9121 149.51 64.692 + proton 1 1 15.2904 -8.2077 156.288 -66.586 + neutron 0 1 12.8184 149.115 -7.86549 -44.2096 + neutron 0 1 9.38015 -111.959 -67.0375 -26.1835 + neutron 0 1 7.7989 79.8418 -58.6526 -70.0083 + neutron 0 1 5.40217 44.6477 -80.5054 -41.3041 + neutron 0 1 5.07924 74.4152 -8.35629 -62.9516 + neutron 0 1 5.0577 -1.61403 -45.487 -86.3596 + neutron 0 1 4.68954 -15.8441 -73.936 -55.8273 + neutron 0 1 4.68922 14.053 60.2542 70.7502 + neutron 0 1 3.06255 72.1573 17.2272 16.1508 + neutron 0 1 2.74239 -35.3496 -59.7573 18.4469 + neutron 0 1 2.51903 -27.2787 53.6929 33.36 + neutron 0 1 2.18976 -59.5622 22.8075 7.19796 + neutron 0 1 2.15392 61.5723 -11.222 11.622 + neutron 0 1 1.96235 31.7033 -9.48832 50.9532 + neutron 0 1 1.80421 -4.30039 -33.9191 47.1657 + neutron 0 1 1.7571 20.435 -53.712 -1.52862 + neutron 0 1 1.65709 -4.06993 47.7748 28.5946 + neutron 0 1 1.53122 -44.3197 -23.3357 -19.2594 + gamma 0 0 1.5075 -0.853091 -0.809732 -0.94293 + gamma 0 0 1.33123 -0.728021 -0.205964 -1.09532 + neutron 0 1 0.960462 17.3845 38.0291 7.57118 + neutron 0 1 0.865187 -35.7397 -18.6682 0.849968 + proton 1 1 0.674929 14.4978 0.881423 -32.4966 + gamma 0 0 0.507936 -0.0176976 0.26508 -0.432918 + gamma 0 0 0.274053 0.251467 0.0837132 -0.0697248 + neutron 0 1 0.210451 18.3174 1.62916 -7.57148 + Lu164[0.0] 71 164 3.68381 45.003 -883.279 585.366 +0 0 0.00710382 22 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 407.493 545.526 -89.89 791.268 + neutron 0 1 142.015 -318.049 -186.874 388.532 + pi+ 1 0 88.368 149.283 -27.579 97.1078 + neutron 0 1 48.824 -211.182 35.7032 219.677 + neutron 0 1 11.1522 61.5288 111.287 70.0734 + proton 1 1 10.9515 -106.305 55.2932 -79.4536 + proton 1 1 7.03977 6.15625 114.898 4.52068 + neutron 0 1 5.60765 -34.9472 83.6371 48.5023 + neutron 0 1 5.45731 -71.058 -38.7741 -61.0909 + neutron 0 1 2.34117 11.2007 -4.09005 65.2891 + neutron 0 1 1.90875 -58.182 -13.3134 5.29595 + neutron 0 1 1.73956 23.181 31.4211 -41.7999 + neutron 0 1 1.73767 -45.0147 34.8254 -5.40373 + gamma 0 0 1.68529 -1.42082 -0.330134 0.844099 + neutron 0 1 0.881373 -3.93618 6.85662 39.931 + proton 1 1 0.602925 22.6277 17.7563 -17.4494 + neutron 0 1 0.219783 0.295113 13.2938 -15.37 + neutron 0 1 0.137378 -8.15622 -13.3331 3.72483 + neutron 0 1 0.0946799 -12.7795 1.64985 -3.44777 + neutron 0 1 0.0390478 -6.03063 -1.3592 5.92971 + Os180[0.0] 76 180 0.157022 57.2644 -131.079 179.356 +-0.00668242 0.00439657 0.0439361 20 + proton 1 1 999.961 -143.625 94.4955 1687.26 + proton 1 1 332.802 -635.824 -363.379 446.048 + proton 1 1 225.594 580.004 240.398 282.902 + pi0 0 0 114.164 56.3029 127.049 156.654 + proton 1 1 45.0085 -125.433 141.426 225.281 + proton 1 1 22.2064 -198.216 -43.0043 32.0215 + neutron 0 1 9.49273 104.796 -51.587 65.4588 + neutron 0 1 8.63635 82.5884 -97.3168 3.46555 + neutron 0 1 5.77261 27.7028 -73.2907 -68.861 + neutron 0 1 5.11775 3.5027 65.3881 -73.1796 + neutron 0 1 2.83381 36.1551 34.4508 53.283 + neutron 0 1 2.80691 24.4905 -14.5213 66.8714 + neutron 0 1 1.61472 29.2967 12.5109 44.9674 + gamma 0 0 1.24717 -1.14774 0.271676 0.405355 + neutron 0 1 1.17794 21.367 -41.7681 -3.70888 + gamma 0 0 1.15364 0.208842 -0.804499 0.800029 + neutron 0 1 0.797122 9.12023 -32.9929 18.0782 + gamma 0 0 0.737785 0.220237 0.550712 0.438792 + gamma 0 0 0.271 0.212352 0.162713 0.0432726 + Os185[0.0] 76 185 0.731751 -158.973 190.952 436.287 +0.000619809 0.000175288 0.0236265 10 + proton 1 1 1000 14.7618 4.17475 1695.97 + proton 1 1 938.157 -364.046 -61.9284 1582.49 + neutron 0 1 10.2467 -52.0122 58.2416 115.163 + neutron 0 1 7.15611 110.902 -25.6148 23.3056 + neutron 0 1 2.13954 58.3637 9.45069 -23.0088 + gamma 0 0 1.39156 -1.30282 -0.34376 0.347743 + gamma 0 0 0.738247 0.265107 0.675236 0.137054 + neutron 0 1 0.644526 -22.631 21.1596 15.8642 + neutron 0 1 0.59959 -5.635 -21.7582 24.9379 + Au192[0.0] 79 192 0.243492 290.858 24.2926 -43.2649 +0 0 -0.0443479 18 + proton 1 1 1000 0 0 1696.04 + proton 1 1 628.85 -645.799 -182.617 1060.71 + neutron 0 1 92.2842 318.96 -149.119 240.746 + neutron 0 1 70.0904 309.879 190.251 66.3419 + neutron 0 1 47.3664 -235.284 98.3312 161.937 + neutron 0 1 42.0981 234.818 157.643 29.8215 + proton 1 1 9.36833 -33.6416 27.3894 125.642 + neutron 0 1 4.57069 -40.1749 -16.2372 82.0496 + neutron 0 1 3.11738 45.7903 -53.1387 30.7767 + gamma 0 0 2.77163 2.46488 -1.26483 -0.0806126 + neutron 0 1 0.833636 -19.3506 27.001 21.5338 + gamma 0 0 0.682985 -0.4162 -0.524613 -0.134267 + neutron 0 1 0.423423 22.7798 -3.75905 -16.211 + neutron 0 1 0.293205 -10.7549 0.983358 20.8428 + neutron 0 1 0.0915328 8.09562 9.8123 3.1922 + neutron 0 1 0.0720192 10.6102 -2.56595 4.02223 + neutron 0 1 0.0446427 -3.40797 -8.29471 1.86415 + Pt184[0.0] 78 184 0.0841858 35.4291 -93.8904 -137.02 +0 0 -0.0268678 36 + proton 1 1 1000 0 0 1696.04 + pi0 0 0 291.83 -180.099 271.343 240.586 + proton 1 1 88.3379 -14.3499 123.081 397.767 + neutron 0 1 48.4048 142.929 -159.399 217.865 + proton 1 1 37.484 -138.215 228.192 23.8845 + neutron 0 1 22.4563 199.115 -55.1859 -3.2057 + neutron 0 1 22.2426 -145.124 -45.0073 -138.582 + neutron 0 1 19.1461 37.1285 -138.44 125.699 + neutron 0 1 17.5506 -118.699 118.727 -71.4304 + neutron 0 1 14.9951 57.822 -12.369 -157.817 + neutron 0 1 13.2132 -39.3317 -151.958 -19.1212 + neutron 0 1 12.4475 89.2704 121.676 27.7718 + neutron 0 1 10.4537 73.445 -45.0661 -111.032 + neutron 0 1 9.96907 -19.4791 131.82 -32.8129 + neutron 0 1 7.07992 -31.8242 -103.865 -39.4156 + neutron 0 1 6.03653 -77.2933 37.4217 63.2868 + proton 1 1 4.71914 -55.0176 -19.1516 -74.0556 + neutron 0 1 4.41397 -65.8505 60.8079 -16.7337 + neutron 0 1 4.26065 -34.2025 -76.8143 30.8903 + neutron 0 1 3.57999 47.1631 56.1508 36.9163 + gamma 0 0 2.99504 2.42733 -1.6405 0.622147 + gamma 0 0 2.46139 1.57499 -1.69408 -0.841389 + neutron 0 1 2.39725 21.9809 27.6405 -57.1255 + neutron 0 1 2.35556 64.7935 15.2868 -0.275461 + neutron 0 1 2.06963 -39.4539 42.2501 -23.4887 + gamma 0 0 1.73765 -1.48564 0.081812 0.897568 + gamma 0 0 1.41363 0.48991 0.260033 -1.30028 + neutron 0 1 1.35791 -39.9563 -14.341 -27.4111 + gamma 0 0 1.10255 -0.123264 -0.0266675 -1.09531 + gamma 0 0 1.05137 -0.239197 -0.494419 -0.896503 + neutron 0 1 0.891276 37.512 14.6473 -7.34361 + neutron 0 1 0.643685 -23.741 14.1309 -21.1345 + neutron 0 1 0.357958 -12.4039 14.1176 17.8777 + alpha 2 4 0.890463 20.3267 66.7378 42.0944 + triton 1 3 0.65084 27.0511 -38.2965 38.1941 + W166[0.0] 74 166 5.84409 213.863 -480.625 1236.81 +0 0 0.0151999 43 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 374.768 -331.993 -335.788 788.49 + proton 1 1 60.8703 131.621 -315.96 27.8609 + proton 1 1 59.2736 -264.664 -210.895 -14.8057 + neutron 0 1 43.4794 101.274 254.001 93.9207 + proton 1 1 25.1318 -15.9696 87.5615 199.676 + proton 1 1 24.3254 -134.422 3.05209 167.812 + neutron 0 1 15.376 72.3746 43.8491 -148.22 + proton 1 1 13.0865 -123.155 82.2481 52.8856 + proton 1 1 10.9138 47.2205 2.60223 135.509 + neutron 0 1 10.6386 73.1739 113.744 42.5723 + neutron 0 1 10.6307 58.2399 26.9471 -126.378 + neutron 0 1 9.64264 2.21444 -134.861 4.51882 + proton 1 1 7.72284 54.73 -76.9865 75.0307 + neutron 0 1 7.61703 -40.7585 112.554 -6.46612 + neutron 0 1 6.8017 -36.3657 100.249 -38.1472 + neutron 0 1 6.26743 2.84481 83.6536 69.3584 + gamma 0 0 6.02718 -0.503253 1.24567 5.87554 + proton 1 1 5.98736 27.7387 -99.7958 -23.2973 + neutron 0 1 4.26315 -88.7736 10.2819 6.5355 + neutron 0 1 4.23877 16.0593 -36.3681 80.0164 + neutron 0 1 3.24989 -8.59319 -8.48297 77.277 + proton 1 1 3.1385 -6.67725 -63.3802 42.869 + gamma 0 0 2.01872 -1.95985 -0.413334 0.251788 + neutron 0 1 2.00773 -7.66486 -50.3294 34.4242 + neutron 0 1 1.96219 -42.6126 -7.99918 42.5587 + neutron 0 1 1.87457 15.9947 -55.62 -13.2915 + gamma 0 0 1.84874 -1.77443 0.490157 -0.170279 + neutron 0 1 1.36963 39.8832 6.90526 -30.6142 + neutron 0 1 1.26137 -27.0499 -14.0885 -37.9695 + neutron 0 1 1.02547 -16.374 36.9664 -17.1297 + neutron 0 1 0.86971 21.913 30.5993 -14.7837 + neutron 0 1 0.786368 26.9579 -25.5246 10.0037 + neutron 0 1 0.736704 -24.4304 13.9947 -24.3354 + neutron 0 1 0.414518 23.1725 15.5454 0.694505 + neutron 0 1 0.4057 -27.3109 3.69587 -1.72727 + neutron 0 1 0.374944 -18.672 18.7021 2.50911 + neutron 0 1 0.328818 -20.5108 6.24137 -12.5838 + gamma 0 0 0.103308 -0.0954208 0.0307985 0.0248772 + neutron 0 1 0.0812819 5.92991 -10.5875 -2.34248 + neutron 0 1 0.0496072 1.42741 -2.99958 9.06565 + deuteron 1 2 5.83204 27.5205 143.283 -24.9771 + Yb160[0.0] 70 160 1.25184 490.041 251.635 263.537 +-0.00150879 0.00167725 0.0212584 33 + proton 1 1 999.994 -46.0604 51.2031 1694.63 + neutron 0 1 276.75 333.888 58.1783 694.1 + proton 1 1 123.037 -140.007 290.333 -376.997 + neutron 0 1 109.052 148.982 440.334 -26.9492 + neutron 0 1 94.2297 161.733 -130.406 377.87 + neutron 0 1 31.4362 34.9313 -180.387 -162.177 + neutron 0 1 24.6114 -104.583 -189.514 -0.749061 + neutron 0 1 19.149 181.615 -57.986 1.941 + neutron 0 1 10.4232 106.045 -91.6208 -7.4447 + neutron 0 1 9.42656 -30.8533 8.47043 129.534 + neutron 0 1 7.61566 -104.242 50.4056 -31.0124 + proton 1 1 6.13253 24.4822 38.662 -97.2185 + neutron 0 1 5.79676 -89.7393 52.5117 10.7631 + neutron 0 1 5.34175 15.2318 -6.6714 98.9438 + proton 1 1 5.18752 -77.935 55.8886 -23.7513 + neutron 0 1 3.93509 37.1859 68.4672 36.5991 + proton 1 1 3.4278 -4.98531 78.7576 -14.7159 + proton 1 1 3.13629 39.0392 -61.8593 -23.3361 + neutron 0 1 2.61865 -42.5403 -54.6764 -11.3342 + neutron 0 1 2.14793 -17.8963 -58.8872 -15.9024 + neutron 0 1 1.94088 44.24 -36.1758 19.6233 + neutron 0 1 1.78136 25.5064 -34.0718 39.2315 + neutron 0 1 1.30005 14.0297 21.3893 42.3122 + neutron 0 1 1.11585 9.42208 -35.5765 -27.2693 + neutron 0 1 1.08683 36.3932 3.32177 -26.6078 + neutron 0 1 0.506452 -30.2087 -5.97077 -1.93086 + neutron 0 1 0.246848 18.1953 -10.587 4.55691 + neutron 0 1 0.237655 2.4924 -9.16351 18.8801 + gamma 0 0 0.144984 0.0776904 -0.122063 -0.00922407 + neutron 0 1 0.0528968 -5.58854 -3.26552 7.58337 + alpha 2 4 7.4742 -65.9598 217.961 -62.5872 + deuteron 1 2 24.8918 273.991 110.857 81.4496 + Hf164[0.0] 72 164 6.60204 -839.006 -477.392 1041.23 +0 0 -0.0245185 27 + proton 1 1 1000 0 0 1696.04 + proton 1 1 370.78 477.4 -152.549 762.942 + proton 1 1 123.232 432.31 191.202 -151.609 + neutron 0 1 92.6613 -357.331 -193.927 -131.969 + proton 1 1 81.0195 96.8039 176.725 343.508 + neutron 0 1 56.596 183.642 -119.036 -248.315 + proton 1 1 35.3849 154.649 16.3923 208.49 + neutron 0 1 31.7302 34.6025 -228.42 85.2012 + neutron 0 1 17.931 -98.5961 145.746 -55.2559 + proton 1 1 10.4642 10.6562 -137.83 25.2033 + gamma 0 0 2.74946 0.0137597 0.75164 2.64469 + neutron 0 1 2.26951 7.62153 -39.0464 -51.8377 + neutron 0 1 2.17652 -63.08 -2.57269 10.44 + neutron 0 1 2.00714 52.8813 31.2847 0.738825 + neutron 0 1 1.2541 -32.0399 36.4782 0.992409 + neutron 0 1 0.91332 -30.1576 -10.5374 -26.3925 + neutron 0 1 0.791504 24.5458 18.1186 23.6048 + neutron 0 1 0.768878 -32.1876 -20.2329 0.0276634 + neutron 0 1 0.68903 7.71267 29.6908 -18.8208 + neutron 0 1 0.614803 4.15274 32.3932 9.43986 + gamma 0 0 0.582766 -0.149402 0.061499 0.559922 + neutron 0 1 0.533829 -1.52082 28.5944 13.5449 + neutron 0 1 0.381075 15.3656 21.5539 -3.94492 + neutron 0 1 0.231676 9.27014 1.0707 -18.6634 + neutron 0 1 0.0793129 -11.4858 2.41042 3.36348 + neutron 0 1 0.0147245 1.3552 -4.89647 -1.3629 + Re175[0.0] 75 175 5.06797 -886.437 176.576 913.513 +0 0 -0.0260088 32 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 203.496 -410.129 451.02 228.43 + proton 1 1 147.484 534.672 -54.7889 98.1668 + proton 1 1 105.655 -196.457 -408.913 60.1923 + neutron 0 1 65.3759 177.677 -295.889 -89.4677 + neutron 0 1 59.7242 105.834 -216.144 240.578 + neutron 0 1 54.8313 307.742 52.8908 -92.4071 + neutron 0 1 53.8396 223.784 41.9549 228.54 + neutron 0 1 21.0691 3.08139 73.8992 185.916 + neutron 0 1 11.8725 -86.783 82.8828 -89.7224 + neutron 0 1 10.3648 -79.5789 79.383 83.3651 + neutron 0 1 9.27135 -1.99885 129.323 27.9229 + neutron 0 1 7.40821 46.8126 41.2823 -100.4 + neutron 0 1 7.12203 85.1038 -70.5162 34.9106 + neutron 0 1 5.49397 -50.4888 88.3289 -1.72008 + neutron 0 1 5.04433 13.9654 2.39006 96.4555 + gamma 0 0 4.61501 0.348159 -4.28498 -1.67811 + neutron 0 1 4.37781 65.1989 37.263 51.051 + proton 1 1 2.27427 -41.6878 41.5199 -28.481 + neutron 0 1 2.1462 -38.6433 -35.0292 -36.2937 + proton 1 1 2.09106 35.6354 -51.5143 2.17576 + neutron 0 1 2.06512 41.7858 33.8298 31.534 + neutron 0 1 0.912959 -23.0285 24.5975 24.105 + neutron 0 1 0.662101 -10.3759 -30.1618 -15.0738 + neutron 0 1 0.518271 8.2136 -5.52139 29.601 + neutron 0 1 0.380056 -8.59498 14.3491 20.8459 + gamma 0 0 0.252124 0.127577 0.0908151 -0.197594 + gamma 0 0 0.158927 -0.140246 -0.0661582 0.0348127 + alpha 2 4 4.00071 166.675 35.2578 28.5845 + triton 1 3 12.414 -215.42 -17.5155 152.281 + deuteron 1 2 0.420041 22.4184 -6.75547 32.0566 + Hf165[0.0] 72 165 2.28672 -675.762 -33.1652 494.741 +0 0 -0.034343 30 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 318.999 481.545 -157.996 666.598 + neutron 0 1 148.514 93.9058 -220.971 -493.445 + neutron 0 1 91.0897 -11.523 -368.271 -209.071 + neutron 0 1 82.2267 225.198 293.458 -156.346 + proton 1 1 79.4967 -136.596 311.318 199.803 + neutron 0 1 19.8994 -79.6692 155.978 -84.3394 + neutron 0 1 12.8888 23.1755 81.6053 131.108 + neutron 0 1 9.10173 -58.0041 90.862 -74.6043 + neutron 0 1 8.12453 -80.8828 48.57 80.1998 + proton 1 1 6.29907 23.2943 51.4448 93.1181 + neutron 0 1 5.014 21.2529 93.4035 -16.4683 + neutron 0 1 3.98959 -38.8604 -64.8391 42.4105 + neutron 0 1 3.64662 -44.1087 -22.8624 -66.3138 + neutron 0 1 3.12728 34.2921 50.6324 46.3331 + neutron 0 1 2.82029 -17.7991 17.6319 68.4103 + neutron 0 1 2.47971 26.4061 59.0222 22.0214 + neutron 0 1 2.11609 10.2315 -42.8706 -45.1478 + neutron 0 1 2.07831 -50.246 2.3779 -37.1406 + gamma 0 0 1.94905 -0.131047 1.70386 -0.937271 + proton 1 1 1.79916 5.0356 55.3514 17.0382 + neutron 0 1 1.21685 -43.3415 -16.4284 -11.8208 + neutron 0 1 0.864418 17.4008 -34.0685 12.7142 + gamma 0 0 0.761128 0.238575 -0.249003 0.678524 + gamma 0 0 0.672759 0.133738 -0.514013 0.412927 + neutron 0 1 0.366038 -1.63358 -23.8244 10.8489 + neutron 0 1 0.25925 6.11883 6.12009 20.3061 + neutron 0 1 0.232115 8.20221 -1.21121 19.1699 + gamma 0 0 0.119324 0.105953 -0.0375088 -0.0400632 + Ir174[0.0] 77 174 7.52363 -413.745 -365.34 1460.55 +0 0 -0.0424028 28 + proton 1 1 1000 0 0 1696.04 + proton 1 1 361.467 65.3551 416.86 794.306 + proton 1 1 127.991 -470.538 -161.421 95.3928 + neutron 0 1 75.208 196.8 -266.889 -192.411 + proton 1 1 68.3426 -340.489 130.316 -1.89457 + neutron 0 1 39.9054 270.168 -19.4268 -56.6722 + neutron 0 1 26.1061 11.5585 -179.765 131.488 + neutron 0 1 25.4144 -43.8798 -63.9171 205.893 + neutron 0 1 22.9047 -55.8715 -154.069 129.254 + neutron 0 1 15.2426 109.285 -126.652 -29.854 + neutron 0 1 9.10091 -101.402 -82.8605 -6.03749 + neutron 0 1 7.93276 -92.9704 -76.6678 -21.1704 + neutron 0 1 7.78053 -57.8825 53.5037 92.0224 + neutron 0 1 7.66901 42.1609 -111.364 -17.043 + neutron 0 1 4.79021 66.2718 13.9582 -66.6152 + neutron 0 1 2.86558 55.2376 47.4053 9.7241 + neutron 0 1 2.7727 71.7448 7.21277 4.31447 + gamma 0 0 2.28801 -1.05725 -1.85726 0.817181 + neutron 0 1 1.94192 34.1094 49.6452 4.97873 + neutron 0 1 1.79707 53.4832 -21.4309 7.77276 + neutron 0 1 1.66568 -43.6305 32.5049 13.1382 + gamma 0 0 1.60811 -1.09041 -0.875842 -0.793677 + gamma 0 0 1.15084 -0.903048 0.318022 0.638596 + neutron 0 1 0.801943 28.7637 -7.88676 -24.8606 + neutron 0 1 0.300005 4.82153 1.15875 23.2217 + neutron 0 1 0.229505 -5.39711 -11.2955 16.5712 + triton 1 3 5.70875 -67.8121 142.162 -85.4327 + Os173[0.0] 76 173 2.09754 273.159 391.347 669.289 +0 0 0.0375754 12 + proton 1 1 1000 0 0 1696.04 + proton 1 1 568.495 431.754 -417.45 1014.55 + proton 1 1 402.414 -318.326 464.336 774.691 + gamma 0 0 2.02903 -0.0800697 -1.18501 -1.64509 + neutron 0 1 1.61851 35.8294 -41.7759 -3.87955 + gamma 0 0 1.14165 -0.853488 -0.562287 -0.508685 + neutron 0 1 1.10831 -24.1095 26.8544 27.9547 + gamma 0 0 1.03671 -0.619002 -0.540284 0.63222 + gamma 0 0 0.975895 -0.435356 0.389106 -0.781942 + gamma 0 0 0.96257 0.330035 0.64596 0.632734 + gamma 0 0 0.189612 -0.0124063 -0.033389 -0.186237 + Pt194[0.0] 78 194 0.0816841 -123.478 -30.6785 -115.422 +0 0 -0.0241656 42 + proton 1 1 1000 0 0 1696.04 + proton 1 1 205.682 -323.602 245.684 513.028 + neutron 0 1 205.528 -460.093 -121.7 -449.399 + proton 1 1 112.35 68.6716 244.192 398.883 + proton 1 1 86.3141 105.563 -19.6822 397.356 + proton 1 1 25.6845 -60.6915 -186.877 101.248 + proton 1 1 24.7708 56.9021 15.312 208.866 + neutron 0 1 22.8759 36.0793 156.939 132.584 + neutron 0 1 21.6207 -89.2319 -170.056 64.9152 + proton 1 1 10.1707 117.938 27.0282 67.4493 + neutron 0 1 8.08188 -69.0974 -46.4995 -91.1897 + neutron 0 1 6.68616 4.66719 72.2409 85.8391 + neutron 0 1 6.40228 -92.0495 56.5719 -19.9561 + neutron 0 1 4.94512 25.6564 -90.6617 -20.9568 + neutron 0 1 3.82492 10.7636 7.92996 83.8058 + gamma 0 0 3.67128 3.04776 2.04109 0.152976 + neutron 0 1 3.59303 76.1658 -3.78344 30.8081 + neutron 0 1 3.48654 0.000436851 -80.889 4.56098 + neutron 0 1 2.71109 -64.7001 -25.9055 -15.6411 + neutron 0 1 2.62064 -38.16 -44.9268 -38.1679 + neutron 0 1 2.51975 16.7399 19.894 -63.7596 + neutron 0 1 2.28967 -44.6132 -24.8941 -41.204 + gamma 0 0 1.46692 0.132048 -0.674066 -1.29617 + neutron 0 1 1.22351 14.8516 36.3999 -27.4793 + neutron 0 1 1.20969 15.5616 41.8482 16.769 + neutron 0 1 0.979603 -26.0991 9.56932 -32.696 + gamma 0 0 0.815514 0.031978 -0.170253 -0.796903 + gamma 0 0 0.805653 -0.225648 -0.244291 0.733813 + gamma 0 0 0.788566 -0.0488781 0.167046 -0.769118 + neutron 0 1 0.67718 -9.54208 -11.3761 32.4423 + proton 1 1 0.663891 30.7228 -17.1065 3.12117 + neutron 0 1 0.614697 18.9376 -28.2281 -0.128743 + neutron 0 1 0.519572 -18.1179 -20.0228 15.7304 + neutron 0 1 0.432435 20.2671 19.4533 -4.85836 + gamma 0 0 0.415529 -0.243576 0.286203 0.177267 + neutron 0 1 0.111741 -14.275 0.717289 -2.38722 + neutron 0 1 0.0985224 7.04205 -7.89879 8.55364 + neutron 0 1 0.00781862 1.92129 -3.31541 -0.0946903 + alpha 2 4 5.43159 161.132 26.9797 117.6 + alpha 2 4 5.61963 156.609 104.807 80.089 + alpha 2 4 2.26586 -25.1415 60.7842 -112.116 + Ho155[0.0] 67 155 0.947936 386.532 -243.931 254.226 +0 0 0.0172698 26 + proton 1 1 1000 0 0 1696.04 + proton 1 1 365.705 -671.642 -19.5973 607.053 + neutron 0 1 145.098 104.79 57.5602 528.599 + neutron 0 1 112.903 200.376 -358.646 -236.918 + neutron 0 1 104.797 -89.2479 177.372 410.466 + proton 1 1 38.5143 9.88655 83.4425 258.257 + neutron 0 1 26.2758 137.605 -71.3456 -161.372 + neutron 0 1 11.9843 -32.1061 -1.06014 147.078 + neutron 0 1 9.02972 -58.0892 94.6063 68.7376 + neutron 0 1 7.82982 -59.4816 61.6194 -86.2529 + neutron 0 1 7.0216 94.7119 43.2546 -49.0155 + gamma 0 0 3.34972 0.217454 2.29814 -2.42733 + neutron 0 1 2.43013 49.6038 6.19177 45.5365 + neutron 0 1 2.40774 11.0613 -25.261 -61.3985 + gamma 0 0 2.11089 1.01574 -1.3272 -1.28944 + gamma 0 0 1.94887 -1.61243 0.984057 0.479374 + neutron 0 1 1.93607 48.4491 -19.5032 -30.2357 + neutron 0 1 1.79545 -38.0019 34.3127 27.4883 + neutron 0 1 1.54162 -28.7355 40.9721 19.8707 + neutron 0 1 0.963324 -15.9767 25.0775 30.4467 + neutron 0 1 0.884703 -20.0975 -34.6879 -7.48957 + neutron 0 1 0.71139 10.2531 12.5242 32.792 + gamma 0 0 0.124852 -8.77343e-05 -0.00753198 -0.124625 + neutron 0 1 0.0731471 0.841546 -7.86283 -8.65599 + neutron 0 1 0.011888 -2.5944 2.12732 3.32908 + Pt178[0.0] 78 178 0.477299 348.775 -103.046 161.084 +0 0 0.031297 27 + proton 1 1 1000 0 0 1696.04 + proton 1 1 140.971 178.453 -277.119 419.25 + proton 1 1 133.961 -147.879 362.677 -340.481 + neutron 0 1 133.815 473.724 -82.8891 -195.134 + neutron 0 1 132.645 -285.734 -2.53862 430.352 + proton 1 1 105.367 336.02 170.614 258.477 + neutron 0 1 69.3741 29.8241 -66.9198 360.289 + proton 1 1 47.3076 -88.1721 -120.299 262.234 + proton 1 1 26.4819 91.7179 -93.39 182.378 + neutron 0 1 11.5316 135.678 -45.324 36.6001 + neutron 0 1 10.142 -64.8243 107.781 -57.8115 + neutron 0 1 9.65135 -111.801 -67.4188 34.4182 + neutron 0 1 7.01511 -59.8289 -94.5471 26.6997 + neutron 0 1 5.79911 56.2579 -29.6029 83.0039 + neutron 0 1 5.65012 3.24421 14.0342 102.185 + neutron 0 1 3.94102 -82.5898 -18.6087 -15.9335 + gamma 0 0 3.44662 -0.822866 0.865727 3.23305 + neutron 0 1 2.28498 -18.9718 46.4731 42.1821 + gamma 0 0 1.90783 0.651463 -1.08472 -1.42786 + gamma 0 0 1.82515 -0.0910014 1.17551 -1.39322 + neutron 0 1 1.52095 48.7824 21.9238 -0.0146152 + neutron 0 1 1.34697 35.6809 35.1826 -4.69047 + neutron 0 1 0.671927 -7.9795 24.259 -24.7168 + gamma 0 0 0.179345 0.052531 0.0621588 0.159817 + neutron 0 1 0.155487 8.49028 14.4267 -3.46261 + neutron 0 1 0.029671 -0.429553 -3.5615 6.54888 + Re177[0.0] 75 177 0.909543 -529.454 103.83 93.0928 +0.000142025 -0.0011493 0.0268 29 + proton 1 1 999.992 25.4807 -17.7094 1695.75 + neutron 0 1 263.199 393.653 257.056 585.507 + proton 1 1 135.251 28.1535 293.306 430.438 + neutron 0 1 105.597 -375.574 -189.088 181.027 + proton 1 1 85.0642 -251.747 -96.2459 306.958 + proton 1 1 63.6042 -142.621 -296.678 -122.651 + proton 1 1 61.3587 298.121 112.018 132.223 + neutron 0 1 24.4968 -142.509 -76.7945 142.922 + proton 1 1 13.4961 85.4757 -80.3652 108.368 + proton 1 1 12.0957 12.8511 -125.429 83.3477 + neutron 0 1 11.8677 -102.567 -101.995 -38.9735 + proton 1 1 11.559 -78.9034 -87.6922 88.9326 + neutron 0 1 10.157 125.518 -41.6673 41.2133 + neutron 0 1 9.0762 32.4442 49.0368 116.964 + neutron 0 1 4.02274 59.1988 0.82755 63.7986 + neutron 0 1 3.76527 -79.8256 -20.8197 16.8534 + neutron 0 1 3.39591 -51.6593 49.3624 35.8828 + neutron 0 1 2.92498 47.2842 50.5371 -26.743 + neutron 0 1 2.51735 -53.6834 -21.1048 -37.5426 + neutron 0 1 1.83681 -14.9872 -53.5135 19.1485 + gamma 0 0 1.8079 -0.979861 1.3378 0.720195 + neutron 0 1 1.50706 -7.11647 35.1099 39.3813 + neutron 0 1 1.26703 0.635486 -30.6098 -38.0152 + neutron 0 1 0.829978 -28.3481 22.6055 15.6748 + neutron 0 1 0.481703 -5.95145 28.7007 -6.8018 + gamma 0 0 0.47674 0.429392 -0.191408 -0.0791657 + neutron 0 1 0.44937 15.9308 11.8133 -21.2434 + neutron 0 1 0.0873812 6.6832 -7.0915 -8.32188 + Ta173[0.0] 73 173 1.01208 255.575 299.865 -413.245 +0 0 -0.0489119 8 + proton 1 1 1000 0 0 1696.04 + pi0 0 0 467.139 260.574 -63.566 521.905 + proton 1 1 270.823 37.1376 30.5996 761.079 + neutron 0 1 110.511 -224.912 25.8399 410.639 + gamma 0 0 1.01642 -0.330701 0.931723 -0.235863 + gamma 0 0 0.409352 -0.0616194 -0.331692 0.231847 + neutron 0 1 0.256063 9.37775 8.42898 -17.9514 + Au195[0.0] 79 195 0.019572 -81.7855 -1.90233 20.3677 +-0.00154522 0.000579003 0.0180445 15 + proton 1 1 999.988 -87.493 32.7841 1693.45 + pi0 0 0 484.393 -208.382 129.042 552.562 + neutron 0 1 141.507 -85.566 -88.9422 520.29 + pi- -1 0 16.7475 12.1902 66.7308 18.8085 + neutron 0 1 6.87185 -4.27784 -75.145 -85.4123 + neutron 0 1 2.60028 -62.9752 25.8807 -16.0417 + neutron 0 1 2.20957 -26.2472 20.9331 55.044 + gamma 0 0 1.79055 1.52795 -0.451272 -0.8172 + neutron 0 1 1.75574 30.2565 9.90907 -47.8405 + neutron 0 1 1.38158 13.629 -32.4953 -36.829 + neutron 0 1 0.816302 -25.8553 22.2149 19.303 + neutron 0 1 0.58177 -13.2976 25.2155 -16.7605 + gamma 0 0 0.412918 -0.266554 0.302786 0.0881526 + gamma 0 0 0.168416 -0.0766106 0.0886412 -0.120985 + Tl190[0.0] 81 190 1.74946 281.85 -70.5004 731.174 +-0.000470108 -0.000395645 0.0290492 24 + proton 1 1 999.996 -29.5816 -27.6474 1695.55 + proton 1 1 213.847 -202.175 260.969 581.416 + proton 1 1 153.177 432.988 -302.049 -179.428 + proton 1 1 149.001 42.2728 150.907 -526.543 + proton 1 1 96.0254 -293.885 -308.592 88.4268 + proton 1 1 78.5851 266.874 155.544 241.306 + proton 1 1 54.9273 -98.1712 -290.532 -109.747 + neutron 0 1 48.67 193.998 -179.647 154.654 + proton 1 1 13.6749 126.949 -3.50406 -98.591 + neutron 0 1 13.3463 -34.9908 47.9996 -147.408 + neutron 0 1 12.8204 -34.4771 25.7844 149.673 + neutron 0 1 5.64054 26.7068 -21.9917 -97.13 + neutron 0 1 5.12456 -73.78 -30.1199 -57.4916 + neutron 0 1 5.04705 -68.8806 57.5201 38.1634 + neutron 0 1 4.42306 -46.9498 -77.9449 -7.16791 + neutron 0 1 2.45151 38.2635 -55.5625 7.83725 + neutron 0 1 1.6931 26.9592 33.8569 -36.2123 + gamma 0 0 1.16717 0.414747 -1.08421 -0.121527 + neutron 0 1 0.870743 30.4268 12.1541 -23.7379 + gamma 0 0 0.307657 -0.110496 0.287106 0.00375806 + neutron 0 1 0.267538 16.0047 13.0253 8.77509 + neutron 0 1 0.258569 9.02 19.8184 3.43824 + neutron 0 1 0.0848137 3.77072 -0.692918 12.0285 + Ta178[0.0] 73 178 9.76843 -390.809 466.207 1693.41 +0 0 -0.0119843 36 + proton 1 1 1000 0 0 1696.04 + proton 1 1 228.216 -233.884 347.547 552.132 + neutron 0 1 181.334 335.295 -498.412 113.116 + proton 1 1 99.026 -13.6667 401.786 -184.428 + neutron 0 1 82.4216 216.427 -337.403 -31.5137 + proton 1 1 67.9246 59.7768 -298.171 198.993 + neutron 0 1 18.1502 -7.81074 79.3618 167.561 + proton 1 1 15.917 -93.1855 -45.6677 139.116 + neutron 0 1 12.8441 139.873 9.5358 68.156 + neutron 0 1 9.45156 8.6071 58.0623 120.02 + neutron 0 1 9.14737 -112.722 -62.2903 -26.2006 + neutron 0 1 9.11023 55.8232 -90.1092 77.2426 + neutron 0 1 7.62114 93.1068 37.7156 65.4818 + proton 1 1 4.57831 -22.6117 -32.7462 83.8378 + proton 1 1 4.2015 -40.5655 78.715 -7.76768 + neutron 0 1 4.0743 -4.77773 79.998 35.3587 + gamma 0 0 3.35223 2.95899 0.32206 -1.54212 + neutron 0 1 2.7974 14.1688 37.0505 60.7536 + neutron 0 1 2.48792 -40.6455 -3.73727 54.9116 + neutron 0 1 2.26812 -41.3401 46.2814 20.4024 + neutron 0 1 1.89871 55.2967 22.1276 -4.91699 + neutron 0 1 1.70687 20.1711 -51.2414 -13.3337 + neutron 0 1 1.4346 -33.015 -2.96369 39.9886 + neutron 0 1 1.36778 31.8323 19.8025 -34.1567 + neutron 0 1 1.11727 24.7718 30.6935 23.3456 + neutron 0 1 0.86923 1.03452 -18.174 36.0941 + neutron 0 1 0.828217 -8.84424 28.3314 -26.0024 + gamma 0 0 0.791958 -0.158103 -0.529615 0.567194 + neutron 0 1 0.451291 -15.3612 -24.4034 -4.09196 + gamma 0 0 0.430298 0.0534224 0.0942639 0.416433 + neutron 0 1 0.136202 15.2407 0.545778 -4.83559 + neutron 0 1 0.0861392 -10.2373 7.2638 2.07609 + neutron 0 1 0.046095 -0.929142 0.671017 9.23618 + deuteron 1 2 8.15658 -86.3567 36.1062 -147.995 + alpha 2 4 1.94699 24.1972 34.3416 112.931 + Lu163[0.0] 71 163 0.537087 -332.526 109.497 201.085 +2.65355e-05 -3.76888e-06 0.0322844 37 + proton 1 1 999.998 37.6067 -5.34134 1695.61 + pi+ 1 0 237.515 181.085 -199.633 223.76 + neutron 0 1 185.841 207.003 14.3693 583.695 + neutron 0 1 31.9628 -139.883 199.565 41.1137 + neutron 0 1 19.5252 179.85 26.2662 63.5274 + neutron 0 1 19.1356 -159.334 -16.3211 -103.299 + neutron 0 1 16.8256 -1.27361 -156.539 85.9921 + proton 1 1 14.3118 -19.7911 -21.4026 161.901 + neutron 0 1 12.7294 -33.5098 -28.6934 -148.782 + neutron 0 1 12.0282 -81.4142 126.744 -7.40599 + neutron 0 1 10.5185 -91.3888 74.5638 -77.2306 + proton 1 1 10.5161 58.3416 128.11 5.33907 + neutron 0 1 8.98334 -105.821 -63.312 -41.8938 + neutron 0 1 7.97358 12.4805 70.3499 -99.7102 + neutron 0 1 7.88735 78.0221 -10.8349 93.1597 + neutron 0 1 4.85613 62.2204 -70.1569 -18.8555 + neutron 0 1 4.66851 -71.7439 38.7587 46.3155 + proton 1 1 4.37827 -39.7329 73.7864 -34.8147 + neutron 0 1 3.72032 75.8858 35.0293 -4.37013 + neutron 0 1 3.46243 -9.03056 24.9625 76.2475 + neutron 0 1 2.917 -2.83063 -27.0961 -68.9038 + neutron 0 1 2.77287 34.6373 57.2149 27.2945 + neutron 0 1 2.42 -2.29212 41.3137 -53.3037 + proton 1 1 1.97755 21.1922 -16.1528 54.8166 + neutron 0 1 1.95359 -0.695163 48.6388 -36.1754 + proton 1 1 1.34597 6.88321 -49.5475 -5.02549 + neutron 0 1 1.18361 -17.7943 -25.3477 -35.5868 + neutron 0 1 1.13717 -14.1454 -14.3091 41.6335 + neutron 0 1 0.540587 -11.4588 -27.5884 11.1222 + neutron 0 1 0.474873 21.9075 18.0253 9.36608 + neutron 0 1 0.112139 -4.45042 12.2041 6.48012 + neutron 0 1 0.0994244 9.24451 -9.93207 -1.65361 + neutron 0 1 0.0936509 6.68644 6.25972 9.5968 + gamma 0 0 0.0778019 0.0457064 0.0480301 0.0407085 + alpha 2 4 0.931055 -67.6165 20.3745 44.211 + alpha 2 4 4.2917 -145.557 -79.8076 66.7543 + Yb159[0.0] 70 159 2.23389 101.885 -205.254 780.257 +0 0 -0.0317042 20 + proton 1 1 1000 0 0 1696.04 + proton 1 1 516.93 615.417 145.543 915.061 + proton 1 1 91.6815 175.673 -366.411 -123.821 + neutron 0 1 73.3962 230.316 -187.154 -235.023 + pi0 0 0 40.7772 -99.8853 -48.0221 -19.6856 + neutron 0 1 15.6083 -154.366 8.11358 -75.3589 + neutron 0 1 10.882 -44.7109 72.489 -115.384 + neutron 0 1 3.81142 58.8578 52.2437 31.3535 + gamma 0 0 3.17307 -2.44521 -1.10491 -1.69367 + neutron 0 1 2.22552 -54.9565 23.254 25.0205 + neutron 0 1 2.17566 -16.9263 -9.41302 60.9752 + gamma 0 0 2.01846 0.26359 1.26091 -1.55396 + neutron 0 1 1.79177 12.8124 -36.2829 43.4692 + neutron 0 1 1.27899 15.5317 -17.6186 -43.0509 + neutron 0 1 1.11401 -13.3771 1.69394 43.7355 + neutron 0 1 0.809199 -16.4431 2.33183 -35.2907 + neutron 0 1 0.617901 -2.52277 -21.0727 -26.666 + gamma 0 0 0.501526 -0.0686055 -0.341818 0.360531 + gamma 0 0 0.292774 -0.0522798 -0.192647 -0.214174 + Pt185[0.0] 78 185 6.41884 -703.119 380.686 1253.81 +0 0 -0.0118597 34 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 163.521 531.777 -200.472 105.072 + proton 1 1 127.844 25.1402 -57.2132 -502.338 + neutron 0 1 110.422 -201.726 330.782 263.78 + proton 1 1 89.2349 -24.4888 72.1824 411.833 + neutron 0 1 86.5181 208.999 -351.822 -51.0352 + proton 1 1 67.1559 169.899 15.5013 318.473 + proton 1 1 47.7434 215.034 50.9056 207.464 + neutron 0 1 18.3792 -163.621 0.60485 -90.0145 + neutron 0 1 10.9969 -4.0089 81.1939 119.067 + neutron 0 1 8.14286 -62.4714 -99.5561 39.4172 + neutron 0 1 7.60821 45.7991 81.1176 -75.3464 + proton 1 1 7.43393 112.058 31.1251 21.9014 + neutron 0 1 5.7377 22.8278 -76.7065 -66.4065 + neutron 0 1 4.83151 48.8095 -8.79455 81.5026 + neutron 0 1 3.68866 -81.2889 -11.065 14.6545 + neutron 0 1 3.08614 -38.8572 -24.1741 60.9469 + neutron 0 1 2.95166 2.72972 73.8815 -9.45166 + gamma 0 0 2.27003 -2.14852 -0.0554348 0.730631 + neutron 0 1 2.16399 -57.8841 25.9843 6.73419 + neutron 0 1 2.07063 11.1682 -18.8523 58.4392 + gamma 0 0 0.905248 0.703879 0.464288 0.32934 + neutron 0 1 0.657767 -11.1605 32.7682 6.1766 + neutron 0 1 0.538617 -4.52409 0.201536 31.4947 + gamma 0 0 0.47496 0.166478 0.0518592 0.441795 + gamma 0 0 0.234072 -0.189247 -0.101997 -0.092583 + neutron 0 1 0.150952 -3.51866 3.96686 -15.9864 + neutron 0 1 0.0944737 1.89085 -0.255027 -13.187 + neutron 0 1 0.0790516 11.4125 -3.66184 -2.21365 + alpha 2 4 11.2632 91.9608 -110.529 251.831 + alpha 2 4 9.20651 103.089 230.752 -69.5992 + deuteron 1 2 17.8623 74.8655 68.7717 238.726 + deuteron 1 2 0.0805064 11.7665 0.630918 12.7732 + Tm162[0.0] 69 162 3.9921 -1034.21 -137.626 339.921 +1.78988e-05 -9.4892e-05 -0.0121485 33 + proton 1 1 999.999 4.5966 -24.3693 1695.86 + neutron 0 1 365.273 -248.93 415.762 764.851 + neutron 0 1 120.889 -174.419 67.0935 454.815 + neutron 0 1 47.6945 -74.6097 -275.046 103.356 + pi- -1 0 26.373 -71.2192 -54.6117 1.63605 + proton 1 1 19.0359 51.6039 69.2949 169.172 + neutron 0 1 16.7543 174.697 31.4761 -15.9498 + proton 1 1 10.3834 91.7367 -105.502 6.81437 + neutron 0 1 8.92901 39.5804 31.1057 -119.684 + neutron 0 1 8.12406 -81.7901 -31.8006 87.3572 + proton 1 1 8.12385 -44.5069 -41.2628 107.83 + neutron 0 1 6.76456 -66.8579 66.6792 -61.9773 + neutron 0 1 6.02069 71.2133 -29.6492 -73.4813 + neutron 0 1 4.51727 39.5911 34.896 -75.6556 + neutron 0 1 4.18527 34.5608 64.4852 50.2932 + proton 1 1 3.74449 30.6424 70.327 -33.9984 + neutron 0 1 3.52451 12.9741 78.8562 -15.7737 + neutron 0 1 3.16352 71.5788 26.2453 -11.9303 + neutron 0 1 2.81456 -36.9322 37.0591 50.5913 + gamma 0 0 2.58851 2.39063 0.826269 0.550051 + neutron 0 1 2.50494 55.98 36.4062 15.9443 + gamma 0 0 1.25049 -1.24398 -0.125916 -0.0196296 + neutron 0 1 0.918028 1.65758 -41.0994 5.83321 + gamma 0 0 0.810011 -0.164765 -0.724711 0.322124 + neutron 0 1 0.802585 -2.37438 30.765 -23.5941 + gamma 0 0 0.75222 -0.509368 -0.433318 -0.344405 + neutron 0 1 0.69738 29.7944 13.2437 -15.7434 + neutron 0 1 0.634209 -23.9758 -5.96859 -24.1185 + gamma 0 0 0.350274 -0.0100621 0.349502 -0.0209456 + neutron 0 1 0.318955 -15.1959 -4.3758 18.6922 + neutron 0 1 0.13225 8.28777 12.0005 5.98623 + gamma 0 0 0.0624654 -0.0279216 -0.00913505 -0.0551259 + Ir174[0.0] 77 174 1.21388 131.077 -520.637 324.159 +0 0 -0.031459 40 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 129.716 464.699 -47.2408 205.921 + proton 1 1 106.693 1.12815 -195.718 -416.282 + proton 1 1 95.6383 270.043 -71.9327 332.443 + proton 1 1 89.0055 -281.616 296.046 89.4092 + neutron 0 1 48.2201 273.817 44.0767 -126.565 + proton 1 1 27.8683 -112.885 195.003 -47.9964 + proton 1 1 26.6507 220.545 -45.5759 2.0791 + proton 1 1 21.8832 -44.1094 -187.149 67.6266 + neutron 0 1 15.5105 135.753 30.5583 100.122 + neutron 0 1 14.2444 157.28 39.6595 -25.6933 + neutron 0 1 13.7882 -138.377 -9.21456 82.8671 + neutron 0 1 13.3956 23.996 -155.885 -21.8053 + neutron 0 1 11.7937 -41.0722 -5.07578 -143.486 + proton 1 1 11.5507 -9.79291 -146.186 18.5129 + neutron 0 1 9.43153 121.355 33.281 44.4666 + neutron 0 1 9.32746 35.9666 -38.4197 121.839 + neutron 0 1 8.87966 -33.9687 120.963 -31.2893 + neutron 0 1 7.14418 -46.4063 -57.0532 -89.818 + neutron 0 1 6.71152 -105.559 37.0971 11.7496 + neutron 0 1 6.44417 47.5671 64.433 75.7412 + neutron 0 1 5.76391 65.938 -78.6867 18.0266 + neutron 0 1 5.72945 56.4622 -87.2314 1.38045 + neutron 0 1 3.60119 4.66457 -40.9293 71.2959 + proton 1 1 3.54876 34.6311 65.8312 33.7482 + neutron 0 1 3.03856 -38.2148 -62.1205 19.9941 + neutron 0 1 2.64606 59.4671 37.7262 4.43724 + neutron 0 1 1.87277 -36.9929 -36.2667 -28.9645 + neutron 0 1 1.80762 -28.1324 18.5916 -47.5705 + neutron 0 1 1.14329 22.1366 33.8912 22.6068 + neutron 0 1 1.10271 9.37945 -23.7452 -37.7033 + neutron 0 1 0.675933 7.66698 5.84368 -34.3175 + neutron 0 1 0.391543 -19.4319 -12.8737 13.8774 + neutron 0 1 0.252492 -19.2381 4.19738 9.31696 + neutron 0 1 0.159154 17.075 2.68295 0.586118 + gamma 0 0 0.13845 0.00052307 -0.0143693 -0.137701 + neutron 0 1 0.0982305 -4.65744 -8.34814 9.65476 + deuteron 1 2 8.38135 -135.453 -102.587 51.3718 + triton 1 3 3.20876 71.2046 -104.172 -46.0097 + Yb158[0.0] 70 158 10.754 -1004.87 486.538 1384.6 +-5.99576e-05 0.000269894 -0.0242535 34 + proton 1 1 1000 -4.22127 19.0017 1695.93 + neutron 0 1 184.998 -395.332 73.6779 469.195 + proton 1 1 147.35 235.264 4.21866 492.802 + proton 1 1 140.017 80.3826 -450.916 269.379 + proton 1 1 103.063 -196.912 -368.776 171.038 + proton 1 1 89.1053 -82.1308 328.233 246.308 + neutron 0 1 51.6317 -246.774 170.157 -99.1863 + neutron 0 1 15.097 122.192 13.8707 -116.077 + neutron 0 1 10.2763 -113.862 55.9392 -57.6398 + neutron 0 1 9.40034 3.80316 48.3621 -124.095 + proton 1 1 3.33847 16.1935 -37.2926 -67.9924 + neutron 0 1 3.19537 25.2823 72.8437 8.32656 + neutron 0 1 2.73224 0.926659 67.5156 -24.1349 + neutron 0 1 2.51884 -21.5555 -44.1017 -48.2699 + proton 1 1 2.17733 -38.2342 47.3511 19.6629 + neutron 0 1 2.08427 45.1456 41.8 11.6449 + neutron 0 1 1.7004 -32.8737 9.71357 -44.9793 + neutron 0 1 1.51248 -36.5736 16.1728 -35.2882 + neutron 0 1 1.48113 49.0311 -13.5911 -14.0239 + neutron 0 1 1.47778 0.807009 40.2695 34.0125 + neutron 0 1 1.13842 40.9915 14.7274 -15.5993 + neutron 0 1 1.00194 -15.443 -25.139 31.8327 + gamma 0 0 0.901714 0.29811 -0.102801 -0.844779 + neutron 0 1 0.841211 16.0585 -33.7857 13.4947 + neutron 0 1 0.820586 -20.1927 25.3569 -22.1798 + neutron 0 1 0.704775 -3.20733 36.2274 1.46577 + neutron 0 1 0.660701 -18.399 -28.6763 -9.00706 + neutron 0 1 0.542271 -6.85843 16.8479 26.2374 + neutron 0 1 0.431081 21.1164 11.0666 -15.5522 + gamma 0 0 0.0889546 -0.0706365 -0.00551115 -0.0537869 + deuteron 1 2 5.50301 -55.667 -60.7463 117.832 + alpha 2 4 3.39718 154.476 -36.3224 -12.4395 + triton 1 3 2.01323 51.8891 85.876 -35.3301 + Yb162[0.0] 70 162 1.50162 416.012 -61.7661 525.387 +-3.32223e-05 -1.92545e-07 0.0336057 47 + proton 1 1 999.999 -23.1851 -0.134372 1695.88 + proton 1 1 105.213 272.781 298.66 211.897 + proton 1 1 54.4049 47.6401 45.8238 317.307 + proton 1 1 41.9823 32.7747 -265.614 94.4404 + proton 1 1 40.5914 227.615 152.58 52.2475 + pi0 0 0 39.6415 -36.7791 -52.7743 -90.1941 + proton 1 1 30.8289 -232.871 -16.923 65.4746 + neutron 0 1 30.7884 -183.065 51.8613 150.336 + proton 1 1 26.955 -146.216 156.461 -73.8231 + proton 1 1 21.3528 -38.221 -69.7185 184.943 + neutron 0 1 15.0844 90.9779 -34.5749 -138.205 + neutron 0 1 13.6569 131.722 -92.0304 -5.42294 + neutron 0 1 12.2577 -113.423 77.1678 66.0633 + neutron 0 1 11.9641 15.6076 49.8286 141.063 + neutron 0 1 10.7812 -52.2332 -96.4919 -91.3046 + neutron 0 1 10.1541 -50.2471 -94.3764 88.0474 + neutron 0 1 9.29535 -37.6871 -101.136 -76.8425 + neutron 0 1 9.21702 24.8418 -116.784 56.1185 + neutron 0 1 8.8905 -96.6583 71.8128 47.8075 + proton 1 1 8.5111 71.093 42.9262 95.6401 + neutron 0 1 8.32198 -15.4303 -10.8659 123.9 + neutron 0 1 7.16955 -78.4318 -85.067 11.6614 + proton 1 1 6.52567 88.4879 -39.5915 53.7651 + neutron 0 1 5.21378 42.6898 58.0376 68.0718 + neutron 0 1 4.83621 24.0475 -89.2951 -23.6508 + neutron 0 1 4.46688 67.5534 2.8869 61.984 + neutron 0 1 4.35818 -60.8412 1.66046 67.1132 + neutron 0 1 4.05408 42.0873 -31.9155 69.6035 + neutron 0 1 3.82318 -41.6779 -11.1722 73.0549 + neutron 0 1 3.78594 54.3441 64.0573 8.48452 + neutron 0 1 3.29303 24.4827 -27.4691 -69.6056 + gamma 0 0 2.5727 1.15332 -2.2111 0.632217 + gamma 0 0 2.53147 -0.370082 -1.61793 -1.91146 + neutron 0 1 2.04874 24.047 0.522712 -57.2321 + gamma 0 0 1.87016 1.32871 0.0958413 1.31257 + neutron 0 1 1.78282 -1.15789 17.3143 55.2468 + proton 1 1 1.56368 39.699 4.76317 36.5796 + neutron 0 1 0.918865 -40.5417 8.69169 -2.88692 + neutron 0 1 0.837855 -17.4537 24.1203 26.2434 + neutron 0 1 0.626183 1.48557 25.5668 -22.8299 + neutron 0 1 0.44598 8.61721 -22.0008 -16.7321 + neutron 0 1 0.432131 -14.9878 -23.7848 -4.67613 + proton 1 1 0.414701 26.7498 -4.96923 -6.17488 + neutron 0 1 0.161618 -13.1569 -7.32411 8.77385 + neutron 0 1 0.149446 -11.5816 -4.59585 -11.2069 + deuteron 1 2 4.38429 18.9666 73.2411 103.642 + Er156[0.0] 68 156 0.0769138 -120.945 74.0923 47.1243 +0.000665826 -0.00088273 0.0234175 43 + proton 1 1 999.998 23.1386 -30.6764 1695.6 + proton 1 1 159.588 329.18 -362.547 -291.793 + proton 1 1 145.078 -52.7705 306.51 443.351 + neutron 0 1 97.6551 319.372 -269.855 -134.993 + neutron 0 1 45.4769 -97.5552 -271.874 -63.9766 + proton 1 1 39.1304 10.8346 151.735 227.641 + neutron 0 1 27.9844 -42.8713 -53.578 -220.592 + neutron 0 1 20.2663 -138.665 -67.3661 121.357 + proton 1 1 20.1589 -97.5755 -148.565 -81.5036 + proton 1 1 19.2354 -72.4011 154.056 86.5509 + neutron 0 1 18.9081 -118.192 145.15 29.1624 + neutron 0 1 18.1531 128.428 93.1983 -96.2382 + neutron 0 1 17.9521 -140.747 11.5472 118.801 + proton 1 1 17.1995 -55.2587 -85.1829 149.204 + neutron 0 1 15.0488 158.51 -14.5704 56.28 + proton 1 1 14.5097 -162.962 -24.9304 16.1394 + proton 1 1 10.9093 -0.050094 1.59619 143.486 + neutron 0 1 8.38531 119.094 -25.5963 -31.4447 + neutron 0 1 6.87777 -109.071 -31.0847 10.4313 + neutron 0 1 6.33105 -35.307 -83.3994 -61.1139 + neutron 0 1 5.97593 60.3089 -68.4084 54.2991 + neutron 0 1 5.032 7.93021 73.9599 -62.8343 + neutron 0 1 4.349 40.0258 -43.7503 -68.3746 + neutron 0 1 4.22924 44.3233 13.8085 -76.223 + neutron 0 1 4.10485 81.6794 -13.2613 29.7156 + neutron 0 1 2.65331 36.7572 37.7266 47.1018 + neutron 0 1 2.09295 53.8578 20.0353 -25.2038 + neutron 0 1 1.97739 -58.086 -12.2808 -13.9604 + gamma 0 0 1.90957 -1.37118 0.888317 -0.988546 + gamma 0 0 1.8484 1.76421 -0.515165 0.196832 + gamma 0 0 1.70917 0.368536 0.626659 1.54685 + gamma 0 0 1.47817 -0.871968 -1.19356 0.00757468 + neutron 0 1 1.37517 -25.8769 20.8093 38.5145 + neutron 0 1 1.34458 6.55217 19.7002 -45.7977 + proton 1 1 1.32815 19.3911 -39.4593 -23.6864 + proton 1 1 1.16174 -3.79997 40.7574 -22.4901 + neutron 0 1 0.824673 30.3847 -24.9973 -1.5003 + gamma 0 0 0.709095 -0.231434 0.113063 -0.660659 + neutron 0 1 0.49927 26.2311 14.4818 6.37576 + neutron 0 1 0.423526 25.7905 -0.830103 11.4106 + gamma 0 0 0.12532 0.118398 0.0036029 0.0409154 + alpha 2 4 9.0928 68.1002 -203.188 -148.138 + Er160[0.0] 68 160 10.3909 -332.202 709.054 1575.5 diff --git a/environments/g4py/tests/g4pytest/MedicalBeam/CMakeLists.txt b/environments/g4py/tests/g4pytest/MedicalBeam/CMakeLists.txt new file mode 100644 index 0000000000..beea193829 --- /dev/null +++ b/environments/g4py/tests/g4pytest/MedicalBeam/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _MedicalBeam) +g4pytest_add_module(${_TARGET} MedicalBeam.cc pyMedicalBeam.cc) +target_link_libraries(${_TARGET} PRIVATE G4run G4particles) \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.cc b/environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.cc new file mode 100644 index 0000000000..d8627a1a06 --- /dev/null +++ b/environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.cc @@ -0,0 +1,136 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// MedicalBeam.cc +// +// 2005 Q +// ==================================================================== +#include "MedicalBeam.hh" +#include "Randomize.hh" +#include "G4Event.hh" +#include "G4ParticleTable.hh" +#include "G4PrimaryVertex.hh" + +using namespace CLHEP; + +#include + +// ==================================================================== +// +// class description +// +// ==================================================================== + +/////////////////////////////////// +MedicalBeam::MedicalBeam() + : particle(0), + kineticE(1.*MeV), + sourcePosition(G4ThreeVector()), + SSD(1.*m), + fieldShape(MedicalBeam::SQUARE), + fieldR(10.*cm) +/////////////////////////////////// +{ + fieldXY[0]= fieldXY[1]= 10.*cm; +} + + +/////////////////////////// +MedicalBeam::~MedicalBeam() +/////////////////////////// +{ +} + + +//////////////////////////////////////////////////////// +G4ThreeVector MedicalBeam::GenerateBeamDirection() const +//////////////////////////////////////////////////////// +{ + // uniform distribution in a limitted solid angle + G4double dr; + if(fieldShape == MedicalBeam::SQUARE) { + dr= std::sqrt(sqr(fieldXY[0]/2.)+sqr(fieldXY[1]/2.)); + } else { + dr= fieldR; + } + + G4double sin0= dr/SSD; + G4double cos0= std::sqrt(1.-sqr(sin0)); + + G4double x= DBL_MAX; + G4double y= DBL_MAX; + + G4double xmax, ymax; + if(fieldShape == MedicalBeam::SQUARE) { + xmax= fieldXY[0]/2./SSD; + ymax= fieldXY[1]/2./SSD; + } else { + xmax= ymax= DBL_MAX-1.; + } + + G4double dcos{0.0}; + G4double dsin{0.0}; + G4double dphi{0.0}; + + while(! (std::abs(x)< xmax && std::abs(y)< ymax) ) { + dcos= RandFlat::shoot(cos0, 1.); + dsin= std::sqrt(1.-sqr(dcos)); + dphi= RandFlat::shoot(0., twopi); + + x= std::cos(dphi)*dsin*dcos; + y= std::sin(dphi)*dsin*dcos; + } + + G4double z= dcos; + + return G4ThreeVector(x,y,z); +} + + +///////////////////////////////////////////////////// +void MedicalBeam::GeneratePrimaries(G4Event* anEvent) +///////////////////////////////////////////////////// +{ + if(particle==0) return; + + // create a new vertex + G4PrimaryVertex* vertex= new G4PrimaryVertex(sourcePosition, 0.*ns); + + // momentum + G4double mass= particle-> GetPDGMass(); + G4double p= std::sqrt(sqr(mass+kineticE)-sqr(mass)); + G4ThreeVector pmon= p*GenerateBeamDirection(); + G4PrimaryParticle* primary= new G4PrimaryParticle(particle, + pmon.x(), + pmon.y(), + pmon.z()); + // set primary to vertex + vertex-> SetPrimary(primary); + + // set vertex to event + anEvent-> AddPrimaryVertex(vertex); +} + diff --git a/environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.hh b/environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.hh new file mode 100644 index 0000000000..04778fa41a --- /dev/null +++ b/environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.hh @@ -0,0 +1,143 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// MedicalBeam.hh +// +// 2005 Q +// ==================================================================== +#ifndef MEDICAL_BEAM_H +#define MEDICAL_BEAM_H + +#include "globals.hh" +#include "G4ThreeVector.hh" +#include "G4VUserPrimaryGeneratorAction.hh" + +class G4ParticleDefinition; + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class MedicalBeam : public G4VUserPrimaryGeneratorAction { +public: + enum FieldShape{ SQUARE=0, CIRCLE }; + +protected: + G4ParticleDefinition* particle; + G4double kineticE; + G4ThreeVector sourcePosition; + + G4double SSD; // (SSD= Source Skin Depth) + FieldShape fieldShape; + G4double fieldXY[2]; + G4double fieldR; + + // local methods... + G4ThreeVector GenerateBeamDirection() const; + +public: + MedicalBeam(); + ~MedicalBeam(); + + // set/get functions... + void SetParticleDefinition(G4ParticleDefinition* pd); + const G4ParticleDefinition* GetParticleDefinition() const; + + void SetKineticE(G4double e); + G4double GetKineticE() const; + + void SetSourcePosition(const G4ThreeVector& pos); + G4ThreeVector GetSourcePosition() const; + + void SetFieldShape(FieldShape shape); + FieldShape GetFieldShape() const; + + void SetSSD(G4double ssd); + G4double GetSSD() const; + + void SetFieldXY(G4double fx, G4double fy); + G4double GetFieldX() const; + G4double GetFieldY() const; + + void SetFieldR(G4double r); + G4double GetFieldR() const; + + // methods... + virtual void GeneratePrimaries(G4Event* anEvent); + +}; + +// ==================================================================== +// inline functions +// ==================================================================== +inline void MedicalBeam::SetParticleDefinition(G4ParticleDefinition* pd) +{ particle= pd; } + +inline const G4ParticleDefinition* MedicalBeam::GetParticleDefinition() const +{ return particle; } + +inline void MedicalBeam::SetKineticE(G4double e) +{ kineticE= e; } + +inline G4double MedicalBeam::GetKineticE() const +{ return kineticE; } + +inline void MedicalBeam::SetSourcePosition(const G4ThreeVector& pos) +{ sourcePosition= pos; } + +inline G4ThreeVector MedicalBeam::GetSourcePosition() const +{ return sourcePosition; } + +inline void MedicalBeam::SetFieldShape(MedicalBeam::FieldShape shape) +{ fieldShape= shape; } + +inline MedicalBeam::FieldShape MedicalBeam::GetFieldShape() const +{ return fieldShape; } + +inline void MedicalBeam::SetSSD(G4double ssd) +{ SSD= ssd; } + +inline G4double MedicalBeam::GetSSD() const +{ return SSD; } + +inline void MedicalBeam::SetFieldXY(G4double fx, G4double fy) +{ fieldXY[0]= fx; fieldXY[1]= fy; } + +inline G4double MedicalBeam::GetFieldX() const +{ return fieldXY[0]; } + +inline G4double MedicalBeam::GetFieldY() const +{ return fieldXY[1]; } + +inline void MedicalBeam::SetFieldR(G4double r) +{ fieldR= r; } + +inline G4double MedicalBeam::GetFieldR() const +{ return fieldR; } + +#endif + diff --git a/environments/g4py/tests/g4pytest/MedicalBeam/__init__.py b/environments/g4py/tests/g4pytest/MedicalBeam/__init__.py new file mode 100644 index 0000000000..5a0139ea8f --- /dev/null +++ b/environments/g4py/tests/g4pytest/MedicalBeam/__init__.py @@ -0,0 +1 @@ +from ._MedicalBeam import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/MedicalBeam/pyMedicalBeam.cc b/environments/g4py/tests/g4pytest/MedicalBeam/pyMedicalBeam.cc new file mode 100644 index 0000000000..4a9eec21e5 --- /dev/null +++ b/environments/g4py/tests/g4pytest/MedicalBeam/pyMedicalBeam.cc @@ -0,0 +1,162 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// pyMedicalBeam.cc +// +// [MedicalBeam] +// a site-module of Geant4Py +// +// primary generator action for medical beam +// +// 2005 Q +// ==================================================================== +#include +#include "MedicalBeam.hh" +#include "G4ParticleTable.hh" +#include "G4RunManager.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyMedicalBeam { + +MedicalBeam* Construct() +{ + G4RunManager* runMgr= G4RunManager::GetRunManager(); + + MedicalBeam* medicalbeam= new MedicalBeam(); + runMgr-> SetUserAction(medicalbeam); + + return medicalbeam; +} + + +/////////////////////////////////////////////////////////////////// +void SetParticleByName(MedicalBeam* beam, const std::string& pname) +/////////////////////////////////////////////////////////////////// +{ + G4ParticleTable* particleTable= G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* pd= particleTable-> FindParticle(pname); + if (pd != 0) { + beam-> SetParticleDefinition(pd); + } else { + G4cout << "*** \"" << pname << "\" is not registered " + << "in available particle list" << G4endl; + } +} + +//////////////////////////////////////////////// +std::string GetParticleByName(MedicalBeam* beam) +//////////////////////////////////////////////// +{ + const G4ParticleDefinition* pd= beam-> GetParticleDefinition(); + + if(pd==0) return std::string("None"); + else return (pd-> GetParticleName()).c_str(); +} + +//////////////////////////////////////////////////////// +void f_SetFieldXY(MedicalBeam* beam, const list& listXY) +//////////////////////////////////////////////////////// +{ + G4double fx= extract(listXY[0]); + G4double fy= extract(listXY[1]); + beam-> SetFieldXY(fx, fy); +} + + +//////////////////////////////////// +list f_GetFieldXY(MedicalBeam* beam) +//////////////////////////////////// +{ + list listFieldXY; + + listFieldXY.append(beam-> GetFieldX()); + listFieldXY.append(beam-> GetFieldY()); + + return listFieldXY; +} + +} + +using namespace pyMedicalBeam; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_MedicalBeam) { + class_ > + ("MedicalBeam", "primary generator action with medical beam") + // --- + .add_property("particle", GetParticleByName, SetParticleByName) + .def("SetParticleByName", SetParticleByName) + .def("GetParticleByName", GetParticleByName) + // --- + .add_property("kineticE", &MedicalBeam::GetKineticE, + &MedicalBeam::SetKineticE) + .def("SetKineticE", &MedicalBeam::SetKineticE) + .def("GetKineticE", &MedicalBeam::GetKineticE) + // --- + .add_property("sourcePosition", &MedicalBeam::GetSourcePosition, + &MedicalBeam::SetSourcePosition) + .def("SetSourcePosition", &MedicalBeam::SetSourcePosition) + .def("GetSourcePosition", &MedicalBeam::GetSourcePosition) + // --- + .add_property("fieldShape", &MedicalBeam::GetFieldShape, + &MedicalBeam::SetFieldShape) + .def("SetFieldShape", &MedicalBeam::SetFieldShape) + .def("GetFieldShape", &MedicalBeam::GetFieldShape) + // --- + .add_property("SSD", &MedicalBeam::GetSSD, &MedicalBeam::SetSSD) + .def("SetSSD", &MedicalBeam::SetSSD) + .def("GetSSD", &MedicalBeam::GetSSD) + // ---- + .add_property("fieldXY", f_GetFieldXY, f_SetFieldXY) + .def("SetFieldXY", f_SetFieldXY) + .def("GetFieldXY", f_GetFieldXY) + .def("GetFieldX", &MedicalBeam::GetFieldX) + .def("GetFieldY", &MedicalBeam::GetFieldY) + // --- + .add_property("fieldR", &MedicalBeam::GetFieldR, &MedicalBeam::SetFieldR) + .def("SetFieldR", &MedicalBeam::SetFieldR) + .def("GetFieldR", &MedicalBeam::GetFieldR) + ; + + // enums... + enum_("FieldShape") + .value("SQUARE", MedicalBeam::SQUARE) + .value("CIRCLE", MedicalBeam::CIRCLE) + ; + + // --- + def("Construct", Construct, + return_value_policy()); +} + diff --git a/environments/g4py/tests/g4pytest/NISTmaterials/CMakeLists.txt b/environments/g4py/tests/g4pytest/NISTmaterials/CMakeLists.txt new file mode 100644 index 0000000000..e524a64c4c --- /dev/null +++ b/environments/g4py/tests/g4pytest/NISTmaterials/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _NISTmaterials) +g4pytest_add_module(${_TARGET} NISTmaterials.cc pyNISTmaterials.cc) +target_link_libraries(${_TARGET} PRIVATE G4materials) diff --git a/environments/g4py/tests/g4pytest/NISTmaterials/NISTmaterials.cc b/environments/g4py/tests/g4pytest/NISTmaterials/NISTmaterials.cc new file mode 100644 index 0000000000..56bf0c3a4c --- /dev/null +++ b/environments/g4py/tests/g4pytest/NISTmaterials/NISTmaterials.cc @@ -0,0 +1,61 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// NISTmaterials.cc +// +// 2005 Q +// ==================================================================== +#include "G4NistManager.hh" + +//////////////// +void Construct() +//////////////// +{ + G4NistManager* NistMgr = G4NistManager::Instance(); + + // define typically used materials + NistMgr-> FindOrBuildMaterial("G4_Al"); + NistMgr-> FindOrBuildMaterial("G4_Si"); + NistMgr-> FindOrBuildMaterial("G4_Ar"); + NistMgr-> FindOrBuildMaterial("G4_Cu"); + NistMgr-> FindOrBuildMaterial("G4_Fe"); + NistMgr-> FindOrBuildMaterial("G4_Ge"); + NistMgr-> FindOrBuildMaterial("G4_Ag"); + NistMgr-> FindOrBuildMaterial("G4_W"); + NistMgr-> FindOrBuildMaterial("G4_Au"); + NistMgr-> FindOrBuildMaterial("G4_Pb"); + + NistMgr-> FindOrBuildMaterial("G4_AIR"); + NistMgr-> FindOrBuildMaterial("G4_Galactic"); + NistMgr-> FindOrBuildMaterial("G4_WATER"); + NistMgr-> FindOrBuildMaterial("G4_CESIUM_IODIDE"); + NistMgr-> FindOrBuildMaterial("G4_SODIUM_IODIDE"); + NistMgr-> FindOrBuildMaterial("G4_PLASTIC_SC_VINYLTOLUENE"); + NistMgr-> FindOrBuildMaterial("G4_MYLAR"); + //NistMgr-> FindOrBuildMaterial("G4_GRAPHITE"); + // bug in G4 (element isnot defined. should be fixed.) + +} diff --git a/environments/g4py/tests/g4pytest/NISTmaterials/__init__.py b/environments/g4py/tests/g4pytest/NISTmaterials/__init__.py new file mode 100644 index 0000000000..5849439450 --- /dev/null +++ b/environments/g4py/tests/g4pytest/NISTmaterials/__init__.py @@ -0,0 +1 @@ +from ._NISTmaterials import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/NISTmaterials/pyNISTmaterials.cc b/environments/g4py/tests/g4pytest/NISTmaterials/pyNISTmaterials.cc new file mode 100644 index 0000000000..e77b5a2afe --- /dev/null +++ b/environments/g4py/tests/g4pytest/NISTmaterials/pyNISTmaterials.cc @@ -0,0 +1,49 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// pyNISTmaterials.cc +// +// [NISTmaterials] +// a site-module of Geant4Py +// +// NIST materials +// +// 2005 Q +// ==================================================================== +#include + +using namespace boost::python; + +void Construct(); + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_NISTmaterials) { + def("Construct", Construct); +} + diff --git a/environments/g4py/tests/g4pytest/ParticleGun/CMakeLists.txt b/environments/g4py/tests/g4pytest/ParticleGun/CMakeLists.txt new file mode 100644 index 0000000000..45ac505cd3 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ParticleGun/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _ParticleGun) +g4pytest_add_module(${_TARGET} ParticleGunAction.cc pyParticleGun.cc) +target_link_libraries(${_TARGET} PRIVATE G4run G4particles) diff --git a/environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.cc b/environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.cc new file mode 100644 index 0000000000..5b9d1044bb --- /dev/null +++ b/environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.cc @@ -0,0 +1,60 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// ParticleGunAction.cc +// +// 2005 Q +// ==================================================================== +#include "ParticleGunAction.hh" +#include "G4ParticleGun.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +////////////////////////////////////// +ParticleGunAction::ParticleGunAction() +////////////////////////////////////// +{ + particleGun= new G4ParticleGun; +} + +/////////////////////////////////////// +ParticleGunAction::~ParticleGunAction() +/////////////////////////////////////// +{ + delete particleGun; +} + +/////////////////////////////////////////////////////////// +void ParticleGunAction::GeneratePrimaries(G4Event* anEvent) +/////////////////////////////////////////////////////////// +{ + particleGun-> GeneratePrimaryVertex(anEvent); +} + diff --git a/environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.hh b/environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.hh new file mode 100644 index 0000000000..2b78f2d401 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.hh @@ -0,0 +1,63 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// ParticleGunAction.hh +// +// 2005 Q +// ==================================================================== +#ifndef PARTICLE_GUN_ACTION_H +#define PARTICLE_GUN_ACTION_H + +#include "G4VUserPrimaryGeneratorAction.hh" + +class G4ParticleGun; + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class ParticleGunAction : public G4VUserPrimaryGeneratorAction { +private: + // use G4 particle gun + G4ParticleGun* particleGun; + +public: + ParticleGunAction(); + ~ParticleGunAction(); + + G4ParticleGun* GetParticleGun() const; + + virtual void GeneratePrimaries(G4Event* anEvent); +}; + +// ==================================================================== +// inline functions +// ==================================================================== +inline G4ParticleGun* ParticleGunAction::GetParticleGun() const +{ return particleGun; } + +#endif diff --git a/environments/g4py/tests/g4pytest/ParticleGun/__init__.py b/environments/g4py/tests/g4pytest/ParticleGun/__init__.py new file mode 100644 index 0000000000..e80e543000 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ParticleGun/__init__.py @@ -0,0 +1 @@ +from ._ParticleGun import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/ParticleGun/pyParticleGun.cc b/environments/g4py/tests/g4pytest/ParticleGun/pyParticleGun.cc new file mode 100644 index 0000000000..4e04ce8497 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ParticleGun/pyParticleGun.cc @@ -0,0 +1,79 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// pyParticleGun.cc +// +// [ParticleGun] +// a site-module of Geant4Py +// +// primary generator action with particle gun +// +// 2005 Q +// ==================================================================== +#include +#include "ParticleGunAction.hh" +#include "G4ParticleGun.hh" +#include "G4RunManager.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyParticleGun { + +G4ParticleGun* Construct() +{ + G4RunManager* runMgr= G4RunManager::GetRunManager(); + + ParticleGunAction* pga= new ParticleGunAction; + runMgr-> SetUserAction(pga); + + return pga-> GetParticleGun(); +} + +} + +using namespace pyParticleGun; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_ParticleGun) { + class_ > + ("ParticleGunAction", "primary generator action with particle gun") + .def("GetParticleGun", &ParticleGunAction::GetParticleGun, + return_internal_reference<>()) + ; + + // --- + def("Construct", Construct, + return_value_policy()); + +} + diff --git a/environments/g4py/tests/g4pytest/Qgeom/CMakeLists.txt b/environments/g4py/tests/g4pytest/Qgeom/CMakeLists.txt new file mode 100644 index 0000000000..11bbe5c67f --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qgeom/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _Qgeom) +g4pytest_add_module(${_TARGET} QDetectorConstruction.cc pyQgeom.cc) +target_link_libraries(${_TARGET} PRIVATE G4materials G4geometry G4run) diff --git a/environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.cc b/environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.cc new file mode 100644 index 0000000000..3863c82ecf --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.cc @@ -0,0 +1,144 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// QDetectorConstruction.cc +// +// 2005 Q +// ==================================================================== +#include "QDetectorConstruction.hh" + +#include "G4Material.hh" +#include "G4Tubs.hh" +#include "G4Box.hh" +#include "G4LogicalVolume.hh" +#include "G4PVPlacement.hh" +#include "G4VisAttributes.hh" +#include "G4SystemOfUnits.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +// constants (detector parameters) +static const G4double DXYZ_AREA= 30.*cm; + +////////////////////////////////////////////// +QDetectorConstruction::QDetectorConstruction() +////////////////////////////////////////////// +{ +} + +/////////////////////////////////////////////// +QDetectorConstruction::~QDetectorConstruction() +/////////////////////////////////////////////// +{ +} + +///////////////////////////////////////////////////// +G4VPhysicalVolume* QDetectorConstruction::Construct() +///////////////////////////////////////////////////// +{ + G4Material* mate; + G4VisAttributes* va; + + // ============================================================== + // world volume + // ============================================================== + G4Box* areaSolid= new G4Box("AREA", + DXYZ_AREA/2., DXYZ_AREA/2., DXYZ_AREA/2.); + + G4Material* vacuum= G4Material::GetMaterial("Vacuum"); + G4LogicalVolume* areaLV= new G4LogicalVolume(areaSolid, vacuum, "AREA_LV"); + G4PVPlacement* area= new G4PVPlacement(0, G4ThreeVector(), "AREA_PV", + areaLV, 0, false, 0); + // vis. attributes + va= new G4VisAttributes(G4Color(1.,1.,1.)); + va-> SetForceWireframe(true); + areaLV-> SetVisAttributes(va); + + // ============================================================== + // detectors + // ============================================================== + // voxel + const G4double dvoxel= 10.*mm; + const G4double dl= 10.*cm; + + G4Box* svoxel= new G4Box("voxel", dvoxel, dl, dvoxel); + mate= G4Material::GetMaterial("Vacuum"); + G4LogicalVolume* lvoxel= new G4LogicalVolume(svoxel, mate, "voxel"); + va= new G4VisAttributes(G4Color(0.,0.8,0.8)); + va-> SetVisibility(false); + lvoxel-> SetVisAttributes(va); + + G4int ix, iz; + G4int index=0; + for (iz=0; iz<5; iz++) { + for (ix=-7; ix<=7; ix++) { + G4double x0= (2.*ix)*cm; + G4double z0= (-13.+2.*iz)*cm; + /*G4PVPlacement* pvoxel=*/ new G4PVPlacement(0, G4ThreeVector(x0, 0., z0), + lvoxel, "voxel", areaLV, false, index); + index++; + } + } + + // tube + //G4Tubs* stube= new G4Tubs("tube", 15./2.*mm, 19./2.*mm, dl, + G4Tubs* stube= new G4Tubs("tube", 0.*mm, 19./2.*mm, dl, + 0., 360.*deg); + mate= G4Material::GetMaterial("Al"); + G4LogicalVolume* ltube= new G4LogicalVolume(stube, mate, "tube"); + va= new G4VisAttributes(G4Color(0.,0.8,0.8)); + ltube-> SetVisAttributes(va); + + G4RotationMatrix* rmtube= new G4RotationMatrix; + rmtube-> rotateX(-90.*deg); + /*G4PVPlacement* ptube=*/ new G4PVPlacement(rmtube, G4ThreeVector(), + ltube, "tube", lvoxel, false, 0); + + // cal + const G4double dxycal= 25.*mm; + const G4double dzcal= 3.*cm; + + G4Box* scal= new G4Box("cal", dxycal, dxycal, dzcal); + mate= G4Material::GetMaterial("CsI"); + G4LogicalVolume* lcal= new G4LogicalVolume(scal, mate, "cal"); + va= new G4VisAttributes(G4Color(0.5,0.5,0.)); + lcal-> SetVisAttributes(va); + + index= 0; + for (ix=-2; ix<=2; ix++) { + G4double x0= (5.*ix)*cm; + /*G4PVPlacement* pcal=*/ new G4PVPlacement(0, G4ThreeVector(x0, 0., 2.*cm), + lcal, "cal", areaLV, false, index); + index++; + } + + return area; +} + diff --git a/environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.hh b/environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.hh new file mode 100644 index 0000000000..5b392c7da9 --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.hh @@ -0,0 +1,52 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// QDetectorConstruction.hh +// +// 2005 Q +// ==================================================================== +#ifndef Q_DETECTOR_CONSTRUCTION_H +#define Q_DETECTOR_CONSTRUCTION_H + +#include "G4VUserDetectorConstruction.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class QDetectorConstruction : public G4VUserDetectorConstruction { + +public: + QDetectorConstruction(); + ~QDetectorConstruction(); + + virtual G4VPhysicalVolume* Construct(); + +}; + +#endif diff --git a/environments/g4py/tests/g4pytest/Qgeom/__init__.py b/environments/g4py/tests/g4pytest/Qgeom/__init__.py new file mode 100644 index 0000000000..85ffff076a --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qgeom/__init__.py @@ -0,0 +1 @@ +from ._Qgeom import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/Qgeom/pyQgeom.cc b/environments/g4py/tests/g4pytest/Qgeom/pyQgeom.cc new file mode 100644 index 0000000000..6f83400311 --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qgeom/pyQgeom.cc @@ -0,0 +1,71 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// pyQgeom.cc +// +// [Qgeom] +// a site-module of Geant4Py +// +// A sample geometry +// +// 2005 Q +// ==================================================================== +#include +#include "G4RunManager.hh" +#include "QDetectorConstruction.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyQgeom { + +void Construct() +{ + G4RunManager* runMgr= G4RunManager::GetRunManager(); + runMgr-> SetUserInitialization(new QDetectorConstruction); +} + +} + +using namespace pyQgeom; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_Qgeom) { + + class_ > + ("QDetectorConstruction", "my detector") + ; + + // --- + def("Construct", Construct); +} + diff --git a/environments/g4py/tests/g4pytest/Qmaterials/CMakeLists.txt b/environments/g4py/tests/g4pytest/Qmaterials/CMakeLists.txt new file mode 100644 index 0000000000..723d52444c --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qmaterials/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _Qmaterials) +g4pytest_add_module(${_TARGET} Qmaterials.cc pyQmaterials.cc) +target_link_libraries(${_TARGET} PRIVATE G4materials) \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/Qmaterials/Qmaterials.cc b/environments/g4py/tests/g4pytest/Qmaterials/Qmaterials.cc new file mode 100644 index 0000000000..b9ace7959f --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qmaterials/Qmaterials.cc @@ -0,0 +1,142 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// Qmaterials.cc +// +// 2005 Q +// ==================================================================== +#include "G4Material.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +//////////////// +void Construct() +//////////////// +{ + G4double A, Z; + + // ------------------------------------------------------------------------ + // Elements + // ------------------------------------------------------------------------ + G4Element* elH = new G4Element("Hydrogen","H", Z=1., A=1.00794*g/mole); + G4Element* elC = new G4Element("Carbon", "C", Z=6., A= 12.011 *g/mole); + G4Element* elN = new G4Element("Nitrogen","N", Z=7., A= 14.00674*g/mole); + G4Element* elO = new G4Element("Oxygen", "O", Z=8., A= 15.9994*g/mole); + G4Element* elNa = new G4Element("Sodium", "Na", Z=11., A= 22.989768*g/mole); + G4Element* elSi = new G4Element("Silicon", "Si", Z=14., A= 28.0855*g/mole); + G4Element* elAr = new G4Element("Argon", "Ar", Z=18., A= 39.948*g/mole); + G4Element* elI = new G4Element("Iodine", "I", Z=53., A= 126.90447*g/mole); + G4Element* elCs = new G4Element("Cesium", "Cs", Z=55., A= 132.90543*g/mole); + + // ------------------------------------------------------------------------ + // Materials + // ------------------------------------------------------------------------ + G4double density, massfraction; + G4int natoms, nel; + + // temperature of experimental hall is controlled at 20 degree. + const G4double expTemp= STP_Temperature+20.*kelvin; + + // vacuum + density= universe_mean_density; + G4Material* Vacuum= new G4Material("Vacuum", density, nel=2); + Vacuum-> AddElement(elN, .7); + Vacuum-> AddElement(elO, .3); + + // air + density= 1.2929e-03 *g/cm3; // at 20 degree + G4Material* Air= new G4Material("Air", density, nel=3, + kStateGas, expTemp); + G4double ttt= 75.47+23.20+1.28; + Air-> AddElement(elN, massfraction= 75.47/ttt); + Air-> AddElement(elO, massfraction= 23.20/ttt); + Air-> AddElement(elAr, massfraction= 1.28/ttt); + + // Ar gas + A= 39.948 *g/mole; + const G4double denAr= 1.782e-03 *g/cm3 * STP_Temperature/expTemp; + G4Material* Ar= new G4Material("ArgonGas", Z=18., A, denAr, + kStateGas, expTemp); + + // ethane (C2H6) + const G4double denEthane= 1.356e-3 *g/cm3 * STP_Temperature/expTemp; + G4Material* Ethane= new G4Material("Ethane", denEthane, nel=2, + kStateGas, expTemp); + Ethane-> AddElement(elC, natoms=2); + Ethane-> AddElement(elH, natoms=6); + + // Ar(50%) + ethane(50%) mixture + density= (denAr+denEthane)/2.; + G4Material* ArEthane= new G4Material("ArEthane", density, nel=2, + kStateGas, expTemp); + ArEthane-> AddMaterial(Ar, massfraction= denAr/density/2.); + ArEthane-> AddMaterial(Ethane, massfraction= denEthane/density/2.); + + // silicon + A= 28.0855 *g/mole; + density= 2.33 *g/cm3; + /*G4Material* Si=*/ new G4Material("SiliconWafer", Z=14., A, density); + + // alminium + A= 26.98 *g/mole; + density= 2.70 *g/cm3; + /*G4Material* Al=*/ new G4Material("Al", Z=13., A, density); + + // iron + A= 55.847 *g/mole; + density= 7.87 *g/cm3; + /*G4Material* Fe=*/ new G4Material("Iron", Z=26., A, density); + + // lead + A= 207.2 *g/mole; + density= 11.35 *g/cm3; + /*G4Material* Pb=*/ new G4Material("Lead", Z=82., A, density); + + // scintillator (Polystyene(C6H5CH=CH2)) + density= 1.032 *g/cm3; + G4Material* Scinti= new G4Material("Scinti", density, nel=2); + Scinti-> AddElement(elC, natoms=8); + Scinti-> AddElement(elH, natoms=8); + + // quartz (SiO2, crystalline) + density= 2.64 *g/cm3; + G4Material* Quartz= new G4Material("Quartz", density, nel= 2); + Quartz-> AddElement(elSi, natoms=1); + Quartz-> AddElement(elO, natoms=2); + + // NaI crystal + density= 3.67 *g/cm3; + G4Material* NaI= new G4Material("NaI", density, nel= 2); + NaI-> AddElement(elNa, natoms=1); + NaI-> AddElement(elI, natoms=1); + + // CsI crystal + density= 4.51 *g/cm3; + G4Material* CsI= new G4Material("CsI", density, nel= 2); + CsI-> AddElement(elCs, natoms=1); + CsI-> AddElement(elI, natoms=1); + +} diff --git a/environments/g4py/tests/g4pytest/Qmaterials/__init__.py b/environments/g4py/tests/g4pytest/Qmaterials/__init__.py new file mode 100644 index 0000000000..02c5a31c43 --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qmaterials/__init__.py @@ -0,0 +1 @@ +from ._Qmaterials import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/Qmaterials/pyQmaterials.cc b/environments/g4py/tests/g4pytest/Qmaterials/pyQmaterials.cc new file mode 100644 index 0000000000..5355fd8660 --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qmaterials/pyQmaterials.cc @@ -0,0 +1,49 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// pyQmaterials.cc +// +// [Qmaterials] +// a site-module of Geant4Py +// +// A sample set of materials +// +// 2005 Q +// ==================================================================== +#include + +using namespace boost::python; + +void Construct(); + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_Qmaterials) { + def("Construct", Construct); +} + diff --git a/environments/g4py/tests/g4pytest/__init__.py b/environments/g4py/tests/g4pytest/__init__.py new file mode 100644 index 0000000000..b58d11dea5 --- /dev/null +++ b/environments/g4py/tests/g4pytest/__init__.py @@ -0,0 +1,3 @@ + +# Geant4Py site-modules + diff --git a/environments/g4py/tests/g4pytest/emcalculator/emcalculator.py b/environments/g4py/tests/g4pytest/emcalculator/emcalculator.py new file mode 100644 index 0000000000..e63d1a2952 --- /dev/null +++ b/environments/g4py/tests/g4pytest/emcalculator/emcalculator.py @@ -0,0 +1,149 @@ +""" +# ================================================================== +# Python module (Python3) +# +# Calculation of photon cross section and stopping power for +# chared particles +# +# Q, 2005 +# ================================================================== +""" +from Geant4 import * + +# ================================================================== +# public symbols +# ================================================================== +__all__ = [ 'CalculatePhotonCrossSection', 'CalculateDEDX' ] + +# ================================================================== +# Photon Cross Section +# ================================================================== +def CalculatePhotonCrossSection(mat, elist, verbose=0, + plist=["compt", "", "phot", "conv"]): + """ + Calculate photon cross section for a given material and + a list of energy, returing a list of cross sections for + the components of "Copmton scattering", "rayleigh scattering", + "photoelectric effect", "pair creation" and total one. + + Arguments: + mat: material name + elist: list of energy + verbose: verbose level [0] + plist: list of process name + (compton/rayleigh/photoelectic/conversion) [StandardEM set] + + Keys of index: + "compt": Compton Scattering + "rayleigh": Rayleigh Scattering + "phot" : photoelectric effect + "conv" : pair Creation + "tot" : total + + Example: + xsec_list= CalculatePhotonCrossSection(...) + value= xsec_list[energy_index]["compt"] + """ + if(verbose>0): + print("-------------------------------------------------------------------") + print(" Photon Cross Section (", mat, ")") + print("Energy Compton Raleigh Photo- Pair Total") + print(" Scattering Scattering electric Creation") + print("(MeV) (cm2/g) (cm2/g) (cm2/g) (cm2/g) (cm2/g)") + print("-------------------------------------------------------------------") + + xsection_list= [] + for ekin in elist: + xsec= {} + xsec["compt"] \ + = gEmCalculator.ComputeCrossSectionPerVolume(ekin, "gamma", plist[0], + mat) * cm2/g + xsec["rayleigh"] \ + = gEmCalculator.ComputeCrossSectionPerVolume(ekin, "gamma", plist[1], + mat) * cm2/g + + xsec["phot"] \ + = gEmCalculator.ComputeCrossSectionPerVolume(ekin, "gamma", plist[2], + mat) * cm2/g + xsec["conv"] \ + = gEmCalculator.ComputeCrossSectionPerVolume(ekin, "gamma", plist[3], + mat) * cm2/g + + xsec["tot"]= xsec["compt"] + xsec["rayleigh"] + xsec["phot"] + xsec["conv"] + + xsection_list.append((ekin, xsec)) + + if(verbose>0): + print(" %8.3e %8.3e %8.3e %8.3e %8.3e %8.3e" \ + % (ekin/MeV, xsec["compt"]/(cm2/g), xsec["rayleigh"]/(cm2/g), + xsec["phot"]/(cm2/g), xsec["conv"]/(cm2/g), xsec["tot"]/(cm2/g))) + + return xsection_list + + +# ================================================================== +# Stopping Power +# ================================================================== +def CalculateDEDX(part, mat, elist, verbose=0, + plist=["eIoni", "eBrem", "muIoni", "muBrems", "hIoni"]): + """ + Calculate stopping powers for a give particle, material and + a list of energy, returing stopping power for the components of + "Ionization", "Radiation" and total one. + + Arguments: + part: particle name + mat: material name + elist: list of energy + verbose: verbose level [0] + plist: list of process name + (electron ionization/electron brems/ + muon ionization/muon brems/hadron ionization) [StandardEM set] + + Keys of index: + "ioni": ionization + "brems": Bremsstrahlung + "tot": total + + Example: + dedx_list= CalculateDEDX(...) + value= dedx_list[energy_index]["ioni"] + """ + if(verbose>0): + print("------------------------------------------------------") + print(" Stopping Power (", part, ",", mat, ")") + print(" Energy Ionization Radiation Total") + print(" (MeV) (MeVcm2/g) (MeVcm2/g) (MeVcm2/g)") + print("------------------------------------------------------") + + procname_brems= "" + procname_ioni= "" + if ( part=="e+" or part=="e-" ): + procname_ioni= plist[0] + procname_brems= plist[1] + elif ( part=="mu+" or part=="mu-"): + procname_ioni= plist[2] + procname_brems= plist[3] + else: + procname_ioni= plist[4] + procname_brems= "" + + dedx_list= [] + for ekin in elist: + dedx= {} + dedx["ioni"] \ + = gEmCalculator.ComputeDEDX(ekin, part, procname_ioni, mat) * MeV*cm2/g + dedx["brems"] \ + = gEmCalculator.ComputeDEDX(ekin, part, procname_brems, mat) * MeV*cm2/g + dedx["tot"]= dedx["ioni"]+ dedx["brems"] + + if(verbose>0): + print(" %8.3e %8.3e %8.3e %8.3e" \ + % (ekin/MeV, dedx["ioni"]/(MeV*cm2/g), + dedx["brems"]/(MeV*cm2/g), dedx["tot"]/(MeV*cm2/g) )) + + + dedx_list.append((ekin, dedx)) + + return dedx_list + diff --git a/environments/g4py/tests/g4pytest/ezgeom/CMakeLists.txt b/environments/g4py/tests/g4pytest/ezgeom/CMakeLists.txt new file mode 100644 index 0000000000..1ba9a56b08 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/CMakeLists.txt @@ -0,0 +1,10 @@ +# - build library +set(_TARGET _ezgeom) +g4pytest_add_module(${_TARGET} + EzDetectorConstruction.cc + G4EzVolume.cc + G4EzVoxelParameterization.cc + G4EzWorld.cc + pyEzgeom.cc +) +target_link_libraries(${_TARGET} PRIVATE G4materials G4geometry G4run) diff --git a/environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.cc b/environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.cc new file mode 100644 index 0000000000..90ae9a1f44 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.cc @@ -0,0 +1,58 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// EzDetectorConstruction.cc +// +// 2005 Q +// ==================================================================== +#include "EzDetectorConstruction.hh" +#include "G4EzWorld.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////////////////////////////// +EzDetectorConstruction::EzDetectorConstruction() +//////////////////////////////////////////////// +{ +} + +///////////////////////////////////////////////// +EzDetectorConstruction::~EzDetectorConstruction() +///////////////////////////////////////////////// +{ +} + +////////////////////////////////////////////////////// +G4VPhysicalVolume* EzDetectorConstruction::Construct() +////////////////////////////////////////////////////// +{ + return G4EzWorld::GetWorldVolume(); +} + diff --git a/environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.hh b/environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.hh new file mode 100644 index 0000000000..19a717dc2c --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.hh @@ -0,0 +1,52 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// EzDetectorConstruction.hh +// +// 2005 Q +// ==================================================================== +#ifndef EZ_DETECTOR_CONSTRUCTION_H +#define EZ_DETECTOR_CONSTRUCTION_H + +#include "G4VUserDetectorConstruction.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class EzDetectorConstruction : public G4VUserDetectorConstruction { + +public: + EzDetectorConstruction(); + ~EzDetectorConstruction(); + + virtual G4VPhysicalVolume* Construct(); + +}; + +#endif diff --git a/environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.cc b/environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.cc new file mode 100644 index 0000000000..26733fff46 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.cc @@ -0,0 +1,311 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// G4EzVolume.cc +// +// 2005 Q +// ==================================================================== +#include "G4Material.hh" +#include "G4Box.hh" +#include "G4Tubs.hh" +#include "G4Cons.hh" +#include "G4Sphere.hh" +#include "G4Orb.hh" +#include "G4PVPlacement.hh" +#include "G4PVReplica.hh" +#include "G4PVParameterised.hh" +#include "G4VisAttributes.hh" + +#include "G4EzWorld.hh" +#include "G4EzVolume.hh" +#include "G4EzVoxelParameterization.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////// +G4EzVolume::G4EzVolume() + : name("MyVolume"), + solid(0), + lv(0), lvsub(0), + nplacement(0) +//////////////////////// +{ +} + + +///////////////////////////////////////////// +G4EzVolume::G4EzVolume(const G4String& aname) + : name(aname), solid(0), lv(0), lvsub(0), + nplacement(0) +///////////////////////////////////////////// +{ +} + + +///////////////////////// +G4EzVolume::~G4EzVolume() +///////////////////////// +{ +} + + +/////////////////////////////////////////////////////////////////////// +void G4EzVolume::CreateBoxVolume(G4Material* amaterial, + G4double dx, G4double dy, G4double dz) +/////////////////////////////////////////////////////////////////////// +{ + if(lv !=0 ) { + G4cout << "%%% Warning (G4EzVolume): volume is already created." + << G4endl; + return; + } + + solid= new G4Box(name, dx/2., dy/2., dz/2.); + lv= new G4LogicalVolume(solid, amaterial, name); + + // vis. attributes + va= new G4VisAttributes(); + lv-> SetVisAttributes(va); +} + + +//////////////////////////////////////////////////////////////////////////// +void G4EzVolume::CreateTubeVolume(G4Material* amaterial, + G4double rmin, G4double rmax, G4double dz, + G4double phi0, G4double dphi) +//////////////////////////////////////////////////////////////////////////// +{ + if(lv !=0 ) { + G4cout << "%%% Warning (G4EzVolume): volume is already created." + << G4endl; + return; + } + + solid= new G4Tubs(name, rmin, rmax, dz, phi0, dphi); + lv= new G4LogicalVolume(solid, amaterial, name); + + // vis. attributes + va= new G4VisAttributes(); + lv-> SetVisAttributes(va); +} + + +///////////////////////////////////////////////////////////////// +void G4EzVolume::CreateConeVolume(G4Material* amaterial, + G4double rmin1, G4double rmax1, + G4double rmin2, G4double rmax2, + G4double dz, + G4double phi0, G4double dphi) +///////////////////////////////////////////////////////////////// +{ + if(lv !=0 ) { + G4cout << "%%% Warning (G4EzVolume): volume is already created." + << G4endl; + return; + } + + solid= new G4Cons(name, rmin1, rmax1, rmin2, rmax2, + dz, phi0, dphi); + lv= new G4LogicalVolume(solid, amaterial, name); + + // vis. attributes + va= new G4VisAttributes(); + lv-> SetVisAttributes(va); +} + + +///////////////////////////////////////////////////////////////////// +void G4EzVolume::CreateSphereVolume(G4Material* amaterial, + G4double rmin, G4double rmax, + G4double phi0, G4double dphi, + G4double theta0, G4double dtheta) +///////////////////////////////////////////////////////////////////// +{ + if(lv !=0 ) { + G4cout << "%%% Warning (G4EzVolume): volume is already created." + << G4endl; + return; + } + + solid= new G4Sphere(name, rmin, rmax, phi0, dphi, theta0, dtheta); + lv= new G4LogicalVolume(solid, amaterial, name); + + // vis. attributes + va= new G4VisAttributes(); + lv-> SetVisAttributes(va); +} + + +////////////////////////////////////////////////////////////////////// +void G4EzVolume::CreateOrbVolume(G4Material* amaterial, G4double rmax) +////////////////////////////////////////////////////////////////////// +{ + if(lv !=0 ) { + G4cout << "%%% Warning (G4EzVolume): volume is already created." + << G4endl; + return; + } + + solid= new G4Orb(name, rmax); + lv= new G4LogicalVolume(solid, amaterial, name); + + // vis. attributes + va= new G4VisAttributes(); + lv-> SetVisAttributes(va); +} + + +//////////////////////////////////////////////////////////////// +G4VPhysicalVolume* G4EzVolume::PlaceIt(const G4ThreeVector& pos, + G4int ncopy, + G4EzVolume* parent) +//////////////////////////////////////////////////////////////// +{ + if(lv==0) { + G4cout << "%%% Warning (G4EzVolume): volume is not yet created." + << G4endl; + return 0; + } + + G4PVPlacement* pv; + if(parent==0) { // place it in the world + G4VPhysicalVolume* world= G4EzWorld::GetWorldVolume(); + pv= new G4PVPlacement(0, pos, name, lv, world, false, ncopy); + } else { + pv= new G4PVPlacement(0, pos, lv, name, parent->lv, false, ncopy); + } + + nplacement++; + return pv; +} + + +////////////////////////////////////////////////////////////////////// +G4VPhysicalVolume* G4EzVolume::PlaceIt(const G4Transform3D& transform, + G4int ncopy, + G4EzVolume* parent) +////////////////////////////////////////////////////////////////////// +{ + if(lv==0) { + G4cout << "%%% Warning (G4EzVolume): volume is not yet created." + << G4endl; + return 0; + } + + G4PVPlacement* pv; + if(parent==0) { // place it in the world + G4VPhysicalVolume* world= G4EzWorld::GetWorldVolume(); + pv= new G4PVPlacement(transform, name, lv, world, false, ncopy); + } else { + pv= new G4PVPlacement(transform, lv, name, parent->lv, false, ncopy); + } + + nplacement++; + return pv; +} + + +/////////////////////////////////////////////////////////////////////////// +G4VPhysicalVolume* G4EzVolume::ReplicateIt(G4EzVolume* parent, + EAxis pAxis, G4int nReplicas, + G4double width, G4double offset) +/////////////////////////////////////////////////////////////////////////// +{ + if(lv==0) { + G4cout << "%%% Warning (G4EzVolume): volume is not yet created." + << G4endl; + return 0; + } + + G4PVReplica* pv= + new G4PVReplica(name, lv, parent->lv, pAxis, nReplicas, width, offset); + + nplacement += nReplicas; + return pv; +} + + +////////////////////////////////////////////////////////////////// +G4ThreeVector G4EzVolume::VoxelizeIt(G4int nx, G4int ny, G4int nz) +////////////////////////////////////////////////////////////////// +{ + // creating voxel volume... + G4Box* avolume= dynamic_cast(solid); + if(avolume ==0 ) { + G4cout << "%%% Error (G4EzVolume): voxelization is valid " + << "only for Box geometry." << G4endl; + return G4ThreeVector(); + } + + if(lvsub !=0) { + G4cout << "%%% Error (G4EzVolume): already voxelized." << G4endl; + return G4ThreeVector(); + } + + G4double dx= (avolume-> GetXHalfLength())*2.; + G4double dy= (avolume-> GetYHalfLength())*2.; + G4double dz= (avolume-> GetZHalfLength())*2.; + + // voxel size + G4double ddx= dx/nx; + G4double ddy= dy/ny; + G4double ddz= dz/nz; + + G4Box* voxel= new G4Box("voxel", ddx/2., ddy/2., ddz/2.); + G4Material* voxelMaterial= lv-> GetMaterial(); + lvsub= new G4LogicalVolume(voxel, voxelMaterial, "voxel"); + + G4VisAttributes* vavoxel= new G4VisAttributes(G4Color(1.,0.,0.)); + lvsub-> SetVisAttributes(vavoxel); + + G4EzVoxelParameterization* voxelParam= + new G4EzVoxelParameterization(ddx, ddy, ddz, nx, ny, nz); + G4int nvoxel= nx*ny*nz; + new G4PVParameterised(name+"_voxel", lvsub, lv, kXAxis, + nvoxel, voxelParam); + + return G4ThreeVector(ddx, ddy, ddz); +} + + + +//////////////////////////////////////////////////////////////// +void G4EzVolume::SetSensitiveDetector(G4VSensitiveDetector* asd) +//////////////////////////////////////////////////////////////// +{ + if(lvsub!=0) { + lvsub-> SetSensitiveDetector(asd); + return; + } + + if(lv!=0) lv-> SetSensitiveDetector(asd); + +} + diff --git a/environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.hh b/environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.hh new file mode 100644 index 0000000000..d67fd956b0 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.hh @@ -0,0 +1,165 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// G4EzVolume.hh +// +// Utility class for supporting creating user geometry +// +// * wrapper of logical volume +// +// 2005 Q +// ==================================================================== +#ifndef G4_EZ_VOLUME_H +#define G4_EZ_VOLUME_H + +#include "G4LogicalVolume.hh" +#include "G4VisAttributes.hh" +#include "G4Transform3D.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class G4Material; +class G4VSolid; +class G4VPhysicalVolume; + +class G4EzVolume { +protected: + // volume information + G4String name; + G4VSolid* solid; + G4LogicalVolume* lv; + G4LogicalVolume* lvsub; // logical volume for voxels + G4VisAttributes* va; + G4int nplacement; // # of placements + +public: + G4EzVolume(); + G4EzVolume(const G4String& aname); + ~G4EzVolume(); + + // createing volume + void CreateBoxVolume(G4Material* amaterial, + G4double dx, G4double dy, G4double dz); + + void CreateTubeVolume(G4Material* amaterial, + G4double rmin, G4double rmax, + G4double dz, + G4double phi0=0., G4double dphi=360*deg); + + void CreateConeVolume(G4Material* amaterial, + G4double rmin1, G4double rmax1, + G4double rmin2, G4double rmax2, + G4double dz, + G4double phi0=0., G4double dphi=360.*deg); + + void CreateSphereVolume(G4Material* amaterial, + G4double rmin, G4double rmax, + G4double phi0=0., G4double dphi=360.*deg, + G4double theta0=0., G4double dtheta=180.*deg); + + void CreateOrbVolume(G4Material* amaterial, G4double rmax); + + + // placement + G4VPhysicalVolume* PlaceIt(const G4ThreeVector& pos, G4int ncopy=0, + G4EzVolume* parent=0); + + G4VPhysicalVolume* PlaceIt(const G4Transform3D& transform, G4int ncopy=0, + G4EzVolume* parent=0); + // replica + // parent volume should be exactly filled with replicated volumes. + G4VPhysicalVolume* ReplicateIt(G4EzVolume* parent, + EAxis pAxis, G4int nReplicas, + G4double width, G4double offset=0); + // voxelize + // volume should be "BOX". otherwise, error. + // returning voxel size in each dimension + G4ThreeVector VoxelizeIt(G4int nx, G4int ny, G4int nz); + + // sensitivity + // in the case of voxelized, SD will be set to a voxel. + void SetSensitiveDetector(G4VSensitiveDetector* asd); + + // direct access to properties + const G4String& GetName() const; + + void SetSolid(G4VSolid* asolid); + const G4VSolid* GetSolid() const; + + void SetMaterial(G4Material* amaterial); + G4Material* GetMaterial() const; + + G4int GetNofPlacements() const; + + void SetVisibility(G4bool qvisible); + void SetColor(const G4Color& color); + void SetColor(G4double red, G4double green, G4double blue); + +}; + +// ==================================================================== +// inline functions +// ==================================================================== + +inline const G4String& G4EzVolume::GetName() const { return name; } + +inline void G4EzVolume::SetSolid(G4VSolid* asolid) { solid= asolid; } + +inline const G4VSolid* G4EzVolume::GetSolid() const { return solid; } + +inline void G4EzVolume::SetMaterial(G4Material* amaterial) +{ + if(lv!= 0) lv-> SetMaterial(amaterial); + if(lvsub!= 0) lvsub-> SetMaterial(amaterial); +} + +inline G4Material* G4EzVolume::GetMaterial() const +{ + if(lv!=0) return lv-> GetMaterial(); + else return 0; +} + +inline G4int G4EzVolume::GetNofPlacements() const { return nplacement; } + +inline void G4EzVolume::SetVisibility(G4bool qvisible) +{ + if(va!=0) va-> SetVisibility(qvisible); +} + +inline void G4EzVolume::SetColor(const G4Color& color) +{ + if(va!=0) va-> SetColor(color); +} + +inline void G4EzVolume::SetColor(G4double red, G4double green, G4double blue) +{ + if(va!=0) va-> SetColor(red, green, blue); +} + +#endif diff --git a/environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.cc b/environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.cc new file mode 100644 index 0000000000..14d1bcc40e --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.cc @@ -0,0 +1,89 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// G4EzVoxelParameterization.cc +// +// 2005 Q +// ==================================================================== +#include "G4EzVoxelParameterization.hh" +#include "G4Box.hh" +#include "G4VPhysicalVolume.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +////////////////////////////////////////////////////////////////////////// +G4EzVoxelParameterization::G4EzVoxelParameterization + (G4double ddx, G4double ddy, G4double ddz, G4int nx, G4int ny, G4int nz) + : voxelSize(ddx, ddy, ddz), motherSize(ddx*nx, ddy*ny, ddz*nz) +////////////////////////////////////////////////////////////////////////// +{ + nvoxels[0]= nx; + nvoxels[1]= ny; + nvoxels[2]= nz; +} + + +/////////////////////////////////////////////////////// +G4EzVoxelParameterization::~G4EzVoxelParameterization() +/////////////////////////////////////////////////////// +{ +} + + +/////////////////////////////////////////////////////////// +void G4EzVoxelParameterization::ComputeTransformation + (const G4int copyNo, G4VPhysicalVolume* physVol) const +/////////////////////////////////////////////////////////// +{ + // copyNo-> index + G4int nxy= nvoxels[0]*nvoxels[1]; + G4int iz= copyNo/nxy; + G4int ixy= copyNo - iz*nxy; + G4int iy= ixy/nvoxels[0]; + G4int ix= ixy-iy*nvoxels[0]; + + // voxel position + G4double px= voxelSize[0]*(ix+0.5) - motherSize[0]/2.; + G4double py= voxelSize[1]*(iy+0.5) - motherSize[1]/2.; + G4double pz= voxelSize[2]*(iz+0.5) - motherSize[2]/2.; + + physVol-> SetTranslation(G4ThreeVector(px, py, pz)); + +} + + +////////////////////////////////////////////////////////////////////////////// +void G4EzVoxelParameterization::ComputeDimensions + (G4Box& /*aBox*/, const G4int /*copyNo*/, const G4VPhysicalVolume* /*physVol*/) const +////////////////////////////////////////////////////////////////////////////// +{ + return; +} + diff --git a/environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.hh b/environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.hh new file mode 100644 index 0000000000..dd8d97632e --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.hh @@ -0,0 +1,63 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// G4EzVoxelParameterization.hh +// +// 2005 Q +// ==================================================================== +#ifndef G4EZ_VOXEL_PARAMETERIZATION_H +#define G4EZ_VOXEL_PARAMETERIZATION_H + +#include "G4VPVParameterisation.hh" +#include "G4ThreeVector.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class G4EzVoxelParameterization : public G4VPVParameterisation { +protected: + G4ThreeVector voxelSize; + G4ThreeVector motherSize; + G4int nvoxels[3]; + +public: + G4EzVoxelParameterization(G4double ddx, G4double ddy, G4double ddz, + G4int nx, G4int ny, G4int nz); + + ~G4EzVoxelParameterization(); + + virtual void ComputeTransformation(const G4int copyNo, + G4VPhysicalVolume* physVol) const; + + using G4VPVParameterisation::ComputeDimensions; + virtual void ComputeDimensions(G4Box& aBox, const G4int copyNo, + const G4VPhysicalVolume* physVol) const; +}; + +#endif diff --git a/environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.cc b/environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.cc new file mode 100644 index 0000000000..0c317efa4c --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.cc @@ -0,0 +1,137 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// G4EzWorld.cc +// +// 2005 Q +// ==================================================================== +#include "G4EzWorld.hh" +#include "G4Element.hh" +#include "G4Material.hh" +#include "G4Box.hh" +#include "G4LogicalVolume.hh" +#include "G4PVPlacement.hh" +#include "G4VisAttributes.hh" +#include "G4RunManager.hh" +#include "G4PhysicalConstants.hh" + +G4VPhysicalVolume* G4EzWorld::world= G4EzWorld::CreateWorld(); + +// ==================================================================== +// +// class description +// +// ==================================================================== + +////////////////////// +G4EzWorld::G4EzWorld() +////////////////////// +{ +} + +/////////////////////// +G4EzWorld::~G4EzWorld() +/////////////////////// +{ + world= 0; +} + + +////////////////////////////////////////////////////////// +G4VPhysicalVolume* G4EzWorld::CreateWorld + (G4double dx, G4double dy, G4double dz) +////////////////////////////////////////////////////////// +{ + // default matetial is "vacuum" + G4Material* vacuum= G4Material::GetMaterial("_Vacuum", false); + + if(vacuum==0) { + G4Element* elN= new G4Element("_N", "", 7., 14.00674*g/mole); + G4Element* elO= new G4Element("_O", "", 8., 15.9994*g/mole); + + vacuum= new G4Material("_Vacuum", universe_mean_density, 2); + vacuum-> AddElement(elN, 0.7); + vacuum-> AddElement(elO, 0.3); + } + + G4Box* sdworld= new G4Box("world", dx/2., dy/2., dz/2.); + G4LogicalVolume* lvworld= new G4LogicalVolume(sdworld, vacuum, "word"); + G4PVPlacement* aworld= new G4PVPlacement(0, G4ThreeVector(), "world", + lvworld, 0, false, 0); + + // vis. attributes + G4VisAttributes* vaworld= new G4VisAttributes(G4Color(1.,1.,1.)); + vaworld-> SetForceWireframe(true); + lvworld-> SetVisAttributes(vaworld); + + return aworld; + +} + + +//////////////////////////////////////////////////////////// +void G4EzWorld::Reset(G4double dx, G4double dy, G4double dz) +//////////////////////////////////////////////////////////// +{ + delete world; + world= CreateWorld(dx, dy, dz); + + G4RunManager* runManager= G4RunManager::GetRunManager(); + runManager-> DefineWorldVolume(world); +} + + +///////////////////////////////////////////////////////////// +void G4EzWorld::Resize(G4double dx, G4double dy, G4double dz) +///////////////////////////////////////////////////////////// +{ + G4Box* box= dynamic_cast(world-> GetLogicalVolume()-> GetSolid()); + box-> SetXHalfLength(dx/2.); + box-> SetYHalfLength(dy/2.); + box-> SetZHalfLength(dz/2.); + + G4RunManager* runManager= G4RunManager::GetRunManager(); + runManager-> GeometryHasBeenModified(); +} + + +////////////////////////////////////////////////// +void G4EzWorld::SetMaterial(G4Material* amaterial) +////////////////////////////////////////////////// +{ + world-> GetLogicalVolume()-> SetMaterial(amaterial); +} + + +////////////////////////////////////////// +void G4EzWorld::SetVisibility(G4bool qvis) +////////////////////////////////////////// +{ + G4VisAttributes* vaworld= const_cast( + world-> GetLogicalVolume()-> GetVisAttributes()); + vaworld-> SetVisibility(qvis); +} + diff --git a/environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.hh b/environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.hh new file mode 100644 index 0000000000..79991b2365 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.hh @@ -0,0 +1,75 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// G4EzWorld.hh +// +// Utility class for supporting creating user geometry +// +// management of a world volume +// +// 2005 Q +// ==================================================================== +#ifndef G4_EZ_WORLD_H +#define G4_EZ_WORLD_H + +#include "globals.hh" +#include "G4SystemOfUnits.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class G4Material; +class G4VPhysicalVolume; + +class G4EzWorld { +protected: + // world volume is automatically presented. + static G4VPhysicalVolume* world; + static G4VPhysicalVolume* CreateWorld(G4double dx=1.*m, + G4double dy=1.*m, + G4double dz=1.*m); +public: + G4EzWorld(); + ~G4EzWorld(); + + static G4VPhysicalVolume* GetWorldVolume(); + + static void Reset(G4double dx, G4double dy, G4double dz); + static void Resize(G4double dx, G4double dy, G4double dz); + static void SetMaterial(G4Material* amaterial); + static void SetVisibility(G4bool qvis); + +}; + +// ==================================================================== +// inline functions +// ==================================================================== + +inline G4VPhysicalVolume* G4EzWorld::GetWorldVolume() { return world; } + +#endif diff --git a/environments/g4py/tests/g4pytest/ezgeom/__init__.py b/environments/g4py/tests/g4pytest/ezgeom/__init__.py new file mode 100644 index 0000000000..e74f584ed2 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/__init__.py @@ -0,0 +1 @@ +from ._ezgeom import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/ezgeom/pyEzgeom.cc b/environments/g4py/tests/g4pytest/ezgeom/pyEzgeom.cc new file mode 100644 index 0000000000..e7f72716e3 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/pyEzgeom.cc @@ -0,0 +1,158 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// pyEZgeom.cc +// +// [ezgeom] +// a site-module of Geant4Py +// +// An easy way to build geometry +// +// 2005 Q +// ==================================================================== +#include +#include "EzDetectorConstruction.hh" +#include "G4EzWorld.hh" +#include "G4EzVolume.hh" +#include "G4RunManager.hh" +#include "G4VSensitiveDetector.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyEZgeom { + +// methods in global namespace +void Construct() +{ + G4RunManager* runMgr= G4RunManager::GetRunManager(); + runMgr-> SetUserInitialization(new EzDetectorConstruction); +} + +void ResetWorld(G4double dx, G4double dy, G4double dz) +{ + G4EzWorld::Reset(dx, dy, dz); +} + +void ResizeWorld(G4double dx, G4double dy, G4double dz) +{ + G4EzWorld::Resize(dx, dy, dz); +} + + +void SetWorldMaterial(G4Material* amaterial) +{ + G4EzWorld::SetMaterial(amaterial); +} + + +void SetWorldVisibility(G4bool qvis) +{ + G4EzWorld::SetVisibility(qvis); +} + + +// CreateTubeVolume +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_CreateTubeVolume, + CreateTubeVolume, 4, 6) + +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_CreateConeVolume, + CreateConeVolume, 6, 8) + +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_CreateSphereVolume, + CreateSphereVolume, 3, 7) + +// PlaceIt +G4VPhysicalVolume*(G4EzVolume::*f1_PlaceIt) + (const G4ThreeVector&, G4int, G4EzVolume*) = &G4EzVolume::PlaceIt; + +G4VPhysicalVolume*(G4EzVolume::*f2_PlaceIt) + (const G4Transform3D&, G4int, G4EzVolume*) = &G4EzVolume::PlaceIt; + +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_PlaceIt, PlaceIt, 1, 3) + +// ReplicateIt +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_ReplicateIt, ReplicateIt, 4, 5) + +// SetColor +void (G4EzVolume::*f1_SetColor)(const G4Color&) = &G4EzVolume::SetColor; +void (G4EzVolume::*f2_SetColor)(G4double, G4double, G4double) + = &G4EzVolume::SetColor; + +} + +using namespace pyEZgeom; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_ezgeom) { + + class_("G4EzVolume", "an easy way of geometry configuration") + .def(init()) + // --- + .def("CreateBoxVolume", &G4EzVolume::CreateBoxVolume) + .def("CreateTubeVolume", &G4EzVolume::CreateTubeVolume, + f_CreateTubeVolume()) + .def("CreateConeVolume", &G4EzVolume::CreateConeVolume, + f_CreateConeVolume()) + .def("CreateShpereVolume", &G4EzVolume::CreateSphereVolume, + f_CreateSphereVolume()) + .def("CreateOrbVolume", &G4EzVolume::CreateOrbVolume) + // --- + .def("SetSold", &G4EzVolume::SetSolid) + .def("GetSold", &G4EzVolume::GetSolid, + return_value_policy()) + .def("SetMaterial", &G4EzVolume::SetMaterial) + .def("GetMaterial", &G4EzVolume::GetMaterial, + return_value_policy()) + // --- + .def("PlaceIt", f1_PlaceIt, + f_PlaceIt()[return_value_policy()]) + .def("PlaceIt", f2_PlaceIt, + f_PlaceIt()[return_value_policy()]) + .def("ReplicateIt", &G4EzVolume::ReplicateIt, + f_ReplicateIt()[return_value_policy()]) + .def("VoxelizeIt", &G4EzVolume::VoxelizeIt) + // --- + .def("SetSensitiveDetector", &G4EzVolume::SetSensitiveDetector) + // --- + .def("SetColor", f1_SetColor) + .def("SetColor", f2_SetColor) + .def("SetVisibility", &G4EzVolume::SetVisibility) + ; + + // ------------------------------------------------------------------- + def("Construct", Construct); + def("ResetWorld", ResetWorld); + def("ResizeWorld", ResizeWorld); + def("SetWorldMaterial", SetWorldMaterial); + def("SetWorldVisibility", SetWorldVisibility); + +} diff --git a/environments/g4py/tests/gtest01/CMakeLists.txt b/environments/g4py/tests/gtest01/CMakeLists.txt new file mode 100644 index 0000000000..d8d4d387d1 --- /dev/null +++ b/environments/g4py/tests/gtest01/CMakeLists.txt @@ -0,0 +1,4 @@ +add_subdirectory(module) +configure_file(test.py test.py) +add_test(NAME geant4py-test01 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test01 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest01/gun.mac b/environments/g4py/tests/gtest01/gun.mac new file mode 100644 index 0000000000..035f4c4c59 --- /dev/null +++ b/environments/g4py/tests/gtest01/gun.mac @@ -0,0 +1,8 @@ +# gun.mac + +/gun/number 1 +/gun/particle e- +/gun/energy 200 MeV +/gun/direction 0.2 0. 1. +/gun/position 0. 0. -14.9 cm + diff --git a/environments/g4py/tests/gtest01/module/CMakeLists.txt b/environments/g4py/tests/gtest01/module/CMakeLists.txt new file mode 100644 index 0000000000..9e6c0d446c --- /dev/null +++ b/environments/g4py/tests/gtest01/module/CMakeLists.txt @@ -0,0 +1,16 @@ +# - build test library + +# library +set(_TARGET gtest01) +g4py_add_module(${_TARGET} + Particles.cc + PhysicsListEMstd.cc + QDetectorConstruction.cc + QEventAction.cc + QMaterials.cc + QPhysicsList.cc + QPrimaryGeneratorAction.cc + gtest01.cc +) +target_link_libraries(${_TARGET} PRIVATE G4particles G4processes G4run) + diff --git a/environments/g4py/tests/gtest01/module/Particles.cc b/environments/g4py/tests/gtest01/module/Particles.cc new file mode 100644 index 0000000000..be72d0f596 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/Particles.cc @@ -0,0 +1,80 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// Particles.cc +// +// Physics list for defining particles +// +// ==================================================================== +#include "Particles.hh" + +#include "G4LeptonConstructor.hh" +#include "G4BosonConstructor.hh" +#include "G4MesonConstructor.hh" +#include "G4BaryonConstructor.hh" +#include "G4ShortLivedConstructor.hh" +#include "G4IonConstructor.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +////////////////////////////////////// +Particles::Particles() + : G4VPhysicsConstructor("Particles") +////////////////////////////////////// +{ +} + + +/////////////////////// +Particles::~Particles() +/////////////////////// +{ +} + + +/////////////////////////////////// +void Particles::ConstructParticle() +/////////////////////////////////// +{ + G4LeptonConstructor::ConstructParticle(); + G4BosonConstructor::ConstructParticle(); + G4MesonConstructor::ConstructParticle(); + G4BaryonConstructor::ConstructParticle(); + G4ShortLivedConstructor::ConstructParticle(); + G4IonConstructor::ConstructParticle(); +} + + +////////////////////////////////// +void Particles::ConstructProcess() +////////////////////////////////// +{ +} + diff --git a/environments/g4py/tests/gtest01/module/Particles.hh b/environments/g4py/tests/gtest01/module/Particles.hh new file mode 100644 index 0000000000..23546113c8 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/Particles.hh @@ -0,0 +1,53 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// Particles.hh +// +// 2004 Q +// ==================================================================== +#ifndef PARTICLES_H +#define PARTICLES_H + +#include "G4VPhysicsConstructor.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class Particles : public G4VPhysicsConstructor { + +public: + Particles(); + ~Particles(); + + virtual void ConstructParticle(); + virtual void ConstructProcess(); +}; + +#endif + diff --git a/environments/g4py/tests/gtest01/module/PhysicsListEMstd.cc b/environments/g4py/tests/gtest01/module/PhysicsListEMstd.cc new file mode 100644 index 0000000000..d1a2ac434b --- /dev/null +++ b/environments/g4py/tests/gtest01/module/PhysicsListEMstd.cc @@ -0,0 +1,121 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// PhysicsListEMstd.cc +// +// Physics list for electron/positron/gamma +// EM-standard package w/ default parameters +// +// ==================================================================== +#include "PhysicsListEMstd.hh" + +#include "G4ProcessManager.hh" +#include "G4ParticleDefinition.hh" + +#include "G4Gamma.hh" +#include "G4Electron.hh" +#include "G4Positron.hh" +#include "G4NeutrinoE.hh" +#include "G4AntiNeutrinoE.hh" + +#include "G4ComptonScattering.hh" +#include "G4GammaConversion.hh" +#include "G4PhotoElectricEffect.hh" +#include "G4eMultipleScattering.hh" +#include "G4eIonisation.hh" +#include "G4eBremsstrahlung.hh" +#include "G4eplusAnnihilation.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////////////////// +PhysicsListEMstd::PhysicsListEMstd() + : G4VPhysicsConstructor("EM-std") +//////////////////////////////////// +{ +} + + +///////////////////////////////////// +PhysicsListEMstd::~PhysicsListEMstd() +///////////////////////////////////// +{ +} + + +////////////////////////////////////////// +void PhysicsListEMstd::ConstructParticle() +////////////////////////////////////////// +{ +} + + +///////////////////////////////////////// +void PhysicsListEMstd::ConstructProcess() +///////////////////////////////////////// +{ + G4ProcessManager* pm; + + // ---------------------------------------------------------- + // gamma physics + // ---------------------------------------------------------- + pm= G4Gamma::Gamma()-> GetProcessManager(); + pm-> AddDiscreteProcess(new G4PhotoElectricEffect); + pm-> AddDiscreteProcess(new G4ComptonScattering); + pm-> AddDiscreteProcess(new G4GammaConversion); + + // ---------------------------------------------------------- + // electron physics + // ---------------------------------------------------------- + G4eMultipleScattering* msc= new G4eMultipleScattering; + G4eIonisation* eion= new G4eIonisation; + G4eBremsstrahlung* ebrems= new G4eBremsstrahlung; + + pm= G4Electron::Electron()->GetProcessManager(); + pm-> AddProcess(msc, ordInActive, 1, 1); + pm-> AddProcess(eion, ordInActive, 2, 2); + pm-> AddProcess(ebrems, ordInActive, ordInActive, 3); + + // ---------------------------------------------------------- + // positron physics + // ---------------------------------------------------------- + msc= new G4eMultipleScattering; + eion= new G4eIonisation; + ebrems= new G4eBremsstrahlung; + G4eplusAnnihilation* annihilation= new G4eplusAnnihilation; + + pm= G4Positron::Positron()-> GetProcessManager(); + pm-> AddProcess(msc, ordInActive, 1, 1); + pm-> AddProcess(eion, ordInActive, 2, 2); + pm-> AddProcess(ebrems, ordInActive, ordInActive, 3); + pm-> AddProcess(annihilation, 0, ordInActive, 4); + +} + diff --git a/environments/g4py/tests/gtest01/module/PhysicsListEMstd.hh b/environments/g4py/tests/gtest01/module/PhysicsListEMstd.hh new file mode 100644 index 0000000000..deacfb9997 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/PhysicsListEMstd.hh @@ -0,0 +1,53 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// PhysicsListEMstd.hh +// +// 2004 Q +// ==================================================================== +#ifndef PHYSICS_LIST_EM_STD_H +#define PHYSICS_LIST_EM_STD_H + +#include "G4VPhysicsConstructor.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class PhysicsListEMstd : public G4VPhysicsConstructor { + +public: + PhysicsListEMstd(); + ~PhysicsListEMstd(); + + virtual void ConstructParticle(); + virtual void ConstructProcess(); +}; + +#endif + diff --git a/environments/g4py/tests/gtest01/module/QDetectorConstruction.cc b/environments/g4py/tests/gtest01/module/QDetectorConstruction.cc new file mode 100644 index 0000000000..3863c82ecf --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QDetectorConstruction.cc @@ -0,0 +1,144 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// QDetectorConstruction.cc +// +// 2005 Q +// ==================================================================== +#include "QDetectorConstruction.hh" + +#include "G4Material.hh" +#include "G4Tubs.hh" +#include "G4Box.hh" +#include "G4LogicalVolume.hh" +#include "G4PVPlacement.hh" +#include "G4VisAttributes.hh" +#include "G4SystemOfUnits.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +// constants (detector parameters) +static const G4double DXYZ_AREA= 30.*cm; + +////////////////////////////////////////////// +QDetectorConstruction::QDetectorConstruction() +////////////////////////////////////////////// +{ +} + +/////////////////////////////////////////////// +QDetectorConstruction::~QDetectorConstruction() +/////////////////////////////////////////////// +{ +} + +///////////////////////////////////////////////////// +G4VPhysicalVolume* QDetectorConstruction::Construct() +///////////////////////////////////////////////////// +{ + G4Material* mate; + G4VisAttributes* va; + + // ============================================================== + // world volume + // ============================================================== + G4Box* areaSolid= new G4Box("AREA", + DXYZ_AREA/2., DXYZ_AREA/2., DXYZ_AREA/2.); + + G4Material* vacuum= G4Material::GetMaterial("Vacuum"); + G4LogicalVolume* areaLV= new G4LogicalVolume(areaSolid, vacuum, "AREA_LV"); + G4PVPlacement* area= new G4PVPlacement(0, G4ThreeVector(), "AREA_PV", + areaLV, 0, false, 0); + // vis. attributes + va= new G4VisAttributes(G4Color(1.,1.,1.)); + va-> SetForceWireframe(true); + areaLV-> SetVisAttributes(va); + + // ============================================================== + // detectors + // ============================================================== + // voxel + const G4double dvoxel= 10.*mm; + const G4double dl= 10.*cm; + + G4Box* svoxel= new G4Box("voxel", dvoxel, dl, dvoxel); + mate= G4Material::GetMaterial("Vacuum"); + G4LogicalVolume* lvoxel= new G4LogicalVolume(svoxel, mate, "voxel"); + va= new G4VisAttributes(G4Color(0.,0.8,0.8)); + va-> SetVisibility(false); + lvoxel-> SetVisAttributes(va); + + G4int ix, iz; + G4int index=0; + for (iz=0; iz<5; iz++) { + for (ix=-7; ix<=7; ix++) { + G4double x0= (2.*ix)*cm; + G4double z0= (-13.+2.*iz)*cm; + /*G4PVPlacement* pvoxel=*/ new G4PVPlacement(0, G4ThreeVector(x0, 0., z0), + lvoxel, "voxel", areaLV, false, index); + index++; + } + } + + // tube + //G4Tubs* stube= new G4Tubs("tube", 15./2.*mm, 19./2.*mm, dl, + G4Tubs* stube= new G4Tubs("tube", 0.*mm, 19./2.*mm, dl, + 0., 360.*deg); + mate= G4Material::GetMaterial("Al"); + G4LogicalVolume* ltube= new G4LogicalVolume(stube, mate, "tube"); + va= new G4VisAttributes(G4Color(0.,0.8,0.8)); + ltube-> SetVisAttributes(va); + + G4RotationMatrix* rmtube= new G4RotationMatrix; + rmtube-> rotateX(-90.*deg); + /*G4PVPlacement* ptube=*/ new G4PVPlacement(rmtube, G4ThreeVector(), + ltube, "tube", lvoxel, false, 0); + + // cal + const G4double dxycal= 25.*mm; + const G4double dzcal= 3.*cm; + + G4Box* scal= new G4Box("cal", dxycal, dxycal, dzcal); + mate= G4Material::GetMaterial("CsI"); + G4LogicalVolume* lcal= new G4LogicalVolume(scal, mate, "cal"); + va= new G4VisAttributes(G4Color(0.5,0.5,0.)); + lcal-> SetVisAttributes(va); + + index= 0; + for (ix=-2; ix<=2; ix++) { + G4double x0= (5.*ix)*cm; + /*G4PVPlacement* pcal=*/ new G4PVPlacement(0, G4ThreeVector(x0, 0., 2.*cm), + lcal, "cal", areaLV, false, index); + index++; + } + + return area; +} + diff --git a/environments/g4py/tests/gtest01/module/QDetectorConstruction.hh b/environments/g4py/tests/gtest01/module/QDetectorConstruction.hh new file mode 100644 index 0000000000..5b392c7da9 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QDetectorConstruction.hh @@ -0,0 +1,52 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// QDetectorConstruction.hh +// +// 2005 Q +// ==================================================================== +#ifndef Q_DETECTOR_CONSTRUCTION_H +#define Q_DETECTOR_CONSTRUCTION_H + +#include "G4VUserDetectorConstruction.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class QDetectorConstruction : public G4VUserDetectorConstruction { + +public: + QDetectorConstruction(); + ~QDetectorConstruction(); + + virtual G4VPhysicalVolume* Construct(); + +}; + +#endif diff --git a/environments/g4py/tests/gtest01/module/QEventAction.cc b/environments/g4py/tests/gtest01/module/QEventAction.cc new file mode 100644 index 0000000000..b26aa86379 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QEventAction.cc @@ -0,0 +1,68 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// QEventAction.cc +// +// 2005 Q +// ==================================================================== +#include "QEventAction.hh" +#include "globals.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////////// +QEventAction::QEventAction() +//////////////////////////// +{ +} + + +///////////////////////////// +QEventAction::~QEventAction() +///////////////////////////// +{ +} + + +//////////////////////////////////////////////////////////// +void QEventAction::BeginOfEventAction(const G4Event* /*aevent*/) +//////////////////////////////////////////////////////////// +{ + G4cout << "QEventAction::BofEA is called." << G4endl; +} + + +////////////////////////////////////////////////////////// +void QEventAction::EndOfEventAction(const G4Event* /*aevent*/) +////////////////////////////////////////////////////////// +{ + G4cout << "QEventAction::EofEA is called." << G4endl; +} + diff --git a/environments/g4py/tests/gtest01/module/QEventAction.hh b/environments/g4py/tests/gtest01/module/QEventAction.hh new file mode 100644 index 0000000000..51359111c9 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QEventAction.hh @@ -0,0 +1,52 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// QEventAction.hh +// +// 2005 Q +// ==================================================================== +#ifndef Q_EVENT_ACTION_H +#define Q_EVENT_ACTION_H + +#include "G4UserEventAction.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class QEventAction : public G4UserEventAction { +public: + QEventAction(); + ~QEventAction(); + + virtual void BeginOfEventAction(const G4Event* aevent); + virtual void EndOfEventAction(const G4Event* aevent); + +}; + +#endif diff --git a/environments/g4py/tests/gtest01/module/QMaterials.cc b/environments/g4py/tests/gtest01/module/QMaterials.cc new file mode 100644 index 0000000000..a62e45314c --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QMaterials.cc @@ -0,0 +1,163 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// QMaterials.cc +// +// 2005 Q +// ==================================================================== +#include "QMaterials.hh" +#include "G4Material.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////// +QMaterials::QMaterials() +//////////////////////// +{ +} + + +///////////////////////// +QMaterials::~QMaterials() +///////////////////////// +{ +} + + +//////////////////////////// +void QMaterials::Construct() +//////////////////////////// +{ + G4double A, Z; + + // ------------------------------------------------------------------------ + // Elements + // ------------------------------------------------------------------------ + G4Element* elH = new G4Element("Hydrogen","H", Z=1., A=1.00794*g/mole); + G4Element* elC = new G4Element("Carbon", "C", Z=6., A= 12.011 *g/mole); + G4Element* elN = new G4Element("Nitrogen","N", Z=7., A= 14.00674*g/mole); + G4Element* elO = new G4Element("Oxygen", "O", Z=8., A= 15.9994*g/mole); + G4Element* elNa = new G4Element("Sodium", "Na", Z=11., A= 22.989768*g/mole); + G4Element* elSi = new G4Element("Silicon", "Si", Z=14., A= 28.0855*g/mole); + G4Element* elAr = new G4Element("Argon", "Ar", Z=18., A= 39.948*g/mole); + G4Element* elI = new G4Element("Iodine", "I", Z=53., A= 126.90447*g/mole); + G4Element* elCs = new G4Element("Cesium", "Cs", Z=55., A= 132.90543*g/mole); + + // ------------------------------------------------------------------------ + // Materials + // ------------------------------------------------------------------------ + G4double density, massfraction; + G4int natoms, nel; + + // temperature of experimental hall is controlled at 20 degree. + const G4double expTemp= STP_Temperature+20.*kelvin; + + // vacuum + density= universe_mean_density; + G4Material* Vacuum= new G4Material("Vacuum", density, nel=2); + Vacuum-> AddElement(elN, .7); + Vacuum-> AddElement(elO, .3); + + // air + density= 1.2929e-03 *g/cm3; // at 20 degree + G4Material* Air= new G4Material("Air", density, nel=3, + kStateGas, expTemp); + G4double ttt= 75.47+23.20+1.28; + Air-> AddElement(elN, massfraction= 75.47/ttt); + Air-> AddElement(elO, massfraction= 23.20/ttt); + Air-> AddElement(elAr, massfraction= 1.28/ttt); + + // Ar gas + A= 39.948 *g/mole; + const G4double denAr= 1.782e-03 *g/cm3 * STP_Temperature/expTemp; + G4Material* Ar= new G4Material("ArgonGas", Z=18., A, denAr, + kStateGas, expTemp); + + // ethane (C2H6) + const G4double denEthane= 1.356e-3 *g/cm3 * STP_Temperature/expTemp; + G4Material* Ethane= new G4Material("Ethane", denEthane, nel=2, + kStateGas, expTemp); + Ethane-> AddElement(elC, natoms=2); + Ethane-> AddElement(elH, natoms=6); + + // Ar(50%) + ethane(50%) mixture + density= (denAr+denEthane)/2.; + G4Material* ArEthane= new G4Material("ArEthane", density, nel=2, + kStateGas, expTemp); + ArEthane-> AddMaterial(Ar, massfraction= denAr/density/2.); + ArEthane-> AddMaterial(Ethane, massfraction= denEthane/density/2.); + + // silicon + A= 28.0855 *g/mole; + density= 2.33 *g/cm3; + /*G4Material* Si=*/ new G4Material("SiliconWafer", Z=14., A, density); + + // alminium + A= 26.98 *g/mole; + density= 2.70 *g/cm3; + /*G4Material* Al=*/ new G4Material("Al", Z=13., A, density); + + // iron + A= 55.847 *g/mole; + density= 7.87 *g/cm3; + /*G4Material* Fe=*/ new G4Material("Iron", Z=26., A, density); + + // lead + A= 207.2 *g/mole; + density= 11.35 *g/cm3; + /*G4Material* Pb=*/ new G4Material("Lead", Z=82., A, density); + + // scintillator (Polystyene(C6H5CH=CH2)) + density= 1.032 *g/cm3; + G4Material* Scinti= new G4Material("Scinti", density, nel=2); + Scinti-> AddElement(elC, natoms=8); + Scinti-> AddElement(elH, natoms=8); + + // quartz (SiO2, crystalline) + density= 2.64 *g/cm3; + G4Material* Quartz= new G4Material("Quartz", density, nel= 2); + Quartz-> AddElement(elSi, natoms=1); + Quartz-> AddElement(elO, natoms=2); + + // NaI crystal + density= 3.67 *g/cm3; + G4Material* NaI= new G4Material("NaI", density, nel= 2); + NaI-> AddElement(elNa, natoms=1); + NaI-> AddElement(elI, natoms=1); + + // CsI crystal + density= 4.51 *g/cm3; + G4Material* CsI= new G4Material("CsI", density, nel= 2); + CsI-> AddElement(elCs, natoms=1); + CsI-> AddElement(elI, natoms=1); + +} diff --git a/environments/g4py/tests/gtest01/module/QMaterials.hh b/environments/g4py/tests/gtest01/module/QMaterials.hh new file mode 100644 index 0000000000..8d9dab8996 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QMaterials.hh @@ -0,0 +1,50 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// QMaterials.hh +// +// 2005 Q +// ==================================================================== +#ifndef Q_MATERIALS_H +#define Q_MATERIALS_H + +#include "globals.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class QMaterials { +public: + QMaterials(); + ~QMaterials(); + + void Construct(); +}; + +#endif + diff --git a/environments/g4py/tests/gtest01/module/QPhysicsList.cc b/environments/g4py/tests/gtest01/module/QPhysicsList.cc new file mode 100644 index 0000000000..4988eb5dfd --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QPhysicsList.cc @@ -0,0 +1,72 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// QPhysicsList.cc +// +// 2005 Q +// ==================================================================== +#include "QPhysicsList.hh" +#include "Particles.hh" +#include "PhysicsListEMstd.hh" +#include "G4SystemOfUnits.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////////// +QPhysicsList::QPhysicsList() + : G4VModularPhysicsList() +//////////////////////////// +{ + // default cut value (1.0mm) + defaultCutValue = 1.*mm; + SetVerboseLevel(1); + + // particles + RegisterPhysics(new Particles); + + // EM Physics + RegisterPhysics(new PhysicsListEMstd); +} + +///////////////////////////// +QPhysicsList::~QPhysicsList() +///////////////////////////// +{ +} + +//////////////////////////// +void QPhysicsList::SetCuts() +//////////////////////////// +{ + // " G4VUserPhysicsList::SetCutsWithDefault" method sets + // the default cut value for all particle types + SetCutsWithDefault(); +} + diff --git a/environments/g4py/tests/gtest01/module/QPhysicsList.hh b/environments/g4py/tests/gtest01/module/QPhysicsList.hh new file mode 100644 index 0000000000..cb2e344687 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QPhysicsList.hh @@ -0,0 +1,51 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// QPhysicsList.hh +// +// 2005 Q +// ==================================================================== +#ifndef Q_PHYSICS_LIST_H +#define Q_PHYSICS_LIST_H + +#include "G4VModularPhysicsList.hh" +#include "globals.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class QPhysicsList: public G4VModularPhysicsList { +public: + QPhysicsList(); + ~QPhysicsList(); + + virtual void SetCuts(); +}; + +#endif diff --git a/environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.cc b/environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.cc new file mode 100644 index 0000000000..fb7702db82 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.cc @@ -0,0 +1,60 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// QPrimaryGeneratorAction.cc +// +// 2005 Q +// ==================================================================== +#include "QPrimaryGeneratorAction.hh" +#include "G4ParticleGun.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +////////////////////////////////////////////////// +QPrimaryGeneratorAction::QPrimaryGeneratorAction() +////////////////////////////////////////////////// +{ + particleGun= new G4ParticleGun; +} + +/////////////////////////////////////////////////// +QPrimaryGeneratorAction::~QPrimaryGeneratorAction() +/////////////////////////////////////////////////// +{ + delete particleGun; +} + +///////////////////////////////////////////////////////////////// +void QPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) +///////////////////////////////////////////////////////////////// +{ + particleGun-> GeneratePrimaryVertex(anEvent); +} + diff --git a/environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.hh b/environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.hh new file mode 100644 index 0000000000..cefc3d33aa --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.hh @@ -0,0 +1,63 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// QPrimaryGeneratorAction.hh +// +// 2005 Q +// ==================================================================== +#ifndef Q_PRIMARY_GENERATOR_ACTION_H +#define Q_PRIMARY_GENERATOR_ACTION_H + +#include "G4VUserPrimaryGeneratorAction.hh" + +class G4ParticleGun; + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class QPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { +private: + // use G4 particle gun + G4ParticleGun* particleGun; + +public: + QPrimaryGeneratorAction(); + ~QPrimaryGeneratorAction(); + + G4ParticleGun* GetParticleGun() const; + + virtual void GeneratePrimaries(G4Event* anEvent); +}; + +// ==================================================================== +// inline functions +// ==================================================================== +inline G4ParticleGun* QPrimaryGeneratorAction::GetParticleGun() const +{ return particleGun; } + +#endif diff --git a/environments/g4py/tests/gtest01/module/gtest01.cc b/environments/g4py/tests/gtest01/module/gtest01.cc new file mode 100644 index 0000000000..44dc1347e4 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/gtest01.cc @@ -0,0 +1,73 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// ==================================================================== +// gtest01.cc +// +// python wrapper for user application +// 2005 Q +// ==================================================================== +#include +#include "QMaterials.hh" +#include "QDetectorConstruction.hh" +#include "QPhysicsList.hh" +#include "QPrimaryGeneratorAction.hh" +#include "G4ParticleGun.hh" +#include "QEventAction.hh" + +using namespace boost::python; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(gtest01) { + class_("QMaterials", "my material") + .def("Construct", &QMaterials::Construct) + ; + + class_ > + ("QDetectorConstruction", "my detector") + ; + + class_ > + ("QPhysicsList", "my physics list") + ; + + class_ > + ("QPrimaryGeneratorAction", "my primary generator action") + .def("GetParticleGun", &QPrimaryGeneratorAction::GetParticleGun, + return_internal_reference<>()) + ; + + class_ > + ("QEventAction", "my event action") + ; +} + diff --git a/environments/g4py/tests/gtest01/root_test.py b/environments/g4py/tests/gtest01/root_test.py new file mode 100755 index 0000000000..091ca04fa6 --- /dev/null +++ b/environments/g4py/tests/gtest01/root_test.py @@ -0,0 +1,143 @@ +#!/usr/bin/python +# ================================================================== +# python script for Geant4Py test +# +# gtest01 +# - check basic control flow +# ================================================================== +from Geant4 import * +import gtest01 +import ROOT + +# ================================================================== +# ROOT PART # +# ================================================================== + +# ------------------------------------------------------------------ +def init_root(): +# ------------------------------------------------------------------ + ROOT.gROOT.Reset() + + # plot style + ROOT.gStyle.SetTextFont(82) + ROOT.gStyle.SetTitleFont(82, "X") + ROOT.gStyle.SetLabelFont(82, "X") + ROOT.gStyle.SetTitleFont(82, "Y") + ROOT.gStyle.SetLabelFont(82, "Y") + + #ROOT.gStyle.SetOptTitle(0) + ROOT.gStyle.SetErrorX(0) + + canvas= ROOT.TCanvas("g4py_plots", + "Geant4Py Sample Plots", + 620, 30, 600, 400) + + #canvas.Divide(2,2); + #canvas.SetFillColor(29) + + canvas.SetGrid() + + return canvas + +# ------------------------------------------------------------------ +def hini(): +# ------------------------------------------------------------------ + global hist1 + hist1= ROOT.TH1D("dE/dx/step", "dE/dx", 100, 0., 2000.) + hist1.SetXTitle("(keV)") + + +# ------------------------------------------------------------------ +def hshow(): +# ------------------------------------------------------------------ + hist1.Draw() + +# ================================================================== +# Geant4 PART # +# ================================================================== + +# ================================================================== +# user actions in python +# ================================================================== +class MyPrimaryGeneratorAction(G4VUserPrimaryGeneratorAction): + "My Primary Generator Action" + + def __init__(self): + G4VUserPrimaryGeneratorAction.__init__(self) + self.particleGun= G4ParticleGun(1) + + def GeneratePrimaries(self, event): + self.particleGun.GeneratePrimaryVertex(event) + +# ------------------------------------------------------------------ +class MyRunAction(G4UserRunAction): + "My Run Action" + + def BeginOfRunAction(self, run): + print "*** #event to be processed (BRA)=", + run.numberOfEventToBeProcessed + + def EndOfRunAction(self, run): + print "*** run end run(ERA)=", run.runID + +# ------------------------------------------------------------------ +class MyEventAction(G4UserEventAction): + "My Event Action" + + def BeginOfEventAction(self, event): + print "*** current event (BEA)=", event.eventID + + def EndOfEventAction(self, event): + print "*** current event (EEA)=", event.eventID + +# ------------------------------------------------------------------ +class MySteppingAction(G4UserSteppingAction): + "My Stepping Action" + + def UserSteppingAction(self, step): + #print "*** dE/dx in current step=", step.GetTotalEnergyDeposit() + dedx= step.GetTotalEnergyDeposit() + if(dedx>0): + hist1.Fill(dedx/HEPUnit.keV) + +# ================================================================== +# main +# ================================================================== +g4pyCanvas= init_root() +hini() + +app= gtest01.MyApplication() +app.Configure() + +# set user actions... +myPGA= MyPrimaryGeneratorAction() +gRunManager.SetUserAction(myPGA) + +myRA= MyRunAction() +gRunManager.SetUserAction(myRA) + +#myEA= MyEventAction() +#gRunManager.SetUserAction(myEA) + +mySA= MySteppingAction() +gRunManager.SetUserAction(mySA) + + +# set particle gun +#ApplyUICommand("/control/execute gun.mac") +pg= myPGA.particleGun +pg.SetParticleByName("e-") +pg.SetParticleEnergy(200.*HEPUnit.MeV) +pg.SetParticleMomentumDirection(G4ThreeVector(0.2, 0., 1.)) +pg.SetParticlePosition(G4ThreeVector(0.,0.,-14.9)*HEPUnit.cm) + +# visualization +ApplyUICommand("/control/execute vis.mac") + +# beamOn +gRunManager.BeamOn(1000) + +# +hshow() + + diff --git a/environments/g4py/tests/gtest01/run.py b/environments/g4py/tests/gtest01/run.py new file mode 100755 index 0000000000..c254071d6f --- /dev/null +++ b/environments/g4py/tests/gtest01/run.py @@ -0,0 +1,123 @@ +#!/usr/bin/python +# ================================================================== +# python script for Geant4Py test +# +# gtest01 +# - check basic control flow +# ================================================================== +from Geant4 import * +import gtest01 +import random +#import thread + +# ================================================================== +# user actions in python +# ================================================================== +class MyPrimaryGeneratorAction(G4VUserPrimaryGeneratorAction): + "My Primary Generator Action" + + def __init__(self): + G4VUserPrimaryGeneratorAction.__init__(self) + self.particleGun= G4ParticleGun(1) + + def GeneratePrimaries(self, event): + #dx= random.gauss(0., 0.1) + dx=0. + self.particleGun.SetParticleMomentumDirection(G4ThreeVector(dx, 0., 1.)) + self.particleGun.GeneratePrimaryVertex(event) + +# ------------------------------------------------------------------ +class MyRunAction(G4UserRunAction): + "My Run Action" + + def BeginOfRunAction(self, run): + print "*** #event to be processed (BRA)=", + run.GetNumberOfEventToBeProcessed() + + def EndOfRunAction(self, run): + print "*** run end run(ERA)=", run.GetRunID() + +# ------------------------------------------------------------------ +class MyEventAction(G4UserEventAction): + "My Event Action" + + #def BeginOfEventAction(self, event): + #print "*** current event (BEA)=", event.GetEventID() + # pass + + #def EndOfEventAction(self, event): + # print "*** current event (EEA)=", event.GetEventID() + +# ------------------------------------------------------------------ +class MySteppingAction(G4UserSteppingAction): + "My Stepping Action" + + def UserSteppingAction(self, step): + #print "*** dE/dx in current step=", step.GetTotalEnergyDeposit() + track= step.GetTrack() + touchable= track.GetTouchable() + pv= touchable.GetVolume() + #print pv.GetCopyNo() + #print touchable.GetReplicaNumber(0) + +# ------------------------------------------------------------------ +class MyField(G4MagneticField): + "My Magnetic Field" + + def GetFieldValue(self, pos, time): + bfield= G4ThreeVector() + bfield.x= 0. + bfield.y= 5.*tesla + bfield.z= 0. + return bfield + +# ================================================================== +# main +# ================================================================== +qMaterials= gtest01.QMaterials() +qMaterials.Construct() + +qDC= gtest01.QDetectorConstruction() +gRunManager.SetUserInitialization(qDC) + +qPL= gtest01.QPhysicsList() +gRunManager.SetUserInitialization(qPL) + +# set user actions... +#qPGA= gtest01.QPrimaryGeneratorAction() +myPGA= MyPrimaryGeneratorAction() +gRunManager.SetUserAction(myPGA) + +#myRA= MyRunAction() +#gRunManager.SetUserAction(myRA) + +myEA= MyEventAction() +gRunManager.SetUserAction(myEA) + +mySA= MySteppingAction() +gRunManager.SetUserAction(mySA) + +# set particle gun +#ApplyUICommand("/control/execute gun.mac") +#pg= qPGA.GetParticleGun() +pg= myPGA.particleGun +pg.SetParticleByName("e-") +pg.SetParticleEnergy(200.*MeV) +pg.SetParticlePosition(G4ThreeVector(0.,0.,-14.9)*cm) + +# magnetic field +fieldMgr= gTransportationManager.GetFieldManager() +myField= G4UniformMagField(G4ThreeVector(0.,10.*tesla,0.)) +#myField= MyField() +fieldMgr.SetDetectorField(myField) +fieldMgr.CreateChordFinder(myField) + +gRunManager.Initialize() + +# visualization +gControlExecute("vis.mac") + +# beamOn +gRunManager.BeamOn(10) +#thread.start_new_thread(gRunManager.BeamOn, (100000)) + diff --git a/environments/g4py/tests/gtest01/test.py b/environments/g4py/tests/gtest01/test.py new file mode 100755 index 0000000000..5ce0964dd8 --- /dev/null +++ b/environments/g4py/tests/gtest01/test.py @@ -0,0 +1,118 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest01 +# - check basic control flow +# ================================================================== +from Geant4 import * +import gtest01 +import random + +# ================================================================== +# user actions in python +# ================================================================== +class MyPrimaryGeneratorAction(G4VUserPrimaryGeneratorAction): + "My Primary Generator Action" + + def __init__(self): + G4VUserPrimaryGeneratorAction.__init__(self) + self.particleGun= G4ParticleGun(1) + + def GeneratePrimaries(self, event): + #dx= random.gauss(0., 0.1) + dx=0. + self.particleGun.SetParticleMomentumDirection(G4ThreeVector(dx, 0., 1.)) + self.particleGun.GeneratePrimaryVertex(event) + +# ------------------------------------------------------------------ +class MyRunAction(G4UserRunAction): + "My Run Action" + + def BeginOfRunAction(self, run): + print("*** #event to be processed (BRA)=", + run.GetNumberOfEventToBeProcessed()) + + def EndOfRunAction(self, run): + print("*** run end run(ERA)=", run.GetRunID()) + +# ------------------------------------------------------------------ +class MyEventAction(G4UserEventAction): + "My Event Action" + + #def BeginOfEventAction(self, event): + #print("*** current event (BEA)=", event.GetEventID()) + # pass + + #def EndOfEventAction(self, event): + #print("*** current event (EEA)=", event.GetEventID()) + +# ------------------------------------------------------------------ +class MySteppingAction(G4UserSteppingAction): + "My Stepping Action" + + def UserSteppingAction(self, step): + #print("*** dE/dx in current step=", step.GetTotalEnergyDeposit()) + track= step.GetTrack() + touchable= track.GetTouchable() + pv= touchable.GetVolume() + #print(pv.GetCopyNo()) + #print(touchable.GetReplicaNumber(0)) + +# ------------------------------------------------------------------ +class MyField(G4MagneticField): + "My Magnetic Field" + + def GetFieldValue(self, pos, time): + bfield= G4ThreeVector() + bfield.x= 0. + bfield.y= 5.*tesla + bfield.z= 0. + return bfield + +# ================================================================== +# main +# ================================================================== +qMaterials= gtest01.QMaterials() +qMaterials.Construct() + +qDC= gtest01.QDetectorConstruction() +gRunManager.SetUserInitialization(qDC) + +qPL= gtest01.QPhysicsList() +gRunManager.SetUserInitialization(qPL) + +# set user actions... +#qPGA= gtest01.QPrimaryGeneratorAction() +myPGA= MyPrimaryGeneratorAction() +gRunManager.SetUserAction(myPGA) + +#myRA= MyRunAction() +#gRunManager.SetUserAction(myRA) + +myEA= MyEventAction() +gRunManager.SetUserAction(myEA) + +mySA= MySteppingAction() +gRunManager.SetUserAction(mySA) + +# set particle gun +#ApplyUICommand("/control/execute gun.mac") +#pg= qPGA.GetParticleGun() +pg= myPGA.particleGun +pg.SetParticleByName("e-") +pg.SetParticleEnergy(200.*MeV) +pg.SetParticlePosition(G4ThreeVector(0.,0.,-14.9)*cm) + +# magnetic field +fieldMgr= gTransportationManager.GetFieldManager() +myField= G4UniformMagField(G4ThreeVector(0.,10.*tesla,0.)) +#myField= MyField() +fieldMgr.SetDetectorField(myField) +fieldMgr.CreateChordFinder(myField) + +gRunManager.Initialize() + +# beamOn +gRunManager.BeamOn(10) +gTerminate() diff --git a/environments/g4py/tests/gtest01/vis.mac b/environments/g4py/tests/gtest01/vis.mac new file mode 100644 index 0000000000..4563dbe1f4 --- /dev/null +++ b/environments/g4py/tests/gtest01/vis.mac @@ -0,0 +1,16 @@ +# vis.mac + +/vis/open OGLSX + +/vis/scene/create +/vis/scene/add/volume +#/vis/scene/add/volume cal 3 + +/vis/sceneHandler/attach + +/vis/viewer/set/viewpointThetaPhi 90. -90. + +/tracking/storeTrajectory 1 +/vis/scene/add/trajectories +/vis/scene/endOfEventAction accumulate + diff --git a/environments/g4py/tests/gtest01/vrml.mac b/environments/g4py/tests/gtest01/vrml.mac new file mode 100644 index 0000000000..8494e3fe6d --- /dev/null +++ b/environments/g4py/tests/gtest01/vrml.mac @@ -0,0 +1,11 @@ +/vis/scene/create +/vis/scene/add/volume + +/vis/sceneHandler/create VRML2FILE + +/vis/viewer/create + +/tracking/storeTrajectory 1 +/vis/scene/add/trajectories +/vis/scene/endOfEventAction accumulate + diff --git a/environments/g4py/tests/gtest02/CMakeLists.txt b/environments/g4py/tests/gtest02/CMakeLists.txt new file mode 100644 index 0000000000..364712d62c --- /dev/null +++ b/environments/g4py/tests/gtest02/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test02 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test02 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest02/gun.mac b/environments/g4py/tests/gtest02/gun.mac new file mode 100644 index 0000000000..035f4c4c59 --- /dev/null +++ b/environments/g4py/tests/gtest02/gun.mac @@ -0,0 +1,8 @@ +# gun.mac + +/gun/number 1 +/gun/particle e- +/gun/energy 200 MeV +/gun/direction 0.2 0. 1. +/gun/position 0. 0. -14.9 cm + diff --git a/environments/g4py/tests/gtest02/run.py b/environments/g4py/tests/gtest02/run.py new file mode 100755 index 0000000000..0e9b0eef36 --- /dev/null +++ b/environments/g4py/tests/gtest02/run.py @@ -0,0 +1,133 @@ +#!/usr/bin/python +# ================================================================== +# python script for Geant4Py test +# +# gtest02 +# - test for using site-module packages +# ================================================================== +from Geant4 import * +import g4py.Qmaterials, g4py.NISTmaterials +import g4py.Qgeom, g4py.ExN01geom, g4py.ExN03geom +import g4py.ExN01pl, g4py.EMSTDpl +import g4py.ParticleGun, g4py.MedicalBeam + +# ================================================================== +# user setup +# ================================================================== + +# ------------------------------------------------------------------ +# Setup-0 (Q) +# ------------------------------------------------------------------ +def Setup0(): + # simple materials for Qgeom + g4py.Qmaterials.Construct() + + # NIST materials + #g4py.NISTmaterials.Construct() + + # normal way for constructing user geometry + #qDC= g4py.Qgeom.QDetectorConstruction() + #gRunManager.SetUserInitialization(qDC) + + # 2nd way, short-cut way + g4py.Qgeom.Construct() + + # primary + global primary_position, primary_direction + primary_position= G4ThreeVector(0.,0., -14.9*cm) + primary_direction= G4ThreeVector(0.2, 0., 1.) + + +# ------------------------------------------------------------------ +# Setup-1 (ExampleN01) +# ------------------------------------------------------------------ +def Setup1(): + g4py.ExN01geom.Construct() + + global primary_position, primary_direction + primary_position= G4ThreeVector(-2.5*m, 0., 0.) + primary_direction= G4ThreeVector(1., 0., 0.) + + +# ------------------------------------------------------------------ +# Setup-3 (ExampleN03) +# ------------------------------------------------------------------ +def Setup3(): + #exN03geom= g4py.ExN03geom.ExN03DetectorConstruction() + #gRunManager.SetUserInitialization(exN03geom) + + g4py.ExN03geom.Construct() + + global primary_position, primary_direction + primary_position= G4ThreeVector(-1.*m, 0., 0.) + primary_direction= G4ThreeVector(1., 0., 0.) + + +# ================================================================== +# main +# ================================================================== +# ------------------------------------------------------------------ +# randum number +# ------------------------------------------------------------------ +rand_engine= Ranlux64Engine() +HepRandom.setTheEngine(rand_engine) +HepRandom.setTheSeed(20050830L) + +# ------------------------------------------------------------------ +# user setup +# ------------------------------------------------------------------ +Setup0() +#Setup1() +#Setup3() + + +# ------------------------------------------------------------------ +# setup for physics list +# ------------------------------------------------------------------ +# normal way for constructing user physics list +#exN01PL= ExN01PhysicsList.ExN01PhysicsList() +#gRunManager.SetUserInitialization(exN01PL) + +# 2nd way, short-cut way +# geantino + transportation +#g4py.ExN01pl.Construct() + +# electron/gamma standard EM +g4py.EMSTDpl.Construct() + +# ------------------------------------------------------------------ +# setup for primary generator action +# ------------------------------------------------------------------ +# ------------ +# Particle Gun +# ------------ +# normal way for constructing user physics list +#pgPGA= g4py.ParticleGun.ParticleGunAction() +#gRunManager.SetUserAction(pgPGA) +#pg= pgPGA.GetParticleGun() + +# 2nd way, short-cut way +pg= g4py.ParticleGun.Construct() + +# set parameters of particle gun +pg.SetParticleByName("e-") +pg.SetParticleEnergy(300.*MeV) +pg.SetParticlePosition(primary_position) +pg.SetParticleMomentumDirection(primary_direction) + +# ------------ +# Medical Beam +# ------------ +#beam= g4py.MedicalBeam.Construct() + +# ------------------------------------------------------------------ +# go... +# ------------------------------------------------------------------ +gRunManager.Initialize() + +# visualization +gApplyUICommand("/control/execute vis.mac") + +# beamOn +#gRunManager.BeamOn(3) + diff --git a/environments/g4py/tests/gtest02/test.py b/environments/g4py/tests/gtest02/test.py new file mode 100755 index 0000000000..3010c10bdc --- /dev/null +++ b/environments/g4py/tests/gtest02/test.py @@ -0,0 +1,133 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest02 +# - test for using site-module packages +# ================================================================== +from Geant4 import * +import g4pytest.Qmaterials, g4pytest.NISTmaterials +import g4pytest.Qgeom, g4pytest.ExN01geom, g4pytest.ExN03geom +import g4pytest.ExN01pl, g4pytest.EMSTDpl +import g4pytest.ParticleGun, g4pytest.MedicalBeam + +# ================================================================== +# user setup +# ================================================================== + +# ------------------------------------------------------------------ +# Setup-0 (Q) +# ------------------------------------------------------------------ +def Setup0(): + # simple materials for Qgeom + g4pytest.Qmaterials.Construct() + + # NIST materials + #g4pytest.NISTmaterials.Construct() + + # normal way for constructing user geometry + #qDC= g4pytest.Qgeom.QDetectorConstruction() + #gRunManager.SetUserInitialization(qDC) + + # 2nd way, short-cut way + g4pytest.Qgeom.Construct() + + # primary + global primary_position, primary_direction + primary_position= G4ThreeVector(0.,0., -14.9*cm) + primary_direction= G4ThreeVector(0.2, 0., 1.) + + +# ------------------------------------------------------------------ +# Setup-1 (ExampleN01) +# ------------------------------------------------------------------ +def Setup1(): + g4pytest.ExN01geom.Construct() + + global primary_position, primary_direction + primary_position= G4ThreeVector(-2.5*m, 0., 0.) + primary_direction= G4ThreeVector(1., 0., 0.) + + +# ------------------------------------------------------------------ +# Setup-3 (ExampleN03) +# ------------------------------------------------------------------ +def Setup3(): + #exN03geom= g4pytest.ExN03geom.ExN03DetectorConstruction() + #gRunManager.SetUserInitialization(exN03geom) + + g4pytest.ExN03geom.Construct() + + global primary_position, primary_direction + primary_position= G4ThreeVector(-1.*m, 0., 0.) + primary_direction= G4ThreeVector(1., 0., 0.) + + +# ================================================================== +# main +# ================================================================== +# ------------------------------------------------------------------ +# randum number +# ------------------------------------------------------------------ +rand_engine= Ranlux64Engine() +HepRandom.setTheEngine(rand_engine) +HepRandom.setTheSeed(20050830) + +# ------------------------------------------------------------------ +# user setup +# ------------------------------------------------------------------ +Setup0() +#Setup1() +#Setup3() + + +# ------------------------------------------------------------------ +# setup for physics list +# ------------------------------------------------------------------ +# normal way for constructing user physics list +#exN01PL= ExN01PhysicsList.ExN01PhysicsList() +#gRunManager.SetUserInitialization(exN01PL) + +# 2nd way, short-cut way +# geantino + transportation +#g4pytest.ExN01pl.Construct() + +# electron/gamma standard EM +g4pytest.EMSTDpl.Construct() + +# ------------------------------------------------------------------ +# setup for primary generator action +# ------------------------------------------------------------------ +# ------------ +# Particle Gun +# ------------ +# normal way for constructing user physics list +#pgPGA= g4pytest.ParticleGun.ParticleGunAction() +#gRunManager.SetUserAction(pgPGA) +#pg= pgPGA.GetParticleGun() + +# 2nd way, short-cut way +pg= g4pytest.ParticleGun.Construct() + +# set parameters of particle gun +pg.SetParticleByName("e-") +pg.SetParticleEnergy(300.*MeV) +pg.SetParticlePosition(primary_position) +pg.SetParticleMomentumDirection(primary_direction) + +# ------------ +# Medical Beam +# ------------ +#beam= g4pytest.MedicalBeam.Construct() + +# ------------------------------------------------------------------ +# go... +# ------------------------------------------------------------------ +gRunManager.Initialize() + +# visualization +gApplyUICommand("/control/execute vis.mac") + +# beamOn +#gRunManager.BeamOn(3) + diff --git a/environments/g4py/tests/gtest02/vis.mac b/environments/g4py/tests/gtest02/vis.mac new file mode 100644 index 0000000000..ab6ad39430 --- /dev/null +++ b/environments/g4py/tests/gtest02/vis.mac @@ -0,0 +1,16 @@ +# vis.mac + +/vis/open OGLSX + +/vis/scene/create +/vis/scene/add/volume + +/vis/sceneHandler/attach + +#/vis/viewer/set/viewpointThetaPhi 180. 0. +/vis/viewer/set/viewpointThetaPhi 90. -90. + +/tracking/storeTrajectory 1 +/vis/scene/add/trajectories +/vis/scene/endOfEventAction accumulate + diff --git a/environments/g4py/tests/gtest03/CMakeLists.txt b/environments/g4py/tests/gtest03/CMakeLists.txt new file mode 100644 index 0000000000..12591040b2 --- /dev/null +++ b/environments/g4py/tests/gtest03/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test03 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test03 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest03/gun.mac b/environments/g4py/tests/gtest03/gun.mac new file mode 100644 index 0000000000..fd853d6fff --- /dev/null +++ b/environments/g4py/tests/gtest03/gun.mac @@ -0,0 +1,8 @@ +# gun.mac + +/gun/number 1 +/gun/particle gamma +/gun/energy 1 MeV +/gun/direction 0. 0. 1. +/gun/position 0. 0. -20. cm + diff --git a/environments/g4py/tests/gtest03/run.py b/environments/g4py/tests/gtest03/run.py new file mode 100755 index 0000000000..ee2f7a4203 --- /dev/null +++ b/environments/g4py/tests/gtest03/run.py @@ -0,0 +1,100 @@ +#!/usr/bin/python +# ================================================================== +# python script for Geant4Py test +# +# gtest02 +# - test for using site-module packages +# ================================================================== +from Geant4 import * +import g4py.NISTmaterials +import g4py.ezgeom +from g4py.ezgeom import G4EzVolume +import g4py.EMSTDpl +import g4py.ParticleGun + +# ================================================================== +# intialize +# ================================================================== +def Configure(): + # ------------------------------------------------------------------ + # setup for materials + # ------------------------------------------------------------------ + # simple materials for Qgeom + g4py.NISTmaterials.Construct() + + # ------------------------------------------------------------------ + # setup for geometry + # ------------------------------------------------------------------ + #g4py.Qgeom.Construct() + g4py.ezgeom.Construct() # initialize + + # ------------------------------------------------------------------ + # setup for physics list + # ------------------------------------------------------------------ + g4py.EMSTDpl.Construct() + + # ------------------------------------------------------------------ + # setup for primary generator action + # ------------------------------------------------------------------ + g4py.ParticleGun.Construct() + gControlExecute("gun.mac") + +# ================================================================== +# constructing geometry +# ================================================================== +def ConstructGeom(): + print "* Constructing geometry..." + # reset world material + air= G4Material.GetMaterial("G4_AIR") + g4py.ezgeom.SetWorldMaterial(air) + + # target + global target + target= G4EzVolume("Target") + au= G4Material.GetMaterial("G4_Au") + target.CreateTubeVolume(au, 0., 1.*cm, 1.*mm) + target.PlaceIt(G4ThreeVector(0.,0.,-10.*cm)) + + # dummy box + global detector_box, detector_box_pv + detector_box= G4EzVolume("DetectorBox") + detector_box.CreateBoxVolume(air, 20.*cm, 20.*cm, 40.*cm) + detector_box_pv= detector_box.PlaceIt(G4ThreeVector(0.,0.,20.*cm)) + + # calorimeter + global cal + cal= G4EzVolume("Calorimeter") + nai= G4Material.GetMaterial("G4_SODIUM_IODIDE") + cal.CreateBoxVolume(nai, 5.*cm, 5.*cm, 30.*cm) + dd= 5.*cm + for ical in range(-1, 2): + calPos= G4ThreeVector(dd*ical, 0., 0.) + print calPos + cal.PlaceIt(calPos, ical+1, detector_box) + + +# ================================================================== +# main +# ================================================================== +# ------------------------------------------------------------------ +# randum number +# ------------------------------------------------------------------ +rand_engine= Ranlux64Engine() +HepRandom.setTheEngine(rand_engine) +HepRandom.setTheSeed(20050830L) + +# setup... +Configure() +ConstructGeom() + +# ------------------------------------------------------------------ +# go... +# ------------------------------------------------------------------ +gRunManager.Initialize() + +# visualization +gControlExecute("vis.mac") + +# beamOn +#gRunManager.BeamOn(3) + diff --git a/environments/g4py/tests/gtest03/test.py b/environments/g4py/tests/gtest03/test.py new file mode 100755 index 0000000000..e5afa1cf1d --- /dev/null +++ b/environments/g4py/tests/gtest03/test.py @@ -0,0 +1,100 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest02 +# - test for using site-module packages +# ================================================================== +from Geant4 import * +import g4pytest.NISTmaterials +import g4pytest.ezgeom +from g4pytest.ezgeom import G4EzVolume +import g4pytest.EMSTDpl +import g4pytest.ParticleGun + +# ================================================================== +# intialize +# ================================================================== +def Configure(): + # ------------------------------------------------------------------ + # setup for materials + # ------------------------------------------------------------------ + # simple materials for Qgeom + g4pytest.NISTmaterials.Construct() + + # ------------------------------------------------------------------ + # setup for geometry + # ------------------------------------------------------------------ + #g4pytest.Qgeom.Construct() + g4pytest.ezgeom.Construct() # initialize + + # ------------------------------------------------------------------ + # setup for physics list + # ------------------------------------------------------------------ + g4pytest.EMSTDpl.Construct() + + # ------------------------------------------------------------------ + # setup for primary generator action + # ------------------------------------------------------------------ + g4pytest.ParticleGun.Construct() + gControlExecute("gun.mac") + +# ================================================================== +# constructing geometry +# ================================================================== +def ConstructGeom(): + print("* Constructing geometry...") + # reset world material + air= G4Material.GetMaterial("G4_AIR") + g4pytest.ezgeom.SetWorldMaterial(air) + + # target + global target + target= G4EzVolume("Target") + au= G4Material.GetMaterial("G4_Au") + target.CreateTubeVolume(au, 0., 1.*cm, 1.*mm) + target.PlaceIt(G4ThreeVector(0.,0.,-10.*cm)) + + # dummy box + global detector_box, detector_box_pv + detector_box= G4EzVolume("DetectorBox") + detector_box.CreateBoxVolume(air, 20.*cm, 20.*cm, 40.*cm) + detector_box_pv= detector_box.PlaceIt(G4ThreeVector(0.,0.,20.*cm)) + + # calorimeter + global cal + cal= G4EzVolume("Calorimeter") + nai= G4Material.GetMaterial("G4_SODIUM_IODIDE") + cal.CreateBoxVolume(nai, 5.*cm, 5.*cm, 30.*cm) + dd= 5.*cm + for ical in range(-1, 2): + calPos= G4ThreeVector(dd*ical, 0., 0.) + print(calPos) + cal.PlaceIt(calPos, ical+1, detector_box) + + +# ================================================================== +# main +# ================================================================== +# ------------------------------------------------------------------ +# randum number +# ------------------------------------------------------------------ +rand_engine= Ranlux64Engine() +HepRandom.setTheEngine(rand_engine) +HepRandom.setTheSeed(20050830) + +# setup... +Configure() +ConstructGeom() + +# ------------------------------------------------------------------ +# go... +# ------------------------------------------------------------------ +gRunManager.Initialize() + +# visualization +gControlExecute("vis.mac") + +# beamOn +#gRunManager.BeamOn(3) + diff --git a/environments/g4py/tests/gtest03/test_voxel.py b/environments/g4py/tests/gtest03/test_voxel.py new file mode 100755 index 0000000000..82e5df3413 --- /dev/null +++ b/environments/g4py/tests/gtest03/test_voxel.py @@ -0,0 +1,85 @@ +#!/usr/bin/python +# ================================================================== +# python script for Geant4Py test +# +# gtest02 +# - test for using site-module packages +# ================================================================== +from Geant4 import * +import g4py.NISTmaterials +import g4py.ezgeom +from g4py.ezgeom import G4EzVolume +import g4py.EMSTDpl +import g4py.ParticleGun + +# ================================================================== +# intialize +# ================================================================== +def Configure(): + # ------------------------------------------------------------------ + # setup for materials + # ------------------------------------------------------------------ + # simple materials for Qgeom + g4py.NISTmaterials.Construct() + + # ------------------------------------------------------------------ + # setup for geometry + # ------------------------------------------------------------------ + #g4py.Qgeom.Construct() + g4py.ezgeom.Construct() # initialize + + # ------------------------------------------------------------------ + # setup for physics list + # ------------------------------------------------------------------ + g4py.EMSTDpl.Construct() + + # ------------------------------------------------------------------ + # setup for primary generator action + # ------------------------------------------------------------------ + g4py.ParticleGun.Construct() + gControlExecute("gun.mac") + + +# ================================================================== +# constructing geometry +# ================================================================== +def ConstructGeom(): + print "* Constructing geometry..." + # reset world material + air= G4Material.GetMaterial("G4_AIR") + g4py.ezgeom.SetWorldMaterial(air) + + # phantom + global phantom + phantom= G4EzVolume("DetectorBox") + water= G4Material.GetMaterial("G4_WATER") + phantom.CreateBoxVolume(water, 40.*cm, 40.*cm, 50.*cm) + phantom.PlaceIt(G4ThreeVector(0.,0.,20.*cm)) + vsize=phantom.VoxelizeIt(100, 100, 100) + print "voxel size=", vsize + +# ================================================================== +# main +# ================================================================== +# ------------------------------------------------------------------ +# randum number +# ------------------------------------------------------------------ +rand_engine= Ranlux64Engine() +HepRandom.setTheEngine(rand_engine) +HepRandom.setTheSeed(20050830L) + +# setup... +Configure() +ConstructGeom() + +# ------------------------------------------------------------------ +# go... +# ------------------------------------------------------------------ +gRunManager.Initialize() + +# visualization +gControlExecute("vis.mac") + +# beamOn +#gRunManager.BeamOn(3) + diff --git a/environments/g4py/tests/gtest03/vis.mac b/environments/g4py/tests/gtest03/vis.mac new file mode 100644 index 0000000000..85e83c6c27 --- /dev/null +++ b/environments/g4py/tests/gtest03/vis.mac @@ -0,0 +1,15 @@ +# vis.mac + +/vis/open OGLSX + +/vis/scene/create +/vis/scene/add/volume + +/vis/sceneHandler/attach + +/vis/viewer/set/viewpointThetaPhi 270. 90. + +/tracking/storeTrajectory 1 +/vis/scene/add/trajectories +/vis/scene/endOfEventAction accumulate + diff --git a/environments/g4py/tests/gtest04/CMakeLists.txt b/environments/g4py/tests/gtest04/CMakeLists.txt new file mode 100644 index 0000000000..03db192990 --- /dev/null +++ b/environments/g4py/tests/gtest04/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test04 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test04 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest04/test.py b/environments/g4py/tests/gtest04/test.py new file mode 100755 index 0000000000..62913aa409 --- /dev/null +++ b/environments/g4py/tests/gtest04/test.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# ================================================================== +# python script for Geant4Py test +# +# gtest04 +# - test for command tree and command information +# ================================================================== +from Geant4 import * + +def DumpTree(atree): + print("@@", atree.GetPathName(), "::", atree.GetTitle()) + ntree= atree.GetTreeEntry() + ncommand= atree.GetCommandEntry() + + for i in range(1, ncommand+1): + icommand= atree.GetCommand(i) + print(" **", icommand.GetCommandPath()) + print(" ", icommand.GetTitle()) + x= icommand.GetStateList() + + nparameter= icommand.GetParameterEntries() + for j in range(0, nparameter): + iparam= icommand.GetParameter(j) + print(" +", iparam.GetParameterName(), iparam.GetParameterType()) + + for i in range(1, ntree+1): + itree= atree.GetTree(i) + DumpTree(itree) + +# ================================================================== +# main +# ================================================================== +root_tree= gUImanager.GetTree() + +DumpTree(root_tree) + diff --git a/environments/g4py/tests/gtest05/CMakeLists.txt b/environments/g4py/tests/gtest05/CMakeLists.txt new file mode 100644 index 0000000000..23b597fdb4 --- /dev/null +++ b/environments/g4py/tests/gtest05/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test05 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test05 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest05/test.py b/environments/g4py/tests/gtest05/test.py new file mode 100755 index 0000000000..e17d01269a --- /dev/null +++ b/environments/g4py/tests/gtest05/test.py @@ -0,0 +1,311 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest05 +# - test for CSG geometry construction in Python +# ================================================================== +from Geant4 import * +import g4pytest.ExN01pl, g4pytest.ParticleGun +import os, math + +# ================================================================== +# user actions in python +# ================================================================== +class MyDetectorConstruction(G4VUserDetectorConstruction): + "My Detector Construction" + + def __init__(self): + G4VUserDetectorConstruction.__init__(self) + self.air= gNistManager.FindOrBuildMaterial("G4_AIR") + self.lv_object= None + self.world= self.ConstructWorld() + + self.va_red= G4VisAttributes(G4Color(1.,0.,0.)) + self.va_cyan= G4VisAttributes(G4Color(0.,1.,1.)) + self.va_green= G4VisAttributes(G4Color(0.,1.,0.)) + self.va_blue= G4VisAttributes(G4Color(0.,0.,1.)) + self.va_magenta= G4VisAttributes(G4Color(1.,0.,1.)) + + # ----------------------------------------------------------------- + def ConstructWorld(self): + # Python has automatic garbage collection system. + # Geometry objects must be defined as GLOBAL not to be deleted. + global sld_world, lv_world, pv_world, va_world + + sld_world= G4Box("world", 1.*m, 1.*m, 1.*m) + lv_world= G4LogicalVolume(sld_world, self.air, "world") + pv_world= G4PVPlacement(G4Transform3D(), lv_world, "world", + None, False, 0) + + va_world= G4VisAttributes() + va_world.SetVisibility(False) + lv_world.SetVisAttributes(va_world) + + # solid object (dummy) + global sld_sld, lv_sld, pv_sld + sld_sld= G4Box("dummy", 10.*cm, 10.*cm, 10.*cm) + self.lv_object= lv_sld= G4LogicalVolume(sld_sld, self.air, "dummy") + pv_sld= G4PVPlacement(None, G4ThreeVector(), "dummy", lv_sld, + pv_world, False, 0) + + return pv_world + + # ----------------------------------------------------------------- + def ConstructBox(self): + global sld_box + sld_box= G4Box("box", 30.*cm, 40.*cm, 60.*cm) + self.lv_object.SetSolid(sld_box) + self.lv_object.SetVisAttributes(self.va_red) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTubs(self): + global sld_tubs + sld_tubs= G4Tubs("tubs", 10.*cm, 15.*cm, 20.*cm, 0., pi) + self.lv_object.SetSolid(sld_tubs) + self.lv_object.SetVisAttributes(self.va_cyan) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructCons(self): + global sld_cons + sld_cons= G4Cons("cons", 5.*cm, 10.*cm, 20.*cm, 25.*cm, + 40.*cm, 0., 4./3.*pi) + self.lv_object.SetSolid(sld_cons) + self.lv_object.SetVisAttributes(self.va_green) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructPara(self): + global sld_para + sld_para= G4Para("para", 30.*cm, 40.*cm, 60.*cm, pi/4., pi/8., 0.) + self.lv_object.SetSolid(sld_para) + self.lv_object.SetVisAttributes(self.va_blue) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTrd(self): + global sld_trd + sld_trd= G4Trd("trd", 30.*cm, 10.*cm, 40.*cm, 15.*cm, 60.*cm) + self.lv_object.SetSolid(sld_trd) + self.lv_object.SetVisAttributes(self.va_blue) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTrap(self): + global sld_trap + sld_trap= G4Trap("trap", 60.*cm, 20.*degree, 5.*degree, + 40.*cm, 30.*cm, 40.*cm, 10.*degree, + 16.*cm, 10*cm, 14.*cm, 10.*deg) + self.lv_object.SetSolid(sld_trap) + self.lv_object.SetVisAttributes(self.va_green) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructSphere(self): + global sld_sphere + sld_sphere= G4Sphere("sphere", 100.*cm, 120.*cm, 0., 180.*deg, + 0., 180.*deg) + self.lv_object.SetSolid(sld_sphere) + self.lv_object.SetVisAttributes(self.va_cyan) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructOrb(self): + global sld_orb + sld_orb= G4Orb("orb", 100.*cm) + self.lv_object.SetSolid(sld_orb) + self.lv_object.SetVisAttributes(self.va_red) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTorus(self): + global sld_torus + sld_torus= G4Torus("torus", 40.*cm, 60.*cm, 200.*cm, 0., 90.*deg) + self.lv_object.SetSolid(sld_torus) + self.lv_object.SetVisAttributes(self.va_magenta) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructPolycone(self): + zvec= G4doubleVector() + rinvec= G4doubleVector() + routvec= G4doubleVector() + + zvec[:]= [ 5.*cm, 7.*cm, 9.*cm, 11.*cm, 25.*cm, 27.*cm, 29.*cm, + 31.*cm, 35.*cm ] + rinvec[:]= [0.,0.,0.,0.,0.,0.,0.,0.,0.] + routvec[:]= [ 0., 10.*cm, 10.*cm, 5.*cm, 5.*cm, 10.*cm, + 10.*cm, 2.*cm, 2.*cm ] + + global sld_pcon + sld_pcon= CreatePolycone("pcon", 0., twopi, 9, zvec, rinvec,routvec) + self.lv_object.SetSolid(sld_pcon) + self.lv_object.SetVisAttributes(self.va_cyan) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructPolyhedra(self): + zvec= G4doubleVector() + rinvec= G4doubleVector() + routvec= G4doubleVector() + + zvec[:]= [ 0., 5.*cm, 8.*cm, 13.*cm, 30.*cm, 32.*cm, 35.*cm ] + rinvec[:]= [0.,0.,0.,0.,0.,0.,0. ] + routvec[:]= [ 0., 15.*cm, 15.*cm, 4.*cm, 4.*cm, 10.*cm, 10.*cm ] + + global sld_pgon + sld_pgon= CreatePolyhedra("pgon", 0., twopi, 5, 7, zvec, rinvec,routvec) + self.lv_object.SetSolid(sld_pgon) + self.lv_object.SetVisAttributes(self.va_green) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructEllipticalTube(self): + global sld_et + sld_et= G4EllipticalTube("ellipticaltube", 5.*cm, 10.*cm, 20.*cm) + self.lv_object.SetSolid(sld_et) + self.lv_object.SetVisAttributes(self.va_cyan) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructEllipsoid(self): + global sld_es + sld_es= G4Ellipsoid("ellipsoid", 10.*cm, 20.*cm, 50.*cm, + -10.*cm, 40.*cm) + self.lv_object.SetSolid(sld_es) + self.lv_object.SetVisAttributes(self.va_red) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructEllipticalCone(self): + global sld_ec + sld_ec= G4EllipticalCone("ellipticalcone", 30.*cm, 60.*cm, + 50.*cm, 25.*cm) + self.lv_object.SetSolid(sld_ec) + self.lv_object.SetVisAttributes(self.va_magenta) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructHype(self): + global sld_hype + sld_hype= G4Hype("hype", 20.*cm, 30.*cm, 0.7, 0.7, 50.*cm) + self.lv_object.SetSolid(sld_hype) + self.lv_object.SetVisAttributes(self.va_blue) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTet(self): + global sld_tet + p1= G4ThreeVector(0., 0., math.sqrt(3.)*cm) + p2= G4ThreeVector(0., 2*math.sqrt(2./3.)*cm, -1./math.sqrt(3)*cm) + p3= G4ThreeVector(-math.sqrt(2.)*cm, -math.sqrt(2./3.)*cm, + -1./math.sqrt(3)*cm) + p4= G4ThreeVector(math.sqrt(2)*cm, -math.sqrt(2./3.)*cm, + -1./math.sqrt(3)*cm) + + sld_tet= G4Tet("tet", 20.*p1, 20.*p2, 20.*p3, 20.*p4) + self.lv_object.SetSolid(sld_tet) + self.lv_object.SetVisAttributes(self.va_green) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTwistedBox(self): + global sld_twb + sld_twb= G4TwistedBox("twistedbox", 30.*deg, 30.*cm, 40.*cm, 60.*cm) + self.lv_object.SetSolid(sld_twb) + self.lv_object.SetVisAttributes(self.va_cyan) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTwistedTrap(self): + global sld_twtrp + sld_twtrp= G4TwistedTrap("twistedtrap", 30.*deg, + 60.*cm, 20.*deg, 5.*deg, + 40.*cm, 30.*cm, 40.*cm, + 16.*cm, 10.*cm, 14.*cm, 10.*deg) + self.lv_object.SetSolid(sld_twtrp) + self.lv_object.SetVisAttributes(self.va_blue) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTwistedTrd(self): + global sld_twtrd + sld_twtrd= G4TwistedTrd("twistedtrd", 30.*cm, 10.*cm, + 40.*cm, 15.*cm, 60.*cm, 30.*deg) + self.lv_object.SetSolid(sld_twtrd) + self.lv_object.SetVisAttributes(self.va_green) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTwistedTubs(self): + global sld_twt + sld_twt= G4TwistedTubs("twistedtube", 60.*deg, + 10.*cm, 15.*cm, 20.*cm, 90.*deg) + self.lv_object.SetSolid(sld_twt) + self.lv_object.SetVisAttributes(self.va_magenta) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def Construct(self): # return the world volume + return self.world + +# ================================================================== +# main +# ================================================================== +os.environ["G4VRML_DEST_DIR"]= "." +os.environ["G4VRMLFILE_MAX_FILE_NUM"]= "1" +os.environ["G4VRMLFILE_VIEWER"]= "echo" + +# set geometry +myDC= MyDetectorConstruction() +gRunManager.SetUserInitialization(myDC) + +# minimal physics list +g4pytest.ExN01pl.Construct() + +# set primary generator action +g4pytest.ParticleGun.Construct() + +# initialize +gRunManager.Initialize() + +# visualization +gApplyUICommand("/vis/open VRML2FILE") +gApplyUICommand("/vis/scene/create") +gApplyUICommand("/vis/scene/add/volume") +gApplyUICommand("/vis/sceneHandler/attach") +gApplyUICommand("/vis/scene/add/axes 0. 0. 0. 10. cm") + +# create a vrml file for each solid type +f_list= ( + ("g4box", myDC.ConstructBox), + ("g4tubs", myDC.ConstructTubs), + ("g4cons", myDC.ConstructCons), + ("g4para", myDC.ConstructPara), + ("g4trd", myDC.ConstructTrd), + ("g4trap", myDC.ConstructTrap), + ("g4sphere", myDC.ConstructSphere), + ("g4orb", myDC.ConstructOrb), + ("g4torus", myDC.ConstructTorus), + ("g4polycone", myDC.ConstructPolycone), + ("g4polyhedra", myDC.ConstructPolyhedra), + ("g4ellipticaltube", myDC.ConstructEllipticalTube), + ("g4ellipsoid", myDC.ConstructEllipsoid), + ("g4ellipticalcone", myDC.ConstructEllipticalCone), + ("g4hype", myDC.ConstructHype), + ("g4tet", myDC.ConstructTet), + ("g4twistedbox", myDC.ConstructTwistedBox), + ("g4twistedtrap", myDC.ConstructTwistedTrap), + ("g4twistedtrd", myDC.ConstructTwistedTrd), + ("g4twistedtubs", myDC.ConstructTwistedTubs) + ) + +for s,f in f_list: + f.__call__() + gRunManager.BeamOn(1) + fname= "%s.wrl" % (s) + os.rename("g4_00.wrl", fname) + +gTerminate() diff --git a/environments/g4py/tests/gtest05/vrml/g4box.wrl b/environments/g4py/tests/gtest05/vrml/g4box.wrl new file mode 100644 index 0000000000..83932f5902 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4box.wrl @@ -0,0 +1,102 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -300 -400 -600, + 300 -400 -600, + 300 400 -600, + -300 400 -600, + -300 -400 600, + 300 -400 600, + 300 400 600, + -300 400 600, + ] + } + coordIndex [ + 0, 3, 2, 1, -1, + 4, 7, 3, 0, -1, + 7, 6, 2, 3, -1, + 6, 5, 1, 2, -1, + 5, 4, 0, 1, -1, + 4, 5, 6, 7, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4cons.wrl b/environments/g4py/tests/gtest05/vrml/g4cons.wrl new file mode 100644 index 0000000000..3ea90815a5 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4cons.wrl @@ -0,0 +1,222 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 250 0 400, + 241.481 64.7048 400, + 216.506 125 400, + 176.777 176.777 400, + 125 216.506 400, + 64.7048 241.481 400, + 1.53081e-14 250 400, + -64.7048 241.481 400, + -125 216.506 400, + -176.777 176.777 400, + -216.506 125 400, + -241.481 64.7048 400, + -250 3.06162e-14 400, + -241.481 -64.7048 400, + -216.506 -125 400, + -176.777 -176.777 400, + -125 -216.506 400, + 100 0 -400, + 96.5926 25.8819 -400, + 86.6025 50 -400, + 70.7107 70.7107 -400, + 50 86.6025 -400, + 25.8819 96.5926 -400, + 6.12323e-15 100 -400, + -25.8819 96.5926 -400, + -50 86.6025 -400, + -70.7107 70.7107 -400, + -86.6025 50 -400, + -96.5926 25.8819 -400, + -100 1.22465e-14 -400, + -96.5926 -25.8819 -400, + -86.6025 -50 -400, + -70.7107 -70.7107 -400, + -50 -86.6025 -400, + 200 0 400, + 193.185 51.7638 400, + 173.205 100 400, + 141.421 141.421 400, + 100 173.205 400, + 51.7638 193.185 400, + 1.22465e-14 200 400, + -51.7638 193.185 400, + -100 173.205 400, + -141.421 141.421 400, + -173.205 100 400, + -193.185 51.7638 400, + -200 2.44929e-14 400, + -193.185 -51.7638 400, + -173.205 -100 400, + -141.421 -141.421 400, + -100 -173.205 400, + 50 0 -400, + 48.2963 12.941 -400, + 43.3013 25 -400, + 35.3553 35.3553 -400, + 25 43.3013 -400, + 12.941 48.2963 -400, + 3.06162e-15 50 -400, + -12.941 48.2963 -400, + -25 43.3013 -400, + -35.3553 35.3553 -400, + -43.3013 25 -400, + -48.2963 12.941 -400, + -50 6.12323e-15 -400, + -48.2963 -12.941 -400, + -43.3013 -25 -400, + -35.3553 -35.3553 -400, + -25 -43.3013 -400, + ] + } + coordIndex [ + 0, 17, 18, 1, -1, + 1, 18, 19, 2, -1, + 2, 19, 20, 3, -1, + 3, 20, 21, 4, -1, + 4, 21, 22, 5, -1, + 5, 22, 23, 6, -1, + 6, 23, 24, 7, -1, + 7, 24, 25, 8, -1, + 8, 25, 26, 9, -1, + 9, 26, 27, 10, -1, + 10, 27, 28, 11, -1, + 11, 28, 29, 12, -1, + 12, 29, 30, 13, -1, + 13, 30, 31, 14, -1, + 14, 31, 32, 15, -1, + 15, 32, 33, 16, -1, + 51, 34, 35, 52, -1, + 52, 35, 36, 53, -1, + 53, 36, 37, 54, -1, + 54, 37, 38, 55, -1, + 55, 38, 39, 56, -1, + 56, 39, 40, 57, -1, + 57, 40, 41, 58, -1, + 58, 41, 42, 59, -1, + 59, 42, 43, 60, -1, + 60, 43, 44, 61, -1, + 61, 44, 45, 62, -1, + 62, 45, 46, 63, -1, + 63, 46, 47, 64, -1, + 64, 47, 48, 65, -1, + 65, 48, 49, 66, -1, + 66, 49, 50, 67, -1, + 34, 0, 1, 35, -1, + 35, 1, 2, 36, -1, + 36, 2, 3, 37, -1, + 37, 3, 4, 38, -1, + 38, 4, 5, 39, -1, + 39, 5, 6, 40, -1, + 40, 6, 7, 41, -1, + 41, 7, 8, 42, -1, + 42, 8, 9, 43, -1, + 43, 9, 10, 44, -1, + 44, 10, 11, 45, -1, + 45, 11, 12, 46, -1, + 46, 12, 13, 47, -1, + 47, 13, 14, 48, -1, + 48, 14, 15, 49, -1, + 49, 15, 16, 50, -1, + 17, 51, 52, 18, -1, + 18, 52, 53, 19, -1, + 19, 53, 54, 20, -1, + 20, 54, 55, 21, -1, + 21, 55, 56, 22, -1, + 22, 56, 57, 23, -1, + 23, 57, 58, 24, -1, + 24, 58, 59, 25, -1, + 25, 59, 60, 26, -1, + 26, 60, 61, 27, -1, + 27, 61, 62, 28, -1, + 28, 62, 63, 29, -1, + 29, 63, 64, 30, -1, + 30, 64, 65, 31, -1, + 31, 65, 66, 32, -1, + 32, 66, 67, 33, -1, + 0, 34, 51, 17, -1, + 33, 67, 50, 16, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4ellipsoid.wrl b/environments/g4py/tests/gtest05/vrml/g4ellipsoid.wrl new file mode 100644 index 0000000000..6deeebdf85 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4ellipsoid.wrl @@ -0,0 +1,403 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 0 0 400, + 60 0 400, + 57.9555 31.0583 400, + 51.9615 60 400, + 42.4264 84.8528 400, + 30 103.923 400, + 15.5291 115.911 400, + 3.67394e-15 120 400, + -15.5291 115.911 400, + -30 103.923 400, + -42.4264 84.8528 400, + -51.9615 60 400, + -57.9555 31.0583 400, + -60 1.46958e-14 400, + -57.9555 -31.0583 400, + -51.9615 -60 400, + -42.4264 -84.8528 400, + -30 -103.923 400, + -15.5291 -115.911 400, + -1.10218e-14 -120 400, + 15.5291 -115.911 400, + 30 -103.923 400, + 42.4264 -84.8528 400, + 51.9615 -60 400, + 57.9555 -31.0583 400, + 76.3833 0 322.707, + 73.7806 39.5389 322.707, + 66.1499 76.3833 322.707, + 54.0112 108.022 322.707, + 38.1917 132.3 322.707, + 19.7695 147.561 322.707, + 4.67713e-15 152.767 322.707, + -19.7695 147.561 322.707, + -38.1917 132.3 322.707, + -54.0112 108.022 322.707, + -66.1499 76.3833 322.707, + -73.7806 39.5389 322.707, + -76.3833 1.87085e-14 322.707, + -73.7806 -39.5389 322.707, + -66.1499 -76.3833 322.707, + -54.0112 -108.022 322.707, + -38.1917 -132.3 322.707, + -19.7695 -147.561 322.707, + -1.40314e-14 -152.767 322.707, + 19.7695 -147.561 322.707, + 38.1917 -132.3 322.707, + 54.0112 -108.022 322.707, + 66.1499 -76.3833 322.707, + 73.7806 -39.5389 322.707, + 88.8911 0 229.04, + 85.8622 46.0134 229.04, + 76.982 88.8911 229.04, + 62.8555 125.711 229.04, + 44.4456 153.964 229.04, + 23.0067 171.724 229.04, + 5.44301e-15 177.782 229.04, + -23.0067 171.724 229.04, + -44.4456 153.964 229.04, + -62.8555 125.711 229.04, + -76.982 88.8911 229.04, + -85.8622 46.0134 229.04, + -88.8911 2.1772e-14 229.04, + -85.8622 -46.0134 229.04, + -76.982 -88.8911 229.04, + -62.8555 -125.711 229.04, + -44.4456 -153.964 229.04, + -23.0067 -171.724 229.04, + -1.6329e-14 -177.782 229.04, + 23.0067 -171.724 229.04, + 44.4456 -153.964 229.04, + 62.8555 -125.711 229.04, + 76.982 -88.8911 229.04, + 85.8622 -46.0134 229.04, + 96.8887 0 123.752, + 93.5873 50.1533 123.752, + 83.9081 96.8887 123.752, + 68.5106 137.021 123.752, + 48.4443 167.816 123.752, + 25.0766 187.175 123.752, + 5.93272e-15 193.777 123.752, + -25.0766 187.175 123.752, + -48.4443 167.816 123.752, + -68.5106 137.021 123.752, + -83.9081 96.8887 123.752, + -93.5873 50.1533 123.752, + -96.8887 2.37309e-14 123.752, + -93.5873 -50.1533 123.752, + -83.9081 -96.8887 123.752, + -68.5106 -137.021 123.752, + -48.4443 -167.816 123.752, + -25.0766 -187.175 123.752, + -1.77982e-14 -193.777 123.752, + 25.0766 -187.175 123.752, + 48.4443 -167.816 123.752, + 68.5106 -137.021 123.752, + 83.9081 -96.8887 123.752, + 93.5873 -50.1533 123.752, + 99.9703 0 12.1851, + 96.5639 51.7484 12.1851, + 86.5768 99.9703 12.1851, + 70.6897 141.379 12.1851, + 49.9852 173.154 12.1851, + 25.8742 193.128 12.1851, + 6.12142e-15 199.941 12.1851, + -25.8742 193.128 12.1851, + -49.9852 173.154 12.1851, + -70.6897 141.379 12.1851, + -86.5768 99.9703 12.1851, + -96.5639 51.7484 12.1851, + -99.9703 2.44857e-14 12.1851, + -96.5639 -51.7484 12.1851, + -86.5768 -99.9703 12.1851, + -70.6897 -141.379 12.1851, + -49.9852 -173.154 12.1851, + -25.8742 -193.128 12.1851, + -1.83642e-14 -199.941 12.1851, + 25.8742 -193.128 12.1851, + 49.9852 -173.154 12.1851, + 70.6897 -141.379 12.1851, + 86.5768 -99.9703 12.1851, + 96.5639 -51.7484 12.1851, + 97.9796 0 -100, + 94.641 50.718 -100, + 84.8528 97.9796 -100, + 69.282 138.564 -100, + 48.9898 169.706 -100, + 25.359 189.282 -100, + 5.99952e-15 195.959 -100, + -25.359 189.282 -100, + -48.9898 169.706 -100, + -69.282 138.564 -100, + -84.8528 97.9796 -100, + -94.641 50.718 -100, + -97.9796 2.39981e-14 -100, + -94.641 -50.718 -100, + -84.8528 -97.9796 -100, + -69.282 -138.564 -100, + -48.9898 -169.706 -100, + -25.359 -189.282 -100, + -1.79986e-14 -195.959 -100, + 25.359 -189.282 -100, + 48.9898 -169.706 -100, + 69.282 -138.564 -100, + 84.8528 -97.9796 -100, + 94.641 -50.718 -100, + 0 0 -100, + 0 0 0, + ] + } + coordIndex [ + 0, 1, 2, -1, + 0, 2, 3, -1, + 0, 3, 4, -1, + 0, 4, 5, -1, + 0, 5, 6, -1, + 0, 6, 7, -1, + 0, 7, 8, -1, + 0, 8, 9, -1, + 0, 9, 10, -1, + 0, 10, 11, -1, + 0, 11, 12, -1, + 0, 12, 13, -1, + 0, 13, 14, -1, + 0, 14, 15, -1, + 0, 15, 16, -1, + 0, 16, 17, -1, + 0, 17, 18, -1, + 0, 18, 19, -1, + 0, 19, 20, -1, + 0, 20, 21, -1, + 0, 21, 22, -1, + 0, 22, 23, -1, + 0, 23, 24, -1, + 0, 24, 1, -1, + 1, 25, 26, 2, -1, + 2, 26, 27, 3, -1, + 3, 27, 28, 4, -1, + 4, 28, 29, 5, -1, + 5, 29, 30, 6, -1, + 6, 30, 31, 7, -1, + 7, 31, 32, 8, -1, + 8, 32, 33, 9, -1, + 9, 33, 34, 10, -1, + 10, 34, 35, 11, -1, + 11, 35, 36, 12, -1, + 12, 36, 37, 13, -1, + 13, 37, 38, 14, -1, + 14, 38, 39, 15, -1, + 15, 39, 40, 16, -1, + 16, 40, 41, 17, -1, + 17, 41, 42, 18, -1, + 18, 42, 43, 19, -1, + 19, 43, 44, 20, -1, + 20, 44, 45, 21, -1, + 21, 45, 46, 22, -1, + 22, 46, 47, 23, -1, + 23, 47, 48, 24, -1, + 24, 48, 25, 1, -1, + 25, 49, 50, 26, -1, + 26, 50, 51, 27, -1, + 27, 51, 52, 28, -1, + 28, 52, 53, 29, -1, + 29, 53, 54, 30, -1, + 30, 54, 55, 31, -1, + 31, 55, 56, 32, -1, + 32, 56, 57, 33, -1, + 33, 57, 58, 34, -1, + 34, 58, 59, 35, -1, + 35, 59, 60, 36, -1, + 36, 60, 61, 37, -1, + 37, 61, 62, 38, -1, + 38, 62, 63, 39, -1, + 39, 63, 64, 40, -1, + 40, 64, 65, 41, -1, + 41, 65, 66, 42, -1, + 42, 66, 67, 43, -1, + 43, 67, 68, 44, -1, + 44, 68, 69, 45, -1, + 45, 69, 70, 46, -1, + 46, 70, 71, 47, -1, + 47, 71, 72, 48, -1, + 48, 72, 49, 25, -1, + 49, 73, 74, 50, -1, + 50, 74, 75, 51, -1, + 51, 75, 76, 52, -1, + 52, 76, 77, 53, -1, + 53, 77, 78, 54, -1, + 54, 78, 79, 55, -1, + 55, 79, 80, 56, -1, + 56, 80, 81, 57, -1, + 57, 81, 82, 58, -1, + 58, 82, 83, 59, -1, + 59, 83, 84, 60, -1, + 60, 84, 85, 61, -1, + 61, 85, 86, 62, -1, + 62, 86, 87, 63, -1, + 63, 87, 88, 64, -1, + 64, 88, 89, 65, -1, + 65, 89, 90, 66, -1, + 66, 90, 91, 67, -1, + 67, 91, 92, 68, -1, + 68, 92, 93, 69, -1, + 69, 93, 94, 70, -1, + 70, 94, 95, 71, -1, + 71, 95, 96, 72, -1, + 72, 96, 73, 49, -1, + 73, 97, 98, 74, -1, + 74, 98, 99, 75, -1, + 75, 99, 100, 76, -1, + 76, 100, 101, 77, -1, + 77, 101, 102, 78, -1, + 78, 102, 103, 79, -1, + 79, 103, 104, 80, -1, + 80, 104, 105, 81, -1, + 81, 105, 106, 82, -1, + 82, 106, 107, 83, -1, + 83, 107, 108, 84, -1, + 84, 108, 109, 85, -1, + 85, 109, 110, 86, -1, + 86, 110, 111, 87, -1, + 87, 111, 112, 88, -1, + 88, 112, 113, 89, -1, + 89, 113, 114, 90, -1, + 90, 114, 115, 91, -1, + 91, 115, 116, 92, -1, + 92, 116, 117, 93, -1, + 93, 117, 118, 94, -1, + 94, 118, 119, 95, -1, + 95, 119, 120, 96, -1, + 96, 120, 97, 73, -1, + 97, 121, 122, 98, -1, + 98, 122, 123, 99, -1, + 99, 123, 124, 100, -1, + 100, 124, 125, 101, -1, + 101, 125, 126, 102, -1, + 102, 126, 127, 103, -1, + 103, 127, 128, 104, -1, + 104, 128, 129, 105, -1, + 105, 129, 130, 106, -1, + 106, 130, 131, 107, -1, + 107, 131, 132, 108, -1, + 108, 132, 133, 109, -1, + 109, 133, 134, 110, -1, + 110, 134, 135, 111, -1, + 111, 135, 136, 112, -1, + 112, 136, 137, 113, -1, + 113, 137, 138, 114, -1, + 114, 138, 139, 115, -1, + 115, 139, 140, 116, -1, + 116, 140, 141, 117, -1, + 117, 141, 142, 118, -1, + 118, 142, 143, 119, -1, + 119, 143, 144, 120, -1, + 120, 144, 121, 97, -1, + 121, 145, 122, -1, + 122, 145, 123, -1, + 123, 145, 124, -1, + 124, 145, 125, -1, + 125, 145, 126, -1, + 126, 145, 127, -1, + 127, 145, 128, -1, + 128, 145, 129, -1, + 129, 145, 130, -1, + 130, 145, 131, -1, + 131, 145, 132, -1, + 132, 145, 133, -1, + 133, 145, 134, -1, + 134, 145, 135, -1, + 135, 145, 136, -1, + 136, 145, 137, -1, + 137, 145, 138, -1, + 138, 145, 139, -1, + 139, 145, 140, -1, + 140, 145, 141, -1, + 141, 145, 142, -1, + 142, 145, 143, -1, + 143, 145, 144, -1, + 144, 145, 121, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4ellipticalcone.wrl b/environments/g4py/tests/gtest05/vrml/g4ellipticalcone.wrl new file mode 100644 index 0000000000..eaadbd0c71 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4ellipticalcone.wrl @@ -0,0 +1,210 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 75000 0 250, + 72444.4 38822.9 250, + 64951.9 75000 250, + 53033 106066 250, + 37500 129904 250, + 19411.4 144889 250, + 4.59243e-12 150000 250, + -19411.4 144889 250, + -37500 129904 250, + -53033 106066 250, + -64951.9 75000 250, + -72444.4 38822.9 250, + -75000 1.83697e-11 250, + -72444.4 -38822.9 250, + -64951.9 -75000 250, + -53033 -106066 250, + -37500 -129904 250, + -19411.4 -144889 250, + -1.37773e-11 -150000 250, + 19411.4 -144889 250, + 37500 -129904 250, + 53033 -106066 250, + 64951.9 -75000 250, + 72444.4 -38822.9 250, + 225000 0 -250, + 217333 116469 -250, + 194856 225000 -250, + 159099 318198 -250, + 112500 389711 -250, + 58234.3 434667 -250, + 1.37773e-11 450000 -250, + -58234.3 434667 -250, + -112500 389711 -250, + -159099 318198 -250, + -194856 225000 -250, + -217333 116469 -250, + -225000 5.51091e-11 -250, + -217333 -116469 -250, + -194856 -225000 -250, + -159099 -318198 -250, + -112500 -389711 -250, + -58234.3 -434667 -250, + -4.13318e-11 -450000 -250, + 58234.3 -434667 -250, + 112500 -389711 -250, + 159099 -318198 -250, + 194856 -225000 -250, + 217333 -116469 -250, + 0 0 250, + 0 0 -250, + ] + } + coordIndex [ + 0, 24, 25, 1, -1, + 1, 25, 26, 2, -1, + 2, 26, 27, 3, -1, + 3, 27, 28, 4, -1, + 4, 28, 29, 5, -1, + 5, 29, 30, 6, -1, + 6, 30, 31, 7, -1, + 7, 31, 32, 8, -1, + 8, 32, 33, 9, -1, + 9, 33, 34, 10, -1, + 10, 34, 35, 11, -1, + 11, 35, 36, 12, -1, + 12, 36, 37, 13, -1, + 13, 37, 38, 14, -1, + 14, 38, 39, 15, -1, + 15, 39, 40, 16, -1, + 16, 40, 41, 17, -1, + 17, 41, 42, 18, -1, + 18, 42, 43, 19, -1, + 19, 43, 44, 20, -1, + 20, 44, 45, 21, -1, + 21, 45, 46, 22, -1, + 22, 46, 47, 23, -1, + 23, 47, 24, 0, -1, + 48, 0, 1, -1, + 48, 1, 2, -1, + 48, 2, 3, -1, + 48, 3, 4, -1, + 48, 4, 5, -1, + 48, 5, 6, -1, + 48, 6, 7, -1, + 48, 7, 8, -1, + 48, 8, 9, -1, + 48, 9, 10, -1, + 48, 10, 11, -1, + 48, 11, 12, -1, + 48, 12, 13, -1, + 48, 13, 14, -1, + 48, 14, 15, -1, + 48, 15, 16, -1, + 48, 16, 17, -1, + 48, 17, 18, -1, + 48, 18, 19, -1, + 48, 19, 20, -1, + 48, 20, 21, -1, + 48, 21, 22, -1, + 48, 22, 23, -1, + 48, 23, 0, -1, + 24, 49, 25, -1, + 25, 49, 26, -1, + 26, 49, 27, -1, + 27, 49, 28, -1, + 28, 49, 29, -1, + 29, 49, 30, -1, + 30, 49, 31, -1, + 31, 49, 32, -1, + 32, 49, 33, -1, + 33, 49, 34, -1, + 34, 49, 35, -1, + 35, 49, 36, -1, + 36, 49, 37, -1, + 37, 49, 38, -1, + 38, 49, 39, -1, + 39, 49, 40, -1, + 40, 49, 41, -1, + 41, 49, 42, -1, + 42, 49, 43, -1, + 43, 49, 44, -1, + 44, 49, 45, -1, + 45, 49, 46, -1, + 46, 49, 47, -1, + 47, 49, 24, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4ellipticaltube.wrl b/environments/g4py/tests/gtest05/vrml/g4ellipticaltube.wrl new file mode 100644 index 0000000000..3efae86d7b --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4ellipticaltube.wrl @@ -0,0 +1,210 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 50 0 200, + 48.2963 25.8819 200, + 43.3013 50 200, + 35.3553 70.7107 200, + 25 86.6025 200, + 12.941 96.5926 200, + 3.06162e-15 100 200, + -12.941 96.5926 200, + -25 86.6025 200, + -35.3553 70.7107 200, + -43.3013 50 200, + -48.2963 25.8819 200, + -50 1.22465e-14 200, + -48.2963 -25.8819 200, + -43.3013 -50 200, + -35.3553 -70.7107 200, + -25 -86.6025 200, + -12.941 -96.5926 200, + -9.18485e-15 -100 200, + 12.941 -96.5926 200, + 25 -86.6025 200, + 35.3553 -70.7107 200, + 43.3013 -50 200, + 48.2963 -25.8819 200, + 50 0 -200, + 48.2963 25.8819 -200, + 43.3013 50 -200, + 35.3553 70.7107 -200, + 25 86.6025 -200, + 12.941 96.5926 -200, + 3.06162e-15 100 -200, + -12.941 96.5926 -200, + -25 86.6025 -200, + -35.3553 70.7107 -200, + -43.3013 50 -200, + -48.2963 25.8819 -200, + -50 1.22465e-14 -200, + -48.2963 -25.8819 -200, + -43.3013 -50 -200, + -35.3553 -70.7107 -200, + -25 -86.6025 -200, + -12.941 -96.5926 -200, + -9.18485e-15 -100 -200, + 12.941 -96.5926 -200, + 25 -86.6025 -200, + 35.3553 -70.7107 -200, + 43.3013 -50 -200, + 48.2963 -25.8819 -200, + 0 0 200, + 0 0 -200, + ] + } + coordIndex [ + 0, 24, 25, 1, -1, + 1, 25, 26, 2, -1, + 2, 26, 27, 3, -1, + 3, 27, 28, 4, -1, + 4, 28, 29, 5, -1, + 5, 29, 30, 6, -1, + 6, 30, 31, 7, -1, + 7, 31, 32, 8, -1, + 8, 32, 33, 9, -1, + 9, 33, 34, 10, -1, + 10, 34, 35, 11, -1, + 11, 35, 36, 12, -1, + 12, 36, 37, 13, -1, + 13, 37, 38, 14, -1, + 14, 38, 39, 15, -1, + 15, 39, 40, 16, -1, + 16, 40, 41, 17, -1, + 17, 41, 42, 18, -1, + 18, 42, 43, 19, -1, + 19, 43, 44, 20, -1, + 20, 44, 45, 21, -1, + 21, 45, 46, 22, -1, + 22, 46, 47, 23, -1, + 23, 47, 24, 0, -1, + 48, 0, 1, -1, + 48, 1, 2, -1, + 48, 2, 3, -1, + 48, 3, 4, -1, + 48, 4, 5, -1, + 48, 5, 6, -1, + 48, 6, 7, -1, + 48, 7, 8, -1, + 48, 8, 9, -1, + 48, 9, 10, -1, + 48, 10, 11, -1, + 48, 11, 12, -1, + 48, 12, 13, -1, + 48, 13, 14, -1, + 48, 14, 15, -1, + 48, 15, 16, -1, + 48, 16, 17, -1, + 48, 17, 18, -1, + 48, 18, 19, -1, + 48, 19, 20, -1, + 48, 20, 21, -1, + 48, 21, 22, -1, + 48, 22, 23, -1, + 48, 23, 0, -1, + 24, 49, 25, -1, + 25, 49, 26, -1, + 26, 49, 27, -1, + 27, 49, 28, -1, + 28, 49, 29, -1, + 29, 49, 30, -1, + 30, 49, 31, -1, + 31, 49, 32, -1, + 32, 49, 33, -1, + 33, 49, 34, -1, + 34, 49, 35, -1, + 35, 49, 36, -1, + 36, 49, 37, -1, + 37, 49, 38, -1, + 38, 49, 39, -1, + 39, 49, 40, -1, + 40, 49, 41, -1, + 41, 49, 42, -1, + 42, 49, 43, -1, + 43, 49, 44, -1, + 44, 49, 45, -1, + 45, 49, 46, -1, + 46, 49, 47, -1, + 47, 49, 24, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4hype.wrl b/environments/g4py/tests/gtest05/vrml/g4hype.wrl new file mode 100644 index 0000000000..540feb7e63 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4hype.wrl @@ -0,0 +1,2392 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 517.071 0 500, + 499.452 133.828 500, + 447.797 258.536 500, + 365.624 365.624 500, + 258.536 447.797 500, + 133.828 499.452 500, + 3.16615e-14 517.071 500, + -133.828 499.452 500, + -258.536 447.797 500, + -365.624 365.624 500, + -447.797 258.536 500, + -499.452 133.828 500, + -517.071 6.33229e-14 500, + -499.452 -133.828 500, + -447.797 -258.536 500, + -365.624 -365.624 500, + -258.536 -447.797 500, + -133.828 -499.452 500, + -9.49844e-14 -517.071 500, + 133.828 -499.452 500, + 258.536 -447.797 500, + 365.624 -365.624 500, + 447.797 -258.536 500, + 499.452 -133.828 500, + 488.911 0 458.333, + 472.252 126.539 458.333, + 423.409 244.455 458.333, + 345.712 345.712 458.333, + 244.455 423.409 458.333, + 126.539 472.252 458.333, + 2.99371e-14 488.911 458.333, + -126.539 472.252 458.333, + -244.455 423.409 458.333, + -345.712 345.712 458.333, + -423.409 244.455 458.333, + -472.252 126.539 458.333, + -488.911 5.98743e-14 458.333, + -472.252 -126.539 458.333, + -423.409 -244.455 458.333, + -345.712 -345.712 458.333, + -244.455 -423.409 458.333, + -126.539 -472.252 458.333, + -8.98114e-14 -488.911 458.333, + 126.539 -472.252 458.333, + 244.455 -423.409 458.333, + 345.712 -345.712 458.333, + 423.409 -244.455 458.333, + 472.252 -126.539 458.333, + 461.702 0 416.667, + 445.969 119.497 416.667, + 399.845 230.851 416.667, + 326.472 326.472 416.667, + 230.851 399.845 416.667, + 119.497 445.969 416.667, + 2.82711e-14 461.702 416.667, + -119.497 445.969 416.667, + -230.851 399.845 416.667, + -326.472 326.472 416.667, + -399.845 230.851 416.667, + -445.969 119.497 416.667, + -461.702 5.65421e-14 416.667, + -445.969 -119.497 416.667, + -399.845 -230.851 416.667, + -326.472 -326.472 416.667, + -230.851 -399.845 416.667, + -119.497 -445.969 416.667, + -8.48132e-14 -461.702 416.667, + 119.497 -445.969 416.667, + 230.851 -399.845 416.667, + 326.472 -326.472 416.667, + 399.845 -230.851 416.667, + 445.969 -119.497 416.667, + 435.622 0 375, + 420.778 112.747 375, + 377.26 217.811 375, + 308.031 308.031 375, + 217.811 377.26 375, + 112.747 420.778 375, + 2.66741e-14 435.622 375, + -112.747 420.778 375, + -217.811 377.26 375, + -308.031 308.031 375, + -377.26 217.811 375, + -420.778 112.747 375, + -435.622 5.33483e-14 375, + -420.778 -112.747 375, + -377.26 -217.811 375, + -308.031 -308.031 375, + -217.811 -377.26 375, + -112.747 -420.778 375, + -8.00224e-14 -435.622 375, + 112.747 -420.778 375, + 217.811 -377.26 375, + 308.031 -308.031 375, + 377.26 -217.811 375, + 420.778 -112.747 375, + 410.887 0 333.333, + 396.886 106.345 333.333, + 355.838 205.443 333.333, + 290.541 290.541 333.333, + 205.443 355.838 333.333, + 106.345 396.886 333.333, + 2.51595e-14 410.887 333.333, + -106.345 396.886 333.333, + -205.443 355.838 333.333, + -290.541 290.541 333.333, + -355.838 205.443 333.333, + -396.886 106.345 333.333, + -410.887 5.03191e-14 333.333, + -396.886 -106.345 333.333, + -355.838 -205.443 333.333, + -290.541 -290.541 333.333, + -205.443 -355.838 333.333, + -106.345 -396.886 333.333, + -7.54786e-14 -410.887 333.333, + 106.345 -396.886 333.333, + 205.443 -355.838 333.333, + 290.541 -290.541 333.333, + 355.838 -205.443 333.333, + 396.886 -106.345 333.333, + 387.753 0 291.667, + 374.541 100.358 291.667, + 335.804 193.877 291.667, + 274.183 274.183 291.667, + 193.877 335.804 291.667, + 100.358 374.541 291.667, + 2.3743e-14 387.753 291.667, + -100.358 374.541 291.667, + -193.877 335.804 291.667, + -274.183 274.183 291.667, + -335.804 193.877 291.667, + -374.541 100.358 291.667, + -387.753 4.74861e-14 291.667, + -374.541 -100.358 291.667, + -335.804 -193.877 291.667, + -274.183 -274.183 291.667, + -193.877 -335.804 291.667, + -100.358 -374.541 291.667, + -7.12291e-14 -387.753 291.667, + 100.358 -374.541 291.667, + 193.877 -335.804 291.667, + 274.183 -274.183 291.667, + 335.804 -193.877 291.667, + 374.541 -100.358 291.667, + 366.525 0 250, + 354.036 94.8637 250, + 317.42 183.263 250, + 259.172 259.172 250, + 183.263 317.42 250, + 94.8637 354.036 250, + 2.24432e-14 366.525 250, + -94.8637 354.036 250, + -183.263 317.42 250, + -259.172 259.172 250, + -317.42 183.263 250, + -354.036 94.8637 250, + -366.525 4.48864e-14 250, + -354.036 -94.8637 250, + -317.42 -183.263 250, + -259.172 -259.172 250, + -183.263 -317.42 250, + -94.8637 -354.036 250, + -6.73296e-14 -366.525 250, + 94.8637 -354.036 250, + 183.263 -317.42 250, + 259.172 -259.172 250, + 317.42 -183.263 250, + 354.036 -94.8637 250, + 347.552 0 208.333, + 335.709 89.953 208.333, + 300.988 173.776 208.333, + 245.756 245.756 208.333, + 173.776 300.988 208.333, + 89.953 335.709 208.333, + 2.12814e-14 347.552 208.333, + -89.953 335.709 208.333, + -173.776 300.988 208.333, + -245.756 245.756 208.333, + -300.988 173.776 208.333, + -335.709 89.953 208.333, + -347.552 4.25628e-14 208.333, + -335.709 -89.953 208.333, + -300.988 -173.776 208.333, + -245.756 -245.756 208.333, + -173.776 -300.988 208.333, + -89.953 -335.709 208.333, + -6.38442e-14 -347.552 208.333, + 89.953 -335.709 208.333, + 173.776 -300.988 208.333, + 245.756 -245.756 208.333, + 300.988 -173.776 208.333, + 335.709 -89.953 208.333, + 331.22 0 166.667, + 319.934 85.7261 166.667, + 286.845 165.61 166.667, + 234.208 234.208 166.667, + 165.61 286.845 166.667, + 85.7261 319.934 166.667, + 2.02814e-14 331.22 166.667, + -85.7261 319.934 166.667, + -165.61 286.845 166.667, + -234.208 234.208 166.667, + -286.845 165.61 166.667, + -319.934 85.7261 166.667, + -331.22 4.05628e-14 166.667, + -319.934 -85.7261 166.667, + -286.845 -165.61 166.667, + -234.208 -234.208 166.667, + -165.61 -286.845 166.667, + -85.7261 -319.934 166.667, + -6.08442e-14 -331.22 166.667, + 85.7261 -319.934 166.667, + 165.61 -286.845 166.667, + 234.208 -234.208 166.667, + 286.845 -165.61 166.667, + 319.934 -85.7261 166.667, + 317.939 0 125, + 307.105 82.2886 125, + 275.343 158.969 125, + 224.817 224.817 125, + 158.969 275.343 125, + 82.2886 307.105 125, + 1.94681e-14 317.939 125, + -82.2886 307.105 125, + -158.969 275.343 125, + -224.817 224.817 125, + -275.343 158.969 125, + -307.105 82.2886 125, + -317.939 3.89363e-14 125, + -307.105 -82.2886 125, + -275.343 -158.969 125, + -224.817 -224.817 125, + -158.969 -275.343 125, + -82.2886 -307.105 125, + -5.84044e-14 -317.939 125, + 82.2886 -307.105 125, + 158.969 -275.343 125, + 224.817 -224.817 125, + 275.343 -158.969 125, + 307.105 -82.2886 125, + 308.102 0 83.3333, + 297.604 79.7426 83.3333, + 266.824 154.051 83.3333, + 217.861 217.861 83.3333, + 154.051 266.824 83.3333, + 79.7426 297.604 83.3333, + 1.88658e-14 308.102 83.3333, + -79.7426 297.604 83.3333, + -154.051 266.824 83.3333, + -217.861 217.861 83.3333, + -266.824 154.051 83.3333, + -297.604 79.7426 83.3333, + -308.102 3.77316e-14 83.3333, + -297.604 -79.7426 83.3333, + -266.824 -154.051 83.3333, + -217.861 -217.861 83.3333, + -154.051 -266.824 83.3333, + -79.7426 -297.604 83.3333, + -5.65974e-14 -308.102 83.3333, + 79.7426 -297.604 83.3333, + 154.051 -266.824 83.3333, + 217.861 -217.861 83.3333, + 266.824 -154.051 83.3333, + 297.604 -79.7426 83.3333, + 302.046 0 41.6667, + 291.754 78.1752 41.6667, + 261.579 151.023 41.6667, + 213.579 213.579 41.6667, + 151.023 261.579 41.6667, + 78.1752 291.754 41.6667, + 1.8495e-14 302.046 41.6667, + -78.1752 291.754 41.6667, + -151.023 261.579 41.6667, + -213.579 213.579 41.6667, + -261.579 151.023 41.6667, + -291.754 78.1752 41.6667, + -302.046 3.69899e-14 41.6667, + -291.754 -78.1752 41.6667, + -261.579 -151.023 41.6667, + -213.579 -213.579 41.6667, + -151.023 -261.579 41.6667, + -78.1752 -291.754 41.6667, + -5.54849e-14 -302.046 41.6667, + 78.1752 -291.754 41.6667, + 151.023 -261.579 41.6667, + 213.579 -213.579 41.6667, + 261.579 -151.023 41.6667, + 291.754 -78.1752 41.6667, + 300 0 -4.26326e-14, + 289.778 77.6457 -4.26326e-14, + 259.808 150 -4.26326e-14, + 212.132 212.132 -4.26326e-14, + 150 259.808 -4.26326e-14, + 77.6457 289.778 -4.26326e-14, + 1.83697e-14 300 -4.26326e-14, + -77.6457 289.778 -4.26326e-14, + -150 259.808 -4.26326e-14, + -212.132 212.132 -4.26326e-14, + -259.808 150 -4.26326e-14, + -289.778 77.6457 -4.26326e-14, + -300 3.67394e-14 -4.26326e-14, + -289.778 -77.6457 -4.26326e-14, + -259.808 -150 -4.26326e-14, + -212.132 -212.132 -4.26326e-14, + -150 -259.808 -4.26326e-14, + -77.6457 -289.778 -4.26326e-14, + -5.51091e-14 -300 -4.26326e-14, + 77.6457 -289.778 -4.26326e-14, + 150 -259.808 -4.26326e-14, + 212.132 -212.132 -4.26326e-14, + 259.808 -150 -4.26326e-14, + 289.778 -77.6457 -4.26326e-14, + 302.046 0 -41.6667, + 291.754 78.1752 -41.6667, + 261.579 151.023 -41.6667, + 213.579 213.579 -41.6667, + 151.023 261.579 -41.6667, + 78.1752 291.754 -41.6667, + 1.8495e-14 302.046 -41.6667, + -78.1752 291.754 -41.6667, + -151.023 261.579 -41.6667, + -213.579 213.579 -41.6667, + -261.579 151.023 -41.6667, + -291.754 78.1752 -41.6667, + -302.046 3.69899e-14 -41.6667, + -291.754 -78.1752 -41.6667, + -261.579 -151.023 -41.6667, + -213.579 -213.579 -41.6667, + -151.023 -261.579 -41.6667, + -78.1752 -291.754 -41.6667, + -5.54849e-14 -302.046 -41.6667, + 78.1752 -291.754 -41.6667, + 151.023 -261.579 -41.6667, + 213.579 -213.579 -41.6667, + 261.579 -151.023 -41.6667, + 291.754 -78.1752 -41.6667, + 308.102 0 -83.3333, + 297.604 79.7426 -83.3333, + 266.824 154.051 -83.3333, + 217.861 217.861 -83.3333, + 154.051 266.824 -83.3333, + 79.7426 297.604 -83.3333, + 1.88658e-14 308.102 -83.3333, + -79.7426 297.604 -83.3333, + -154.051 266.824 -83.3333, + -217.861 217.861 -83.3333, + -266.824 154.051 -83.3333, + -297.604 79.7426 -83.3333, + -308.102 3.77316e-14 -83.3333, + -297.604 -79.7426 -83.3333, + -266.824 -154.051 -83.3333, + -217.861 -217.861 -83.3333, + -154.051 -266.824 -83.3333, + -79.7426 -297.604 -83.3333, + -5.65974e-14 -308.102 -83.3333, + 79.7426 -297.604 -83.3333, + 154.051 -266.824 -83.3333, + 217.861 -217.861 -83.3333, + 266.824 -154.051 -83.3333, + 297.604 -79.7426 -83.3333, + 317.939 0 -125, + 307.105 82.2886 -125, + 275.343 158.969 -125, + 224.817 224.817 -125, + 158.969 275.343 -125, + 82.2886 307.105 -125, + 1.94681e-14 317.939 -125, + -82.2886 307.105 -125, + -158.969 275.343 -125, + -224.817 224.817 -125, + -275.343 158.969 -125, + -307.105 82.2886 -125, + -317.939 3.89363e-14 -125, + -307.105 -82.2886 -125, + -275.343 -158.969 -125, + -224.817 -224.817 -125, + -158.969 -275.343 -125, + -82.2886 -307.105 -125, + -5.84044e-14 -317.939 -125, + 82.2886 -307.105 -125, + 158.969 -275.343 -125, + 224.817 -224.817 -125, + 275.343 -158.969 -125, + 307.105 -82.2886 -125, + 331.22 0 -166.667, + 319.934 85.7261 -166.667, + 286.845 165.61 -166.667, + 234.208 234.208 -166.667, + 165.61 286.845 -166.667, + 85.7261 319.934 -166.667, + 2.02814e-14 331.22 -166.667, + -85.7261 319.934 -166.667, + -165.61 286.845 -166.667, + -234.208 234.208 -166.667, + -286.845 165.61 -166.667, + -319.934 85.7261 -166.667, + -331.22 4.05628e-14 -166.667, + -319.934 -85.7261 -166.667, + -286.845 -165.61 -166.667, + -234.208 -234.208 -166.667, + -165.61 -286.845 -166.667, + -85.7261 -319.934 -166.667, + -6.08442e-14 -331.22 -166.667, + 85.7261 -319.934 -166.667, + 165.61 -286.845 -166.667, + 234.208 -234.208 -166.667, + 286.845 -165.61 -166.667, + 319.934 -85.7261 -166.667, + 347.552 0 -208.333, + 335.709 89.953 -208.333, + 300.988 173.776 -208.333, + 245.756 245.756 -208.333, + 173.776 300.988 -208.333, + 89.953 335.709 -208.333, + 2.12814e-14 347.552 -208.333, + -89.953 335.709 -208.333, + -173.776 300.988 -208.333, + -245.756 245.756 -208.333, + -300.988 173.776 -208.333, + -335.709 89.953 -208.333, + -347.552 4.25628e-14 -208.333, + -335.709 -89.953 -208.333, + -300.988 -173.776 -208.333, + -245.756 -245.756 -208.333, + -173.776 -300.988 -208.333, + -89.953 -335.709 -208.333, + -6.38442e-14 -347.552 -208.333, + 89.953 -335.709 -208.333, + 173.776 -300.988 -208.333, + 245.756 -245.756 -208.333, + 300.988 -173.776 -208.333, + 335.709 -89.953 -208.333, + 366.525 0 -250, + 354.036 94.8637 -250, + 317.42 183.263 -250, + 259.172 259.172 -250, + 183.263 317.42 -250, + 94.8637 354.036 -250, + 2.24432e-14 366.525 -250, + -94.8637 354.036 -250, + -183.263 317.42 -250, + -259.172 259.172 -250, + -317.42 183.263 -250, + -354.036 94.8637 -250, + -366.525 4.48864e-14 -250, + -354.036 -94.8637 -250, + -317.42 -183.263 -250, + -259.172 -259.172 -250, + -183.263 -317.42 -250, + -94.8637 -354.036 -250, + -6.73296e-14 -366.525 -250, + 94.8637 -354.036 -250, + 183.263 -317.42 -250, + 259.172 -259.172 -250, + 317.42 -183.263 -250, + 354.036 -94.8637 -250, + 387.753 0 -291.667, + 374.541 100.358 -291.667, + 335.804 193.877 -291.667, + 274.183 274.183 -291.667, + 193.877 335.804 -291.667, + 100.358 374.541 -291.667, + 2.3743e-14 387.753 -291.667, + -100.358 374.541 -291.667, + -193.877 335.804 -291.667, + -274.183 274.183 -291.667, + -335.804 193.877 -291.667, + -374.541 100.358 -291.667, + -387.753 4.74861e-14 -291.667, + -374.541 -100.358 -291.667, + -335.804 -193.877 -291.667, + -274.183 -274.183 -291.667, + -193.877 -335.804 -291.667, + -100.358 -374.541 -291.667, + -7.12291e-14 -387.753 -291.667, + 100.358 -374.541 -291.667, + 193.877 -335.804 -291.667, + 274.183 -274.183 -291.667, + 335.804 -193.877 -291.667, + 374.541 -100.358 -291.667, + 410.887 0 -333.333, + 396.886 106.345 -333.333, + 355.838 205.443 -333.333, + 290.541 290.541 -333.333, + 205.443 355.838 -333.333, + 106.345 396.886 -333.333, + 2.51595e-14 410.887 -333.333, + -106.345 396.886 -333.333, + -205.443 355.838 -333.333, + -290.541 290.541 -333.333, + -355.838 205.443 -333.333, + -396.886 106.345 -333.333, + -410.887 5.03191e-14 -333.333, + -396.886 -106.345 -333.333, + -355.838 -205.443 -333.333, + -290.541 -290.541 -333.333, + -205.443 -355.838 -333.333, + -106.345 -396.886 -333.333, + -7.54786e-14 -410.887 -333.333, + 106.345 -396.886 -333.333, + 205.443 -355.838 -333.333, + 290.541 -290.541 -333.333, + 355.838 -205.443 -333.333, + 396.886 -106.345 -333.333, + 435.622 0 -375, + 420.778 112.747 -375, + 377.26 217.811 -375, + 308.031 308.031 -375, + 217.811 377.26 -375, + 112.747 420.778 -375, + 2.66741e-14 435.622 -375, + -112.747 420.778 -375, + -217.811 377.26 -375, + -308.031 308.031 -375, + -377.26 217.811 -375, + -420.778 112.747 -375, + -435.622 5.33483e-14 -375, + -420.778 -112.747 -375, + -377.26 -217.811 -375, + -308.031 -308.031 -375, + -217.811 -377.26 -375, + -112.747 -420.778 -375, + -8.00224e-14 -435.622 -375, + 112.747 -420.778 -375, + 217.811 -377.26 -375, + 308.031 -308.031 -375, + 377.26 -217.811 -375, + 420.778 -112.747 -375, + 461.702 0 -416.667, + 445.969 119.497 -416.667, + 399.845 230.851 -416.667, + 326.472 326.472 -416.667, + 230.851 399.845 -416.667, + 119.497 445.969 -416.667, + 2.82711e-14 461.702 -416.667, + -119.497 445.969 -416.667, + -230.851 399.845 -416.667, + -326.472 326.472 -416.667, + -399.845 230.851 -416.667, + -445.969 119.497 -416.667, + -461.702 5.65421e-14 -416.667, + -445.969 -119.497 -416.667, + -399.845 -230.851 -416.667, + -326.472 -326.472 -416.667, + -230.851 -399.845 -416.667, + -119.497 -445.969 -416.667, + -8.48132e-14 -461.702 -416.667, + 119.497 -445.969 -416.667, + 230.851 -399.845 -416.667, + 326.472 -326.472 -416.667, + 399.845 -230.851 -416.667, + 445.969 -119.497 -416.667, + 517.071 0 -500, + 499.452 133.828 -500, + 447.797 258.536 -500, + 365.624 365.624 -500, + 258.536 447.797 -500, + 133.828 499.452 -500, + 3.16615e-14 517.071 -500, + -133.828 499.452 -500, + -258.536 447.797 -500, + -365.624 365.624 -500, + -447.797 258.536 -500, + -499.452 133.828 -500, + -517.071 6.33229e-14 -500, + -499.452 -133.828 -500, + -447.797 -258.536 -500, + -365.624 -365.624 -500, + -258.536 -447.797 -500, + -133.828 -499.452 -500, + -9.49844e-14 -517.071 -500, + 133.828 -499.452 -500, + 258.536 -447.797 -500, + 365.624 -365.624 -500, + 447.797 -258.536 -500, + 499.452 -133.828 -500, + 466.221 0 500, + 450.335 120.667 500, + 403.76 233.111 500, + 329.668 329.668 500, + 233.111 403.76 500, + 120.667 450.335 500, + 2.85478e-14 466.221 500, + -120.667 450.335 500, + -233.111 403.76 500, + -329.668 329.668 500, + -403.76 233.111 500, + -450.335 120.667 500, + -466.221 5.70957e-14 500, + -450.335 -120.667 500, + -403.76 -233.111 500, + -329.668 -329.668 500, + -233.111 -403.76 500, + -120.667 -450.335 500, + -8.56435e-14 -466.221 500, + 120.667 -450.335 500, + 233.111 -403.76 500, + 329.668 -329.668 500, + 403.76 -233.111 500, + 450.335 -120.667 500, + 434.78 0 458.333, + 419.965 112.529 458.333, + 376.531 217.39 458.333, + 307.436 307.436 458.333, + 217.39 376.531 458.333, + 112.529 419.965 458.333, + 2.66226e-14 434.78 458.333, + -112.529 419.965 458.333, + -217.39 376.531 458.333, + -307.436 307.436 458.333, + -376.531 217.39 458.333, + -419.965 112.529 458.333, + -434.78 5.32452e-14 458.333, + -419.965 -112.529 458.333, + -376.531 -217.39 458.333, + -307.436 -307.436 458.333, + -217.39 -376.531 458.333, + -112.529 -419.965 458.333, + -7.98678e-14 -434.78 458.333, + 112.529 -419.965 458.333, + 217.39 -376.531 458.333, + 307.436 -307.436 458.333, + 376.531 -217.39 458.333, + 419.965 -112.529 458.333, + 403.941 0 416.667, + 390.177 104.548 416.667, + 349.823 201.971 416.667, + 285.629 285.629 416.667, + 201.971 349.823 416.667, + 104.548 390.177 416.667, + 2.47343e-14 403.941 416.667, + -104.548 390.177 416.667, + -201.971 349.823 416.667, + -285.629 285.629 416.667, + -349.823 201.971 416.667, + -390.177 104.548 416.667, + -403.941 4.94685e-14 416.667, + -390.177 -104.548 416.667, + -349.823 -201.971 416.667, + -285.629 -285.629 416.667, + -201.971 -349.823 416.667, + -104.548 -390.177 416.667, + -7.42028e-14 -403.941 416.667, + 104.548 -390.177 416.667, + 201.971 -349.823 416.667, + 285.629 -285.629 416.667, + 349.823 -201.971 416.667, + 390.177 -104.548 416.667, + 373.853 0 375, + 361.115 96.7604 375, + 323.767 186.927 375, + 264.354 264.354 375, + 186.927 323.767 375, + 96.7604 361.115 375, + 2.28919e-14 373.853 375, + -96.7604 361.115 375, + -186.927 323.767 375, + -264.354 264.354 375, + -323.767 186.927 375, + -361.115 96.7604 375, + -373.853 4.57838e-14 375, + -361.115 -96.7604 375, + -323.767 -186.927 375, + -264.354 -264.354 375, + -186.927 -323.767 375, + -96.7604 -361.115 375, + -6.86758e-14 -373.853 375, + 96.7604 -361.115 375, + 186.927 -323.767 375, + 264.354 -264.354 375, + 323.767 -186.927 375, + 361.115 -96.7604 375, + 344.714 0 333.333, + 332.968 89.2185 333.333, + 298.531 172.357 333.333, + 243.75 243.75 333.333, + 172.357 298.531 333.333, + 89.2185 332.968 333.333, + 2.11076e-14 344.714 333.333, + -89.2185 332.968 333.333, + -172.357 298.531 333.333, + -243.75 243.75 333.333, + -298.531 172.357 333.333, + -332.968 89.2185 333.333, + -344.714 4.22153e-14 333.333, + -332.968 -89.2185 333.333, + -298.531 -172.357 333.333, + -243.75 -243.75 333.333, + -172.357 -298.531 333.333, + -89.2185 -332.968 333.333, + -6.33229e-14 -344.714 333.333, + 89.2185 -332.968 333.333, + 172.357 -298.531 333.333, + 243.75 -243.75 333.333, + 298.531 -172.357 333.333, + 332.968 -89.2185 333.333, + 316.785 0 291.667, + 305.99 81.9899 291.667, + 274.344 158.392 291.667, + 224.001 224.001 291.667, + 158.392 274.344 291.667, + 81.9899 305.99 291.667, + 1.93975e-14 316.785 291.667, + -81.9899 305.99 291.667, + -158.392 274.344 291.667, + -224.001 224.001 291.667, + -274.344 158.392 291.667, + -305.99 81.9899 291.667, + -316.785 3.87949e-14 291.667, + -305.99 -81.9899 291.667, + -274.344 -158.392 291.667, + -224.001 -224.001 291.667, + -158.392 -274.344 291.667, + -81.9899 -305.99 291.667, + -5.81924e-14 -316.785 291.667, + 81.9899 -305.99 291.667, + 158.392 -274.344 291.667, + 224.001 -224.001 291.667, + 274.344 -158.392 291.667, + 305.99 -81.9899 291.667, + 290.415 0 250, + 280.519 75.1648 250, + 251.506 145.207 250, + 205.354 205.354 250, + 145.207 251.506 250, + 75.1648 280.519 250, + 1.77828e-14 290.415 250, + -75.1648 280.519 250, + -145.207 251.506 250, + -205.354 205.354 250, + -251.506 145.207 250, + -280.519 75.1648 250, + -290.415 3.55655e-14 250, + -280.519 -75.1648 250, + -251.506 -145.207 250, + -205.354 -205.354 250, + -145.207 -251.506 250, + -75.1648 -280.519 250, + -5.33483e-14 -290.415 250, + 75.1648 -280.519 250, + 145.207 -251.506 250, + 205.354 -205.354 250, + 251.506 -145.207 250, + 280.519 -75.1648 250, + 266.068 0 208.333, + 257.002 68.8634 208.333, + 230.421 133.034 208.333, + 188.138 188.138 208.333, + 133.034 230.421 208.333, + 68.8634 257.002 208.333, + 1.6292e-14 266.068 208.333, + -68.8634 257.002 208.333, + -133.034 230.421 208.333, + -188.138 188.138 208.333, + -230.421 133.034 208.333, + -257.002 68.8634 208.333, + -266.068 3.25839e-14 208.333, + -257.002 -68.8634 208.333, + -230.421 -133.034 208.333, + -188.138 -188.138 208.333, + -133.034 -230.421 208.333, + -68.8634 -257.002 208.333, + -4.88759e-14 -266.068 208.333, + 68.8634 -257.002 208.333, + 133.034 -230.421 208.333, + 188.138 -188.138 208.333, + 230.421 -133.034 208.333, + 257.002 -68.8634 208.333, + 244.35 0 166.667, + 236.024 63.2424 166.667, + 211.613 122.175 166.667, + 172.782 172.782 166.667, + 122.175 211.613 166.667, + 63.2424 236.024 166.667, + 1.49621e-14 244.35 166.667, + -63.2424 236.024 166.667, + -122.175 211.613 166.667, + -172.782 172.782 166.667, + -211.613 122.175 166.667, + -236.024 63.2424 166.667, + -244.35 2.99242e-14 166.667, + -236.024 -63.2424 166.667, + -211.613 -122.175 166.667, + -172.782 -172.782 166.667, + -122.175 -211.613 166.667, + -63.2424 -236.024 166.667, + -4.48864e-14 -244.35 166.667, + 63.2424 -236.024 166.667, + 122.175 -211.613 166.667, + 172.782 -172.782 166.667, + 211.613 -122.175 166.667, + 236.024 -63.2424 166.667, + 226.02 0 125, + 218.319 58.4983 125, + 195.739 113.01 125, + 159.82 159.82 125, + 113.01 195.739 125, + 58.4983 218.319 125, + 1.38397e-14 226.02 125, + -58.4983 218.319 125, + -113.01 195.739 125, + -159.82 159.82 125, + -195.739 113.01 125, + -218.319 58.4983 125, + -226.02 2.76795e-14 125, + -218.319 -58.4983 125, + -195.739 -113.01 125, + -159.82 -159.82 125, + -113.01 -195.739 125, + -58.4983 -218.319 125, + -4.15192e-14 -226.02 125, + 58.4983 -218.319 125, + 113.01 -195.739 125, + 159.82 -159.82 125, + 195.739 -113.01 125, + 218.319 -58.4983 125, + 211.959 0 83.3333, + 204.737 54.8591 83.3333, + 183.562 105.98 83.3333, + 149.878 149.878 83.3333, + 105.98 183.562 83.3333, + 54.8591 204.737 83.3333, + 1.29788e-14 211.959 83.3333, + -54.8591 204.737 83.3333, + -105.98 183.562 83.3333, + -149.878 149.878 83.3333, + -183.562 105.98 83.3333, + -204.737 54.8591 83.3333, + -211.959 2.59575e-14 83.3333, + -204.737 -54.8591 83.3333, + -183.562 -105.98 83.3333, + -149.878 -149.878 83.3333, + -105.98 -183.562 83.3333, + -54.8591 -204.737 83.3333, + -3.89363e-14 -211.959 83.3333, + 54.8591 -204.737 83.3333, + 105.98 -183.562 83.3333, + 149.878 -149.878 83.3333, + 183.562 -105.98 83.3333, + 204.737 -54.8591 83.3333, + 203.056 0 41.6667, + 196.137 52.5547 41.6667, + 175.852 101.528 41.6667, + 143.582 143.582 41.6667, + 101.528 175.852 41.6667, + 52.5547 196.137 41.6667, + 1.24336e-14 203.056 41.6667, + -52.5547 196.137 41.6667, + -101.528 175.852 41.6667, + -143.582 143.582 41.6667, + -175.852 101.528 41.6667, + -196.137 52.5547 41.6667, + -203.056 2.48672e-14 41.6667, + -196.137 -52.5547 41.6667, + -175.852 -101.528 41.6667, + -143.582 -143.582 41.6667, + -101.528 -175.852 41.6667, + -52.5547 -196.137 41.6667, + -3.73008e-14 -203.056 41.6667, + 52.5547 -196.137 41.6667, + 101.528 -175.852 41.6667, + 143.582 -143.582 41.6667, + 175.852 -101.528 41.6667, + 196.137 -52.5547 41.6667, + 200 0 -4.26326e-14, + 193.185 51.7638 -4.26326e-14, + 173.205 100 -4.26326e-14, + 141.421 141.421 -4.26326e-14, + 100 173.205 -4.26326e-14, + 51.7638 193.185 -4.26326e-14, + 1.22465e-14 200 -4.26326e-14, + -51.7638 193.185 -4.26326e-14, + -100 173.205 -4.26326e-14, + -141.421 141.421 -4.26326e-14, + -173.205 100 -4.26326e-14, + -193.185 51.7638 -4.26326e-14, + -200 2.44929e-14 -4.26326e-14, + -193.185 -51.7638 -4.26326e-14, + -173.205 -100 -4.26326e-14, + -141.421 -141.421 -4.26326e-14, + -100 -173.205 -4.26326e-14, + -51.7638 -193.185 -4.26326e-14, + -3.67394e-14 -200 -4.26326e-14, + 51.7638 -193.185 -4.26326e-14, + 100 -173.205 -4.26326e-14, + 141.421 -141.421 -4.26326e-14, + 173.205 -100 -4.26326e-14, + 193.185 -51.7638 -4.26326e-14, + 203.056 0 -41.6667, + 196.137 52.5547 -41.6667, + 175.852 101.528 -41.6667, + 143.582 143.582 -41.6667, + 101.528 175.852 -41.6667, + 52.5547 196.137 -41.6667, + 1.24336e-14 203.056 -41.6667, + -52.5547 196.137 -41.6667, + -101.528 175.852 -41.6667, + -143.582 143.582 -41.6667, + -175.852 101.528 -41.6667, + -196.137 52.5547 -41.6667, + -203.056 2.48672e-14 -41.6667, + -196.137 -52.5547 -41.6667, + -175.852 -101.528 -41.6667, + -143.582 -143.582 -41.6667, + -101.528 -175.852 -41.6667, + -52.5547 -196.137 -41.6667, + -3.73008e-14 -203.056 -41.6667, + 52.5547 -196.137 -41.6667, + 101.528 -175.852 -41.6667, + 143.582 -143.582 -41.6667, + 175.852 -101.528 -41.6667, + 196.137 -52.5547 -41.6667, + 211.959 0 -83.3333, + 204.737 54.8591 -83.3333, + 183.562 105.98 -83.3333, + 149.878 149.878 -83.3333, + 105.98 183.562 -83.3333, + 54.8591 204.737 -83.3333, + 1.29788e-14 211.959 -83.3333, + -54.8591 204.737 -83.3333, + -105.98 183.562 -83.3333, + -149.878 149.878 -83.3333, + -183.562 105.98 -83.3333, + -204.737 54.8591 -83.3333, + -211.959 2.59575e-14 -83.3333, + -204.737 -54.8591 -83.3333, + -183.562 -105.98 -83.3333, + -149.878 -149.878 -83.3333, + -105.98 -183.562 -83.3333, + -54.8591 -204.737 -83.3333, + -3.89363e-14 -211.959 -83.3333, + 54.8591 -204.737 -83.3333, + 105.98 -183.562 -83.3333, + 149.878 -149.878 -83.3333, + 183.562 -105.98 -83.3333, + 204.737 -54.8591 -83.3333, + 226.02 0 -125, + 218.319 58.4983 -125, + 195.739 113.01 -125, + 159.82 159.82 -125, + 113.01 195.739 -125, + 58.4983 218.319 -125, + 1.38397e-14 226.02 -125, + -58.4983 218.319 -125, + -113.01 195.739 -125, + -159.82 159.82 -125, + -195.739 113.01 -125, + -218.319 58.4983 -125, + -226.02 2.76795e-14 -125, + -218.319 -58.4983 -125, + -195.739 -113.01 -125, + -159.82 -159.82 -125, + -113.01 -195.739 -125, + -58.4983 -218.319 -125, + -4.15192e-14 -226.02 -125, + 58.4983 -218.319 -125, + 113.01 -195.739 -125, + 159.82 -159.82 -125, + 195.739 -113.01 -125, + 218.319 -58.4983 -125, + 244.35 0 -166.667, + 236.024 63.2424 -166.667, + 211.613 122.175 -166.667, + 172.782 172.782 -166.667, + 122.175 211.613 -166.667, + 63.2424 236.024 -166.667, + 1.49621e-14 244.35 -166.667, + -63.2424 236.024 -166.667, + -122.175 211.613 -166.667, + -172.782 172.782 -166.667, + -211.613 122.175 -166.667, + -236.024 63.2424 -166.667, + -244.35 2.99242e-14 -166.667, + -236.024 -63.2424 -166.667, + -211.613 -122.175 -166.667, + -172.782 -172.782 -166.667, + -122.175 -211.613 -166.667, + -63.2424 -236.024 -166.667, + -4.48864e-14 -244.35 -166.667, + 63.2424 -236.024 -166.667, + 122.175 -211.613 -166.667, + 172.782 -172.782 -166.667, + 211.613 -122.175 -166.667, + 236.024 -63.2424 -166.667, + 266.068 0 -208.333, + 257.002 68.8634 -208.333, + 230.421 133.034 -208.333, + 188.138 188.138 -208.333, + 133.034 230.421 -208.333, + 68.8634 257.002 -208.333, + 1.6292e-14 266.068 -208.333, + -68.8634 257.002 -208.333, + -133.034 230.421 -208.333, + -188.138 188.138 -208.333, + -230.421 133.034 -208.333, + -257.002 68.8634 -208.333, + -266.068 3.25839e-14 -208.333, + -257.002 -68.8634 -208.333, + -230.421 -133.034 -208.333, + -188.138 -188.138 -208.333, + -133.034 -230.421 -208.333, + -68.8634 -257.002 -208.333, + -4.88759e-14 -266.068 -208.333, + 68.8634 -257.002 -208.333, + 133.034 -230.421 -208.333, + 188.138 -188.138 -208.333, + 230.421 -133.034 -208.333, + 257.002 -68.8634 -208.333, + 290.415 0 -250, + 280.519 75.1648 -250, + 251.506 145.207 -250, + 205.354 205.354 -250, + 145.207 251.506 -250, + 75.1648 280.519 -250, + 1.77828e-14 290.415 -250, + -75.1648 280.519 -250, + -145.207 251.506 -250, + -205.354 205.354 -250, + -251.506 145.207 -250, + -280.519 75.1648 -250, + -290.415 3.55655e-14 -250, + -280.519 -75.1648 -250, + -251.506 -145.207 -250, + -205.354 -205.354 -250, + -145.207 -251.506 -250, + -75.1648 -280.519 -250, + -5.33483e-14 -290.415 -250, + 75.1648 -280.519 -250, + 145.207 -251.506 -250, + 205.354 -205.354 -250, + 251.506 -145.207 -250, + 280.519 -75.1648 -250, + 316.785 0 -291.667, + 305.99 81.9899 -291.667, + 274.344 158.392 -291.667, + 224.001 224.001 -291.667, + 158.392 274.344 -291.667, + 81.9899 305.99 -291.667, + 1.93975e-14 316.785 -291.667, + -81.9899 305.99 -291.667, + -158.392 274.344 -291.667, + -224.001 224.001 -291.667, + -274.344 158.392 -291.667, + -305.99 81.9899 -291.667, + -316.785 3.87949e-14 -291.667, + -305.99 -81.9899 -291.667, + -274.344 -158.392 -291.667, + -224.001 -224.001 -291.667, + -158.392 -274.344 -291.667, + -81.9899 -305.99 -291.667, + -5.81924e-14 -316.785 -291.667, + 81.9899 -305.99 -291.667, + 158.392 -274.344 -291.667, + 224.001 -224.001 -291.667, + 274.344 -158.392 -291.667, + 305.99 -81.9899 -291.667, + 344.714 0 -333.333, + 332.968 89.2185 -333.333, + 298.531 172.357 -333.333, + 243.75 243.75 -333.333, + 172.357 298.531 -333.333, + 89.2185 332.968 -333.333, + 2.11076e-14 344.714 -333.333, + -89.2185 332.968 -333.333, + -172.357 298.531 -333.333, + -243.75 243.75 -333.333, + -298.531 172.357 -333.333, + -332.968 89.2185 -333.333, + -344.714 4.22153e-14 -333.333, + -332.968 -89.2185 -333.333, + -298.531 -172.357 -333.333, + -243.75 -243.75 -333.333, + -172.357 -298.531 -333.333, + -89.2185 -332.968 -333.333, + -6.33229e-14 -344.714 -333.333, + 89.2185 -332.968 -333.333, + 172.357 -298.531 -333.333, + 243.75 -243.75 -333.333, + 298.531 -172.357 -333.333, + 332.968 -89.2185 -333.333, + 373.853 0 -375, + 361.115 96.7604 -375, + 323.767 186.927 -375, + 264.354 264.354 -375, + 186.927 323.767 -375, + 96.7604 361.115 -375, + 2.28919e-14 373.853 -375, + -96.7604 361.115 -375, + -186.927 323.767 -375, + -264.354 264.354 -375, + -323.767 186.927 -375, + -361.115 96.7604 -375, + -373.853 4.57838e-14 -375, + -361.115 -96.7604 -375, + -323.767 -186.927 -375, + -264.354 -264.354 -375, + -186.927 -323.767 -375, + -96.7604 -361.115 -375, + -6.86758e-14 -373.853 -375, + 96.7604 -361.115 -375, + 186.927 -323.767 -375, + 264.354 -264.354 -375, + 323.767 -186.927 -375, + 361.115 -96.7604 -375, + 403.941 0 -416.667, + 390.177 104.548 -416.667, + 349.823 201.971 -416.667, + 285.629 285.629 -416.667, + 201.971 349.823 -416.667, + 104.548 390.177 -416.667, + 2.47343e-14 403.941 -416.667, + -104.548 390.177 -416.667, + -201.971 349.823 -416.667, + -285.629 285.629 -416.667, + -349.823 201.971 -416.667, + -390.177 104.548 -416.667, + -403.941 4.94685e-14 -416.667, + -390.177 -104.548 -416.667, + -349.823 -201.971 -416.667, + -285.629 -285.629 -416.667, + -201.971 -349.823 -416.667, + -104.548 -390.177 -416.667, + -7.42028e-14 -403.941 -416.667, + 104.548 -390.177 -416.667, + 201.971 -349.823 -416.667, + 285.629 -285.629 -416.667, + 349.823 -201.971 -416.667, + 390.177 -104.548 -416.667, + 434.78 0 -458.333, + 419.965 112.529 -458.333, + 376.531 217.39 -458.333, + 307.436 307.436 -458.333, + 217.39 376.531 -458.333, + 112.529 419.965 -458.333, + 2.66226e-14 434.78 -458.333, + -112.529 419.965 -458.333, + -217.39 376.531 -458.333, + -307.436 307.436 -458.333, + -376.531 217.39 -458.333, + -419.965 112.529 -458.333, + -434.78 5.32452e-14 -458.333, + -419.965 -112.529 -458.333, + -376.531 -217.39 -458.333, + -307.436 -307.436 -458.333, + -217.39 -376.531 -458.333, + -112.529 -419.965 -458.333, + -7.98678e-14 -434.78 -458.333, + 112.529 -419.965 -458.333, + 217.39 -376.531 -458.333, + 307.436 -307.436 -458.333, + 376.531 -217.39 -458.333, + 419.965 -112.529 -458.333, + ] + } + coordIndex [ + 0, 24, 25, 1, -1, + 1, 25, 26, 2, -1, + 2, 26, 27, 3, -1, + 3, 27, 28, 4, -1, + 4, 28, 29, 5, -1, + 5, 29, 30, 6, -1, + 6, 30, 31, 7, -1, + 7, 31, 32, 8, -1, + 8, 32, 33, 9, -1, + 9, 33, 34, 10, -1, + 10, 34, 35, 11, -1, + 11, 35, 36, 12, -1, + 12, 36, 37, 13, -1, + 13, 37, 38, 14, -1, + 14, 38, 39, 15, -1, + 15, 39, 40, 16, -1, + 16, 40, 41, 17, -1, + 17, 41, 42, 18, -1, + 18, 42, 43, 19, -1, + 19, 43, 44, 20, -1, + 20, 44, 45, 21, -1, + 21, 45, 46, 22, -1, + 22, 46, 47, 23, -1, + 23, 47, 24, 0, -1, + 24, 48, 49, 25, -1, + 25, 49, 50, 26, -1, + 26, 50, 51, 27, -1, + 27, 51, 52, 28, -1, + 28, 52, 53, 29, -1, + 29, 53, 54, 30, -1, + 30, 54, 55, 31, -1, + 31, 55, 56, 32, -1, + 32, 56, 57, 33, -1, + 33, 57, 58, 34, -1, + 34, 58, 59, 35, -1, + 35, 59, 60, 36, -1, + 36, 60, 61, 37, -1, + 37, 61, 62, 38, -1, + 38, 62, 63, 39, -1, + 39, 63, 64, 40, -1, + 40, 64, 65, 41, -1, + 41, 65, 66, 42, -1, + 42, 66, 67, 43, -1, + 43, 67, 68, 44, -1, + 44, 68, 69, 45, -1, + 45, 69, 70, 46, -1, + 46, 70, 71, 47, -1, + 47, 71, 48, 24, -1, + 48, 72, 73, 49, -1, + 49, 73, 74, 50, -1, + 50, 74, 75, 51, -1, + 51, 75, 76, 52, -1, + 52, 76, 77, 53, -1, + 53, 77, 78, 54, -1, + 54, 78, 79, 55, -1, + 55, 79, 80, 56, -1, + 56, 80, 81, 57, -1, + 57, 81, 82, 58, -1, + 58, 82, 83, 59, -1, + 59, 83, 84, 60, -1, + 60, 84, 85, 61, -1, + 61, 85, 86, 62, -1, + 62, 86, 87, 63, -1, + 63, 87, 88, 64, -1, + 64, 88, 89, 65, -1, + 65, 89, 90, 66, -1, + 66, 90, 91, 67, -1, + 67, 91, 92, 68, -1, + 68, 92, 93, 69, -1, + 69, 93, 94, 70, -1, + 70, 94, 95, 71, -1, + 71, 95, 72, 48, -1, + 72, 96, 97, 73, -1, + 73, 97, 98, 74, -1, + 74, 98, 99, 75, -1, + 75, 99, 100, 76, -1, + 76, 100, 101, 77, -1, + 77, 101, 102, 78, -1, + 78, 102, 103, 79, -1, + 79, 103, 104, 80, -1, + 80, 104, 105, 81, -1, + 81, 105, 106, 82, -1, + 82, 106, 107, 83, -1, + 83, 107, 108, 84, -1, + 84, 108, 109, 85, -1, + 85, 109, 110, 86, -1, + 86, 110, 111, 87, -1, + 87, 111, 112, 88, -1, + 88, 112, 113, 89, -1, + 89, 113, 114, 90, -1, + 90, 114, 115, 91, -1, + 91, 115, 116, 92, -1, + 92, 116, 117, 93, -1, + 93, 117, 118, 94, -1, + 94, 118, 119, 95, -1, + 95, 119, 96, 72, -1, + 96, 120, 121, 97, -1, + 97, 121, 122, 98, -1, + 98, 122, 123, 99, -1, + 99, 123, 124, 100, -1, + 100, 124, 125, 101, -1, + 101, 125, 126, 102, -1, + 102, 126, 127, 103, -1, + 103, 127, 128, 104, -1, + 104, 128, 129, 105, -1, + 105, 129, 130, 106, -1, + 106, 130, 131, 107, -1, + 107, 131, 132, 108, -1, + 108, 132, 133, 109, -1, + 109, 133, 134, 110, -1, + 110, 134, 135, 111, -1, + 111, 135, 136, 112, -1, + 112, 136, 137, 113, -1, + 113, 137, 138, 114, -1, + 114, 138, 139, 115, -1, + 115, 139, 140, 116, -1, + 116, 140, 141, 117, -1, + 117, 141, 142, 118, -1, + 118, 142, 143, 119, -1, + 119, 143, 120, 96, -1, + 120, 144, 145, 121, -1, + 121, 145, 146, 122, -1, + 122, 146, 147, 123, -1, + 123, 147, 148, 124, -1, + 124, 148, 149, 125, -1, + 125, 149, 150, 126, -1, + 126, 150, 151, 127, -1, + 127, 151, 152, 128, -1, + 128, 152, 153, 129, -1, + 129, 153, 154, 130, -1, + 130, 154, 155, 131, -1, + 131, 155, 156, 132, -1, + 132, 156, 157, 133, -1, + 133, 157, 158, 134, -1, + 134, 158, 159, 135, -1, + 135, 159, 160, 136, -1, + 136, 160, 161, 137, -1, + 137, 161, 162, 138, -1, + 138, 162, 163, 139, -1, + 139, 163, 164, 140, -1, + 140, 164, 165, 141, -1, + 141, 165, 166, 142, -1, + 142, 166, 167, 143, -1, + 143, 167, 144, 120, -1, + 144, 168, 169, 145, -1, + 145, 169, 170, 146, -1, + 146, 170, 171, 147, -1, + 147, 171, 172, 148, -1, + 148, 172, 173, 149, -1, + 149, 173, 174, 150, -1, + 150, 174, 175, 151, -1, + 151, 175, 176, 152, -1, + 152, 176, 177, 153, -1, + 153, 177, 178, 154, -1, + 154, 178, 179, 155, -1, + 155, 179, 180, 156, -1, + 156, 180, 181, 157, -1, + 157, 181, 182, 158, -1, + 158, 182, 183, 159, -1, + 159, 183, 184, 160, -1, + 160, 184, 185, 161, -1, + 161, 185, 186, 162, -1, + 162, 186, 187, 163, -1, + 163, 187, 188, 164, -1, + 164, 188, 189, 165, -1, + 165, 189, 190, 166, -1, + 166, 190, 191, 167, -1, + 167, 191, 168, 144, -1, + 168, 192, 193, 169, -1, + 169, 193, 194, 170, -1, + 170, 194, 195, 171, -1, + 171, 195, 196, 172, -1, + 172, 196, 197, 173, -1, + 173, 197, 198, 174, -1, + 174, 198, 199, 175, -1, + 175, 199, 200, 176, -1, + 176, 200, 201, 177, -1, + 177, 201, 202, 178, -1, + 178, 202, 203, 179, -1, + 179, 203, 204, 180, -1, + 180, 204, 205, 181, -1, + 181, 205, 206, 182, -1, + 182, 206, 207, 183, -1, + 183, 207, 208, 184, -1, + 184, 208, 209, 185, -1, + 185, 209, 210, 186, -1, + 186, 210, 211, 187, -1, + 187, 211, 212, 188, -1, + 188, 212, 213, 189, -1, + 189, 213, 214, 190, -1, + 190, 214, 215, 191, -1, + 191, 215, 192, 168, -1, + 192, 216, 217, 193, -1, + 193, 217, 218, 194, -1, + 194, 218, 219, 195, -1, + 195, 219, 220, 196, -1, + 196, 220, 221, 197, -1, + 197, 221, 222, 198, -1, + 198, 222, 223, 199, -1, + 199, 223, 224, 200, -1, + 200, 224, 225, 201, -1, + 201, 225, 226, 202, -1, + 202, 226, 227, 203, -1, + 203, 227, 228, 204, -1, + 204, 228, 229, 205, -1, + 205, 229, 230, 206, -1, + 206, 230, 231, 207, -1, + 207, 231, 232, 208, -1, + 208, 232, 233, 209, -1, + 209, 233, 234, 210, -1, + 210, 234, 235, 211, -1, + 211, 235, 236, 212, -1, + 212, 236, 237, 213, -1, + 213, 237, 238, 214, -1, + 214, 238, 239, 215, -1, + 215, 239, 216, 192, -1, + 216, 240, 241, 217, -1, + 217, 241, 242, 218, -1, + 218, 242, 243, 219, -1, + 219, 243, 244, 220, -1, + 220, 244, 245, 221, -1, + 221, 245, 246, 222, -1, + 222, 246, 247, 223, -1, + 223, 247, 248, 224, -1, + 224, 248, 249, 225, -1, + 225, 249, 250, 226, -1, + 226, 250, 251, 227, -1, + 227, 251, 252, 228, -1, + 228, 252, 253, 229, -1, + 229, 253, 254, 230, -1, + 230, 254, 255, 231, -1, + 231, 255, 256, 232, -1, + 232, 256, 257, 233, -1, + 233, 257, 258, 234, -1, + 234, 258, 259, 235, -1, + 235, 259, 260, 236, -1, + 236, 260, 261, 237, -1, + 237, 261, 262, 238, -1, + 238, 262, 263, 239, -1, + 239, 263, 240, 216, -1, + 240, 264, 265, 241, -1, + 241, 265, 266, 242, -1, + 242, 266, 267, 243, -1, + 243, 267, 268, 244, -1, + 244, 268, 269, 245, -1, + 245, 269, 270, 246, -1, + 246, 270, 271, 247, -1, + 247, 271, 272, 248, -1, + 248, 272, 273, 249, -1, + 249, 273, 274, 250, -1, + 250, 274, 275, 251, -1, + 251, 275, 276, 252, -1, + 252, 276, 277, 253, -1, + 253, 277, 278, 254, -1, + 254, 278, 279, 255, -1, + 255, 279, 280, 256, -1, + 256, 280, 281, 257, -1, + 257, 281, 282, 258, -1, + 258, 282, 283, 259, -1, + 259, 283, 284, 260, -1, + 260, 284, 285, 261, -1, + 261, 285, 286, 262, -1, + 262, 286, 287, 263, -1, + 263, 287, 264, 240, -1, + 264, 288, 289, 265, -1, + 265, 289, 290, 266, -1, + 266, 290, 291, 267, -1, + 267, 291, 292, 268, -1, + 268, 292, 293, 269, -1, + 269, 293, 294, 270, -1, + 270, 294, 295, 271, -1, + 271, 295, 296, 272, -1, + 272, 296, 297, 273, -1, + 273, 297, 298, 274, -1, + 274, 298, 299, 275, -1, + 275, 299, 300, 276, -1, + 276, 300, 301, 277, -1, + 277, 301, 302, 278, -1, + 278, 302, 303, 279, -1, + 279, 303, 304, 280, -1, + 280, 304, 305, 281, -1, + 281, 305, 306, 282, -1, + 282, 306, 307, 283, -1, + 283, 307, 308, 284, -1, + 284, 308, 309, 285, -1, + 285, 309, 310, 286, -1, + 286, 310, 311, 287, -1, + 287, 311, 288, 264, -1, + 288, 312, 313, 289, -1, + 289, 313, 314, 290, -1, + 290, 314, 315, 291, -1, + 291, 315, 316, 292, -1, + 292, 316, 317, 293, -1, + 293, 317, 318, 294, -1, + 294, 318, 319, 295, -1, + 295, 319, 320, 296, -1, + 296, 320, 321, 297, -1, + 297, 321, 322, 298, -1, + 298, 322, 323, 299, -1, + 299, 323, 324, 300, -1, + 300, 324, 325, 301, -1, + 301, 325, 326, 302, -1, + 302, 326, 327, 303, -1, + 303, 327, 328, 304, -1, + 304, 328, 329, 305, -1, + 305, 329, 330, 306, -1, + 306, 330, 331, 307, -1, + 307, 331, 332, 308, -1, + 308, 332, 333, 309, -1, + 309, 333, 334, 310, -1, + 310, 334, 335, 311, -1, + 311, 335, 312, 288, -1, + 312, 336, 337, 313, -1, + 313, 337, 338, 314, -1, + 314, 338, 339, 315, -1, + 315, 339, 340, 316, -1, + 316, 340, 341, 317, -1, + 317, 341, 342, 318, -1, + 318, 342, 343, 319, -1, + 319, 343, 344, 320, -1, + 320, 344, 345, 321, -1, + 321, 345, 346, 322, -1, + 322, 346, 347, 323, -1, + 323, 347, 348, 324, -1, + 324, 348, 349, 325, -1, + 325, 349, 350, 326, -1, + 326, 350, 351, 327, -1, + 327, 351, 352, 328, -1, + 328, 352, 353, 329, -1, + 329, 353, 354, 330, -1, + 330, 354, 355, 331, -1, + 331, 355, 356, 332, -1, + 332, 356, 357, 333, -1, + 333, 357, 358, 334, -1, + 334, 358, 359, 335, -1, + 335, 359, 336, 312, -1, + 336, 360, 361, 337, -1, + 337, 361, 362, 338, -1, + 338, 362, 363, 339, -1, + 339, 363, 364, 340, -1, + 340, 364, 365, 341, -1, + 341, 365, 366, 342, -1, + 342, 366, 367, 343, -1, + 343, 367, 368, 344, -1, + 344, 368, 369, 345, -1, + 345, 369, 370, 346, -1, + 346, 370, 371, 347, -1, + 347, 371, 372, 348, -1, + 348, 372, 373, 349, -1, + 349, 373, 374, 350, -1, + 350, 374, 375, 351, -1, + 351, 375, 376, 352, -1, + 352, 376, 377, 353, -1, + 353, 377, 378, 354, -1, + 354, 378, 379, 355, -1, + 355, 379, 380, 356, -1, + 356, 380, 381, 357, -1, + 357, 381, 382, 358, -1, + 358, 382, 383, 359, -1, + 359, 383, 360, 336, -1, + 360, 384, 385, 361, -1, + 361, 385, 386, 362, -1, + 362, 386, 387, 363, -1, + 363, 387, 388, 364, -1, + 364, 388, 389, 365, -1, + 365, 389, 390, 366, -1, + 366, 390, 391, 367, -1, + 367, 391, 392, 368, -1, + 368, 392, 393, 369, -1, + 369, 393, 394, 370, -1, + 370, 394, 395, 371, -1, + 371, 395, 396, 372, -1, + 372, 396, 397, 373, -1, + 373, 397, 398, 374, -1, + 374, 398, 399, 375, -1, + 375, 399, 400, 376, -1, + 376, 400, 401, 377, -1, + 377, 401, 402, 378, -1, + 378, 402, 403, 379, -1, + 379, 403, 404, 380, -1, + 380, 404, 405, 381, -1, + 381, 405, 406, 382, -1, + 382, 406, 407, 383, -1, + 383, 407, 384, 360, -1, + 384, 408, 409, 385, -1, + 385, 409, 410, 386, -1, + 386, 410, 411, 387, -1, + 387, 411, 412, 388, -1, + 388, 412, 413, 389, -1, + 389, 413, 414, 390, -1, + 390, 414, 415, 391, -1, + 391, 415, 416, 392, -1, + 392, 416, 417, 393, -1, + 393, 417, 418, 394, -1, + 394, 418, 419, 395, -1, + 395, 419, 420, 396, -1, + 396, 420, 421, 397, -1, + 397, 421, 422, 398, -1, + 398, 422, 423, 399, -1, + 399, 423, 424, 400, -1, + 400, 424, 425, 401, -1, + 401, 425, 426, 402, -1, + 402, 426, 427, 403, -1, + 403, 427, 428, 404, -1, + 404, 428, 429, 405, -1, + 405, 429, 430, 406, -1, + 406, 430, 431, 407, -1, + 407, 431, 408, 384, -1, + 408, 432, 433, 409, -1, + 409, 433, 434, 410, -1, + 410, 434, 435, 411, -1, + 411, 435, 436, 412, -1, + 412, 436, 437, 413, -1, + 413, 437, 438, 414, -1, + 414, 438, 439, 415, -1, + 415, 439, 440, 416, -1, + 416, 440, 441, 417, -1, + 417, 441, 442, 418, -1, + 418, 442, 443, 419, -1, + 419, 443, 444, 420, -1, + 420, 444, 445, 421, -1, + 421, 445, 446, 422, -1, + 422, 446, 447, 423, -1, + 423, 447, 448, 424, -1, + 424, 448, 449, 425, -1, + 425, 449, 450, 426, -1, + 426, 450, 451, 427, -1, + 427, 451, 452, 428, -1, + 428, 452, 453, 429, -1, + 429, 453, 454, 430, -1, + 430, 454, 455, 431, -1, + 431, 455, 432, 408, -1, + 432, 456, 457, 433, -1, + 433, 457, 458, 434, -1, + 434, 458, 459, 435, -1, + 435, 459, 460, 436, -1, + 436, 460, 461, 437, -1, + 437, 461, 462, 438, -1, + 438, 462, 463, 439, -1, + 439, 463, 464, 440, -1, + 440, 464, 465, 441, -1, + 441, 465, 466, 442, -1, + 442, 466, 467, 443, -1, + 443, 467, 468, 444, -1, + 444, 468, 469, 445, -1, + 445, 469, 470, 446, -1, + 446, 470, 471, 447, -1, + 447, 471, 472, 448, -1, + 448, 472, 473, 449, -1, + 449, 473, 474, 450, -1, + 450, 474, 475, 451, -1, + 451, 475, 476, 452, -1, + 452, 476, 477, 453, -1, + 453, 477, 478, 454, -1, + 454, 478, 479, 455, -1, + 455, 479, 456, 432, -1, + 456, 480, 481, 457, -1, + 457, 481, 482, 458, -1, + 458, 482, 483, 459, -1, + 459, 483, 484, 460, -1, + 460, 484, 485, 461, -1, + 461, 485, 486, 462, -1, + 462, 486, 487, 463, -1, + 463, 487, 488, 464, -1, + 464, 488, 489, 465, -1, + 465, 489, 490, 466, -1, + 466, 490, 491, 467, -1, + 467, 491, 492, 468, -1, + 468, 492, 493, 469, -1, + 469, 493, 494, 470, -1, + 470, 494, 495, 471, -1, + 471, 495, 496, 472, -1, + 472, 496, 497, 473, -1, + 473, 497, 498, 474, -1, + 474, 498, 499, 475, -1, + 475, 499, 500, 476, -1, + 476, 500, 501, 477, -1, + 477, 501, 502, 478, -1, + 478, 502, 503, 479, -1, + 479, 503, 480, 456, -1, + 480, 504, 505, 481, -1, + 481, 505, 506, 482, -1, + 482, 506, 507, 483, -1, + 483, 507, 508, 484, -1, + 484, 508, 509, 485, -1, + 485, 509, 510, 486, -1, + 486, 510, 511, 487, -1, + 487, 511, 512, 488, -1, + 488, 512, 513, 489, -1, + 489, 513, 514, 490, -1, + 490, 514, 515, 491, -1, + 491, 515, 516, 492, -1, + 492, 516, 517, 493, -1, + 493, 517, 518, 494, -1, + 494, 518, 519, 495, -1, + 495, 519, 520, 496, -1, + 496, 520, 521, 497, -1, + 497, 521, 522, 498, -1, + 498, 522, 523, 499, -1, + 499, 523, 524, 500, -1, + 500, 524, 525, 501, -1, + 501, 525, 526, 502, -1, + 502, 526, 527, 503, -1, + 503, 527, 504, 480, -1, + 504, 528, 529, 505, -1, + 505, 529, 530, 506, -1, + 506, 530, 531, 507, -1, + 507, 531, 532, 508, -1, + 508, 532, 533, 509, -1, + 509, 533, 534, 510, -1, + 510, 534, 535, 511, -1, + 511, 535, 536, 512, -1, + 512, 536, 537, 513, -1, + 513, 537, 538, 514, -1, + 514, 538, 539, 515, -1, + 515, 539, 540, 516, -1, + 516, 540, 541, 517, -1, + 517, 541, 542, 518, -1, + 518, 542, 543, 519, -1, + 519, 543, 544, 520, -1, + 520, 544, 545, 521, -1, + 521, 545, 546, 522, -1, + 522, 546, 547, 523, -1, + 523, 547, 548, 524, -1, + 524, 548, 549, 525, -1, + 525, 549, 550, 526, -1, + 526, 550, 551, 527, -1, + 527, 551, 528, 504, -1, + 528, 552, 553, 529, -1, + 529, 553, 554, 530, -1, + 530, 554, 555, 531, -1, + 531, 555, 556, 532, -1, + 532, 556, 557, 533, -1, + 533, 557, 558, 534, -1, + 534, 558, 559, 535, -1, + 535, 559, 560, 536, -1, + 536, 560, 561, 537, -1, + 537, 561, 562, 538, -1, + 538, 562, 563, 539, -1, + 539, 563, 564, 540, -1, + 540, 564, 565, 541, -1, + 541, 565, 566, 542, -1, + 542, 566, 567, 543, -1, + 543, 567, 568, 544, -1, + 544, 568, 569, 545, -1, + 545, 569, 570, 546, -1, + 546, 570, 571, 547, -1, + 547, 571, 572, 548, -1, + 548, 572, 573, 549, -1, + 549, 573, 574, 550, -1, + 550, 574, 575, 551, -1, + 551, 575, 552, 528, -1, + 600, 576, 577, 601, -1, + 601, 577, 578, 602, -1, + 602, 578, 579, 603, -1, + 603, 579, 580, 604, -1, + 604, 580, 581, 605, -1, + 605, 581, 582, 606, -1, + 606, 582, 583, 607, -1, + 607, 583, 584, 608, -1, + 608, 584, 585, 609, -1, + 609, 585, 586, 610, -1, + 610, 586, 587, 611, -1, + 611, 587, 588, 612, -1, + 612, 588, 589, 613, -1, + 613, 589, 590, 614, -1, + 614, 590, 591, 615, -1, + 615, 591, 592, 616, -1, + 616, 592, 593, 617, -1, + 617, 593, 594, 618, -1, + 618, 594, 595, 619, -1, + 619, 595, 596, 620, -1, + 620, 596, 597, 621, -1, + 621, 597, 598, 622, -1, + 622, 598, 599, 623, -1, + 623, 599, 576, 600, -1, + 624, 600, 601, 625, -1, + 625, 601, 602, 626, -1, + 626, 602, 603, 627, -1, + 627, 603, 604, 628, -1, + 628, 604, 605, 629, -1, + 629, 605, 606, 630, -1, + 630, 606, 607, 631, -1, + 631, 607, 608, 632, -1, + 632, 608, 609, 633, -1, + 633, 609, 610, 634, -1, + 634, 610, 611, 635, -1, + 635, 611, 612, 636, -1, + 636, 612, 613, 637, -1, + 637, 613, 614, 638, -1, + 638, 614, 615, 639, -1, + 639, 615, 616, 640, -1, + 640, 616, 617, 641, -1, + 641, 617, 618, 642, -1, + 642, 618, 619, 643, -1, + 643, 619, 620, 644, -1, + 644, 620, 621, 645, -1, + 645, 621, 622, 646, -1, + 646, 622, 623, 647, -1, + 647, 623, 600, 624, -1, + 648, 624, 625, 649, -1, + 649, 625, 626, 650, -1, + 650, 626, 627, 651, -1, + 651, 627, 628, 652, -1, + 652, 628, 629, 653, -1, + 653, 629, 630, 654, -1, + 654, 630, 631, 655, -1, + 655, 631, 632, 656, -1, + 656, 632, 633, 657, -1, + 657, 633, 634, 658, -1, + 658, 634, 635, 659, -1, + 659, 635, 636, 660, -1, + 660, 636, 637, 661, -1, + 661, 637, 638, 662, -1, + 662, 638, 639, 663, -1, + 663, 639, 640, 664, -1, + 664, 640, 641, 665, -1, + 665, 641, 642, 666, -1, + 666, 642, 643, 667, -1, + 667, 643, 644, 668, -1, + 668, 644, 645, 669, -1, + 669, 645, 646, 670, -1, + 670, 646, 647, 671, -1, + 671, 647, 624, 648, -1, + 672, 648, 649, 673, -1, + 673, 649, 650, 674, -1, + 674, 650, 651, 675, -1, + 675, 651, 652, 676, -1, + 676, 652, 653, 677, -1, + 677, 653, 654, 678, -1, + 678, 654, 655, 679, -1, + 679, 655, 656, 680, -1, + 680, 656, 657, 681, -1, + 681, 657, 658, 682, -1, + 682, 658, 659, 683, -1, + 683, 659, 660, 684, -1, + 684, 660, 661, 685, -1, + 685, 661, 662, 686, -1, + 686, 662, 663, 687, -1, + 687, 663, 664, 688, -1, + 688, 664, 665, 689, -1, + 689, 665, 666, 690, -1, + 690, 666, 667, 691, -1, + 691, 667, 668, 692, -1, + 692, 668, 669, 693, -1, + 693, 669, 670, 694, -1, + 694, 670, 671, 695, -1, + 695, 671, 648, 672, -1, + 696, 672, 673, 697, -1, + 697, 673, 674, 698, -1, + 698, 674, 675, 699, -1, + 699, 675, 676, 700, -1, + 700, 676, 677, 701, -1, + 701, 677, 678, 702, -1, + 702, 678, 679, 703, -1, + 703, 679, 680, 704, -1, + 704, 680, 681, 705, -1, + 705, 681, 682, 706, -1, + 706, 682, 683, 707, -1, + 707, 683, 684, 708, -1, + 708, 684, 685, 709, -1, + 709, 685, 686, 710, -1, + 710, 686, 687, 711, -1, + 711, 687, 688, 712, -1, + 712, 688, 689, 713, -1, + 713, 689, 690, 714, -1, + 714, 690, 691, 715, -1, + 715, 691, 692, 716, -1, + 716, 692, 693, 717, -1, + 717, 693, 694, 718, -1, + 718, 694, 695, 719, -1, + 719, 695, 672, 696, -1, + 720, 696, 697, 721, -1, + 721, 697, 698, 722, -1, + 722, 698, 699, 723, -1, + 723, 699, 700, 724, -1, + 724, 700, 701, 725, -1, + 725, 701, 702, 726, -1, + 726, 702, 703, 727, -1, + 727, 703, 704, 728, -1, + 728, 704, 705, 729, -1, + 729, 705, 706, 730, -1, + 730, 706, 707, 731, -1, + 731, 707, 708, 732, -1, + 732, 708, 709, 733, -1, + 733, 709, 710, 734, -1, + 734, 710, 711, 735, -1, + 735, 711, 712, 736, -1, + 736, 712, 713, 737, -1, + 737, 713, 714, 738, -1, + 738, 714, 715, 739, -1, + 739, 715, 716, 740, -1, + 740, 716, 717, 741, -1, + 741, 717, 718, 742, -1, + 742, 718, 719, 743, -1, + 743, 719, 696, 720, -1, + 744, 720, 721, 745, -1, + 745, 721, 722, 746, -1, + 746, 722, 723, 747, -1, + 747, 723, 724, 748, -1, + 748, 724, 725, 749, -1, + 749, 725, 726, 750, -1, + 750, 726, 727, 751, -1, + 751, 727, 728, 752, -1, + 752, 728, 729, 753, -1, + 753, 729, 730, 754, -1, + 754, 730, 731, 755, -1, + 755, 731, 732, 756, -1, + 756, 732, 733, 757, -1, + 757, 733, 734, 758, -1, + 758, 734, 735, 759, -1, + 759, 735, 736, 760, -1, + 760, 736, 737, 761, -1, + 761, 737, 738, 762, -1, + 762, 738, 739, 763, -1, + 763, 739, 740, 764, -1, + 764, 740, 741, 765, -1, + 765, 741, 742, 766, -1, + 766, 742, 743, 767, -1, + 767, 743, 720, 744, -1, + 768, 744, 745, 769, -1, + 769, 745, 746, 770, -1, + 770, 746, 747, 771, -1, + 771, 747, 748, 772, -1, + 772, 748, 749, 773, -1, + 773, 749, 750, 774, -1, + 774, 750, 751, 775, -1, + 775, 751, 752, 776, -1, + 776, 752, 753, 777, -1, + 777, 753, 754, 778, -1, + 778, 754, 755, 779, -1, + 779, 755, 756, 780, -1, + 780, 756, 757, 781, -1, + 781, 757, 758, 782, -1, + 782, 758, 759, 783, -1, + 783, 759, 760, 784, -1, + 784, 760, 761, 785, -1, + 785, 761, 762, 786, -1, + 786, 762, 763, 787, -1, + 787, 763, 764, 788, -1, + 788, 764, 765, 789, -1, + 789, 765, 766, 790, -1, + 790, 766, 767, 791, -1, + 791, 767, 744, 768, -1, + 792, 768, 769, 793, -1, + 793, 769, 770, 794, -1, + 794, 770, 771, 795, -1, + 795, 771, 772, 796, -1, + 796, 772, 773, 797, -1, + 797, 773, 774, 798, -1, + 798, 774, 775, 799, -1, + 799, 775, 776, 800, -1, + 800, 776, 777, 801, -1, + 801, 777, 778, 802, -1, + 802, 778, 779, 803, -1, + 803, 779, 780, 804, -1, + 804, 780, 781, 805, -1, + 805, 781, 782, 806, -1, + 806, 782, 783, 807, -1, + 807, 783, 784, 808, -1, + 808, 784, 785, 809, -1, + 809, 785, 786, 810, -1, + 810, 786, 787, 811, -1, + 811, 787, 788, 812, -1, + 812, 788, 789, 813, -1, + 813, 789, 790, 814, -1, + 814, 790, 791, 815, -1, + 815, 791, 768, 792, -1, + 816, 792, 793, 817, -1, + 817, 793, 794, 818, -1, + 818, 794, 795, 819, -1, + 819, 795, 796, 820, -1, + 820, 796, 797, 821, -1, + 821, 797, 798, 822, -1, + 822, 798, 799, 823, -1, + 823, 799, 800, 824, -1, + 824, 800, 801, 825, -1, + 825, 801, 802, 826, -1, + 826, 802, 803, 827, -1, + 827, 803, 804, 828, -1, + 828, 804, 805, 829, -1, + 829, 805, 806, 830, -1, + 830, 806, 807, 831, -1, + 831, 807, 808, 832, -1, + 832, 808, 809, 833, -1, + 833, 809, 810, 834, -1, + 834, 810, 811, 835, -1, + 835, 811, 812, 836, -1, + 836, 812, 813, 837, -1, + 837, 813, 814, 838, -1, + 838, 814, 815, 839, -1, + 839, 815, 792, 816, -1, + 840, 816, 817, 841, -1, + 841, 817, 818, 842, -1, + 842, 818, 819, 843, -1, + 843, 819, 820, 844, -1, + 844, 820, 821, 845, -1, + 845, 821, 822, 846, -1, + 846, 822, 823, 847, -1, + 847, 823, 824, 848, -1, + 848, 824, 825, 849, -1, + 849, 825, 826, 850, -1, + 850, 826, 827, 851, -1, + 851, 827, 828, 852, -1, + 852, 828, 829, 853, -1, + 853, 829, 830, 854, -1, + 854, 830, 831, 855, -1, + 855, 831, 832, 856, -1, + 856, 832, 833, 857, -1, + 857, 833, 834, 858, -1, + 858, 834, 835, 859, -1, + 859, 835, 836, 860, -1, + 860, 836, 837, 861, -1, + 861, 837, 838, 862, -1, + 862, 838, 839, 863, -1, + 863, 839, 816, 840, -1, + 864, 840, 841, 865, -1, + 865, 841, 842, 866, -1, + 866, 842, 843, 867, -1, + 867, 843, 844, 868, -1, + 868, 844, 845, 869, -1, + 869, 845, 846, 870, -1, + 870, 846, 847, 871, -1, + 871, 847, 848, 872, -1, + 872, 848, 849, 873, -1, + 873, 849, 850, 874, -1, + 874, 850, 851, 875, -1, + 875, 851, 852, 876, -1, + 876, 852, 853, 877, -1, + 877, 853, 854, 878, -1, + 878, 854, 855, 879, -1, + 879, 855, 856, 880, -1, + 880, 856, 857, 881, -1, + 881, 857, 858, 882, -1, + 882, 858, 859, 883, -1, + 883, 859, 860, 884, -1, + 884, 860, 861, 885, -1, + 885, 861, 862, 886, -1, + 886, 862, 863, 887, -1, + 887, 863, 840, 864, -1, + 888, 864, 865, 889, -1, + 889, 865, 866, 890, -1, + 890, 866, 867, 891, -1, + 891, 867, 868, 892, -1, + 892, 868, 869, 893, -1, + 893, 869, 870, 894, -1, + 894, 870, 871, 895, -1, + 895, 871, 872, 896, -1, + 896, 872, 873, 897, -1, + 897, 873, 874, 898, -1, + 898, 874, 875, 899, -1, + 899, 875, 876, 900, -1, + 900, 876, 877, 901, -1, + 901, 877, 878, 902, -1, + 902, 878, 879, 903, -1, + 903, 879, 880, 904, -1, + 904, 880, 881, 905, -1, + 905, 881, 882, 906, -1, + 906, 882, 883, 907, -1, + 907, 883, 884, 908, -1, + 908, 884, 885, 909, -1, + 909, 885, 886, 910, -1, + 910, 886, 887, 911, -1, + 911, 887, 864, 888, -1, + 912, 888, 889, 913, -1, + 913, 889, 890, 914, -1, + 914, 890, 891, 915, -1, + 915, 891, 892, 916, -1, + 916, 892, 893, 917, -1, + 917, 893, 894, 918, -1, + 918, 894, 895, 919, -1, + 919, 895, 896, 920, -1, + 920, 896, 897, 921, -1, + 921, 897, 898, 922, -1, + 922, 898, 899, 923, -1, + 923, 899, 900, 924, -1, + 924, 900, 901, 925, -1, + 925, 901, 902, 926, -1, + 926, 902, 903, 927, -1, + 927, 903, 904, 928, -1, + 928, 904, 905, 929, -1, + 929, 905, 906, 930, -1, + 930, 906, 907, 931, -1, + 931, 907, 908, 932, -1, + 932, 908, 909, 933, -1, + 933, 909, 910, 934, -1, + 934, 910, 911, 935, -1, + 935, 911, 888, 912, -1, + 936, 912, 913, 937, -1, + 937, 913, 914, 938, -1, + 938, 914, 915, 939, -1, + 939, 915, 916, 940, -1, + 940, 916, 917, 941, -1, + 941, 917, 918, 942, -1, + 942, 918, 919, 943, -1, + 943, 919, 920, 944, -1, + 944, 920, 921, 945, -1, + 945, 921, 922, 946, -1, + 946, 922, 923, 947, -1, + 947, 923, 924, 948, -1, + 948, 924, 925, 949, -1, + 949, 925, 926, 950, -1, + 950, 926, 927, 951, -1, + 951, 927, 928, 952, -1, + 952, 928, 929, 953, -1, + 953, 929, 930, 954, -1, + 954, 930, 931, 955, -1, + 955, 931, 932, 956, -1, + 956, 932, 933, 957, -1, + 957, 933, 934, 958, -1, + 958, 934, 935, 959, -1, + 959, 935, 912, 936, -1, + 960, 936, 937, 961, -1, + 961, 937, 938, 962, -1, + 962, 938, 939, 963, -1, + 963, 939, 940, 964, -1, + 964, 940, 941, 965, -1, + 965, 941, 942, 966, -1, + 966, 942, 943, 967, -1, + 967, 943, 944, 968, -1, + 968, 944, 945, 969, -1, + 969, 945, 946, 970, -1, + 970, 946, 947, 971, -1, + 971, 947, 948, 972, -1, + 972, 948, 949, 973, -1, + 973, 949, 950, 974, -1, + 974, 950, 951, 975, -1, + 975, 951, 952, 976, -1, + 976, 952, 953, 977, -1, + 977, 953, 954, 978, -1, + 978, 954, 955, 979, -1, + 979, 955, 956, 980, -1, + 980, 956, 957, 981, -1, + 981, 957, 958, 982, -1, + 982, 958, 959, 983, -1, + 983, 959, 936, 960, -1, + 984, 960, 961, 985, -1, + 985, 961, 962, 986, -1, + 986, 962, 963, 987, -1, + 987, 963, 964, 988, -1, + 988, 964, 965, 989, -1, + 989, 965, 966, 990, -1, + 990, 966, 967, 991, -1, + 991, 967, 968, 992, -1, + 992, 968, 969, 993, -1, + 993, 969, 970, 994, -1, + 994, 970, 971, 995, -1, + 995, 971, 972, 996, -1, + 996, 972, 973, 997, -1, + 997, 973, 974, 998, -1, + 998, 974, 975, 999, -1, + 999, 975, 976, 1000, -1, + 1000, 976, 977, 1001, -1, + 1001, 977, 978, 1002, -1, + 1002, 978, 979, 1003, -1, + 1003, 979, 980, 1004, -1, + 1004, 980, 981, 1005, -1, + 1005, 981, 982, 1006, -1, + 1006, 982, 983, 1007, -1, + 1007, 983, 960, 984, -1, + 1008, 984, 985, 1009, -1, + 1009, 985, 986, 1010, -1, + 1010, 986, 987, 1011, -1, + 1011, 987, 988, 1012, -1, + 1012, 988, 989, 1013, -1, + 1013, 989, 990, 1014, -1, + 1014, 990, 991, 1015, -1, + 1015, 991, 992, 1016, -1, + 1016, 992, 993, 1017, -1, + 1017, 993, 994, 1018, -1, + 1018, 994, 995, 1019, -1, + 1019, 995, 996, 1020, -1, + 1020, 996, 997, 1021, -1, + 1021, 997, 998, 1022, -1, + 1022, 998, 999, 1023, -1, + 1023, 999, 1000, 1024, -1, + 1024, 1000, 1001, 1025, -1, + 1025, 1001, 1002, 1026, -1, + 1026, 1002, 1003, 1027, -1, + 1027, 1003, 1004, 1028, -1, + 1028, 1004, 1005, 1029, -1, + 1029, 1005, 1006, 1030, -1, + 1030, 1006, 1007, 1031, -1, + 1031, 1007, 984, 1008, -1, + 1032, 1008, 1009, 1033, -1, + 1033, 1009, 1010, 1034, -1, + 1034, 1010, 1011, 1035, -1, + 1035, 1011, 1012, 1036, -1, + 1036, 1012, 1013, 1037, -1, + 1037, 1013, 1014, 1038, -1, + 1038, 1014, 1015, 1039, -1, + 1039, 1015, 1016, 1040, -1, + 1040, 1016, 1017, 1041, -1, + 1041, 1017, 1018, 1042, -1, + 1042, 1018, 1019, 1043, -1, + 1043, 1019, 1020, 1044, -1, + 1044, 1020, 1021, 1045, -1, + 1045, 1021, 1022, 1046, -1, + 1046, 1022, 1023, 1047, -1, + 1047, 1023, 1024, 1048, -1, + 1048, 1024, 1025, 1049, -1, + 1049, 1025, 1026, 1050, -1, + 1050, 1026, 1027, 1051, -1, + 1051, 1027, 1028, 1052, -1, + 1052, 1028, 1029, 1053, -1, + 1053, 1029, 1030, 1054, -1, + 1054, 1030, 1031, 1055, -1, + 1055, 1031, 1008, 1032, -1, + 1056, 1032, 1033, 1057, -1, + 1057, 1033, 1034, 1058, -1, + 1058, 1034, 1035, 1059, -1, + 1059, 1035, 1036, 1060, -1, + 1060, 1036, 1037, 1061, -1, + 1061, 1037, 1038, 1062, -1, + 1062, 1038, 1039, 1063, -1, + 1063, 1039, 1040, 1064, -1, + 1064, 1040, 1041, 1065, -1, + 1065, 1041, 1042, 1066, -1, + 1066, 1042, 1043, 1067, -1, + 1067, 1043, 1044, 1068, -1, + 1068, 1044, 1045, 1069, -1, + 1069, 1045, 1046, 1070, -1, + 1070, 1046, 1047, 1071, -1, + 1071, 1047, 1048, 1072, -1, + 1072, 1048, 1049, 1073, -1, + 1073, 1049, 1050, 1074, -1, + 1074, 1050, 1051, 1075, -1, + 1075, 1051, 1052, 1076, -1, + 1076, 1052, 1053, 1077, -1, + 1077, 1053, 1054, 1078, -1, + 1078, 1054, 1055, 1079, -1, + 1079, 1055, 1032, 1056, -1, + 1080, 1056, 1057, 1081, -1, + 1081, 1057, 1058, 1082, -1, + 1082, 1058, 1059, 1083, -1, + 1083, 1059, 1060, 1084, -1, + 1084, 1060, 1061, 1085, -1, + 1085, 1061, 1062, 1086, -1, + 1086, 1062, 1063, 1087, -1, + 1087, 1063, 1064, 1088, -1, + 1088, 1064, 1065, 1089, -1, + 1089, 1065, 1066, 1090, -1, + 1090, 1066, 1067, 1091, -1, + 1091, 1067, 1068, 1092, -1, + 1092, 1068, 1069, 1093, -1, + 1093, 1069, 1070, 1094, -1, + 1094, 1070, 1071, 1095, -1, + 1095, 1071, 1072, 1096, -1, + 1096, 1072, 1073, 1097, -1, + 1097, 1073, 1074, 1098, -1, + 1098, 1074, 1075, 1099, -1, + 1099, 1075, 1076, 1100, -1, + 1100, 1076, 1077, 1101, -1, + 1101, 1077, 1078, 1102, -1, + 1102, 1078, 1079, 1103, -1, + 1103, 1079, 1056, 1080, -1, + 1104, 1080, 1081, 1105, -1, + 1105, 1081, 1082, 1106, -1, + 1106, 1082, 1083, 1107, -1, + 1107, 1083, 1084, 1108, -1, + 1108, 1084, 1085, 1109, -1, + 1109, 1085, 1086, 1110, -1, + 1110, 1086, 1087, 1111, -1, + 1111, 1087, 1088, 1112, -1, + 1112, 1088, 1089, 1113, -1, + 1113, 1089, 1090, 1114, -1, + 1114, 1090, 1091, 1115, -1, + 1115, 1091, 1092, 1116, -1, + 1116, 1092, 1093, 1117, -1, + 1117, 1093, 1094, 1118, -1, + 1118, 1094, 1095, 1119, -1, + 1119, 1095, 1096, 1120, -1, + 1120, 1096, 1097, 1121, -1, + 1121, 1097, 1098, 1122, -1, + 1122, 1098, 1099, 1123, -1, + 1123, 1099, 1100, 1124, -1, + 1124, 1100, 1101, 1125, -1, + 1125, 1101, 1102, 1126, -1, + 1126, 1102, 1103, 1127, -1, + 1127, 1103, 1080, 1104, -1, + 1128, 1104, 1105, 1129, -1, + 1129, 1105, 1106, 1130, -1, + 1130, 1106, 1107, 1131, -1, + 1131, 1107, 1108, 1132, -1, + 1132, 1108, 1109, 1133, -1, + 1133, 1109, 1110, 1134, -1, + 1134, 1110, 1111, 1135, -1, + 1135, 1111, 1112, 1136, -1, + 1136, 1112, 1113, 1137, -1, + 1137, 1113, 1114, 1138, -1, + 1138, 1114, 1115, 1139, -1, + 1139, 1115, 1116, 1140, -1, + 1140, 1116, 1117, 1141, -1, + 1141, 1117, 1118, 1142, -1, + 1142, 1118, 1119, 1143, -1, + 1143, 1119, 1120, 1144, -1, + 1144, 1120, 1121, 1145, -1, + 1145, 1121, 1122, 1146, -1, + 1146, 1122, 1123, 1147, -1, + 1147, 1123, 1124, 1148, -1, + 1148, 1124, 1125, 1149, -1, + 1149, 1125, 1126, 1150, -1, + 1150, 1126, 1127, 1151, -1, + 1151, 1127, 1104, 1128, -1, + 576, 0, 1, 577, -1, + 577, 1, 2, 578, -1, + 578, 2, 3, 579, -1, + 579, 3, 4, 580, -1, + 580, 4, 5, 581, -1, + 581, 5, 6, 582, -1, + 582, 6, 7, 583, -1, + 583, 7, 8, 584, -1, + 584, 8, 9, 585, -1, + 585, 9, 10, 586, -1, + 586, 10, 11, 587, -1, + 587, 11, 12, 588, -1, + 588, 12, 13, 589, -1, + 589, 13, 14, 590, -1, + 590, 14, 15, 591, -1, + 591, 15, 16, 592, -1, + 592, 16, 17, 593, -1, + 593, 17, 18, 594, -1, + 594, 18, 19, 595, -1, + 595, 19, 20, 596, -1, + 596, 20, 21, 597, -1, + 597, 21, 22, 598, -1, + 598, 22, 23, 599, -1, + 599, 23, 0, 576, -1, + 552, 1128, 1129, 553, -1, + 553, 1129, 1130, 554, -1, + 554, 1130, 1131, 555, -1, + 555, 1131, 1132, 556, -1, + 556, 1132, 1133, 557, -1, + 557, 1133, 1134, 558, -1, + 558, 1134, 1135, 559, -1, + 559, 1135, 1136, 560, -1, + 560, 1136, 1137, 561, -1, + 561, 1137, 1138, 562, -1, + 562, 1138, 1139, 563, -1, + 563, 1139, 1140, 564, -1, + 564, 1140, 1141, 565, -1, + 565, 1141, 1142, 566, -1, + 566, 1142, 1143, 567, -1, + 567, 1143, 1144, 568, -1, + 568, 1144, 1145, 569, -1, + 569, 1145, 1146, 570, -1, + 570, 1146, 1147, 571, -1, + 571, 1147, 1148, 572, -1, + 572, 1148, 1149, 573, -1, + 573, 1149, 1150, 574, -1, + 574, 1150, 1151, 575, -1, + 575, 1151, 1128, 552, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4orb.wrl b/environments/g4py/tests/gtest05/vrml/g4orb.wrl new file mode 100644 index 0000000000..b4961d1be8 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4orb.wrl @@ -0,0 +1,643 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 0 0 1000, + 258.819 0 965.926, + 250 66.9873 965.926, + 224.144 129.41 965.926, + 183.013 183.013 965.926, + 129.41 224.144 965.926, + 66.9873 250 965.926, + 1.58481e-14 258.819 965.926, + -66.9873 250 965.926, + -129.41 224.144 965.926, + -183.013 183.013 965.926, + -224.144 129.41 965.926, + -250 66.9873 965.926, + -258.819 3.16962e-14 965.926, + -250 -66.9873 965.926, + -224.144 -129.41 965.926, + -183.013 -183.013 965.926, + -129.41 -224.144 965.926, + -66.9873 -250 965.926, + -4.75443e-14 -258.819 965.926, + 66.9873 -250 965.926, + 129.41 -224.144 965.926, + 183.013 -183.013 965.926, + 224.144 -129.41 965.926, + 250 -66.9873 965.926, + 500 0 866.025, + 482.963 129.41 866.025, + 433.013 250 866.025, + 353.553 353.553 866.025, + 250 433.013 866.025, + 129.41 482.963 866.025, + 3.06162e-14 500 866.025, + -129.41 482.963 866.025, + -250 433.013 866.025, + -353.553 353.553 866.025, + -433.013 250 866.025, + -482.963 129.41 866.025, + -500 6.12323e-14 866.025, + -482.963 -129.41 866.025, + -433.013 -250 866.025, + -353.553 -353.553 866.025, + -250 -433.013 866.025, + -129.41 -482.963 866.025, + -9.18485e-14 -500 866.025, + 129.41 -482.963 866.025, + 250 -433.013 866.025, + 353.553 -353.553 866.025, + 433.013 -250 866.025, + 482.963 -129.41 866.025, + 707.107 0 707.107, + 683.013 183.013 707.107, + 612.372 353.553 707.107, + 500 500 707.107, + 353.553 612.372 707.107, + 183.013 683.013 707.107, + 4.32978e-14 707.107 707.107, + -183.013 683.013 707.107, + -353.553 612.372 707.107, + -500 500 707.107, + -612.372 353.553 707.107, + -683.013 183.013 707.107, + -707.107 8.65956e-14 707.107, + -683.013 -183.013 707.107, + -612.372 -353.553 707.107, + -500 -500 707.107, + -353.553 -612.372 707.107, + -183.013 -683.013 707.107, + -1.29893e-13 -707.107 707.107, + 183.013 -683.013 707.107, + 353.553 -612.372 707.107, + 500 -500 707.107, + 612.372 -353.553 707.107, + 683.013 -183.013 707.107, + 866.025 0 500, + 836.516 224.144 500, + 750 433.013 500, + 612.372 612.372 500, + 433.013 750 500, + 224.144 836.516 500, + 5.30288e-14 866.025 500, + -224.144 836.516 500, + -433.013 750 500, + -612.372 612.372 500, + -750 433.013 500, + -836.516 224.144 500, + -866.025 1.06058e-13 500, + -836.516 -224.144 500, + -750 -433.013 500, + -612.372 -612.372 500, + -433.013 -750 500, + -224.144 -836.516 500, + -1.59086e-13 -866.025 500, + 224.144 -836.516 500, + 433.013 -750 500, + 612.372 -612.372 500, + 750 -433.013 500, + 836.516 -224.144 500, + 965.926 0 258.819, + 933.013 250 258.819, + 836.516 482.963 258.819, + 683.013 683.013 258.819, + 482.963 836.516 258.819, + 250 933.013 258.819, + 5.91459e-14 965.926 258.819, + -250 933.013 258.819, + -482.963 836.516 258.819, + -683.013 683.013 258.819, + -836.516 482.963 258.819, + -933.013 250 258.819, + -965.926 1.18292e-13 258.819, + -933.013 -250 258.819, + -836.516 -482.963 258.819, + -683.013 -683.013 258.819, + -482.963 -836.516 258.819, + -250 -933.013 258.819, + -1.77438e-13 -965.926 258.819, + 250 -933.013 258.819, + 482.963 -836.516 258.819, + 683.013 -683.013 258.819, + 836.516 -482.963 258.819, + 933.013 -250 258.819, + 1000 0 6.12323e-14, + 965.926 258.819 6.12323e-14, + 866.025 500 6.12323e-14, + 707.107 707.107 6.12323e-14, + 500 866.025 6.12323e-14, + 258.819 965.926 6.12323e-14, + 6.12323e-14 1000 6.12323e-14, + -258.819 965.926 6.12323e-14, + -500 866.025 6.12323e-14, + -707.107 707.107 6.12323e-14, + -866.025 500 6.12323e-14, + -965.926 258.819 6.12323e-14, + -1000 1.22465e-13 6.12323e-14, + -965.926 -258.819 6.12323e-14, + -866.025 -500 6.12323e-14, + -707.107 -707.107 6.12323e-14, + -500 -866.025 6.12323e-14, + -258.819 -965.926 6.12323e-14, + -1.83697e-13 -1000 6.12323e-14, + 258.819 -965.926 6.12323e-14, + 500 -866.025 6.12323e-14, + 707.107 -707.107 6.12323e-14, + 866.025 -500 6.12323e-14, + 965.926 -258.819 6.12323e-14, + 965.926 0 -258.819, + 933.013 250 -258.819, + 836.516 482.963 -258.819, + 683.013 683.013 -258.819, + 482.963 836.516 -258.819, + 250 933.013 -258.819, + 5.91459e-14 965.926 -258.819, + -250 933.013 -258.819, + -482.963 836.516 -258.819, + -683.013 683.013 -258.819, + -836.516 482.963 -258.819, + -933.013 250 -258.819, + -965.926 1.18292e-13 -258.819, + -933.013 -250 -258.819, + -836.516 -482.963 -258.819, + -683.013 -683.013 -258.819, + -482.963 -836.516 -258.819, + -250 -933.013 -258.819, + -1.77438e-13 -965.926 -258.819, + 250 -933.013 -258.819, + 482.963 -836.516 -258.819, + 683.013 -683.013 -258.819, + 836.516 -482.963 -258.819, + 933.013 -250 -258.819, + 866.025 0 -500, + 836.516 224.144 -500, + 750 433.013 -500, + 612.372 612.372 -500, + 433.013 750 -500, + 224.144 836.516 -500, + 5.30288e-14 866.025 -500, + -224.144 836.516 -500, + -433.013 750 -500, + -612.372 612.372 -500, + -750 433.013 -500, + -836.516 224.144 -500, + -866.025 1.06058e-13 -500, + -836.516 -224.144 -500, + -750 -433.013 -500, + -612.372 -612.372 -500, + -433.013 -750 -500, + -224.144 -836.516 -500, + -1.59086e-13 -866.025 -500, + 224.144 -836.516 -500, + 433.013 -750 -500, + 612.372 -612.372 -500, + 750 -433.013 -500, + 836.516 -224.144 -500, + 707.107 0 -707.107, + 683.013 183.013 -707.107, + 612.372 353.553 -707.107, + 500 500 -707.107, + 353.553 612.372 -707.107, + 183.013 683.013 -707.107, + 4.32978e-14 707.107 -707.107, + -183.013 683.013 -707.107, + -353.553 612.372 -707.107, + -500 500 -707.107, + -612.372 353.553 -707.107, + -683.013 183.013 -707.107, + -707.107 8.65956e-14 -707.107, + -683.013 -183.013 -707.107, + -612.372 -353.553 -707.107, + -500 -500 -707.107, + -353.553 -612.372 -707.107, + -183.013 -683.013 -707.107, + -1.29893e-13 -707.107 -707.107, + 183.013 -683.013 -707.107, + 353.553 -612.372 -707.107, + 500 -500 -707.107, + 612.372 -353.553 -707.107, + 683.013 -183.013 -707.107, + 500 0 -866.025, + 482.963 129.41 -866.025, + 433.013 250 -866.025, + 353.553 353.553 -866.025, + 250 433.013 -866.025, + 129.41 482.963 -866.025, + 3.06162e-14 500 -866.025, + -129.41 482.963 -866.025, + -250 433.013 -866.025, + -353.553 353.553 -866.025, + -433.013 250 -866.025, + -482.963 129.41 -866.025, + -500 6.12323e-14 -866.025, + -482.963 -129.41 -866.025, + -433.013 -250 -866.025, + -353.553 -353.553 -866.025, + -250 -433.013 -866.025, + -129.41 -482.963 -866.025, + -9.18485e-14 -500 -866.025, + 129.41 -482.963 -866.025, + 250 -433.013 -866.025, + 353.553 -353.553 -866.025, + 433.013 -250 -866.025, + 482.963 -129.41 -866.025, + 258.819 0 -965.926, + 250 66.9873 -965.926, + 224.144 129.41 -965.926, + 183.013 183.013 -965.926, + 129.41 224.144 -965.926, + 66.9873 250 -965.926, + 1.58481e-14 258.819 -965.926, + -66.9873 250 -965.926, + -129.41 224.144 -965.926, + -183.013 183.013 -965.926, + -224.144 129.41 -965.926, + -250 66.9873 -965.926, + -258.819 3.16962e-14 -965.926, + -250 -66.9873 -965.926, + -224.144 -129.41 -965.926, + -183.013 -183.013 -965.926, + -129.41 -224.144 -965.926, + -66.9873 -250 -965.926, + -4.75443e-14 -258.819 -965.926, + 66.9873 -250 -965.926, + 129.41 -224.144 -965.926, + 183.013 -183.013 -965.926, + 224.144 -129.41 -965.926, + 250 -66.9873 -965.926, + 0 0 -1000, + 0 0 0, + ] + } + coordIndex [ + 0, 1, 2, -1, + 0, 2, 3, -1, + 0, 3, 4, -1, + 0, 4, 5, -1, + 0, 5, 6, -1, + 0, 6, 7, -1, + 0, 7, 8, -1, + 0, 8, 9, -1, + 0, 9, 10, -1, + 0, 10, 11, -1, + 0, 11, 12, -1, + 0, 12, 13, -1, + 0, 13, 14, -1, + 0, 14, 15, -1, + 0, 15, 16, -1, + 0, 16, 17, -1, + 0, 17, 18, -1, + 0, 18, 19, -1, + 0, 19, 20, -1, + 0, 20, 21, -1, + 0, 21, 22, -1, + 0, 22, 23, -1, + 0, 23, 24, -1, + 0, 24, 1, -1, + 1, 25, 26, 2, -1, + 2, 26, 27, 3, -1, + 3, 27, 28, 4, -1, + 4, 28, 29, 5, -1, + 5, 29, 30, 6, -1, + 6, 30, 31, 7, -1, + 7, 31, 32, 8, -1, + 8, 32, 33, 9, -1, + 9, 33, 34, 10, -1, + 10, 34, 35, 11, -1, + 11, 35, 36, 12, -1, + 12, 36, 37, 13, -1, + 13, 37, 38, 14, -1, + 14, 38, 39, 15, -1, + 15, 39, 40, 16, -1, + 16, 40, 41, 17, -1, + 17, 41, 42, 18, -1, + 18, 42, 43, 19, -1, + 19, 43, 44, 20, -1, + 20, 44, 45, 21, -1, + 21, 45, 46, 22, -1, + 22, 46, 47, 23, -1, + 23, 47, 48, 24, -1, + 24, 48, 25, 1, -1, + 25, 49, 50, 26, -1, + 26, 50, 51, 27, -1, + 27, 51, 52, 28, -1, + 28, 52, 53, 29, -1, + 29, 53, 54, 30, -1, + 30, 54, 55, 31, -1, + 31, 55, 56, 32, -1, + 32, 56, 57, 33, -1, + 33, 57, 58, 34, -1, + 34, 58, 59, 35, -1, + 35, 59, 60, 36, -1, + 36, 60, 61, 37, -1, + 37, 61, 62, 38, -1, + 38, 62, 63, 39, -1, + 39, 63, 64, 40, -1, + 40, 64, 65, 41, -1, + 41, 65, 66, 42, -1, + 42, 66, 67, 43, -1, + 43, 67, 68, 44, -1, + 44, 68, 69, 45, -1, + 45, 69, 70, 46, -1, + 46, 70, 71, 47, -1, + 47, 71, 72, 48, -1, + 48, 72, 49, 25, -1, + 49, 73, 74, 50, -1, + 50, 74, 75, 51, -1, + 51, 75, 76, 52, -1, + 52, 76, 77, 53, -1, + 53, 77, 78, 54, -1, + 54, 78, 79, 55, -1, + 55, 79, 80, 56, -1, + 56, 80, 81, 57, -1, + 57, 81, 82, 58, -1, + 58, 82, 83, 59, -1, + 59, 83, 84, 60, -1, + 60, 84, 85, 61, -1, + 61, 85, 86, 62, -1, + 62, 86, 87, 63, -1, + 63, 87, 88, 64, -1, + 64, 88, 89, 65, -1, + 65, 89, 90, 66, -1, + 66, 90, 91, 67, -1, + 67, 91, 92, 68, -1, + 68, 92, 93, 69, -1, + 69, 93, 94, 70, -1, + 70, 94, 95, 71, -1, + 71, 95, 96, 72, -1, + 72, 96, 73, 49, -1, + 73, 97, 98, 74, -1, + 74, 98, 99, 75, -1, + 75, 99, 100, 76, -1, + 76, 100, 101, 77, -1, + 77, 101, 102, 78, -1, + 78, 102, 103, 79, -1, + 79, 103, 104, 80, -1, + 80, 104, 105, 81, -1, + 81, 105, 106, 82, -1, + 82, 106, 107, 83, -1, + 83, 107, 108, 84, -1, + 84, 108, 109, 85, -1, + 85, 109, 110, 86, -1, + 86, 110, 111, 87, -1, + 87, 111, 112, 88, -1, + 88, 112, 113, 89, -1, + 89, 113, 114, 90, -1, + 90, 114, 115, 91, -1, + 91, 115, 116, 92, -1, + 92, 116, 117, 93, -1, + 93, 117, 118, 94, -1, + 94, 118, 119, 95, -1, + 95, 119, 120, 96, -1, + 96, 120, 97, 73, -1, + 97, 121, 122, 98, -1, + 98, 122, 123, 99, -1, + 99, 123, 124, 100, -1, + 100, 124, 125, 101, -1, + 101, 125, 126, 102, -1, + 102, 126, 127, 103, -1, + 103, 127, 128, 104, -1, + 104, 128, 129, 105, -1, + 105, 129, 130, 106, -1, + 106, 130, 131, 107, -1, + 107, 131, 132, 108, -1, + 108, 132, 133, 109, -1, + 109, 133, 134, 110, -1, + 110, 134, 135, 111, -1, + 111, 135, 136, 112, -1, + 112, 136, 137, 113, -1, + 113, 137, 138, 114, -1, + 114, 138, 139, 115, -1, + 115, 139, 140, 116, -1, + 116, 140, 141, 117, -1, + 117, 141, 142, 118, -1, + 118, 142, 143, 119, -1, + 119, 143, 144, 120, -1, + 120, 144, 121, 97, -1, + 121, 145, 146, 122, -1, + 122, 146, 147, 123, -1, + 123, 147, 148, 124, -1, + 124, 148, 149, 125, -1, + 125, 149, 150, 126, -1, + 126, 150, 151, 127, -1, + 127, 151, 152, 128, -1, + 128, 152, 153, 129, -1, + 129, 153, 154, 130, -1, + 130, 154, 155, 131, -1, + 131, 155, 156, 132, -1, + 132, 156, 157, 133, -1, + 133, 157, 158, 134, -1, + 134, 158, 159, 135, -1, + 135, 159, 160, 136, -1, + 136, 160, 161, 137, -1, + 137, 161, 162, 138, -1, + 138, 162, 163, 139, -1, + 139, 163, 164, 140, -1, + 140, 164, 165, 141, -1, + 141, 165, 166, 142, -1, + 142, 166, 167, 143, -1, + 143, 167, 168, 144, -1, + 144, 168, 145, 121, -1, + 145, 169, 170, 146, -1, + 146, 170, 171, 147, -1, + 147, 171, 172, 148, -1, + 148, 172, 173, 149, -1, + 149, 173, 174, 150, -1, + 150, 174, 175, 151, -1, + 151, 175, 176, 152, -1, + 152, 176, 177, 153, -1, + 153, 177, 178, 154, -1, + 154, 178, 179, 155, -1, + 155, 179, 180, 156, -1, + 156, 180, 181, 157, -1, + 157, 181, 182, 158, -1, + 158, 182, 183, 159, -1, + 159, 183, 184, 160, -1, + 160, 184, 185, 161, -1, + 161, 185, 186, 162, -1, + 162, 186, 187, 163, -1, + 163, 187, 188, 164, -1, + 164, 188, 189, 165, -1, + 165, 189, 190, 166, -1, + 166, 190, 191, 167, -1, + 167, 191, 192, 168, -1, + 168, 192, 169, 145, -1, + 169, 193, 194, 170, -1, + 170, 194, 195, 171, -1, + 171, 195, 196, 172, -1, + 172, 196, 197, 173, -1, + 173, 197, 198, 174, -1, + 174, 198, 199, 175, -1, + 175, 199, 200, 176, -1, + 176, 200, 201, 177, -1, + 177, 201, 202, 178, -1, + 178, 202, 203, 179, -1, + 179, 203, 204, 180, -1, + 180, 204, 205, 181, -1, + 181, 205, 206, 182, -1, + 182, 206, 207, 183, -1, + 183, 207, 208, 184, -1, + 184, 208, 209, 185, -1, + 185, 209, 210, 186, -1, + 186, 210, 211, 187, -1, + 187, 211, 212, 188, -1, + 188, 212, 213, 189, -1, + 189, 213, 214, 190, -1, + 190, 214, 215, 191, -1, + 191, 215, 216, 192, -1, + 192, 216, 193, 169, -1, + 193, 217, 218, 194, -1, + 194, 218, 219, 195, -1, + 195, 219, 220, 196, -1, + 196, 220, 221, 197, -1, + 197, 221, 222, 198, -1, + 198, 222, 223, 199, -1, + 199, 223, 224, 200, -1, + 200, 224, 225, 201, -1, + 201, 225, 226, 202, -1, + 202, 226, 227, 203, -1, + 203, 227, 228, 204, -1, + 204, 228, 229, 205, -1, + 205, 229, 230, 206, -1, + 206, 230, 231, 207, -1, + 207, 231, 232, 208, -1, + 208, 232, 233, 209, -1, + 209, 233, 234, 210, -1, + 210, 234, 235, 211, -1, + 211, 235, 236, 212, -1, + 212, 236, 237, 213, -1, + 213, 237, 238, 214, -1, + 214, 238, 239, 215, -1, + 215, 239, 240, 216, -1, + 216, 240, 217, 193, -1, + 217, 241, 242, 218, -1, + 218, 242, 243, 219, -1, + 219, 243, 244, 220, -1, + 220, 244, 245, 221, -1, + 221, 245, 246, 222, -1, + 222, 246, 247, 223, -1, + 223, 247, 248, 224, -1, + 224, 248, 249, 225, -1, + 225, 249, 250, 226, -1, + 226, 250, 251, 227, -1, + 227, 251, 252, 228, -1, + 228, 252, 253, 229, -1, + 229, 253, 254, 230, -1, + 230, 254, 255, 231, -1, + 231, 255, 256, 232, -1, + 232, 256, 257, 233, -1, + 233, 257, 258, 234, -1, + 234, 258, 259, 235, -1, + 235, 259, 260, 236, -1, + 236, 260, 261, 237, -1, + 237, 261, 262, 238, -1, + 238, 262, 263, 239, -1, + 239, 263, 264, 240, -1, + 240, 264, 241, 217, -1, + 241, 265, 242, -1, + 242, 265, 243, -1, + 243, 265, 244, -1, + 244, 265, 245, -1, + 245, 265, 246, -1, + 246, 265, 247, -1, + 247, 265, 248, -1, + 248, 265, 249, -1, + 249, 265, 250, -1, + 250, 265, 251, -1, + 251, 265, 252, -1, + 252, 265, 253, -1, + 253, 265, 254, -1, + 254, 265, 255, -1, + 255, 265, 256, -1, + 256, 265, 257, -1, + 257, 265, 258, -1, + 258, 265, 259, -1, + 259, 265, 260, -1, + 260, 265, 261, -1, + 261, 265, 262, -1, + 262, 265, 263, -1, + 263, 265, 264, -1, + 264, 265, 241, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4para.wrl b/environments/g4py/tests/gtest05/vrml/g4para.wrl new file mode 100644 index 0000000000..1fcf6d556e --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4para.wrl @@ -0,0 +1,102 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -948.528 -400 -600, + -348.528 -400 -600, + 451.472 400 -600, + -148.528 400 -600, + -451.472 -400 600, + 148.528 -400 600, + 948.528 400 600, + 348.528 400 600, + ] + } + coordIndex [ + 0, 3, 2, 1, -1, + 4, 7, 3, 0, -1, + 7, 6, 2, 3, -1, + 6, 5, 1, 2, -1, + 5, 4, 0, 1, -1, + 4, 5, 6, 7, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4polycone.wrl b/environments/g4py/tests/gtest05/vrml/g4polycone.wrl new file mode 100644 index 0000000000..494fe6e448 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4polycone.wrl @@ -0,0 +1,505 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 20 0 350, + 19.3185 5.17638 350, + 17.3205 10 350, + 14.1421 14.1421 350, + 10 17.3205 350, + 5.17638 19.3185 350, + 1.22465e-15 20 350, + -5.17638 19.3185 350, + -10 17.3205 350, + -14.1421 14.1421 350, + -17.3205 10 350, + -19.3185 5.17638 350, + -20 2.44929e-15 350, + -19.3185 -5.17638 350, + -17.3205 -10 350, + -14.1421 -14.1421 350, + -10 -17.3205 350, + -5.17638 -19.3185 350, + -3.67394e-15 -20 350, + 5.17638 -19.3185 350, + 10 -17.3205 350, + 14.1421 -14.1421 350, + 17.3205 -10 350, + 19.3185 -5.17638 350, + 20 0 310, + 19.3185 5.17638 310, + 17.3205 10 310, + 14.1421 14.1421 310, + 10 17.3205 310, + 5.17638 19.3185 310, + 1.22465e-15 20 310, + -5.17638 19.3185 310, + -10 17.3205 310, + -14.1421 14.1421 310, + -17.3205 10 310, + -19.3185 5.17638 310, + -20 2.44929e-15 310, + -19.3185 -5.17638 310, + -17.3205 -10 310, + -14.1421 -14.1421 310, + -10 -17.3205 310, + -5.17638 -19.3185 310, + -3.67394e-15 -20 310, + 5.17638 -19.3185 310, + 10 -17.3205 310, + 14.1421 -14.1421 310, + 17.3205 -10 310, + 19.3185 -5.17638 310, + 100 0 290, + 96.5926 25.8819 290, + 86.6025 50 290, + 70.7107 70.7107 290, + 50 86.6025 290, + 25.8819 96.5926 290, + 6.12323e-15 100 290, + -25.8819 96.5926 290, + -50 86.6025 290, + -70.7107 70.7107 290, + -86.6025 50 290, + -96.5926 25.8819 290, + -100 1.22465e-14 290, + -96.5926 -25.8819 290, + -86.6025 -50 290, + -70.7107 -70.7107 290, + -50 -86.6025 290, + -25.8819 -96.5926 290, + -1.83697e-14 -100 290, + 25.8819 -96.5926 290, + 50 -86.6025 290, + 70.7107 -70.7107 290, + 86.6025 -50 290, + 96.5926 -25.8819 290, + 100 0 270, + 96.5926 25.8819 270, + 86.6025 50 270, + 70.7107 70.7107 270, + 50 86.6025 270, + 25.8819 96.5926 270, + 6.12323e-15 100 270, + -25.8819 96.5926 270, + -50 86.6025 270, + -70.7107 70.7107 270, + -86.6025 50 270, + -96.5926 25.8819 270, + -100 1.22465e-14 270, + -96.5926 -25.8819 270, + -86.6025 -50 270, + -70.7107 -70.7107 270, + -50 -86.6025 270, + -25.8819 -96.5926 270, + -1.83697e-14 -100 270, + 25.8819 -96.5926 270, + 50 -86.6025 270, + 70.7107 -70.7107 270, + 86.6025 -50 270, + 96.5926 -25.8819 270, + 50 0 250, + 48.2963 12.941 250, + 43.3013 25 250, + 35.3553 35.3553 250, + 25 43.3013 250, + 12.941 48.2963 250, + 3.06162e-15 50 250, + -12.941 48.2963 250, + -25 43.3013 250, + -35.3553 35.3553 250, + -43.3013 25 250, + -48.2963 12.941 250, + -50 6.12323e-15 250, + -48.2963 -12.941 250, + -43.3013 -25 250, + -35.3553 -35.3553 250, + -25 -43.3013 250, + -12.941 -48.2963 250, + -9.18485e-15 -50 250, + 12.941 -48.2963 250, + 25 -43.3013 250, + 35.3553 -35.3553 250, + 43.3013 -25 250, + 48.2963 -12.941 250, + 50 0 110, + 48.2963 12.941 110, + 43.3013 25 110, + 35.3553 35.3553 110, + 25 43.3013 110, + 12.941 48.2963 110, + 3.06162e-15 50 110, + -12.941 48.2963 110, + -25 43.3013 110, + -35.3553 35.3553 110, + -43.3013 25 110, + -48.2963 12.941 110, + -50 6.12323e-15 110, + -48.2963 -12.941 110, + -43.3013 -25 110, + -35.3553 -35.3553 110, + -25 -43.3013 110, + -12.941 -48.2963 110, + -9.18485e-15 -50 110, + 12.941 -48.2963 110, + 25 -43.3013 110, + 35.3553 -35.3553 110, + 43.3013 -25 110, + 48.2963 -12.941 110, + 100 0 90, + 96.5926 25.8819 90, + 86.6025 50 90, + 70.7107 70.7107 90, + 50 86.6025 90, + 25.8819 96.5926 90, + 6.12323e-15 100 90, + -25.8819 96.5926 90, + -50 86.6025 90, + -70.7107 70.7107 90, + -86.6025 50 90, + -96.5926 25.8819 90, + -100 1.22465e-14 90, + -96.5926 -25.8819 90, + -86.6025 -50 90, + -70.7107 -70.7107 90, + -50 -86.6025 90, + -25.8819 -96.5926 90, + -1.83697e-14 -100 90, + 25.8819 -96.5926 90, + 50 -86.6025 90, + 70.7107 -70.7107 90, + 86.6025 -50 90, + 96.5926 -25.8819 90, + 100 0 70, + 96.5926 25.8819 70, + 86.6025 50 70, + 70.7107 70.7107 70, + 50 86.6025 70, + 25.8819 96.5926 70, + 6.12323e-15 100 70, + -25.8819 96.5926 70, + -50 86.6025 70, + -70.7107 70.7107 70, + -86.6025 50 70, + -96.5926 25.8819 70, + -100 1.22465e-14 70, + -96.5926 -25.8819 70, + -86.6025 -50 70, + -70.7107 -70.7107 70, + -50 -86.6025 70, + -25.8819 -96.5926 70, + -1.83697e-14 -100 70, + 25.8819 -96.5926 70, + 50 -86.6025 70, + 70.7107 -70.7107 70, + 86.6025 -50 70, + 96.5926 -25.8819 70, + 0 0 50, + 0 0 350, + 0 0 310, + 0 0 290, + 0 0 270, + 0 0 250, + 0 0 110, + 0 0 90, + 0 0 70, + ] + } + coordIndex [ + 0, 24, 25, 1, -1, + 1, 25, 26, 2, -1, + 2, 26, 27, 3, -1, + 3, 27, 28, 4, -1, + 4, 28, 29, 5, -1, + 5, 29, 30, 6, -1, + 6, 30, 31, 7, -1, + 7, 31, 32, 8, -1, + 8, 32, 33, 9, -1, + 9, 33, 34, 10, -1, + 10, 34, 35, 11, -1, + 11, 35, 36, 12, -1, + 12, 36, 37, 13, -1, + 13, 37, 38, 14, -1, + 14, 38, 39, 15, -1, + 15, 39, 40, 16, -1, + 16, 40, 41, 17, -1, + 17, 41, 42, 18, -1, + 18, 42, 43, 19, -1, + 19, 43, 44, 20, -1, + 20, 44, 45, 21, -1, + 21, 45, 46, 22, -1, + 22, 46, 47, 23, -1, + 23, 47, 24, 0, -1, + 24, 48, 49, 25, -1, + 25, 49, 50, 26, -1, + 26, 50, 51, 27, -1, + 27, 51, 52, 28, -1, + 28, 52, 53, 29, -1, + 29, 53, 54, 30, -1, + 30, 54, 55, 31, -1, + 31, 55, 56, 32, -1, + 32, 56, 57, 33, -1, + 33, 57, 58, 34, -1, + 34, 58, 59, 35, -1, + 35, 59, 60, 36, -1, + 36, 60, 61, 37, -1, + 37, 61, 62, 38, -1, + 38, 62, 63, 39, -1, + 39, 63, 64, 40, -1, + 40, 64, 65, 41, -1, + 41, 65, 66, 42, -1, + 42, 66, 67, 43, -1, + 43, 67, 68, 44, -1, + 44, 68, 69, 45, -1, + 45, 69, 70, 46, -1, + 46, 70, 71, 47, -1, + 47, 71, 48, 24, -1, + 48, 72, 73, 49, -1, + 49, 73, 74, 50, -1, + 50, 74, 75, 51, -1, + 51, 75, 76, 52, -1, + 52, 76, 77, 53, -1, + 53, 77, 78, 54, -1, + 54, 78, 79, 55, -1, + 55, 79, 80, 56, -1, + 56, 80, 81, 57, -1, + 57, 81, 82, 58, -1, + 58, 82, 83, 59, -1, + 59, 83, 84, 60, -1, + 60, 84, 85, 61, -1, + 61, 85, 86, 62, -1, + 62, 86, 87, 63, -1, + 63, 87, 88, 64, -1, + 64, 88, 89, 65, -1, + 65, 89, 90, 66, -1, + 66, 90, 91, 67, -1, + 67, 91, 92, 68, -1, + 68, 92, 93, 69, -1, + 69, 93, 94, 70, -1, + 70, 94, 95, 71, -1, + 71, 95, 72, 48, -1, + 72, 96, 97, 73, -1, + 73, 97, 98, 74, -1, + 74, 98, 99, 75, -1, + 75, 99, 100, 76, -1, + 76, 100, 101, 77, -1, + 77, 101, 102, 78, -1, + 78, 102, 103, 79, -1, + 79, 103, 104, 80, -1, + 80, 104, 105, 81, -1, + 81, 105, 106, 82, -1, + 82, 106, 107, 83, -1, + 83, 107, 108, 84, -1, + 84, 108, 109, 85, -1, + 85, 109, 110, 86, -1, + 86, 110, 111, 87, -1, + 87, 111, 112, 88, -1, + 88, 112, 113, 89, -1, + 89, 113, 114, 90, -1, + 90, 114, 115, 91, -1, + 91, 115, 116, 92, -1, + 92, 116, 117, 93, -1, + 93, 117, 118, 94, -1, + 94, 118, 119, 95, -1, + 95, 119, 96, 72, -1, + 96, 120, 121, 97, -1, + 97, 121, 122, 98, -1, + 98, 122, 123, 99, -1, + 99, 123, 124, 100, -1, + 100, 124, 125, 101, -1, + 101, 125, 126, 102, -1, + 102, 126, 127, 103, -1, + 103, 127, 128, 104, -1, + 104, 128, 129, 105, -1, + 105, 129, 130, 106, -1, + 106, 130, 131, 107, -1, + 107, 131, 132, 108, -1, + 108, 132, 133, 109, -1, + 109, 133, 134, 110, -1, + 110, 134, 135, 111, -1, + 111, 135, 136, 112, -1, + 112, 136, 137, 113, -1, + 113, 137, 138, 114, -1, + 114, 138, 139, 115, -1, + 115, 139, 140, 116, -1, + 116, 140, 141, 117, -1, + 117, 141, 142, 118, -1, + 118, 142, 143, 119, -1, + 119, 143, 120, 96, -1, + 120, 144, 145, 121, -1, + 121, 145, 146, 122, -1, + 122, 146, 147, 123, -1, + 123, 147, 148, 124, -1, + 124, 148, 149, 125, -1, + 125, 149, 150, 126, -1, + 126, 150, 151, 127, -1, + 127, 151, 152, 128, -1, + 128, 152, 153, 129, -1, + 129, 153, 154, 130, -1, + 130, 154, 155, 131, -1, + 131, 155, 156, 132, -1, + 132, 156, 157, 133, -1, + 133, 157, 158, 134, -1, + 134, 158, 159, 135, -1, + 135, 159, 160, 136, -1, + 136, 160, 161, 137, -1, + 137, 161, 162, 138, -1, + 138, 162, 163, 139, -1, + 139, 163, 164, 140, -1, + 140, 164, 165, 141, -1, + 141, 165, 166, 142, -1, + 142, 166, 167, 143, -1, + 143, 167, 144, 120, -1, + 144, 168, 169, 145, -1, + 145, 169, 170, 146, -1, + 146, 170, 171, 147, -1, + 147, 171, 172, 148, -1, + 148, 172, 173, 149, -1, + 149, 173, 174, 150, -1, + 150, 174, 175, 151, -1, + 151, 175, 176, 152, -1, + 152, 176, 177, 153, -1, + 153, 177, 178, 154, -1, + 154, 178, 179, 155, -1, + 155, 179, 180, 156, -1, + 156, 180, 181, 157, -1, + 157, 181, 182, 158, -1, + 158, 182, 183, 159, -1, + 159, 183, 184, 160, -1, + 160, 184, 185, 161, -1, + 161, 185, 186, 162, -1, + 162, 186, 187, 163, -1, + 163, 187, 188, 164, -1, + 164, 188, 189, 165, -1, + 165, 189, 190, 166, -1, + 166, 190, 191, 167, -1, + 167, 191, 168, 144, -1, + 168, 192, 169, -1, + 169, 192, 170, -1, + 170, 192, 171, -1, + 171, 192, 172, -1, + 172, 192, 173, -1, + 173, 192, 174, -1, + 174, 192, 175, -1, + 175, 192, 176, -1, + 176, 192, 177, -1, + 177, 192, 178, -1, + 178, 192, 179, -1, + 179, 192, 180, -1, + 180, 192, 181, -1, + 181, 192, 182, -1, + 182, 192, 183, -1, + 183, 192, 184, -1, + 184, 192, 185, -1, + 185, 192, 186, -1, + 186, 192, 187, -1, + 187, 192, 188, -1, + 188, 192, 189, -1, + 189, 192, 190, -1, + 190, 192, 191, -1, + 191, 192, 168, -1, + 193, 0, 1, -1, + 193, 1, 2, -1, + 193, 2, 3, -1, + 193, 3, 4, -1, + 193, 4, 5, -1, + 193, 5, 6, -1, + 193, 6, 7, -1, + 193, 7, 8, -1, + 193, 8, 9, -1, + 193, 9, 10, -1, + 193, 10, 11, -1, + 193, 11, 12, -1, + 193, 12, 13, -1, + 193, 13, 14, -1, + 193, 14, 15, -1, + 193, 15, 16, -1, + 193, 16, 17, -1, + 193, 17, 18, -1, + 193, 18, 19, -1, + 193, 19, 20, -1, + 193, 20, 21, -1, + 193, 21, 22, -1, + 193, 22, 23, -1, + 193, 23, 0, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4polyhedra.wrl b/environments/g4py/tests/gtest05/vrml/g4polyhedra.wrl new file mode 100644 index 0000000000..4fb6508105 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4polyhedra.wrl @@ -0,0 +1,160 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 123.607 0 350, + 38.1966 117.557 350, + -100 72.6543 350, + -100 -72.6543 350, + 38.1966 -117.557 350, + 123.607 0 320, + 38.1966 117.557 320, + -100 72.6543 320, + -100 -72.6543 320, + 38.1966 -117.557 320, + 49.4427 0 300, + 15.2786 47.0228 300, + -40 29.0617 300, + -40 -29.0617 300, + 15.2786 -47.0228 300, + 49.4427 0 130, + 15.2786 47.0228 130, + -40 29.0617 130, + -40 -29.0617 130, + 15.2786 -47.0228 130, + 185.41 0 80, + 57.2949 176.336 80, + -150 108.981 80, + -150 -108.981 80, + 57.2949 -176.336 80, + 185.41 0 50, + 57.2949 176.336 50, + -150 108.981 50, + -150 -108.981 50, + 57.2949 -176.336 50, + 0 0 0, + 0 0 350, + 0 0 320, + 0 0 300, + 0 0 130, + 0 0 80, + 0 0 50, + ] + } + coordIndex [ + 0, 5, 6, 1, -1, + 1, 6, 7, 2, -1, + 2, 7, 8, 3, -1, + 3, 8, 9, 4, -1, + 4, 9, 5, 0, -1, + 5, 10, 11, 6, -1, + 6, 11, 12, 7, -1, + 7, 12, 13, 8, -1, + 8, 13, 14, 9, -1, + 9, 14, 10, 5, -1, + 10, 15, 16, 11, -1, + 11, 16, 17, 12, -1, + 12, 17, 18, 13, -1, + 13, 18, 19, 14, -1, + 14, 19, 15, 10, -1, + 15, 20, 21, 16, -1, + 16, 21, 22, 17, -1, + 17, 22, 23, 18, -1, + 18, 23, 24, 19, -1, + 19, 24, 20, 15, -1, + 20, 25, 26, 21, -1, + 21, 26, 27, 22, -1, + 22, 27, 28, 23, -1, + 23, 28, 29, 24, -1, + 24, 29, 25, 20, -1, + 25, 30, 26, -1, + 26, 30, 27, -1, + 27, 30, 28, -1, + 28, 30, 29, -1, + 29, 30, 25, -1, + 31, 0, 1, -1, + 31, 1, 2, -1, + 31, 2, 3, -1, + 31, 3, 4, -1, + 31, 4, 0, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4sphere.wrl b/environments/g4py/tests/gtest05/vrml/g4sphere.wrl new file mode 100644 index 0000000000..e3bfafdc9b --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4sphere.wrl @@ -0,0 +1,690 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 0 0 1200, + 310.583 2.1464e-307 1159.11, + 300 80.3848 1159.11, + 268.973 155.291 1159.11, + 219.615 219.615 1159.11, + 155.291 268.973 1159.11, + 80.3848 300 1159.11, + 1.90177e-14 310.583 1159.11, + -80.3848 300 1159.11, + -155.291 268.973 1159.11, + -219.615 219.615 1159.11, + -268.973 155.291 1159.11, + -300 80.3848 1159.11, + -310.583 3.80354e-14 1159.11, + 600 4.14653e-307 1039.23, + 579.555 155.291 1039.23, + 519.615 300 1039.23, + 424.264 424.264 1039.23, + 300 519.615 1039.23, + 155.291 579.555 1039.23, + 3.67394e-14 600 1039.23, + -155.291 579.555 1039.23, + -300 519.615 1039.23, + -424.264 424.264 1039.23, + -519.615 300 1039.23, + -579.555 155.291 1039.23, + -600 7.34788e-14 1039.23, + 848.528 5.86408e-307 848.528, + 819.615 219.615 848.528, + 734.847 424.264 848.528, + 600 600 848.528, + 424.264 734.847 848.528, + 219.615 819.615 848.528, + 5.19574e-14 848.528 848.528, + -219.615 819.615 848.528, + -424.264 734.847 848.528, + -600 600 848.528, + -734.847 424.264 848.528, + -819.615 219.615 848.528, + -848.528 1.03915e-13 848.528, + 1039.23 7.182e-307 600, + 1003.82 268.973 600, + 900 519.615 600, + 734.847 734.847 600, + 519.615 900 600, + 268.973 1003.82 600, + 6.36345e-14 1039.23 600, + -268.973 1003.82 600, + -519.615 900 600, + -734.847 734.847 600, + -900 519.615 600, + -1003.82 268.973 600, + -1039.23 1.27269e-13 600, + 1159.11 8.01048e-307 310.583, + 1119.62 300 310.583, + 1003.82 579.555 310.583, + 819.615 819.615 310.583, + 579.555 1003.82 310.583, + 300 1119.62 310.583, + 7.09751e-14 1159.11 310.583, + -300 1119.62 310.583, + -579.555 1003.82 310.583, + -819.615 819.615 310.583, + -1003.82 579.555 310.583, + -1119.62 300 310.583, + -1159.11 1.4195e-13 310.583, + 1200 8.29306e-307 7.34788e-14, + 1159.11 310.583 7.34788e-14, + 1039.23 600 7.34788e-14, + 848.528 848.528 7.34788e-14, + 600 1039.23 7.34788e-14, + 310.583 1159.11 7.34788e-14, + 7.34788e-14 1200 7.34788e-14, + -310.583 1159.11 7.34788e-14, + -600 1039.23 7.34788e-14, + -848.528 848.528 7.34788e-14, + -1039.23 600 7.34788e-14, + -1159.11 310.583 7.34788e-14, + -1200 1.46958e-13 7.34788e-14, + 1159.11 8.01048e-307 -310.583, + 1119.62 300 -310.583, + 1003.82 579.555 -310.583, + 819.615 819.615 -310.583, + 579.555 1003.82 -310.583, + 300 1119.62 -310.583, + 7.09751e-14 1159.11 -310.583, + -300 1119.62 -310.583, + -579.555 1003.82 -310.583, + -819.615 819.615 -310.583, + -1003.82 579.555 -310.583, + -1119.62 300 -310.583, + -1159.11 1.4195e-13 -310.583, + 1039.23 7.182e-307 -600, + 1003.82 268.973 -600, + 900 519.615 -600, + 734.847 734.847 -600, + 519.615 900 -600, + 268.973 1003.82 -600, + 6.36345e-14 1039.23 -600, + -268.973 1003.82 -600, + -519.615 900 -600, + -734.847 734.847 -600, + -900 519.615 -600, + -1003.82 268.973 -600, + -1039.23 1.27269e-13 -600, + 848.528 5.86408e-307 -848.528, + 819.615 219.615 -848.528, + 734.847 424.264 -848.528, + 600 600 -848.528, + 424.264 734.847 -848.528, + 219.615 819.615 -848.528, + 5.19574e-14 848.528 -848.528, + -219.615 819.615 -848.528, + -424.264 734.847 -848.528, + -600 600 -848.528, + -734.847 424.264 -848.528, + -819.615 219.615 -848.528, + -848.528 1.03915e-13 -848.528, + 600 4.14653e-307 -1039.23, + 579.555 155.291 -1039.23, + 519.615 300 -1039.23, + 424.264 424.264 -1039.23, + 300 519.615 -1039.23, + 155.291 579.555 -1039.23, + 3.67394e-14 600 -1039.23, + -155.291 579.555 -1039.23, + -300 519.615 -1039.23, + -424.264 424.264 -1039.23, + -519.615 300 -1039.23, + -579.555 155.291 -1039.23, + -600 7.34788e-14 -1039.23, + 310.583 2.1464e-307 -1159.11, + 300 80.3848 -1159.11, + 268.973 155.291 -1159.11, + 219.615 219.615 -1159.11, + 155.291 268.973 -1159.11, + 80.3848 300 -1159.11, + 1.90177e-14 310.583 -1159.11, + -80.3848 300 -1159.11, + -155.291 268.973 -1159.11, + -219.615 219.615 -1159.11, + -268.973 155.291 -1159.11, + -300 80.3848 -1159.11, + -310.583 3.80354e-14 -1159.11, + 0 0 -1200, + 0 0 1000, + 258.819 1.78867e-307 965.926, + 250 66.9873 965.926, + 224.144 129.41 965.926, + 183.013 183.013 965.926, + 129.41 224.144 965.926, + 66.9873 250 965.926, + 1.58481e-14 258.819 965.926, + -66.9873 250 965.926, + -129.41 224.144 965.926, + -183.013 183.013 965.926, + -224.144 129.41 965.926, + -250 66.9873 965.926, + -258.819 3.16962e-14 965.926, + 500 3.45544e-307 866.025, + 482.963 129.41 866.025, + 433.013 250 866.025, + 353.553 353.553 866.025, + 250 433.013 866.025, + 129.41 482.963 866.025, + 3.06162e-14 500 866.025, + -129.41 482.963 866.025, + -250 433.013 866.025, + -353.553 353.553 866.025, + -433.013 250 866.025, + -482.963 129.41 866.025, + -500 6.12323e-14 866.025, + 707.107 4.88673e-307 707.107, + 683.013 183.013 707.107, + 612.372 353.553 707.107, + 500 500 707.107, + 353.553 612.372 707.107, + 183.013 683.013 707.107, + 4.32978e-14 707.107 707.107, + -183.013 683.013 707.107, + -353.553 612.372 707.107, + -500 500 707.107, + -612.372 353.553 707.107, + -683.013 183.013 707.107, + -707.107 8.65956e-14 707.107, + 866.025 5.985e-307 500, + 836.516 224.144 500, + 750 433.013 500, + 612.372 612.372 500, + 433.013 750 500, + 224.144 836.516 500, + 5.30288e-14 866.025 500, + -224.144 836.516 500, + -433.013 750 500, + -612.372 612.372 500, + -750 433.013 500, + -836.516 224.144 500, + -866.025 1.06058e-13 500, + 965.926 6.6754e-307 258.819, + 933.013 250 258.819, + 836.516 482.963 258.819, + 683.013 683.013 258.819, + 482.963 836.516 258.819, + 250 933.013 258.819, + 5.91459e-14 965.926 258.819, + -250 933.013 258.819, + -482.963 836.516 258.819, + -683.013 683.013 258.819, + -836.516 482.963 258.819, + -933.013 250 258.819, + -965.926 1.18292e-13 258.819, + 1000 6.91088e-307 6.12323e-14, + 965.926 258.819 6.12323e-14, + 866.025 500 6.12323e-14, + 707.107 707.107 6.12323e-14, + 500 866.025 6.12323e-14, + 258.819 965.926 6.12323e-14, + 6.12323e-14 1000 6.12323e-14, + -258.819 965.926 6.12323e-14, + -500 866.025 6.12323e-14, + -707.107 707.107 6.12323e-14, + -866.025 500 6.12323e-14, + -965.926 258.819 6.12323e-14, + -1000 1.22465e-13 6.12323e-14, + 965.926 6.6754e-307 -258.819, + 933.013 250 -258.819, + 836.516 482.963 -258.819, + 683.013 683.013 -258.819, + 482.963 836.516 -258.819, + 250 933.013 -258.819, + 5.91459e-14 965.926 -258.819, + -250 933.013 -258.819, + -482.963 836.516 -258.819, + -683.013 683.013 -258.819, + -836.516 482.963 -258.819, + -933.013 250 -258.819, + -965.926 1.18292e-13 -258.819, + 866.025 5.985e-307 -500, + 836.516 224.144 -500, + 750 433.013 -500, + 612.372 612.372 -500, + 433.013 750 -500, + 224.144 836.516 -500, + 5.30288e-14 866.025 -500, + -224.144 836.516 -500, + -433.013 750 -500, + -612.372 612.372 -500, + -750 433.013 -500, + -836.516 224.144 -500, + -866.025 1.06058e-13 -500, + 707.107 4.88673e-307 -707.107, + 683.013 183.013 -707.107, + 612.372 353.553 -707.107, + 500 500 -707.107, + 353.553 612.372 -707.107, + 183.013 683.013 -707.107, + 4.32978e-14 707.107 -707.107, + -183.013 683.013 -707.107, + -353.553 612.372 -707.107, + -500 500 -707.107, + -612.372 353.553 -707.107, + -683.013 183.013 -707.107, + -707.107 8.65956e-14 -707.107, + 500 3.45544e-307 -866.025, + 482.963 129.41 -866.025, + 433.013 250 -866.025, + 353.553 353.553 -866.025, + 250 433.013 -866.025, + 129.41 482.963 -866.025, + 3.06162e-14 500 -866.025, + -129.41 482.963 -866.025, + -250 433.013 -866.025, + -353.553 353.553 -866.025, + -433.013 250 -866.025, + -482.963 129.41 -866.025, + -500 6.12323e-14 -866.025, + 258.819 1.78867e-307 -965.926, + 250 66.9873 -965.926, + 224.144 129.41 -965.926, + 183.013 183.013 -965.926, + 129.41 224.144 -965.926, + 66.9873 250 -965.926, + 1.58481e-14 258.819 -965.926, + -66.9873 250 -965.926, + -129.41 224.144 -965.926, + -183.013 183.013 -965.926, + -224.144 129.41 -965.926, + -250 66.9873 -965.926, + -258.819 3.16962e-14 -965.926, + 0 0 -1000, + ] + } + coordIndex [ + 0, 1, 2, -1, + 0, 2, 3, -1, + 0, 3, 4, -1, + 0, 4, 5, -1, + 0, 5, 6, -1, + 0, 6, 7, -1, + 0, 7, 8, -1, + 0, 8, 9, -1, + 0, 9, 10, -1, + 0, 10, 11, -1, + 0, 11, 12, -1, + 0, 12, 13, -1, + 1, 14, 15, 2, -1, + 2, 15, 16, 3, -1, + 3, 16, 17, 4, -1, + 4, 17, 18, 5, -1, + 5, 18, 19, 6, -1, + 6, 19, 20, 7, -1, + 7, 20, 21, 8, -1, + 8, 21, 22, 9, -1, + 9, 22, 23, 10, -1, + 10, 23, 24, 11, -1, + 11, 24, 25, 12, -1, + 12, 25, 26, 13, -1, + 14, 27, 28, 15, -1, + 15, 28, 29, 16, -1, + 16, 29, 30, 17, -1, + 17, 30, 31, 18, -1, + 18, 31, 32, 19, -1, + 19, 32, 33, 20, -1, + 20, 33, 34, 21, -1, + 21, 34, 35, 22, -1, + 22, 35, 36, 23, -1, + 23, 36, 37, 24, -1, + 24, 37, 38, 25, -1, + 25, 38, 39, 26, -1, + 27, 40, 41, 28, -1, + 28, 41, 42, 29, -1, + 29, 42, 43, 30, -1, + 30, 43, 44, 31, -1, + 31, 44, 45, 32, -1, + 32, 45, 46, 33, -1, + 33, 46, 47, 34, -1, + 34, 47, 48, 35, -1, + 35, 48, 49, 36, -1, + 36, 49, 50, 37, -1, + 37, 50, 51, 38, -1, + 38, 51, 52, 39, -1, + 40, 53, 54, 41, -1, + 41, 54, 55, 42, -1, + 42, 55, 56, 43, -1, + 43, 56, 57, 44, -1, + 44, 57, 58, 45, -1, + 45, 58, 59, 46, -1, + 46, 59, 60, 47, -1, + 47, 60, 61, 48, -1, + 48, 61, 62, 49, -1, + 49, 62, 63, 50, -1, + 50, 63, 64, 51, -1, + 51, 64, 65, 52, -1, + 53, 66, 67, 54, -1, + 54, 67, 68, 55, -1, + 55, 68, 69, 56, -1, + 56, 69, 70, 57, -1, + 57, 70, 71, 58, -1, + 58, 71, 72, 59, -1, + 59, 72, 73, 60, -1, + 60, 73, 74, 61, -1, + 61, 74, 75, 62, -1, + 62, 75, 76, 63, -1, + 63, 76, 77, 64, -1, + 64, 77, 78, 65, -1, + 66, 79, 80, 67, -1, + 67, 80, 81, 68, -1, + 68, 81, 82, 69, -1, + 69, 82, 83, 70, -1, + 70, 83, 84, 71, -1, + 71, 84, 85, 72, -1, + 72, 85, 86, 73, -1, + 73, 86, 87, 74, -1, + 74, 87, 88, 75, -1, + 75, 88, 89, 76, -1, + 76, 89, 90, 77, -1, + 77, 90, 91, 78, -1, + 79, 92, 93, 80, -1, + 80, 93, 94, 81, -1, + 81, 94, 95, 82, -1, + 82, 95, 96, 83, -1, + 83, 96, 97, 84, -1, + 84, 97, 98, 85, -1, + 85, 98, 99, 86, -1, + 86, 99, 100, 87, -1, + 87, 100, 101, 88, -1, + 88, 101, 102, 89, -1, + 89, 102, 103, 90, -1, + 90, 103, 104, 91, -1, + 92, 105, 106, 93, -1, + 93, 106, 107, 94, -1, + 94, 107, 108, 95, -1, + 95, 108, 109, 96, -1, + 96, 109, 110, 97, -1, + 97, 110, 111, 98, -1, + 98, 111, 112, 99, -1, + 99, 112, 113, 100, -1, + 100, 113, 114, 101, -1, + 101, 114, 115, 102, -1, + 102, 115, 116, 103, -1, + 103, 116, 117, 104, -1, + 105, 118, 119, 106, -1, + 106, 119, 120, 107, -1, + 107, 120, 121, 108, -1, + 108, 121, 122, 109, -1, + 109, 122, 123, 110, -1, + 110, 123, 124, 111, -1, + 111, 124, 125, 112, -1, + 112, 125, 126, 113, -1, + 113, 126, 127, 114, -1, + 114, 127, 128, 115, -1, + 115, 128, 129, 116, -1, + 116, 129, 130, 117, -1, + 118, 131, 132, 119, -1, + 119, 132, 133, 120, -1, + 120, 133, 134, 121, -1, + 121, 134, 135, 122, -1, + 122, 135, 136, 123, -1, + 123, 136, 137, 124, -1, + 124, 137, 138, 125, -1, + 125, 138, 139, 126, -1, + 126, 139, 140, 127, -1, + 127, 140, 141, 128, -1, + 128, 141, 142, 129, -1, + 129, 142, 143, 130, -1, + 131, 144, 132, -1, + 132, 144, 133, -1, + 133, 144, 134, -1, + 134, 144, 135, -1, + 135, 144, 136, -1, + 136, 144, 137, -1, + 137, 144, 138, -1, + 138, 144, 139, -1, + 139, 144, 140, -1, + 140, 144, 141, -1, + 141, 144, 142, -1, + 142, 144, 143, -1, + 146, 145, 147, -1, + 147, 145, 148, -1, + 148, 145, 149, -1, + 149, 145, 150, -1, + 150, 145, 151, -1, + 151, 145, 152, -1, + 152, 145, 153, -1, + 153, 145, 154, -1, + 154, 145, 155, -1, + 155, 145, 156, -1, + 156, 145, 157, -1, + 157, 145, 158, -1, + 159, 146, 147, 160, -1, + 160, 147, 148, 161, -1, + 161, 148, 149, 162, -1, + 162, 149, 150, 163, -1, + 163, 150, 151, 164, -1, + 164, 151, 152, 165, -1, + 165, 152, 153, 166, -1, + 166, 153, 154, 167, -1, + 167, 154, 155, 168, -1, + 168, 155, 156, 169, -1, + 169, 156, 157, 170, -1, + 170, 157, 158, 171, -1, + 172, 159, 160, 173, -1, + 173, 160, 161, 174, -1, + 174, 161, 162, 175, -1, + 175, 162, 163, 176, -1, + 176, 163, 164, 177, -1, + 177, 164, 165, 178, -1, + 178, 165, 166, 179, -1, + 179, 166, 167, 180, -1, + 180, 167, 168, 181, -1, + 181, 168, 169, 182, -1, + 182, 169, 170, 183, -1, + 183, 170, 171, 184, -1, + 185, 172, 173, 186, -1, + 186, 173, 174, 187, -1, + 187, 174, 175, 188, -1, + 188, 175, 176, 189, -1, + 189, 176, 177, 190, -1, + 190, 177, 178, 191, -1, + 191, 178, 179, 192, -1, + 192, 179, 180, 193, -1, + 193, 180, 181, 194, -1, + 194, 181, 182, 195, -1, + 195, 182, 183, 196, -1, + 196, 183, 184, 197, -1, + 198, 185, 186, 199, -1, + 199, 186, 187, 200, -1, + 200, 187, 188, 201, -1, + 201, 188, 189, 202, -1, + 202, 189, 190, 203, -1, + 203, 190, 191, 204, -1, + 204, 191, 192, 205, -1, + 205, 192, 193, 206, -1, + 206, 193, 194, 207, -1, + 207, 194, 195, 208, -1, + 208, 195, 196, 209, -1, + 209, 196, 197, 210, -1, + 211, 198, 199, 212, -1, + 212, 199, 200, 213, -1, + 213, 200, 201, 214, -1, + 214, 201, 202, 215, -1, + 215, 202, 203, 216, -1, + 216, 203, 204, 217, -1, + 217, 204, 205, 218, -1, + 218, 205, 206, 219, -1, + 219, 206, 207, 220, -1, + 220, 207, 208, 221, -1, + 221, 208, 209, 222, -1, + 222, 209, 210, 223, -1, + 224, 211, 212, 225, -1, + 225, 212, 213, 226, -1, + 226, 213, 214, 227, -1, + 227, 214, 215, 228, -1, + 228, 215, 216, 229, -1, + 229, 216, 217, 230, -1, + 230, 217, 218, 231, -1, + 231, 218, 219, 232, -1, + 232, 219, 220, 233, -1, + 233, 220, 221, 234, -1, + 234, 221, 222, 235, -1, + 235, 222, 223, 236, -1, + 237, 224, 225, 238, -1, + 238, 225, 226, 239, -1, + 239, 226, 227, 240, -1, + 240, 227, 228, 241, -1, + 241, 228, 229, 242, -1, + 242, 229, 230, 243, -1, + 243, 230, 231, 244, -1, + 244, 231, 232, 245, -1, + 245, 232, 233, 246, -1, + 246, 233, 234, 247, -1, + 247, 234, 235, 248, -1, + 248, 235, 236, 249, -1, + 250, 237, 238, 251, -1, + 251, 238, 239, 252, -1, + 252, 239, 240, 253, -1, + 253, 240, 241, 254, -1, + 254, 241, 242, 255, -1, + 255, 242, 243, 256, -1, + 256, 243, 244, 257, -1, + 257, 244, 245, 258, -1, + 258, 245, 246, 259, -1, + 259, 246, 247, 260, -1, + 260, 247, 248, 261, -1, + 261, 248, 249, 262, -1, + 263, 250, 251, 264, -1, + 264, 251, 252, 265, -1, + 265, 252, 253, 266, -1, + 266, 253, 254, 267, -1, + 267, 254, 255, 268, -1, + 268, 255, 256, 269, -1, + 269, 256, 257, 270, -1, + 270, 257, 258, 271, -1, + 271, 258, 259, 272, -1, + 272, 259, 260, 273, -1, + 273, 260, 261, 274, -1, + 274, 261, 262, 275, -1, + 276, 263, 264, 277, -1, + 277, 264, 265, 278, -1, + 278, 265, 266, 279, -1, + 279, 266, 267, 280, -1, + 280, 267, 268, 281, -1, + 281, 268, 269, 282, -1, + 282, 269, 270, 283, -1, + 283, 270, 271, 284, -1, + 284, 271, 272, 285, -1, + 285, 272, 273, 286, -1, + 286, 273, 274, 287, -1, + 287, 274, 275, 288, -1, + 289, 276, 277, -1, + 289, 277, 278, -1, + 289, 278, 279, -1, + 289, 279, 280, -1, + 289, 280, 281, -1, + 289, 281, 282, -1, + 289, 282, 283, -1, + 289, 283, 284, -1, + 289, 284, 285, -1, + 289, 285, 286, -1, + 289, 286, 287, -1, + 289, 287, 288, -1, + 0, 145, 146, 1, -1, + 13, 158, 145, 0, -1, + 1, 146, 159, 14, -1, + 26, 171, 158, 13, -1, + 14, 159, 172, 27, -1, + 39, 184, 171, 26, -1, + 27, 172, 185, 40, -1, + 52, 197, 184, 39, -1, + 40, 185, 198, 53, -1, + 65, 210, 197, 52, -1, + 53, 198, 211, 66, -1, + 78, 223, 210, 65, -1, + 66, 211, 224, 79, -1, + 91, 236, 223, 78, -1, + 79, 224, 237, 92, -1, + 104, 249, 236, 91, -1, + 92, 237, 250, 105, -1, + 117, 262, 249, 104, -1, + 105, 250, 263, 118, -1, + 130, 275, 262, 117, -1, + 118, 263, 276, 131, -1, + 143, 288, 275, 130, -1, + 131, 276, 289, 144, -1, + 144, 289, 288, 143, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4tet.wrl b/environments/g4py/tests/gtest05/vrml/g4tet.wrl new file mode 100644 index 0000000000..1259f8f3b9 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4tet.wrl @@ -0,0 +1,96 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 0 0 346.41, + 0 326.599 -115.47, + 282.843 -163.299 -115.47, + -282.843 -163.299 -115.47, + ] + } + coordIndex [ + 0, 2, 1, -1, + 0, 3, 2, -1, + 0, 1, 3, -1, + 1, 2, 3, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4torus.wrl b/environments/g4py/tests/gtest05/vrml/g4torus.wrl new file mode 100644 index 0000000000..3d3edcce0f --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4torus.wrl @@ -0,0 +1,760 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 2000 0 600, + 1931.85 517.638 600, + 1732.05 1000 600, + 1414.21 1414.21 600, + 1000 1732.05 600, + 517.638 1931.85 600, + 1.22465e-13 2000 600, + 2155.29 0 579.555, + 2081.85 557.83 579.555, + 1866.54 1077.65 579.555, + 1524.02 1524.02 579.555, + 1077.65 1866.54 579.555, + 557.83 2081.85 579.555, + 1.31974e-13 2155.29 579.555, + 2300 0 519.615, + 2221.63 595.284 519.615, + 1991.86 1150 519.615, + 1626.35 1626.35 519.615, + 1150 1991.86 519.615, + 595.284 2221.63 519.615, + 1.40834e-13 2300 519.615, + 2424.26 0 424.264, + 2341.66 627.446 424.264, + 2099.47 1212.13 424.264, + 1714.21 1714.21 424.264, + 1212.13 2099.47 424.264, + 627.446 2341.66 424.264, + 1.48443e-13 2424.26 424.264, + 2519.62 0 300, + 2433.76 652.124 300, + 2182.05 1259.81 300, + 1781.64 1781.64 300, + 1259.81 2182.05 300, + 652.124 2433.76 300, + 1.54282e-13 2519.62 300, + 2579.56 0 155.291, + 2491.66 667.638 155.291, + 2233.96 1289.78 155.291, + 1824.02 1824.02 155.291, + 1289.78 2233.96 155.291, + 667.638 2491.66 155.291, + 1.57952e-13 2579.56 155.291, + 2600 0 3.67394e-14, + 2511.41 672.93 3.67394e-14, + 2251.67 1300 3.67394e-14, + 1838.48 1838.48 3.67394e-14, + 1300 2251.67 3.67394e-14, + 672.93 2511.41 3.67394e-14, + 1.59204e-13 2600 3.67394e-14, + 2579.56 0 -155.291, + 2491.66 667.638 -155.291, + 2233.96 1289.78 -155.291, + 1824.02 1824.02 -155.291, + 1289.78 2233.96 -155.291, + 667.638 2491.66 -155.291, + 1.57952e-13 2579.56 -155.291, + 2519.62 0 -300, + 2433.76 652.124 -300, + 2182.05 1259.81 -300, + 1781.64 1781.64 -300, + 1259.81 2182.05 -300, + 652.124 2433.76 -300, + 1.54282e-13 2519.62 -300, + 2424.26 0 -424.264, + 2341.66 627.446 -424.264, + 2099.47 1212.13 -424.264, + 1714.21 1714.21 -424.264, + 1212.13 2099.47 -424.264, + 627.446 2341.66 -424.264, + 1.48443e-13 2424.26 -424.264, + 2300 0 -519.615, + 2221.63 595.284 -519.615, + 1991.86 1150 -519.615, + 1626.35 1626.35 -519.615, + 1150 1991.86 -519.615, + 595.284 2221.63 -519.615, + 1.40834e-13 2300 -519.615, + 2155.29 0 -579.555, + 2081.85 557.83 -579.555, + 1866.54 1077.65 -579.555, + 1524.02 1524.02 -579.555, + 1077.65 1866.54 -579.555, + 557.83 2081.85 -579.555, + 1.31974e-13 2155.29 -579.555, + 2000 0 -600, + 1931.85 517.638 -600, + 1732.05 1000 -600, + 1414.21 1414.21 -600, + 1000 1732.05 -600, + 517.638 1931.85 -600, + 1.22465e-13 2000 -600, + 1844.71 0 -579.555, + 1781.85 477.446 -579.555, + 1597.56 922.354 -579.555, + 1304.41 1304.41 -579.555, + 922.354 1597.56 -579.555, + 477.446 1781.85 -579.555, + 1.12956e-13 1844.71 -579.555, + 1700 0 -519.615, + 1642.07 439.992 -519.615, + 1472.24 850 -519.615, + 1202.08 1202.08 -519.615, + 850 1472.24 -519.615, + 439.992 1642.07 -519.615, + 1.04095e-13 1700 -519.615, + 1575.74 0 -424.264, + 1522.04 407.83 -424.264, + 1364.63 787.868 -424.264, + 1114.21 1114.21 -424.264, + 787.868 1364.63 -424.264, + 407.83 1522.04 -424.264, + 9.6486e-14 1575.74 -424.264, + 1480.38 0 -300, + 1429.94 383.152 -300, + 1282.05 740.192 -300, + 1046.79 1046.79 -300, + 740.192 1282.05 -300, + 383.152 1429.94 -300, + 9.06474e-14 1480.38 -300, + 1420.44 0 -155.291, + 1372.04 367.638 -155.291, + 1230.14 710.222 -155.291, + 1004.41 1004.41 -155.291, + 710.222 1230.14 -155.291, + 367.638 1372.04 -155.291, + 8.69771e-14 1420.44 -155.291, + 1400 0 -1.10218e-13, + 1352.3 362.347 -1.10218e-13, + 1212.44 700 -1.10218e-13, + 989.949 989.949 -1.10218e-13, + 700 1212.44 -1.10218e-13, + 362.347 1352.3 -1.10218e-13, + 8.57253e-14 1400 -1.10218e-13, + 1420.44 0 155.291, + 1372.04 367.638 155.291, + 1230.14 710.222 155.291, + 1004.41 1004.41 155.291, + 710.222 1230.14 155.291, + 367.638 1372.04 155.291, + 8.69771e-14 1420.44 155.291, + 1480.38 0 300, + 1429.94 383.152 300, + 1282.05 740.192 300, + 1046.79 1046.79 300, + 740.192 1282.05 300, + 383.152 1429.94 300, + 9.06474e-14 1480.38 300, + 1575.74 0 424.264, + 1522.04 407.83 424.264, + 1364.63 787.868 424.264, + 1114.21 1114.21 424.264, + 787.868 1364.63 424.264, + 407.83 1522.04 424.264, + 9.6486e-14 1575.74 424.264, + 1700 0 519.615, + 1642.07 439.992 519.615, + 1472.24 850 519.615, + 1202.08 1202.08 519.615, + 850 1472.24 519.615, + 439.992 1642.07 519.615, + 1.04095e-13 1700 519.615, + 1844.71 0 579.555, + 1781.85 477.446 579.555, + 1597.56 922.354 579.555, + 1304.41 1304.41 579.555, + 922.354 1597.56 579.555, + 477.446 1781.85 579.555, + 1.12956e-13 1844.71 579.555, + 2000 0 400, + 1931.85 517.638 400, + 1732.05 1000 400, + 1414.21 1414.21 400, + 1000 1732.05 400, + 517.638 1931.85 400, + 1.22465e-13 2000 400, + 2103.53 0 386.37, + 2031.85 544.433 386.37, + 1821.71 1051.76 386.37, + 1487.42 1487.42 386.37, + 1051.76 1821.71 386.37, + 544.433 2031.85 386.37, + 1.28804e-13 2103.53 386.37, + 2200 0 346.41, + 2125.04 569.402 346.41, + 1905.26 1100 346.41, + 1555.63 1555.63 346.41, + 1100 1905.26 346.41, + 569.402 2125.04 346.41, + 1.34711e-13 2200 346.41, + 2282.84 0 282.843, + 2205.06 590.843 282.843, + 1977 1141.42 282.843, + 1614.21 1614.21 282.843, + 1141.42 1977 282.843, + 590.843 2205.06 282.843, + 1.39784e-13 2282.84 282.843, + 2346.41 0 200, + 2266.46 607.296 200, + 2032.05 1173.21 200, + 1659.16 1659.16 200, + 1173.21 2032.05 200, + 607.296 2266.46 200, + 1.43676e-13 2346.41 200, + 2386.37 0 103.528, + 2305.06 617.638 103.528, + 2066.66 1193.19 103.528, + 1687.42 1687.42 103.528, + 1193.19 2066.66 103.528, + 617.638 2305.06 103.528, + 1.46123e-13 2386.37 103.528, + 2400 0 2.44929e-14, + 2318.22 621.166 2.44929e-14, + 2078.46 1200 2.44929e-14, + 1697.06 1697.06 2.44929e-14, + 1200 2078.46 2.44929e-14, + 621.166 2318.22 2.44929e-14, + 1.46958e-13 2400 2.44929e-14, + 2386.37 0 -103.528, + 2305.06 617.638 -103.528, + 2066.66 1193.19 -103.528, + 1687.42 1687.42 -103.528, + 1193.19 2066.66 -103.528, + 617.638 2305.06 -103.528, + 1.46123e-13 2386.37 -103.528, + 2346.41 0 -200, + 2266.46 607.296 -200, + 2032.05 1173.21 -200, + 1659.16 1659.16 -200, + 1173.21 2032.05 -200, + 607.296 2266.46 -200, + 1.43676e-13 2346.41 -200, + 2282.84 0 -282.843, + 2205.06 590.843 -282.843, + 1977 1141.42 -282.843, + 1614.21 1614.21 -282.843, + 1141.42 1977 -282.843, + 590.843 2205.06 -282.843, + 1.39784e-13 2282.84 -282.843, + 2200 0 -346.41, + 2125.04 569.402 -346.41, + 1905.26 1100 -346.41, + 1555.63 1555.63 -346.41, + 1100 1905.26 -346.41, + 569.402 2125.04 -346.41, + 1.34711e-13 2200 -346.41, + 2103.53 0 -386.37, + 2031.85 544.433 -386.37, + 1821.71 1051.76 -386.37, + 1487.42 1487.42 -386.37, + 1051.76 1821.71 -386.37, + 544.433 2031.85 -386.37, + 1.28804e-13 2103.53 -386.37, + 2000 0 -400, + 1931.85 517.638 -400, + 1732.05 1000 -400, + 1414.21 1414.21 -400, + 1000 1732.05 -400, + 517.638 1931.85 -400, + 1.22465e-13 2000 -400, + 1896.47 0 -386.37, + 1831.85 490.843 -386.37, + 1642.39 948.236 -386.37, + 1341.01 1341.01 -386.37, + 948.236 1642.39 -386.37, + 490.843 1831.85 -386.37, + 1.16125e-13 1896.47 -386.37, + 1800 0 -346.41, + 1738.67 465.874 -346.41, + 1558.85 900 -346.41, + 1272.79 1272.79 -346.41, + 900 1558.85 -346.41, + 465.874 1738.67 -346.41, + 1.10218e-13 1800 -346.41, + 1717.16 0 -282.843, + 1658.65 444.433 -282.843, + 1487.1 858.579 -282.843, + 1214.21 1214.21 -282.843, + 858.579 1487.1 -282.843, + 444.433 1658.65 -282.843, + 1.05146e-13 1717.16 -282.843, + 1653.59 0 -200, + 1597.25 427.981 -200, + 1432.05 826.795 -200, + 1169.26 1169.26 -200, + 826.795 1432.05 -200, + 427.981 1597.25 -200, + 1.01253e-13 1653.59 -200, + 1613.63 0 -103.528, + 1558.65 417.638 -103.528, + 1397.44 806.815 -103.528, + 1141.01 1141.01 -103.528, + 806.815 1397.44 -103.528, + 417.638 1558.65 -103.528, + 9.88063e-14 1613.63 -103.528, + 1600 0 -7.34788e-14, + 1545.48 414.11 -7.34788e-14, + 1385.64 800 -7.34788e-14, + 1131.37 1131.37 -7.34788e-14, + 800 1385.64 -7.34788e-14, + 414.11 1545.48 -7.34788e-14, + 9.79717e-14 1600 -7.34788e-14, + 1613.63 0 103.528, + 1558.65 417.638 103.528, + 1397.44 806.815 103.528, + 1141.01 1141.01 103.528, + 806.815 1397.44 103.528, + 417.638 1558.65 103.528, + 9.88063e-14 1613.63 103.528, + 1653.59 0 200, + 1597.25 427.981 200, + 1432.05 826.795 200, + 1169.26 1169.26 200, + 826.795 1432.05 200, + 427.981 1597.25 200, + 1.01253e-13 1653.59 200, + 1717.16 0 282.843, + 1658.65 444.433 282.843, + 1487.1 858.579 282.843, + 1214.21 1214.21 282.843, + 858.579 1487.1 282.843, + 444.433 1658.65 282.843, + 1.05146e-13 1717.16 282.843, + 1800 0 346.41, + 1738.67 465.874 346.41, + 1558.85 900 346.41, + 1272.79 1272.79 346.41, + 900 1558.85 346.41, + 465.874 1738.67 346.41, + 1.10218e-13 1800 346.41, + 1896.47 0 386.37, + 1831.85 490.843 386.37, + 1642.39 948.236 386.37, + 1341.01 1341.01 386.37, + 948.236 1642.39 386.37, + 490.843 1831.85 386.37, + 1.16125e-13 1896.47 386.37, + ] + } + coordIndex [ + 0, 7, 8, 1, -1, + 1, 8, 9, 2, -1, + 2, 9, 10, 3, -1, + 3, 10, 11, 4, -1, + 4, 11, 12, 5, -1, + 5, 12, 13, 6, -1, + 7, 14, 15, 8, -1, + 8, 15, 16, 9, -1, + 9, 16, 17, 10, -1, + 10, 17, 18, 11, -1, + 11, 18, 19, 12, -1, + 12, 19, 20, 13, -1, + 14, 21, 22, 15, -1, + 15, 22, 23, 16, -1, + 16, 23, 24, 17, -1, + 17, 24, 25, 18, -1, + 18, 25, 26, 19, -1, + 19, 26, 27, 20, -1, + 21, 28, 29, 22, -1, + 22, 29, 30, 23, -1, + 23, 30, 31, 24, -1, + 24, 31, 32, 25, -1, + 25, 32, 33, 26, -1, + 26, 33, 34, 27, -1, + 28, 35, 36, 29, -1, + 29, 36, 37, 30, -1, + 30, 37, 38, 31, -1, + 31, 38, 39, 32, -1, + 32, 39, 40, 33, -1, + 33, 40, 41, 34, -1, + 35, 42, 43, 36, -1, + 36, 43, 44, 37, -1, + 37, 44, 45, 38, -1, + 38, 45, 46, 39, -1, + 39, 46, 47, 40, -1, + 40, 47, 48, 41, -1, + 42, 49, 50, 43, -1, + 43, 50, 51, 44, -1, + 44, 51, 52, 45, -1, + 45, 52, 53, 46, -1, + 46, 53, 54, 47, -1, + 47, 54, 55, 48, -1, + 49, 56, 57, 50, -1, + 50, 57, 58, 51, -1, + 51, 58, 59, 52, -1, + 52, 59, 60, 53, -1, + 53, 60, 61, 54, -1, + 54, 61, 62, 55, -1, + 56, 63, 64, 57, -1, + 57, 64, 65, 58, -1, + 58, 65, 66, 59, -1, + 59, 66, 67, 60, -1, + 60, 67, 68, 61, -1, + 61, 68, 69, 62, -1, + 63, 70, 71, 64, -1, + 64, 71, 72, 65, -1, + 65, 72, 73, 66, -1, + 66, 73, 74, 67, -1, + 67, 74, 75, 68, -1, + 68, 75, 76, 69, -1, + 70, 77, 78, 71, -1, + 71, 78, 79, 72, -1, + 72, 79, 80, 73, -1, + 73, 80, 81, 74, -1, + 74, 81, 82, 75, -1, + 75, 82, 83, 76, -1, + 77, 84, 85, 78, -1, + 78, 85, 86, 79, -1, + 79, 86, 87, 80, -1, + 80, 87, 88, 81, -1, + 81, 88, 89, 82, -1, + 82, 89, 90, 83, -1, + 84, 91, 92, 85, -1, + 85, 92, 93, 86, -1, + 86, 93, 94, 87, -1, + 87, 94, 95, 88, -1, + 88, 95, 96, 89, -1, + 89, 96, 97, 90, -1, + 91, 98, 99, 92, -1, + 92, 99, 100, 93, -1, + 93, 100, 101, 94, -1, + 94, 101, 102, 95, -1, + 95, 102, 103, 96, -1, + 96, 103, 104, 97, -1, + 98, 105, 106, 99, -1, + 99, 106, 107, 100, -1, + 100, 107, 108, 101, -1, + 101, 108, 109, 102, -1, + 102, 109, 110, 103, -1, + 103, 110, 111, 104, -1, + 105, 112, 113, 106, -1, + 106, 113, 114, 107, -1, + 107, 114, 115, 108, -1, + 108, 115, 116, 109, -1, + 109, 116, 117, 110, -1, + 110, 117, 118, 111, -1, + 112, 119, 120, 113, -1, + 113, 120, 121, 114, -1, + 114, 121, 122, 115, -1, + 115, 122, 123, 116, -1, + 116, 123, 124, 117, -1, + 117, 124, 125, 118, -1, + 119, 126, 127, 120, -1, + 120, 127, 128, 121, -1, + 121, 128, 129, 122, -1, + 122, 129, 130, 123, -1, + 123, 130, 131, 124, -1, + 124, 131, 132, 125, -1, + 126, 133, 134, 127, -1, + 127, 134, 135, 128, -1, + 128, 135, 136, 129, -1, + 129, 136, 137, 130, -1, + 130, 137, 138, 131, -1, + 131, 138, 139, 132, -1, + 133, 140, 141, 134, -1, + 134, 141, 142, 135, -1, + 135, 142, 143, 136, -1, + 136, 143, 144, 137, -1, + 137, 144, 145, 138, -1, + 138, 145, 146, 139, -1, + 140, 147, 148, 141, -1, + 141, 148, 149, 142, -1, + 142, 149, 150, 143, -1, + 143, 150, 151, 144, -1, + 144, 151, 152, 145, -1, + 145, 152, 153, 146, -1, + 147, 154, 155, 148, -1, + 148, 155, 156, 149, -1, + 149, 156, 157, 150, -1, + 150, 157, 158, 151, -1, + 151, 158, 159, 152, -1, + 152, 159, 160, 153, -1, + 154, 161, 162, 155, -1, + 155, 162, 163, 156, -1, + 156, 163, 164, 157, -1, + 157, 164, 165, 158, -1, + 158, 165, 166, 159, -1, + 159, 166, 167, 160, -1, + 161, 0, 1, 162, -1, + 162, 1, 2, 163, -1, + 163, 2, 3, 164, -1, + 164, 3, 4, 165, -1, + 165, 4, 5, 166, -1, + 166, 5, 6, 167, -1, + 175, 168, 169, 176, -1, + 176, 169, 170, 177, -1, + 177, 170, 171, 178, -1, + 178, 171, 172, 179, -1, + 179, 172, 173, 180, -1, + 180, 173, 174, 181, -1, + 182, 175, 176, 183, -1, + 183, 176, 177, 184, -1, + 184, 177, 178, 185, -1, + 185, 178, 179, 186, -1, + 186, 179, 180, 187, -1, + 187, 180, 181, 188, -1, + 189, 182, 183, 190, -1, + 190, 183, 184, 191, -1, + 191, 184, 185, 192, -1, + 192, 185, 186, 193, -1, + 193, 186, 187, 194, -1, + 194, 187, 188, 195, -1, + 196, 189, 190, 197, -1, + 197, 190, 191, 198, -1, + 198, 191, 192, 199, -1, + 199, 192, 193, 200, -1, + 200, 193, 194, 201, -1, + 201, 194, 195, 202, -1, + 203, 196, 197, 204, -1, + 204, 197, 198, 205, -1, + 205, 198, 199, 206, -1, + 206, 199, 200, 207, -1, + 207, 200, 201, 208, -1, + 208, 201, 202, 209, -1, + 210, 203, 204, 211, -1, + 211, 204, 205, 212, -1, + 212, 205, 206, 213, -1, + 213, 206, 207, 214, -1, + 214, 207, 208, 215, -1, + 215, 208, 209, 216, -1, + 217, 210, 211, 218, -1, + 218, 211, 212, 219, -1, + 219, 212, 213, 220, -1, + 220, 213, 214, 221, -1, + 221, 214, 215, 222, -1, + 222, 215, 216, 223, -1, + 224, 217, 218, 225, -1, + 225, 218, 219, 226, -1, + 226, 219, 220, 227, -1, + 227, 220, 221, 228, -1, + 228, 221, 222, 229, -1, + 229, 222, 223, 230, -1, + 231, 224, 225, 232, -1, + 232, 225, 226, 233, -1, + 233, 226, 227, 234, -1, + 234, 227, 228, 235, -1, + 235, 228, 229, 236, -1, + 236, 229, 230, 237, -1, + 238, 231, 232, 239, -1, + 239, 232, 233, 240, -1, + 240, 233, 234, 241, -1, + 241, 234, 235, 242, -1, + 242, 235, 236, 243, -1, + 243, 236, 237, 244, -1, + 245, 238, 239, 246, -1, + 246, 239, 240, 247, -1, + 247, 240, 241, 248, -1, + 248, 241, 242, 249, -1, + 249, 242, 243, 250, -1, + 250, 243, 244, 251, -1, + 252, 245, 246, 253, -1, + 253, 246, 247, 254, -1, + 254, 247, 248, 255, -1, + 255, 248, 249, 256, -1, + 256, 249, 250, 257, -1, + 257, 250, 251, 258, -1, + 259, 252, 253, 260, -1, + 260, 253, 254, 261, -1, + 261, 254, 255, 262, -1, + 262, 255, 256, 263, -1, + 263, 256, 257, 264, -1, + 264, 257, 258, 265, -1, + 266, 259, 260, 267, -1, + 267, 260, 261, 268, -1, + 268, 261, 262, 269, -1, + 269, 262, 263, 270, -1, + 270, 263, 264, 271, -1, + 271, 264, 265, 272, -1, + 273, 266, 267, 274, -1, + 274, 267, 268, 275, -1, + 275, 268, 269, 276, -1, + 276, 269, 270, 277, -1, + 277, 270, 271, 278, -1, + 278, 271, 272, 279, -1, + 280, 273, 274, 281, -1, + 281, 274, 275, 282, -1, + 282, 275, 276, 283, -1, + 283, 276, 277, 284, -1, + 284, 277, 278, 285, -1, + 285, 278, 279, 286, -1, + 287, 280, 281, 288, -1, + 288, 281, 282, 289, -1, + 289, 282, 283, 290, -1, + 290, 283, 284, 291, -1, + 291, 284, 285, 292, -1, + 292, 285, 286, 293, -1, + 294, 287, 288, 295, -1, + 295, 288, 289, 296, -1, + 296, 289, 290, 297, -1, + 297, 290, 291, 298, -1, + 298, 291, 292, 299, -1, + 299, 292, 293, 300, -1, + 301, 294, 295, 302, -1, + 302, 295, 296, 303, -1, + 303, 296, 297, 304, -1, + 304, 297, 298, 305, -1, + 305, 298, 299, 306, -1, + 306, 299, 300, 307, -1, + 308, 301, 302, 309, -1, + 309, 302, 303, 310, -1, + 310, 303, 304, 311, -1, + 311, 304, 305, 312, -1, + 312, 305, 306, 313, -1, + 313, 306, 307, 314, -1, + 315, 308, 309, 316, -1, + 316, 309, 310, 317, -1, + 317, 310, 311, 318, -1, + 318, 311, 312, 319, -1, + 319, 312, 313, 320, -1, + 320, 313, 314, 321, -1, + 322, 315, 316, 323, -1, + 323, 316, 317, 324, -1, + 324, 317, 318, 325, -1, + 325, 318, 319, 326, -1, + 326, 319, 320, 327, -1, + 327, 320, 321, 328, -1, + 329, 322, 323, 330, -1, + 330, 323, 324, 331, -1, + 331, 324, 325, 332, -1, + 332, 325, 326, 333, -1, + 333, 326, 327, 334, -1, + 334, 327, 328, 335, -1, + 168, 329, 330, 169, -1, + 169, 330, 331, 170, -1, + 170, 331, 332, 171, -1, + 171, 332, 333, 172, -1, + 172, 333, 334, 173, -1, + 173, 334, 335, 174, -1, + 0, 168, 175, 7, -1, + 13, 181, 174, 6, -1, + 7, 175, 182, 14, -1, + 20, 188, 181, 13, -1, + 14, 182, 189, 21, -1, + 27, 195, 188, 20, -1, + 21, 189, 196, 28, -1, + 34, 202, 195, 27, -1, + 28, 196, 203, 35, -1, + 41, 209, 202, 34, -1, + 35, 203, 210, 42, -1, + 48, 216, 209, 41, -1, + 42, 210, 217, 49, -1, + 55, 223, 216, 48, -1, + 49, 217, 224, 56, -1, + 62, 230, 223, 55, -1, + 56, 224, 231, 63, -1, + 69, 237, 230, 62, -1, + 63, 231, 238, 70, -1, + 76, 244, 237, 69, -1, + 70, 238, 245, 77, -1, + 83, 251, 244, 76, -1, + 77, 245, 252, 84, -1, + 90, 258, 251, 83, -1, + 84, 252, 259, 91, -1, + 97, 265, 258, 90, -1, + 91, 259, 266, 98, -1, + 104, 272, 265, 97, -1, + 98, 266, 273, 105, -1, + 111, 279, 272, 104, -1, + 105, 273, 280, 112, -1, + 118, 286, 279, 111, -1, + 112, 280, 287, 119, -1, + 125, 293, 286, 118, -1, + 119, 287, 294, 126, -1, + 132, 300, 293, 125, -1, + 126, 294, 301, 133, -1, + 139, 307, 300, 132, -1, + 133, 301, 308, 140, -1, + 146, 314, 307, 139, -1, + 140, 308, 315, 147, -1, + 153, 321, 314, 146, -1, + 147, 315, 322, 154, -1, + 160, 328, 321, 153, -1, + 154, 322, 329, 161, -1, + 167, 335, 328, 160, -1, + 161, 329, 168, 0, -1, + 6, 174, 335, 167, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4trap.wrl b/environments/g4py/tests/gtest05/vrml/g4trap.wrl new file mode 100644 index 0000000000..f382e3a649 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4trap.wrl @@ -0,0 +1,102 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -588.082 -419.033 -600, + 11.9181 -419.033 -600, + 252.98 380.967 -600, + -547.02 380.967 -600, + 89.3388 -140.967 600, + 289.339 -140.967 600, + 385.763 179.033 600, + 105.763 179.033 600, + ] + } + coordIndex [ + 0, 3, 2, 1, -1, + 4, 7, 3, 0, -1, + 7, 6, 2, 3, -1, + 6, 5, 1, 2, -1, + 5, 4, 0, 1, -1, + 4, 5, 6, 7, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4trd.wrl b/environments/g4py/tests/gtest05/vrml/g4trd.wrl new file mode 100644 index 0000000000..c21a8e1a6f --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4trd.wrl @@ -0,0 +1,102 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -300 -400 -600, + 300 -400 -600, + 300 400 -600, + -300 400 -600, + -100 -150 600, + 100 -150 600, + 100 150 600, + -100 150 600, + ] + } + coordIndex [ + 0, 3, 2, 1, -1, + 4, 7, 3, 0, -1, + 7, 6, 2, 3, -1, + 6, 5, 1, 2, -1, + 5, 4, 0, 1, -1, + 4, 5, 6, 7, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4tubs.wrl b/environments/g4py/tests/gtest05/vrml/g4tubs.wrl new file mode 100644 index 0000000000..5e574c1088 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4tubs.wrl @@ -0,0 +1,190 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 150 0 200, + 144.889 38.8229 200, + 129.904 75 200, + 106.066 106.066 200, + 75 129.904 200, + 38.8229 144.889 200, + 9.18485e-15 150 200, + -38.8229 144.889 200, + -75 129.904 200, + -106.066 106.066 200, + -129.904 75 200, + -144.889 38.8229 200, + -150 1.83697e-14 200, + 150 0 -200, + 144.889 38.8229 -200, + 129.904 75 -200, + 106.066 106.066 -200, + 75 129.904 -200, + 38.8229 144.889 -200, + 9.18485e-15 150 -200, + -38.8229 144.889 -200, + -75 129.904 -200, + -106.066 106.066 -200, + -129.904 75 -200, + -144.889 38.8229 -200, + -150 1.83697e-14 -200, + 100 0 200, + 96.5926 25.8819 200, + 86.6025 50 200, + 70.7107 70.7107 200, + 50 86.6025 200, + 25.8819 96.5926 200, + 6.12323e-15 100 200, + -25.8819 96.5926 200, + -50 86.6025 200, + -70.7107 70.7107 200, + -86.6025 50 200, + -96.5926 25.8819 200, + -100 1.22465e-14 200, + 100 0 -200, + 96.5926 25.8819 -200, + 86.6025 50 -200, + 70.7107 70.7107 -200, + 50 86.6025 -200, + 25.8819 96.5926 -200, + 6.12323e-15 100 -200, + -25.8819 96.5926 -200, + -50 86.6025 -200, + -70.7107 70.7107 -200, + -86.6025 50 -200, + -96.5926 25.8819 -200, + -100 1.22465e-14 -200, + ] + } + coordIndex [ + 0, 13, 14, 1, -1, + 1, 14, 15, 2, -1, + 2, 15, 16, 3, -1, + 3, 16, 17, 4, -1, + 4, 17, 18, 5, -1, + 5, 18, 19, 6, -1, + 6, 19, 20, 7, -1, + 7, 20, 21, 8, -1, + 8, 21, 22, 9, -1, + 9, 22, 23, 10, -1, + 10, 23, 24, 11, -1, + 11, 24, 25, 12, -1, + 39, 26, 27, 40, -1, + 40, 27, 28, 41, -1, + 41, 28, 29, 42, -1, + 42, 29, 30, 43, -1, + 43, 30, 31, 44, -1, + 44, 31, 32, 45, -1, + 45, 32, 33, 46, -1, + 46, 33, 34, 47, -1, + 47, 34, 35, 48, -1, + 48, 35, 36, 49, -1, + 49, 36, 37, 50, -1, + 50, 37, 38, 51, -1, + 26, 0, 1, 27, -1, + 27, 1, 2, 28, -1, + 28, 2, 3, 29, -1, + 29, 3, 4, 30, -1, + 30, 4, 5, 31, -1, + 31, 5, 6, 32, -1, + 32, 6, 7, 33, -1, + 33, 7, 8, 34, -1, + 34, 8, 9, 35, -1, + 35, 9, 10, 36, -1, + 36, 10, 11, 37, -1, + 37, 11, 12, 38, -1, + 13, 39, 40, 14, -1, + 14, 40, 41, 15, -1, + 15, 41, 42, 16, -1, + 16, 42, 43, 17, -1, + 17, 43, 44, 18, -1, + 18, 44, 45, 19, -1, + 19, 45, 46, 20, -1, + 20, 46, 47, 21, -1, + 21, 47, 48, 22, -1, + 22, 48, 49, 23, -1, + 23, 49, 50, 24, -1, + 24, 50, 51, 25, -1, + 0, 26, 39, 13, -1, + 25, 51, 38, 12, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4twistedbox.wrl b/environments/g4py/tests/gtest05/vrml/g4twistedbox.wrl new file mode 100644 index 0000000000..085b2c147e --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4twistedbox.wrl @@ -0,0 +1,198 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -393.305 -308.725 -600, + -200.12 -360.488 -600, + -6.93504 -412.252 -600, + 186.25 -464.016 -600, + -324.287 -51.1444 -600, + -131.102 -102.908 -600, + 62.0834 -154.672 -600, + 255.269 -206.436 -600, + -255.269 206.436 -600, + -62.0834 154.672 -600, + 131.102 102.908 -600, + 324.287 51.1444 -600, + -186.25 464.016 -600, + 6.93504 412.252 -600, + 200.12 360.488 -600, + 393.305 308.725 -600, + -186.25 -464.016 600, + 6.93504 -412.252 600, + 200.12 -360.488 600, + 393.305 -308.725 600, + -255.269 -206.436 600, + -62.0834 -154.672 600, + 131.102 -102.908 600, + 324.287 -51.1444 600, + -324.287 51.1444 600, + -131.102 102.908 600, + 62.0834 154.672 600, + 255.269 206.436 600, + -393.305 308.725 600, + -200.12 360.488 600, + -6.93504 412.252 600, + 186.25 464.016 600, + -333.721 -372.331 -200, + -134.482 -389.762 -200, + 64.7572 -407.193 -200, + 263.996 -424.625 -200, + 287.238 -158.973 -200, + 310.479 106.679 -200, + 333.721 372.331 -200, + 134.482 389.762 -200, + -64.7572 407.193 -200, + -263.996 424.625 -200, + -287.238 158.973 -200, + -310.479 -106.679 -200, + -263.996 -424.625 200, + -64.7572 -407.193 200, + 134.482 -389.762 200, + 333.721 -372.331 200, + 310.479 -106.679 200, + 287.238 158.973 200, + 263.996 424.625 200, + 64.7572 407.193 200, + -134.482 389.762 200, + -333.721 372.331 200, + -310.479 106.679 200, + -287.238 -158.973 200, + ] + } + coordIndex [ + 0, 4, 5, 1, -1, + 1, 5, 6, 2, -1, + 2, 6, 7, 3, -1, + 4, 8, 9, 5, -1, + 5, 9, 10, 6, -1, + 6, 10, 11, 7, -1, + 8, 12, 13, 9, -1, + 9, 13, 14, 10, -1, + 10, 14, 15, 11, -1, + 16, 17, 21, 20, -1, + 17, 18, 22, 21, -1, + 18, 19, 23, 22, -1, + 20, 21, 25, 24, -1, + 21, 22, 26, 25, -1, + 22, 23, 27, 26, -1, + 24, 25, 29, 28, -1, + 25, 26, 30, 29, -1, + 26, 27, 31, 30, -1, + 0, 1, 33, 32, -1, + 1, 2, 34, 33, -1, + 2, 3, 35, 34, -1, + 32, 33, 45, 44, -1, + 33, 34, 46, 45, -1, + 34, 35, 47, 46, -1, + 44, 45, 17, 16, -1, + 45, 46, 18, 17, -1, + 46, 47, 19, 18, -1, + 3, 7, 36, 35, -1, + 7, 11, 37, 36, -1, + 11, 15, 38, 37, -1, + 35, 36, 48, 47, -1, + 36, 37, 49, 48, -1, + 37, 38, 50, 49, -1, + 47, 48, 23, 19, -1, + 48, 49, 27, 23, -1, + 49, 50, 31, 27, -1, + 15, 14, 39, 38, -1, + 14, 13, 40, 39, -1, + 13, 12, 41, 40, -1, + 38, 39, 51, 50, -1, + 39, 40, 52, 51, -1, + 40, 41, 53, 52, -1, + 50, 51, 30, 31, -1, + 51, 52, 29, 30, -1, + 52, 53, 28, 29, -1, + 12, 8, 42, 41, -1, + 8, 4, 43, 42, -1, + 4, 0, 32, 43, -1, + 41, 42, 54, 53, -1, + 42, 43, 55, 54, -1, + 43, 32, 44, 55, -1, + 53, 54, 24, 28, -1, + 54, 55, 20, 24, -1, + 55, 44, 16, 20, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4twistedtrap.wrl b/environments/g4py/tests/gtest05/vrml/g4twistedtrap.wrl new file mode 100644 index 0000000000..65b84140fa --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4twistedtrap.wrl @@ -0,0 +1,198 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -678.984 -309.503 -600, + -485.799 -361.267 -600, + -292.614 -413.031 -600, + -99.4285 -464.795 -600, + -596.745 -55.4654 -600, + -382.095 -112.981 -600, + -167.444 -170.496 -600, + 47.2058 -228.011 -600, + -514.506 198.572 -600, + -278.39 135.305 -600, + -42.2752 72.0385 -600, + 193.84 8.77163 -600, + -432.266 452.61 -600, + -174.686 383.592 -600, + 82.8941 314.573 -600, + 340.474 245.555 -600, + 135.119 -168.699 600, + 199.514 -151.444 600, + 263.909 -134.189 600, + 328.304 -116.935 600, + 112.8 -64.2496 600, + 185.781 -44.6944 600, + 258.762 -25.1391 600, + 331.743 -5.58392 600, + 90.4805 40.1995 600, + 172.048 62.0553 600, + 253.615 83.9112 600, + 335.182 105.767 600, + 68.1615 144.649 600, + 158.315 168.805 600, + 248.468 192.961 600, + 338.621 217.118 600, + -389.062 -299.873 -200, + -234.099 -313.43 -200, + -79.135 -326.988 -200, + 75.8286 -340.545 -200, + 158.46 -133.626 -200, + 241.092 73.2925 -200, + 323.724 280.211 -200, + 115.63 298.417 -200, + -92.4643 316.623 -200, + -300.558 334.829 -200, + -330.06 123.262 -200, + -359.561 -88.3055 -200, + -114.755 -250.957 200, + -4.06717 -241.273 200, + 106.621 -231.589 200, + 217.309 -221.905 200, + 251.393 -58.3115 200, + 285.477 105.282 200, + 319.561 268.875 200, + 169.025 255.705 200, + 18.4891 242.534 200, + -132.047 229.364 200, + -126.283 69.2572 200, + -120.519 -90.8497 200, + ] + } + coordIndex [ + 0, 4, 5, 1, -1, + 1, 5, 6, 2, -1, + 2, 6, 7, 3, -1, + 4, 8, 9, 5, -1, + 5, 9, 10, 6, -1, + 6, 10, 11, 7, -1, + 8, 12, 13, 9, -1, + 9, 13, 14, 10, -1, + 10, 14, 15, 11, -1, + 16, 17, 21, 20, -1, + 17, 18, 22, 21, -1, + 18, 19, 23, 22, -1, + 20, 21, 25, 24, -1, + 21, 22, 26, 25, -1, + 22, 23, 27, 26, -1, + 24, 25, 29, 28, -1, + 25, 26, 30, 29, -1, + 26, 27, 31, 30, -1, + 0, 1, 33, 32, -1, + 1, 2, 34, 33, -1, + 2, 3, 35, 34, -1, + 32, 33, 45, 44, -1, + 33, 34, 46, 45, -1, + 34, 35, 47, 46, -1, + 44, 45, 17, 16, -1, + 45, 46, 18, 17, -1, + 46, 47, 19, 18, -1, + 3, 7, 36, 35, -1, + 7, 11, 37, 36, -1, + 11, 15, 38, 37, -1, + 35, 36, 48, 47, -1, + 36, 37, 49, 48, -1, + 37, 38, 50, 49, -1, + 47, 48, 23, 19, -1, + 48, 49, 27, 23, -1, + 49, 50, 31, 27, -1, + 15, 14, 39, 38, -1, + 14, 13, 40, 39, -1, + 13, 12, 41, 40, -1, + 38, 39, 51, 50, -1, + 39, 40, 52, 51, -1, + 40, 41, 53, 52, -1, + 50, 51, 30, 31, -1, + 51, 52, 29, 30, -1, + 52, 53, 28, 29, -1, + 12, 8, 42, 41, -1, + 8, 4, 43, 42, -1, + 4, 0, 32, 43, -1, + 41, 42, 54, 53, -1, + 42, 43, 55, 54, -1, + 43, 32, 44, 55, -1, + 53, 54, 24, 28, -1, + 54, 55, 20, 24, -1, + 55, 44, 16, 20, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4twistedtrd.wrl b/environments/g4py/tests/gtest05/vrml/g4twistedtrd.wrl new file mode 100644 index 0000000000..2920326f90 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4twistedtrd.wrl @@ -0,0 +1,198 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -393.305 -308.725 -600, + -200.12 -360.488 -600, + -6.93504 -412.252 -600, + 186.25 -464.016 -600, + -324.287 -51.1444 -600, + -131.102 -102.908 -600, + 62.0834 -154.672 -600, + 255.269 -206.436 -600, + -255.269 206.436 -600, + -62.0834 154.672 -600, + 131.102 102.908 -600, + 324.287 51.1444 -600, + -186.25 464.016 -600, + 6.93504 412.252 -600, + 200.12 360.488 -600, + 393.305 308.725 -600, + -57.7697 -170.771 600, + 6.62533 -153.516 600, + 71.0204 -136.262 600, + 135.415 -119.007 600, + -83.6516 -74.1782 600, + -19.2566 -56.9236 600, + 45.1385 -39.669 600, + 109.534 -22.4144 600, + -109.534 22.4144 600, + -45.1385 39.669 600, + 19.2566 56.9236 600, + 83.6516 74.1782 600, + -135.415 119.007 600, + -71.0204 136.262 600, + -6.62533 153.516 600, + 57.7697 170.771 600, + -260.045 -295.125 -200, + -105.081 -308.683 -200, + 49.8825 -322.24 -200, + 204.846 -335.798 -200, + 223.246 -125.49 -200, + 241.645 84.8175 -200, + 260.045 295.125 -200, + 105.081 308.683 -200, + -49.8825 322.24 -200, + -204.846 335.798 -200, + -223.246 125.49 -200, + -241.645 -84.8175 -200, + -145.696 -246.971 200, + -35.0078 -237.287 200, + 75.6805 -227.603 200, + 186.369 -217.919 200, + 172.811 -62.9559 200, + 159.254 92.0078 200, + 145.696 246.971 200, + 35.0078 237.287 200, + -75.6805 227.603 200, + -186.369 217.919 200, + -172.811 62.9559 200, + -159.254 -92.0078 200, + ] + } + coordIndex [ + 0, 4, 5, 1, -1, + 1, 5, 6, 2, -1, + 2, 6, 7, 3, -1, + 4, 8, 9, 5, -1, + 5, 9, 10, 6, -1, + 6, 10, 11, 7, -1, + 8, 12, 13, 9, -1, + 9, 13, 14, 10, -1, + 10, 14, 15, 11, -1, + 16, 17, 21, 20, -1, + 17, 18, 22, 21, -1, + 18, 19, 23, 22, -1, + 20, 21, 25, 24, -1, + 21, 22, 26, 25, -1, + 22, 23, 27, 26, -1, + 24, 25, 29, 28, -1, + 25, 26, 30, 29, -1, + 26, 27, 31, 30, -1, + 0, 1, 33, 32, -1, + 1, 2, 34, 33, -1, + 2, 3, 35, 34, -1, + 32, 33, 45, 44, -1, + 33, 34, 46, 45, -1, + 34, 35, 47, 46, -1, + 44, 45, 17, 16, -1, + 45, 46, 18, 17, -1, + 46, 47, 19, 18, -1, + 3, 7, 36, 35, -1, + 7, 11, 37, 36, -1, + 11, 15, 38, 37, -1, + 35, 36, 48, 47, -1, + 36, 37, 49, 48, -1, + 37, 38, 50, 49, -1, + 47, 48, 23, 19, -1, + 48, 49, 27, 23, -1, + 49, 50, 31, 27, -1, + 15, 14, 39, 38, -1, + 14, 13, 40, 39, -1, + 13, 12, 41, 40, -1, + 38, 39, 51, 50, -1, + 39, 40, 52, 51, -1, + 40, 41, 53, 52, -1, + 50, 51, 30, 31, -1, + 51, 52, 29, 30, -1, + 52, 53, 28, 29, -1, + 12, 8, 42, 41, -1, + 8, 4, 43, 42, -1, + 4, 0, 32, 43, -1, + 41, 42, 54, 53, -1, + 42, 43, 55, 54, -1, + 43, 32, 44, 55, -1, + 53, 54, 24, 28, -1, + 54, 55, 20, 24, -1, + 55, 44, 16, 20, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4twistedtubs.wrl b/environments/g4py/tests/gtest05/vrml/g4twistedtubs.wrl new file mode 100644 index 0000000000..017efc4bef --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4twistedtubs.wrl @@ -0,0 +1,566 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 25.8819 -96.5926 -200, + 46.7269 -88.4115 -200, + 65.2287 -75.7972 -200, + 80.4598 -59.382 -200, + 91.6562 -39.9892 -200, + 98.2566 -18.5912 -200, + 99.9301 3.73912 -200, + 96.5926 25.8819 -200, + 27.7306 -103.492 -200, + 50.0645 -94.7266 -200, + 69.8879 -81.2113 -200, + 86.2069 -63.6236 -200, + 98.2031 -42.8456 -200, + 105.275 -19.9191 -200, + 107.068 4.0062 -200, + 103.492 27.7306 -200, + 29.5793 -110.392 -200, + 53.4021 -101.042 -200, + 74.5471 -86.6253 -200, + 91.954 -67.8652 -200, + 104.75 -45.7019 -200, + 112.293 -21.247 -200, + 114.206 4.27328 -200, + 110.392 29.5793 -200, + 31.428 -117.291 -200, + 56.7398 -107.357 -200, + 79.2063 -92.0394 -200, + 97.7012 -72.1067 -200, + 111.297 -48.5583 -200, + 119.312 -22.575 -200, + 121.344 4.54036 -200, + 117.291 31.428 -200, + 33.2767 -124.19 -200, + 60.0774 -113.672 -200, + 83.8655 -97.4535 -200, + 103.448 -76.3483 -200, + 117.844 -51.4147 -200, + 126.33 -23.9029 -200, + 128.482 4.80744 -200, + 124.19 33.2767 -200, + 35.1254 -131.09 -200, + 63.415 -119.987 -200, + 88.5247 -102.868 -200, + 109.195 -80.5899 -200, + 124.391 -54.2711 -200, + 133.348 -25.2309 -200, + 135.619 5.07452 -200, + 131.09 35.1254 -200, + 36.9741 -137.989 -200, + 66.7527 -126.302 -200, + 93.1839 -108.282 -200, + 114.943 -84.8315 -200, + 130.937 -57.1274 -200, + 140.367 -26.5588 -200, + 142.757 5.3416 -200, + 137.989 36.9741 -200, + 38.8229 -144.889 -200, + 70.0903 -132.617 -200, + 97.8431 -113.696 -200, + 120.69 -89.073 -200, + 137.484 -59.9838 -200, + 147.385 -27.8867 -200, + 149.895 5.60868 -200, + 144.889 38.8229 -200, + 96.5926 -25.8819 200, + 99.9301 -3.73912 200, + 98.2566 18.5912 200, + 91.6562 39.9892 200, + 80.4598 59.382 200, + 65.2287 75.7972 200, + 46.7269 88.4115 200, + 25.8819 96.5926 200, + 103.492 -27.7306 200, + 107.068 -4.0062 200, + 105.275 19.9191 200, + 98.2031 42.8456 200, + 86.2069 63.6236 200, + 69.8879 81.2113 200, + 50.0645 94.7266 200, + 27.7306 103.492 200, + 110.392 -29.5793 200, + 114.206 -4.27328 200, + 112.293 21.247 200, + 104.75 45.7019 200, + 91.954 67.8652 200, + 74.5471 86.6253 200, + 53.4021 101.042 200, + 29.5793 110.392 200, + 117.291 -31.428 200, + 121.344 -4.54036 200, + 119.312 22.575 200, + 111.297 48.5583 200, + 97.7012 72.1067 200, + 79.2063 92.0394 200, + 56.7398 107.357 200, + 31.428 117.291 200, + 124.19 -33.2767 200, + 128.482 -4.80744 200, + 126.33 23.9029 200, + 117.844 51.4147 200, + 103.448 76.3483 200, + 83.8655 97.4535 200, + 60.0774 113.672 200, + 33.2767 124.19 200, + 131.09 -35.1254 200, + 135.619 -5.07452 200, + 133.348 25.2309 200, + 124.391 54.2711 200, + 109.195 80.5899 200, + 88.5247 102.868 200, + 63.415 119.987 200, + 35.1254 131.09 200, + 137.989 -36.9741 200, + 142.757 -5.3416 200, + 140.367 26.5588 200, + 130.937 57.1274 200, + 114.943 84.8315 200, + 93.1839 108.282 200, + 66.7527 126.302 200, + 36.9741 137.989 200, + 144.889 -38.8229 200, + 149.895 -5.60868 200, + 147.385 27.8867 200, + 137.484 59.9838 200, + 120.69 89.073 200, + 97.8431 113.696 200, + 70.0903 132.617 200, + 38.8229 144.889 200, + 40.024 -82.4504 -120, + 57.3675 -71.4771 -120, + 71.8343 -56.9195 -120, + 82.6991 -39.5078 -120, + 89.4169 -20.115 -120, + 91.6511 0.286506 -120, + 89.2894 20.6736 -120, + 82.4504 40.024 -120, + 88.3398 42.8829 -120, + 94.2291 45.7418 -120, + 100.118 48.6006 -120, + 106.008 51.4595 -120, + 111.897 54.3183 -120, + 117.786 57.1772 -120, + 123.676 60.0361 -120, + 133.934 31.0104 -120, + 137.477 0.429759 -120, + 134.125 -30.1724 -120, + 124.049 -59.2617 -120, + 107.751 -85.3793 -120, + 86.0513 -107.216 -120, + 60.0361 -123.676 -120, + 57.1772 -117.786 -120, + 54.3183 -111.897 -120, + 51.4595 -106.008 -120, + 48.6006 -100.118 -120, + 45.7418 -94.2291 -120, + 42.8829 -88.3398 -120, + 54.1662 -68.3083 -40, + 68.0081 -54.5426 -40, + 78.4399 -38.0418 -40, + 84.9384 -19.6335 -40, + 87.1776 -0.240714 -40, + 85.0455 19.1642 -40, + 78.6488 37.6081 -40, + 68.3083 54.1662 -40, + 73.1875 58.0352 -40, + 78.0666 61.9042 -40, + 82.9458 65.7732 -40, + 87.825 69.6422 -40, + 92.7041 73.5112 -40, + 97.5833 77.3803 -40, + 102.462 81.2493 -40, + 117.973 56.4121 -40, + 127.568 28.7463 -40, + 130.766 -0.361071 -40, + 127.408 -29.4503 -40, + 117.66 -57.0628 -40, + 102.012 -81.8139 -40, + 81.2493 -102.462 -40, + 77.3803 -97.5833 -40, + 73.5112 -92.7041 -40, + 69.6422 -87.825 -40, + 65.7732 -82.9458 -40, + 61.9042 -78.0666 -40, + 58.0352 -73.1875 -40, + 68.3083 -54.1662 40, + 78.6488 -37.6081 40, + 85.0455 -19.1642 40, + 87.1776 0.240714 40, + 84.9384 19.6335 40, + 78.4399 38.0418 40, + 68.0081 54.5426 40, + 54.1662 68.3083 40, + 58.0352 73.1875 40, + 61.9042 78.0666 40, + 65.7732 82.9458 40, + 69.6422 87.825 40, + 73.5112 92.7041 40, + 77.3803 97.5833 40, + 81.2493 102.462 40, + 102.012 81.8139 40, + 117.66 57.0628 40, + 127.408 29.4503 40, + 130.766 0.361071 40, + 127.568 -28.7463 40, + 117.973 -56.4121 40, + 102.462 -81.2493 40, + 97.5833 -77.3803 40, + 92.7041 -73.5112 40, + 87.825 -69.6422 40, + 82.9458 -65.7732 40, + 78.0666 -61.9042 40, + 73.1875 -58.0352 40, + 82.4504 -40.024 120, + 89.2894 -20.6736 120, + 91.6511 -0.286506 120, + 89.4169 20.115 120, + 82.6991 39.5078 120, + 71.8343 56.9195 120, + 57.3675 71.4771 120, + 40.024 82.4504 120, + 42.8829 88.3398 120, + 45.7418 94.2291 120, + 48.6006 100.118 120, + 51.4595 106.008 120, + 54.3183 111.897 120, + 57.1772 117.786 120, + 60.0361 123.676 120, + 86.0513 107.216 120, + 107.751 85.3793 120, + 124.049 59.2617 120, + 134.125 30.1724 120, + 137.477 -0.429759 120, + 133.934 -31.0104 120, + 123.676 -60.0361 120, + 117.786 -57.1772 120, + 111.897 -54.3183 120, + 106.008 -51.4595 120, + 100.118 -48.6006 120, + 94.2291 -45.7418 120, + 88.3398 -42.8829 120, + ] + } + coordIndex [ + 0, 1, 9, 8, -1, + 1, 2, 10, 9, -1, + 2, 3, 11, 10, -1, + 3, 4, 12, 11, -1, + 4, 5, 13, 12, -1, + 5, 6, 14, 13, -1, + 6, 7, 15, 14, -1, + 8, 9, 17, 16, -1, + 9, 10, 18, 17, -1, + 10, 11, 19, 18, -1, + 11, 12, 20, 19, -1, + 12, 13, 21, 20, -1, + 13, 14, 22, 21, -1, + 14, 15, 23, 22, -1, + 16, 17, 25, 24, -1, + 17, 18, 26, 25, -1, + 18, 19, 27, 26, -1, + 19, 20, 28, 27, -1, + 20, 21, 29, 28, -1, + 21, 22, 30, 29, -1, + 22, 23, 31, 30, -1, + 24, 25, 33, 32, -1, + 25, 26, 34, 33, -1, + 26, 27, 35, 34, -1, + 27, 28, 36, 35, -1, + 28, 29, 37, 36, -1, + 29, 30, 38, 37, -1, + 30, 31, 39, 38, -1, + 32, 33, 41, 40, -1, + 33, 34, 42, 41, -1, + 34, 35, 43, 42, -1, + 35, 36, 44, 43, -1, + 36, 37, 45, 44, -1, + 37, 38, 46, 45, -1, + 38, 39, 47, 46, -1, + 40, 41, 49, 48, -1, + 41, 42, 50, 49, -1, + 42, 43, 51, 50, -1, + 43, 44, 52, 51, -1, + 44, 45, 53, 52, -1, + 45, 46, 54, 53, -1, + 46, 47, 55, 54, -1, + 48, 49, 57, 56, -1, + 49, 50, 58, 57, -1, + 50, 51, 59, 58, -1, + 51, 52, 60, 59, -1, + 52, 53, 61, 60, -1, + 53, 54, 62, 61, -1, + 54, 55, 63, 62, -1, + 64, 72, 73, 65, -1, + 65, 73, 74, 66, -1, + 66, 74, 75, 67, -1, + 67, 75, 76, 68, -1, + 68, 76, 77, 69, -1, + 69, 77, 78, 70, -1, + 70, 78, 79, 71, -1, + 72, 80, 81, 73, -1, + 73, 81, 82, 74, -1, + 74, 82, 83, 75, -1, + 75, 83, 84, 76, -1, + 76, 84, 85, 77, -1, + 77, 85, 86, 78, -1, + 78, 86, 87, 79, -1, + 80, 88, 89, 81, -1, + 81, 89, 90, 82, -1, + 82, 90, 91, 83, -1, + 83, 91, 92, 84, -1, + 84, 92, 93, 85, -1, + 85, 93, 94, 86, -1, + 86, 94, 95, 87, -1, + 88, 96, 97, 89, -1, + 89, 97, 98, 90, -1, + 90, 98, 99, 91, -1, + 91, 99, 100, 92, -1, + 92, 100, 101, 93, -1, + 93, 101, 102, 94, -1, + 94, 102, 103, 95, -1, + 96, 104, 105, 97, -1, + 97, 105, 106, 98, -1, + 98, 106, 107, 99, -1, + 99, 107, 108, 100, -1, + 100, 108, 109, 101, -1, + 101, 109, 110, 102, -1, + 102, 110, 111, 103, -1, + 104, 112, 113, 105, -1, + 105, 113, 114, 106, -1, + 106, 114, 115, 107, -1, + 107, 115, 116, 108, -1, + 108, 116, 117, 109, -1, + 109, 117, 118, 110, -1, + 110, 118, 119, 111, -1, + 112, 120, 121, 113, -1, + 113, 121, 122, 114, -1, + 114, 122, 123, 115, -1, + 115, 123, 124, 116, -1, + 116, 124, 125, 117, -1, + 117, 125, 126, 118, -1, + 118, 126, 127, 119, -1, + 0, 128, 129, 1, -1, + 1, 129, 130, 2, -1, + 2, 130, 131, 3, -1, + 3, 131, 132, 4, -1, + 4, 132, 133, 5, -1, + 5, 133, 134, 6, -1, + 6, 134, 135, 7, -1, + 128, 156, 157, 129, -1, + 129, 157, 158, 130, -1, + 130, 158, 159, 131, -1, + 131, 159, 160, 132, -1, + 132, 160, 161, 133, -1, + 133, 161, 162, 134, -1, + 134, 162, 163, 135, -1, + 156, 184, 185, 157, -1, + 157, 185, 186, 158, -1, + 158, 186, 187, 159, -1, + 159, 187, 188, 160, -1, + 160, 188, 189, 161, -1, + 161, 189, 190, 162, -1, + 162, 190, 191, 163, -1, + 184, 212, 213, 185, -1, + 185, 213, 214, 186, -1, + 186, 214, 215, 187, -1, + 187, 215, 216, 188, -1, + 188, 216, 217, 189, -1, + 189, 217, 218, 190, -1, + 190, 218, 219, 191, -1, + 212, 64, 65, 213, -1, + 213, 65, 66, 214, -1, + 214, 66, 67, 215, -1, + 215, 67, 68, 216, -1, + 216, 68, 69, 217, -1, + 217, 69, 70, 218, -1, + 218, 70, 71, 219, -1, + 7, 135, 136, 15, -1, + 15, 136, 137, 23, -1, + 23, 137, 138, 31, -1, + 31, 138, 139, 39, -1, + 39, 139, 140, 47, -1, + 47, 140, 141, 55, -1, + 55, 141, 142, 63, -1, + 135, 163, 164, 136, -1, + 136, 164, 165, 137, -1, + 137, 165, 166, 138, -1, + 138, 166, 167, 139, -1, + 139, 167, 168, 140, -1, + 140, 168, 169, 141, -1, + 141, 169, 170, 142, -1, + 163, 191, 192, 164, -1, + 164, 192, 193, 165, -1, + 165, 193, 194, 166, -1, + 166, 194, 195, 167, -1, + 167, 195, 196, 168, -1, + 168, 196, 197, 169, -1, + 169, 197, 198, 170, -1, + 191, 219, 220, 192, -1, + 192, 220, 221, 193, -1, + 193, 221, 222, 194, -1, + 194, 222, 223, 195, -1, + 195, 223, 224, 196, -1, + 196, 224, 225, 197, -1, + 197, 225, 226, 198, -1, + 219, 71, 79, 220, -1, + 220, 79, 87, 221, -1, + 221, 87, 95, 222, -1, + 222, 95, 103, 223, -1, + 223, 103, 111, 224, -1, + 224, 111, 119, 225, -1, + 225, 119, 127, 226, -1, + 63, 142, 143, 62, -1, + 62, 143, 144, 61, -1, + 61, 144, 145, 60, -1, + 60, 145, 146, 59, -1, + 59, 146, 147, 58, -1, + 58, 147, 148, 57, -1, + 57, 148, 149, 56, -1, + 142, 170, 171, 143, -1, + 143, 171, 172, 144, -1, + 144, 172, 173, 145, -1, + 145, 173, 174, 146, -1, + 146, 174, 175, 147, -1, + 147, 175, 176, 148, -1, + 148, 176, 177, 149, -1, + 170, 198, 199, 171, -1, + 171, 199, 200, 172, -1, + 172, 200, 201, 173, -1, + 173, 201, 202, 174, -1, + 174, 202, 203, 175, -1, + 175, 203, 204, 176, -1, + 176, 204, 205, 177, -1, + 198, 226, 227, 199, -1, + 199, 227, 228, 200, -1, + 200, 228, 229, 201, -1, + 201, 229, 230, 202, -1, + 202, 230, 231, 203, -1, + 203, 231, 232, 204, -1, + 204, 232, 233, 205, -1, + 226, 127, 126, 227, -1, + 227, 126, 125, 228, -1, + 228, 125, 124, 229, -1, + 229, 124, 123, 230, -1, + 230, 123, 122, 231, -1, + 231, 122, 121, 232, -1, + 232, 121, 120, 233, -1, + 56, 149, 150, 48, -1, + 48, 150, 151, 40, -1, + 40, 151, 152, 32, -1, + 32, 152, 153, 24, -1, + 24, 153, 154, 16, -1, + 16, 154, 155, 8, -1, + 8, 155, 128, 0, -1, + 149, 177, 178, 150, -1, + 150, 178, 179, 151, -1, + 151, 179, 180, 152, -1, + 152, 180, 181, 153, -1, + 153, 181, 182, 154, -1, + 154, 182, 183, 155, -1, + 155, 183, 156, 128, -1, + 177, 205, 206, 178, -1, + 178, 206, 207, 179, -1, + 179, 207, 208, 180, -1, + 180, 208, 209, 181, -1, + 181, 209, 210, 182, -1, + 182, 210, 211, 183, -1, + 183, 211, 184, 156, -1, + 205, 233, 234, 206, -1, + 206, 234, 235, 207, -1, + 207, 235, 236, 208, -1, + 208, 236, 237, 209, -1, + 209, 237, 238, 210, -1, + 210, 238, 239, 211, -1, + 211, 239, 212, 184, -1, + 233, 120, 112, 234, -1, + 234, 112, 104, 235, -1, + 235, 104, 96, 236, -1, + 236, 96, 88, 237, -1, + 237, 88, 80, 238, -1, + 238, 80, 72, 239, -1, + 239, 72, 64, 212, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest06/CMakeLists.txt b/environments/g4py/tests/gtest06/CMakeLists.txt new file mode 100644 index 0000000000..79daaa6852 --- /dev/null +++ b/environments/g4py/tests/gtest06/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test06 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test06 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest06/jpg/intersection.jpg b/environments/g4py/tests/gtest06/jpg/intersection.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d63759d6760643f10018aa428aeda0166c86102 GIT binary patch literal 18138 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 TZ3BPXz~46T|2G?e>`(j;U`DYo literal 0 HcmV?d00001 diff --git a/environments/g4py/tests/gtest06/jpg/subtraction.jpg b/environments/g4py/tests/gtest06/jpg/subtraction.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e06dbd2827b041c050a4a88d74fc3bb460d47fb GIT binary patch literal 31923 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 literal 0 HcmV?d00001 diff --git a/environments/g4py/tests/gtest06/jpg/union.jpg b/environments/g4py/tests/gtest06/jpg/union.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ff0a7272ceb43a907259ede0c1d5ee591827bea GIT binary patch literal 30020 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 Uf3C+rXW*YR@Hd_T*oX1|1lTzi$N&HU literal 0 HcmV?d00001 diff --git a/environments/g4py/tests/gtest06/test.py b/environments/g4py/tests/gtest06/test.py new file mode 100755 index 0000000000..aece738511 --- /dev/null +++ b/environments/g4py/tests/gtest06/test.py @@ -0,0 +1,126 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest06 +# - test for constructing/visualizing boolean geoemtries +# ================================================================== +from Geant4 import * +import g4pytest.ExN01pl, g4pytest.ParticleGun + +# ================================================================== +# user actions in python +# ================================================================== +class MyDetectorConstruction(G4VUserDetectorConstruction): + "My Detector Construction" + + def __init__(self): + G4VUserDetectorConstruction.__init__(self) + self.air= gNistManager.FindOrBuildMaterial("G4_AIR") + self.lv_object= None + self.world= self.ConstructWorld() + + self.va_red= G4VisAttributes(G4Color(1.,0.,0.)) + self.va_cyan= G4VisAttributes(G4Color(0.,1.,1.)) + self.va_green= G4VisAttributes(G4Color(0.,1.,0.)) + self.va_blue= G4VisAttributes(G4Color(0.,0.,1.)) + self.va_magenta= G4VisAttributes(G4Color(1.,0.,1.)) + + self.sld_box= G4Box("box",20.*cm, 20.*cm, 20.*cm); + self.sld_cyl= G4Tubs("cylinder",0., 10.*cm, 30.*cm, 0., twopi) + + # ----------------------------------------------------------------- + def ConstructWorld(self): + # Python has automatic garbage collection system. + # Geometry objects must be defined as GLOBAL not to be deleted. + global sld_world, lv_world, pv_world, va_world + + sld_world= G4Box("world", 1.*m, 1.*m, 1.*m) + lv_world= G4LogicalVolume(sld_world, self.air, "world") + pv_world= G4PVPlacement(G4Transform3D(), lv_world, "world", + None, False, 0) + + va_world= G4VisAttributes() + va_world.SetVisibility(False) + lv_world.SetVisAttributes(va_world) + + # solid object (dummy) + global sld_sld, lv_sld, pv_sld + sld_sld= G4Box("dummy", 10.*cm, 10.*cm, 10.*cm) + self.lv_object= lv_sld= G4LogicalVolume(sld_sld, self.air, "dummy") + pv_sld= G4PVPlacement(None, G4ThreeVector(), "dummy", lv_sld, + pv_world, False, 0) + + return pv_world + + # ----------------------------------------------------------------- + def ConstructUnion(self): + global sld_union + sld_union= G4UnionSolid("box+cylinder", self.sld_box, self.sld_cyl); + + self.lv_object.SetSolid(sld_union) + self.lv_object.SetVisAttributes(self.va_blue) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructIntersection(self): + offset= G4ThreeVector(20.*cm, 20.*cm, 0.) + global sld_intersection + sld_intersection= G4IntersectionSolid("box*cylinder", + self.sld_box, self.sld_cyl, + None, offset) + + self.lv_object.SetSolid(sld_intersection) + self.lv_object.SetVisAttributes(self.va_magenta) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructSubtraction(self): + global sld_subtraction + sld_subtraction= G4SubtractionSolid("box-cylinder", + self.sld_box, self.sld_cyl) + + self.lv_object.SetSolid(sld_subtraction) + self.lv_object.SetVisAttributes(self.va_red) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def Construct(self): # return the world volume + return self.world + +# ================================================================== +# main +# ================================================================== +# set geometry +myDC= MyDetectorConstruction() +gRunManager.SetUserInitialization(myDC) + +# minimal physics list +g4pytest.ExN01pl.Construct() + +# set primary generator action +g4pytest.ParticleGun.Construct() + +# initialize +gRunManager.Initialize() + +# visualization +gApplyUICommand("/vis/open RayTracer") +gApplyUICommand("/vis/rayTracer/headAngle 40.") +gApplyUICommand("/vis/rayTracer/eyePosition 100 100 150 cm") + +# create a vrml file for each solid type +f_list= ( + ("union", myDC.ConstructUnion), + ("intersection", myDC.ConstructIntersection), + ("subtraction", myDC.ConstructSubtraction) + ) + +for s,f in f_list: + f.__call__() + fname= "%s.jpg" % (s) + cmdstr= "/vis/rayTracer/trace " + fname + # This causes a segfault in MT mode... + gApplyUICommand(cmdstr) + +gTerminate() diff --git a/environments/g4py/tests/gtest07/CMakeLists.txt b/environments/g4py/tests/gtest07/CMakeLists.txt new file mode 100644 index 0000000000..9c2ab0ab05 --- /dev/null +++ b/environments/g4py/tests/gtest07/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test07 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test07 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest07/test.py b/environments/g4py/tests/gtest07/test.py new file mode 100755 index 0000000000..de63a7dd87 --- /dev/null +++ b/environments/g4py/tests/gtest07/test.py @@ -0,0 +1,80 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest07 +# - test for checking overlapped geometries +# ================================================================== +from Geant4 import * +import g4pytest.ExN01pl, g4pytest.ParticleGun + +# ================================================================== +# user actions in python +# ================================================================== +class MyDetectorConstruction(G4VUserDetectorConstruction): + "My Detector Construction" + + def __init__(self): + G4VUserDetectorConstruction.__init__(self) + + # ----------------------------------------------------------------- + def Construct(self): + # Python has automatic garbage collection system. + # Geometry objects must be defined as GLOBAL not to be deleted. + air= gNistManager.FindOrBuildMaterial("G4_AIR") + + # world volume + global sld_world, lv_world, pv_world + sld_world= G4Box("world", 1.*m, 1.*m, 1.*m) + lv_world= G4LogicalVolume(sld_world, air, "world") + pv_world= G4PVPlacement(G4Transform3D(), lv_world, "world", + None, False, 0) + + # box + global sld_box, lv_box, pv_box + sld_box= G4Box("box", 10.*cm, 10.*cm, 10.*cm); + lv_box= G4LogicalVolume(sld_box, air, "box") + pv_box= G4PVPlacement(None, G4ThreeVector(), "box", lv_box, + pv_world, False, 0, True) + + # cylinder + global sld_cyl, lv_cyl, pv_cyl1, pv_cyl2, pv_cyl3 + sld_cyl= G4Tubs("cylinder",0., 2.*cm, 2.*cm, 0., twopi) + lv_cyl= G4LogicalVolume(sld_cyl, air, "cylinder") + + # + # the following placements are !! overlapped !! + # + # doubly placed + pv_cyl1= G4PVPlacement(None, G4ThreeVector(), "cylinder", lv_cyl, + pv_world, False, 0, True) + + # overlaped + pv_cyl2= G4PVPlacement(None, G4ThreeVector(10.*cm,0.,0.), + "cylinder", lv_cyl, + pv_world, False, 1, True) + + # sticked out + pv_cyl3= G4PVPlacement(None, G4ThreeVector(10.*cm,0.,0.), + "cylinder", lv_cyl, + pv_box, False, 0, True) + + return pv_world + +# ================================================================== +# main +# ================================================================== +# set geometry +myDC= MyDetectorConstruction() +gRunManager.SetUserInitialization(myDC) + +# minimal physics list +g4pytest.ExN01pl.Construct() + +# set primary generator action +g4pytest.ParticleGun.Construct() + +# initialize +gRunManager.Initialize() # overlap should be detected !! + + diff --git a/environments/g4py/tests/gtest08/CMakeLists.txt b/environments/g4py/tests/gtest08/CMakeLists.txt new file mode 100644 index 0000000000..aa44ddeaa5 --- /dev/null +++ b/environments/g4py/tests/gtest08/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test08 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test08 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") \ No newline at end of file diff --git a/environments/g4py/tests/gtest08/test.py b/environments/g4py/tests/gtest08/test.py new file mode 100755 index 0000000000..5b03e6a769 --- /dev/null +++ b/environments/g4py/tests/gtest08/test.py @@ -0,0 +1,74 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest09 +# - test for checking use of G4PhysListFactory +# ================================================================== + +from Geant4 import * + +# ================================================================== +# user actions in python +# ================================================================== +class MyDetectorConstruction(G4VUserDetectorConstruction): + "My Detector Construction" + + def __init__(self): + G4VUserDetectorConstruction.__init__(self) + + # ----------------------------------------------------------------- + def Construct(self): + # Python has automatic garbage collection system. + # Geometry objects must be defined as GLOBAL not to be deleted. + air= gNistManager.FindOrBuildMaterial("G4_AIR") + + # world volume + global sld_world, lv_world, pv_world + sld_world= G4Box("world", 1.*m, 1.*m, 1.*m) + lv_world= G4LogicalVolume(sld_world, air, "world") + pv_world= G4PVPlacement(G4Transform3D(), lv_world, "world", + None, False, 0) + + return pv_world + +class MyPrimaryGeneratorAction(G4VUserPrimaryGeneratorAction): + "My Primary Generator Action" + + def __init__(self): + G4VUserPrimaryGeneratorAction.__init__(self) + self.particleGun= G4ParticleGun(1) + + def GeneratePrimaries(self, event): + dx=0. + self.particleGun.SetParticleMomentumDirection(G4ThreeVector(dx, 0., 1.)) + self.particleGun.GeneratePrimaryVertex(event) + +# ================================================================== +# main +# ================================================================== +# set geometry +myDC = MyDetectorConstruction() +gRunManager.SetUserInitialization(myDC) + +# Create physics list +factory = G4PhysListFactory() +myPhysList = factory.GetReferencePhysList("FTFP_BERT") + +if myPhysList is None: + raise RuntimeError("No physics list named FTFP_BERT found") + +gRunManager.SetUserInitialization(myPhysList) + +# Event generator +myGenAction = MyPrimaryGeneratorAction() +myGenAction.particleGun.SetParticleByName("e-") +myGenAction.particleGun.SetParticleEnergy(200.*MeV) +myGenAction.particleGun.SetParticlePosition(G4ThreeVector(0.,0.,-14.9)*cm) + +gRunManager.SetUserAction(myGenAction) + +# Init, run terminate +gRunManager.Initialize() +gRunManager.BeamOn(10) +gTerminate() diff --git a/environments/zmq/README.md b/environments/zmq/README.md new file mode 100644 index 0000000000..69bfa90e24 --- /dev/null +++ b/environments/zmq/README.md @@ -0,0 +1,14 @@ +# ZeroMQ Interface for Geant4 + +Copyright (c) 2017, Koichi Murakami + +zmq-geant4 is a [ZeroMQ](http://zeromq.org/) interface with Geant4, +that is an alternative implementation of Geant4 UI session. +The interface is designed for the purpose of Geant4 kernel +for [Jupyter](http://jupyter.org/). +A Jupyter kernel is provided in +[igeant4](https://github.com/koichi-murakami/igeant4) repository. + +* [Releases](https://github.com/koichi-murakami/zmq-geant4/releases) +* [Install Instructions](https://github.com/koichi-murakami/zmq-geant4/wiki/Installation) +* [Issues](https://github.com/koichi-murakami/zmq-geant4/issues) diff --git a/examples/.README.HowToRun.txt b/examples/.README.HowToRun.txt new file mode 100644 index 0000000000..041a8e0718 --- /dev/null +++ b/examples/.README.HowToRun.txt @@ -0,0 +1,90 @@ + +///\file ".README.HowToRun.txt" +///\brief Examples How To Run README page + +/*! \page README_HowToRun How to build and run an example + +All basic and most of extended examples have a similar structure. +The main () function is included in \em exampleXYZ.cc in the example top directory +and the example source code is structered in \em include and \em src subdirectories. +When the example is built, the executable takes the same name as the file with +main () function without \em .cc extension, \em exampleXYZ. + +Then several macros are provided to run the example with various start-up +conditions. These macros have usually \em .mac extension. Besides these macros, +there is often a macro \em exampleXYZ.in (note its different extension) +which is used in Geant4 testing and which output, \em exampleXYZ.out, can be also included +in the distribution. + +You can find all details about building the examples in the Geant4 Installation Guide , in the section How to Use the Geant4 Toolkit Libraries . +Here we recall only the basics. + +\section HowToRun_s1 Compile and link to generate an executable + +\verbatim +% cd path_to_exampleXYZ # go to directory which contains your example +% mkdir exampleXYZ_build +% cd exampleXYZ_build +% cmake -DGeant4_DIR=path_to_Geant4_installation/lib[64]/Geant4-11.0.0/ ../exampleXYZ +% make -j N exampleXYZ # "N" is the number of processes +% make install # this step is optional +\endverbatim + + +\section HowToRun_s2 Execute exampleXYZ in 'batch' mode from macro files + +\verbatim +... go to the directory where the example was built/installed +% ./exampleXYZ xyz.mac +\endverbatim + +\section HowToRun_s3 Execute exampleXYZ in 'interactive mode' with visualization +\verbatim +... go to the directory where the example was built/installed +% ./exampleXYZ +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + +See also the explicit instructions for building TestEm1 example at +\ref README_HowToRunTestEm1 page. + +*/ + +/*! \page README_HowToRunTestEm1 How to build and run TestEm1 example + +Below we give the explicit instructions (described in general at \ref README_HowToRun page) for the example extended/electromagnetic/TestEm1. + +Let's suppose that the \em TestEm1 directory is available in $HOME and Geant4 installation in \em /usr/local and we work within the \em bash shell on a \em 64-bit machine. + +\section HowToRunTestEm1_s1 Compile and link TestEm1 to generate an executable + +\verbatim +% cd $HOME +% mkdir TestEm1_build +% cd TestEm1_build +% cmake -DGeant4_DIR=/usr/local/lib64/Geant4-11.0.0/ ../TestEm1 +% make -j 2 TestEm1 +\endverbatim + +\section HowToRunTestEm1_s2 Execute TestEm1 in 'batch' mode from macro files +\verbatim +% cd $HOME/TestEm1_build # or cd $HOME/TestEm1 if example was built with GNUmake +% ./TestEm1 annihil.mac +% ./TestEm1 brem.mac +% ./TestEm1 TestEm1.in >& myTestEm1.out # redirecting output in a file +\endverbatim + +\section HowToRunTestEm1_s3 Execute TestEm1 in 'interactive mode' with visualization +\verbatim +% cd $HOME/TestEm1_build # or cd $HOME/TestEm1 if example was built with GNUmake +% ./TestEm1 +PreInit> /run/initialize +Idle> /run/beamOn 1 +... +Idle> exit +\endverbatim + +*/ diff --git a/examples/.README.HowToRunMT.txt b/examples/.README.HowToRunMT.txt new file mode 100644 index 0000000000..7382804e9d --- /dev/null +++ b/examples/.README.HowToRunMT.txt @@ -0,0 +1,86 @@ + +///\file ".README.HowToRunMT.txt" +///\brief Examples Tips How To Run MT README page + +/*! \page README_HowToRunMT Tips how to run an example in multi-threading mode + +Only migrated examples or user applications can be run in multi-threading (MT) mode. +The instructions for migrating user applications can be found in Geant4 documentation guides +and a short howto is available here: + +https://twiki.cern.ch/twiki/bin/view/Geant4/QuickMigrationGuideForGeant4V10 + +In this file, we give just useful tips for running already migrated examples +(or user applications). + +\section HowToRunMT_s1 Run example in multi-threading mode + +No special steps are needed to build an example in multi-threading (MT) mode. +The examples which has been migrated to multi-threading will automatically +run in MT when they are built against the Geant4 libraries built with MT mode +activated, otherwise they will run in sequential mode. +Not migrated examples will run in sequential mode even when built against +Geant4 libraries built with MT mode activated. + +The examples which do NOT support MT can be easily recognized by the following line +of code in main (): +\verbatim +G4RunManager* runManager = new G4RunManager; +\endverbatim +or +\verbatim +auto* runManager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::SerialOnly); +\endverbatim + +\section HowToRunMT_s2 Set number of threads + +When the number of threads is not selected in the application, the default number +(which is actually 2) will be used. Another number of threads can be set in several +ways: + +- in the code +\verbatim + auto* runManager = ...; + runManager->SetNumberOfThreads(4); +\endverbatim + +- in a macro file via UI command added just before /run/initialize +\verbatim +/run/numberOfThreads 4 +\endverbatim + +- by setting the environment variable +\verbatim +export G4FORCENUMBEROFTHREADS = 4 +or +setenv G4FORCENUMBEROFTHREADS 4 +\endverbatim + +The environment variable value is forced and it cannot be changed from a code +call or a macro. A warning is issued in such situation. + +\section HowToRunMT_s3 Output from threads + +In MT processing each worker produces its output and these messages are interlayed +on the screen. The messeges from threads are preceded with a predefined string +G4WTi> where i is the thread number. Users can change this default behaviour +and choose + +- to limit the output from threads to one selected thread only: +\verbatim +/control/cout/ignoreThreadsExcept 0 +\endverbatim + +- to redirect the output from threads in a file: +\verbatim +/control/cout/setCoutFile coutFileName +/control/cout/setCerrFile cerrFileName +\endverbatim + +- to buffer the output from each thread at a time, so that the output of each + thread is grouped and printed at the end of the job +\verbatim +/control/cout/useBuffer true|false +\endverbatim + +*/ diff --git a/examples/.doxygen/.README.HowToNavigate.txt b/examples/.doxygen/.README.HowToNavigate.txt new file mode 100644 index 0000000000..c4bcbc0ec4 --- /dev/null +++ b/examples/.doxygen/.README.HowToNavigate.txt @@ -0,0 +1,24 @@ + +///\file ".README.HowToNavigate.txt" +///\brief Examples How To Navigate README page + +/*! \page README_HowToNavigate How to navigate in the examples documentation + +The examples documentation is composed from a "global" documentation including all examples with classes which has unique names (eg. A01DetectorConstruction etc.) and from "standalone" documentations for examples with classes which names are not not unique (DetectorConstruction etc.). + +\section HowToNavigate_sec1 Global documentation + +The lists of "Related Pages" and "Modules" in the global documentation include the README pages for all examples categories and examples with both unique class names and generic ones. The lists "Namespaces" , "Classes" and "Files" include only the examples with unique class names. + +That's why the README pages for the examples with a standalone documentation generated in the global documentation do not contain links to their classes +(one cannot click on a class name here to get the class documentation). See eg. \ref ExampleTestEm1. + +\section HowToNavigate_sec2 Standalone documentations + +The links from "global" documentation to the examples "standalone" documentation are available in the list of "Modules". When selecting eg. "TestEm1" here, you will be directed to the main page of its standalone documentation. When selecting then "Example TestEm1" from the "Related Pages" list here (there is only one page in the list) you will get the example documentation with hyperlinks to the classes etc. + +All the lists in the examples "standalone" documentation include only the concerned example and eventually the classes shared with another examples or the classes from common if they are used in the example. + +This organization was necessary as Doxygen does not support the classes with the same names in one system. + +*/ diff --git a/examples/.doxygen/.README.novice.txt b/examples/.doxygen/.README.novice.txt new file mode 100644 index 0000000000..8f53f38a84 --- /dev/null +++ b/examples/.doxygen/.README.novice.txt @@ -0,0 +1,25 @@ + +///\file ".README.novice.txt" +///\brief Geant4 Old Novice Examples README page + +/*! \page README_novice Old Novice Examples + +The old "novice" set of examples is now replaced with a new "basic" set, +covering the most typical use-cases of a Geant4 application with keeping +simplicity and ease of use. + +The source code of the last version of the novice examples set +(in 9.6.p02 release) can be viewed in + +the Geant4 LXR code browser + +The new location of each example in 10.0 release: +- N01 - removed +- N02 - \link ExampleB2 basic/B2 \endlink +- N03 - \link ExampleB4 basic/B4 \endlink +- N04 - \link ExampleRE05 extended/runAndEvent/RE05 \endlink +- N05 - \link ExamplePar01 extended/parameterisations/Par01 \endlink +- N06 - \link ExampleOpNovice extended/optical/OpNovice \endlink +- N07 - \link ExampleRE06 extended/runAndEvent/RE06 \endlink + +*/ diff --git a/examples/.doxygen/README b/examples/.doxygen/README new file mode 100644 index 0000000000..99e4a37d89 --- /dev/null +++ b/examples/.doxygen/README @@ -0,0 +1,25 @@ + +To generate Doxygen documentation for all examples: + +1) Check in Doxyfile, Doxyfile_standalone the value of + STRIP_FROM_PATH variable and adjust it if needed + +2) Download geant4.tag file from: + http://www-geant4.kek.jp/Reference/10.01/geant4.tag + and update the version number in TAGFILES value + in Doxyfile, Doxyfile_standalone + +3) Generate documentation for all examples with unique class names + (alltogether): + doxygen >& doxygen.out + +4) Generate documentation for examples with non-unique class names + (a standalone documentation will be generated for each example) + ./generate_standalone.sh + +To extract coding guildelines violations from Doxygen output +(requires using patched Doxygen): + + cat doxygen*.out | grep "### Geant4 guidelines violation: data member" >> data_members_violations.txt + cat doxygen*.out | grep "### Geant4 guidelines violation: function member" >> function_members_violations.txt + diff --git a/examples/README b/examples/README new file mode 100644 index 0000000000..a3cb3f8a56 --- /dev/null +++ b/examples/README @@ -0,0 +1,50 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Examples module + --------------- + +This module collects three sets of user examples aimed to demonstrate to +the user how to make correct use of the GEANT4 toolkit by implementing +in a correct way those user-classes which the user is supposed to +customize in order to define his/her own simulation setup. + +The "basic" set of examples is oriented to novice users and covering +the most typical use-cases of a Geant4 application with keeping simplicity +and ease of use. + +An "extended" set of examples may require some additional libraries besides +of Geant4. This set covers many specific use cases for actual detector +simulation. + +An "advanced" set of examples covers the use-cases typical of a +"toolkit"-oriented kind of development, where real complete applications +for different simulation studies are provided; may require additional third +party products to be built. + +Most of the examples can be run both in interactive and batch mode, and +input macro files (*.in) and reference output files (*.out) are provided. +See the detailed instructions how to build and how to run an example +in README.HowToRun and README.HowToRunTestEm1. Several tips how to run +an example in multi-threading mode can be found in README.HowToRunMT. + +Basic and most of the extended examples are considered part of the +system testing suite for validation of the official releases of the +GEANT4 toolkit. Basic and some of the extended and advanced +examples are also used as "acceptance"-tests for the release process. + +The previous set of examples oriented to novice users, "novice", +has been refactored in "basic" and "extended" examples sets in Geant4 10.0. +The source code of the last version of the original novice examples set +(in 9.6.p02 release) can be viewed in the Geant4 LXR code browser: + http://www-geant4.kek.jp/lxr/source/examples/novice/?v=9.6.p2 + +And more on what is common for all examples: +- README.HowToRun +- README.HowToRunMT + +Web: https://geant4-userdoc.web.cern.ch/Doxygen/examples_doc/html/index.html + diff --git a/examples/README.HowToRun b/examples/README.HowToRun new file mode 100644 index 0000000000..6df9caf7e1 --- /dev/null +++ b/examples/README.HowToRun @@ -0,0 +1,80 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + How to build and run an example + ------------------------------- + + All basic and most of extended examples have a similar structure. + The main () function is included in exampleXYZ.cc in the example top directory + and the example source code is structered in include and src subdirectories. + When the example is built, the executable takes the same name as the file with + main() function without .cc extension, exampleXYZ. + + Then several macros are provided to run the example with various start-up + conditions. These macros have usually .mac extension. Besides these macros, + there is often a macro exampleXYZ.in (note its different extension) + which is used in Geant4 testing and which output, exampleXYZ.out, can also included + in the distribution. + + You can find all details about building the examples in the Geant4 Installation Guide: + "https://geant4-userdoc.web.cern.ch/UsersGuides/InstallationGuide/html/index.html" + in the section How to Use the Geant4 Toolkit Libraries: + https://geant4-userdoc.web.cern.ch/UsersGuides/InstallationGuide/html/buildtools.html" + Here we recall only the basics. + + 1) COMPILE AND LINK TO GENERATE AN EXECUTABLE + + % cd path_to_exampleXYZ # go to directory which contains your example + % mkdir exampleXYZ_build + % cd exampleXYZ_build + % cmake -DGeant4_DIR=path_to_Geant4_installation/lib[64]/Geant4-11.0.0/ ../exampleXYZ + % make -j N exampleXYZ # "N" is the number of processes + % make install # this step is optional + + 2) EXECUTE EXAMPLEXYZ IN 'BATCH' MODE FROM MACRO FILES + + ... go to the directory where the example was built/installed + % ./exampleXYZ xyz.mac + + 3) EXECUTE EXAMPLEXYZ IN 'INTERACTIVE MODE' WITH VISUALIZATION + + ... go to the directory where the example was built/installed + % ./exampleXYZ + .... + Idle> type your commands + .... + Idle> exit + + + Below we give the explicit instructions for the example + extended/electromagnetic/TestEm1. + + Let's suppose that the TestEm1 directory is available in $HOME and Geant4 + installation in /usr/local and we work within bash shell on a 64-bit machine. + + 1) COMPILE AND LINK TESTEM1 TO GENERATE AN EXECUTABLE + + % cd $HOME + % mkdir TestEm1_build + % cd TestEm1_build + % cmake -DGeant4_DIR=/usr/local/lib64/Geant4-11.0.0/ ../TestEm1 + % make -j 2 TestEm1 + + 2) EXECUTE TESTEM1 IN 'BATCH' MODE FROM MACRO FILES + + % cd $HOME/TestEm1_build # or cd $HOME/TestEm1 if example was built with GNUmake + % ./TestEm1 annihil.mac + % ./TestEm1 brem.mac + % ./TestEm1 TestEm1.in >& myTestEm1.out # redirecting output in a file + + 3) EXECUTE TESTEM1 IN 'INTERACTIVE MODE' WITH VISUALIZATION + + % cd $HOME/TestEm1_build # or cd $HOME/TestEm1 if example was built with GNUmake + % ./TestEm1 + PreInit> /run/initialize + Idle> /run/beamOn 1 + ... + Idle> exit diff --git a/examples/README.HowToRunMT b/examples/README.HowToRunMT new file mode 100644 index 0000000000..b23ba6bd78 --- /dev/null +++ b/examples/README.HowToRunMT @@ -0,0 +1,80 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Tips how to run an example in multi-threading mode + -------------------------------------------------- + + Only migrated examples or user applications can be run in multi-threading (MT) mode. + The instructions for migrating user applications can be found in Geant4 documentation guides + and a short howto is available here: + + https://twiki.cern.ch/twiki/bin/view/Geant4/QuickMigrationGuideForGeant4V10 + + In this file, we give just useful tips for running already migrated examples + (or user applications). + + 1) RUN EXAMPLE IN MULTI-THREADING MODE + + No special steps are needed to build an example in multi-threading (MT) mode. + The examples which has been migrated to multi-threading will automatically + run in MT when they are built against the Geant4 libraries built with MT mode + activated, otherwise they will run in sequential mode. + Not migrated examples will run in sequential mode even when built against + Geant4 libraries built with MT mode activated. + + The examples which do NOT support MT can be easily recognized by the following line + of code in main (): + + G4RunManager* runManager = new G4RunManager; + +or + + auto* runManager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::SerialOnly); + + 2) SET NUMBER OF THREADS + + When the number of threads is not selected in the application, the default number + (which is actually 2) will be used. Another number of threads can be set in several + ways: + + - in the code + + auto* runManager = ...; + runManager->SetNumberOfThreads(4); + + - in a macro file via UI command added just before /run/initialize + + /run/numberOfThreads 4 + + - by setting the environment variable + + export G4FORCENUMBEROFTHREADS = 4 + or + setenv G4FORCENUMBEROFTHREADS 4 + + The environment variable value is forced and it cannot be changed from a code + call or a macro. A warning is issued in such situation. + + 3) OUTPUT FROM THREADS + + In MT processing each worker produces its output and these messages are interlayed + on the screen. The messeges from threads are preceded with a predefined string + G4WTi> where i is the thread number. Users can change this default behaviour + and choose + + - to limit the output from threads to one selected thread only: + + /control/cout/ignoreThreadsExcept 0 + + - to redirect the output from threads in a file: + + /control/cout/setCoutFile coutFileName + /control/cout/setCerrFile cerrFileName + + - to buffer the output from each thread at a time, so that the output of each + thread is grouped and printed at the end of the job + + /control/cout/useBuffer true|false diff --git a/examples/advanced/CaTS/README.md b/examples/advanced/CaTS/README.md new file mode 100644 index 0000000000..cbc38c29e0 --- /dev/null +++ b/examples/advanced/CaTS/README.md @@ -0,0 +1,118 @@ +![alt text](https://github.com/hanswenzel/CaTS/blob/master/images/CaTS.png) +# CaTS: Calorimeter and Tracker Simulation + +CaTS is a flexible and extend-able framework (based on geant4 and ROOT) +for the simulation of calorimeter and tracking detectors. +It also serves as an Example that demonstrates how to use opticks +from within Geant4 for the creation and propagation of optical photons. +https://bitbucket.org/simoncblyth/opticks.git. + +The components of CaTS are: + + +Detector Description: described in gdml input file (e.g. crystalcal.gdml) +(Geometry, Materials, + optical properties, + sensitive detector) + +Input modules: + + GPS + Particle Gun + HEPMC (Pythia) + + +Physics Lists: choice of all Reference Physics Lists + optical physics processes (Cerenkov, Rayleigh, + Scintillation etc.) are added (talk to) + +Sensitive Detectors: (+ corresponding Hit classes) + + TrackerSD(Hit) registers the step points of charged particles. + CalorimeterSD(Hit) registering energy deposit + DRCalorimeterSD(Hit) besides registering energy deposit counts produced Cerenkov photons + MsCSD(Hit) used to study multiple scattering on a thin layer + PhotonSD(Hit) sensitive detector that registers optical photons. + lArTPCSD(Hit) sensitive detector that registers ionization and collects Gensteps (Scintillation and Cerenkov) to be processed by Opticks. + + + + RadiatorSD no Hits just collection of Gensteps (Scintillation and Cerenkov) to be processed by Opticks. + + + +This requires the opticks environment to be set up properly (see https://github.com/hanswenzel/CaTS/blob/master/Instructions.md) + +To get started : + +```bash +git clone https://github.com/hanswenzel/CaTS.git +cd CaTS/ + +# to setup the opticks environment source the setup_opticks.sh file described in: +# https://github.com/hanswenzel/CaTS/blob/master/Instructions.md + + +source (path to opticks WORK_DIR)/setup_opticks.sh +cd ../ +mkdir CaTS-build +cd CaTS-build + +cmake -DCMAKE_BUILD_TYPE=Debug \ + -DWITH_G4OPTICKS=ON \ + -DCMAKE_PREFIX_PATH="${LOCAL_BASE}/opticks/externals;${LOCAL_BASE}/opticks" \ + -DOPTICKS_PREFIX=${LOCAL_BASE}/opticks \ + -DCMAKE_MODULE_PATH=${OPTICKS_HOME}/cmake/Modules \ + -DCMAKE_INSTALL_PREFIX=../CaTS-install \ + ../CaTS + +make install +cd ../CaTS-install/bin +time ./CaTS -g simpleLArTPC.gdml -pl 'FTFP_BERT+OPTICAL+STEPLIMIT' -m time.mac + +Only the -g command line variable is mandatory! If you don't specify the macro file interactive mode is assumed: + +./CaTS -g simpleLArTPC.gdml -pl 'FTFP_BERT+OPTICAL+STEPLIMIT' + +``` + +to compile CaTS without Opticks do: + +```bash +cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_G4OPTICKS=OFF -DCMAKE_MODULE_PATH="../CaTS/cmake/Modules" -DCMAKE_INSTALL_PREFIX=../CaTS-install ../CaTS +``` +if you don't provide the -pl argument the default physics list configuration: +'FTFP_BERT+OPTICAL+STEPLIMIT' +is used + + +![alt text](https://github.com/hanswenzel/CaTS/blob/master/images/display.png) +to look at the hit collection and make a few histograms: + + ./readPhotonHits NewHits_point_Run0.root PhotonHistos.root Det + +The 3 arguments here are: name of input file (hits), name of output file for the histograms and the logical Volume that sensitive detector (PhotonSD)is attached to. +One can then use root to look at the plots: + +```bash +root histos.root + ------------------------------------------------------------------ + | Welcome to ROOT 6.22/06 https://root.cern | + | (c) 1995-2020, The ROOT Team; conception: R. Brun, F. Rademakers | + | Built for linuxx8664gcc on Dec 13 2020, 13:28:00 | + | From tags/v6-22-06@v6-22-06 | + | Try '.help', '.demo', '.license', '.credits', '.quit'/'.q' | + ------------------------------------------------------------------ + +root [0] +Attaching file histos.root as _file0... +(TFile *) 0x559578f76f60 +root [1] TBrowser b +(TBrowser &) Name: Browser Title: ROOT Object Browser +``` + +![alt text](https://github.com/hanswenzel/CaTS/blob/master/images/position.png) + +For comparison one might want to disable Opticks and use Geant4 to generate and propagate optical photons: + + time ./CaTS -g simpleLArTPC.gdml -pl 'FTFP_BERT+OPTICAL+STEPLIMIT' -m time_G4.mac diff --git a/examples/advanced/ChargeExchangeMC/README b/examples/advanced/ChargeExchangeMC/README new file mode 100644 index 0000000000..7013091bc2 --- /dev/null +++ b/examples/advanced/ChargeExchangeMC/README @@ -0,0 +1,104 @@ + + ===================================================================== + Geant4 - Cexmc advanced example + ===================================================================== + + README + ----------------------- + +Author: A. Radkov (alexey.radkov@gmail.com) + +------> Introduction + +Cexmc stands for Charge EXchange Monte Carlo. The program was used to simulate +real experiments in Petersburg Nuclear Physics Institute (PNPI, Russia). +Detailed User's Manual and explanatory images of the experimental setup can be +found in directory doc/ of this example. + +------> Compilation + +Basic modules of Cexmc must compile with Geant4 version 9.4. Cexmc won't compile +with older versions of Geant4. Cexmc contains several optional modules which can +be enabled or disabled in the makefile by setting dedicated macros: most of them +are listed in the beginning of the makefile and well commented. Modules may +involve additional dependencies. In the following table the dependencies and +related modules are shown. + +Dependency Requirement Makefile Macro / Module Comment +-------------------------------------------------------------------------------- +boost::serialize Optional CEXMC_USE_PERSISTENCY / used when + Persistency (de)serialization of + events and run data + +boost::split Optional CEXMC_USE_PERSISTENCY / used when parsing + Main command line + arguments related to + persistency module + +boost::spirit Optional CEXMC_USE_CUSTOM_FILTER / used in custom + Custom filter filter engine + +cernlib Optional CEXMC_USE_GENBOD / Main user can choose + native GENBOD() as + phase space + generator + +CERN ROOT Optional CEXMC_USE_ROOT / used in histograming + Histograming + +CERN ROOT / Qt Optional CEXMC_USE_ROOTQT / used for live +binding Histograming histograms in Qt + sessions +-------------------------------------------------------------------------------- + +The persistency module is compatible with a pretty old boost::serialize version +(compilation was tested under Scientific Linux 4.8 with gcc 3.4.6 and boost +version 1.32). Custom filter requires a newer boost as far as it uses modern +boost::spirit library which requires boost version 1.37 and higher. +Presence of CERN ROOT libraries is tested automatically in the makefile, but it +is possible to disable or enable the histograming framework manually using flag +CEXMC_USE_HISTOGRAMING in the makefile. +Compilation of visualization modules and interactive sessions depends on whether +standard Geant4 macros like G4VIS_USE, G4UI_USE, G4UI_USE_TCSH and G4UI_USE_QT +have been set. +If boost is installed in a special path in your system then you may need to +properly set environment variables BOOST_INCLUDE_PATH and BOOST_LIBRARY_PATH +which denote directories where boost include files and libraries are located. + +------> Run modes + +Run modes are set from command-line options. To see available command-line +options type in terminal 'cexmc -h' or just 'cexmc'. Some run modes can be +unavailable if certain modules were not compiled. + +Here is list of run modes categorized by type of interaction with user: + + 1. Batch mode. The simplest mode without any interaction with user. + No command line option is required. + 2. Interactive mode. The program provides an interactive shell. + To run in the interactive mode command line option -i must be specified. + 3. Graphical Qt mode. This mode is specified by command line option -g. + +List of run modes categorized by task: + + 1. Straight mode (or Monte Carlo mode). The program will read preinit and + init macros, then calculate acceptances and (optionally) save data in + project files. Project files are saved in a directory defined by + environment variable CEXMC_PROJECTS_DIR (or in the current directory if it + is not defined), name of the project is specified by option -w. Preinit + and init macros are set by options -p and -m respectively. In the straight + mode preinit macro must be specified explicitly, as far as desired + production model can be instantiated only in preinit phase. + 2. Replay mode (or Read project mode). In this mode the program will not use + common Geant4's event loop. Instead, it will sequentially read event data + from an existing project and pass them into + CexmcEventAction::EndOfEventAction(). The read project is specified by + option -r. This mode is useful when user wants to recalculate data from an + existing project with different conditions (for example with different + reconstruction parameters) or apply a custom filter. The results of run + can be written again into another project. + 3. Show results mode (or Output mode). The program will output various data + from an existing project (specified by option -r). Type(s) of data are + specified in option -o. For example, to show results of a run user can + specify -orun in command line. To show events, geometry and run results + user can specify -oevents,geom,run. diff --git a/examples/advanced/ChargeExchangeMC/doc/CexmcSetupImages.pdf b/examples/advanced/ChargeExchangeMC/doc/CexmcSetupImages.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d5d73ca17e5f5f713911952cf99850d9fd8a288b GIT binary patch literal 721387 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∋Li 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�|ODCj~R=}eLnH@^xfIn>kP){fUwDQGR?)s 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%0At)<@d+O8>ReWJU0}$cW-&`-oLzbsn0JmIJ>fP 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 G#rYrT3XxL) literal 0 HcmV?d00001 diff --git a/examples/advanced/ChargeExchangeMC/doc/CexmcUsersManual.pdf b/examples/advanced/ChargeExchangeMC/doc/CexmcUsersManual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..07098bd8d4fe0325e2a292413c37c4515f53c0bd GIT binary patch literal 544235 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�=UJVHI!Cahmg@qysDs|YT`36OPh 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�U4O`52LuETJQ`#PC*L10kNt3_AQh)@PRc|C^(No2%F(KO zE@c-yEcOVK;*!*Zs$dzg_yr4%$0BVA!ipsIgSN_+H{n^EhT7gf|%?G=zW?Ia42&4PW7tux`#MoNJ1x<9Ao6hVyJH2dS{w0!A#FrGuU_I+hEU7}u0 zu8tb_K9Lxt{DR9MH*k~B_4o9hVg-Y-{Y%PLPn2ptjr?Wx&3umx7Ibf+-Q} zxjfq|(9P@f{uxIo=>7fn_BnlY);oKy)qgU`*OhrPeztn{wuq>(^Y!notPI!t`x^1x z!Tn|WC~nocl1~_%L-~F3 zW6*YuAc*3|x(Gm}I>T9uAjGUAg6J8}gK;z@%OR>FgnNbu9G5f9CDIIFK&b8VEL34u&3eur)w&8*G*0Z<1~%vd*Zoy-%E`;2WK z?7e?@sWA3EE3ANY!BL>6OPyc)cM#vRv5)Z;cOqrWoC9x?~bCh z#!9D?+Lhk7IS$HvuV9VLtSjL`^;`})cQ0H`bc+8Qh6UUNTL^<}0=GxB;1(6zr+b%B zerhEv6Tq;mH732EMrH+yC?@cV=3tO8P~G!79SxkC({CDK>7)~Rm;9HaO{I8j$RUab zI&S{=pd$>Q#1^F`;PUC!VYR3{6R3uT8A=pFOv*{nAW>|*=&B`{?_5F* zuO}8HmXgS{^d<4%4ACmpa1~m!aC(&E-6?Ant&8u`?%hz*t?FTvHgj2IAQgEE!6Kx5 z`z$Qlu#GO7(rQZGaC!na*4HHPA&;x(_1~eLF%llvkV6Q{OCbSW{0%B>I7?Dxc~YJc z@!QV*!+dmi6KSY0Ai>jqf*bCX3e1T^WybNYR5V3gpLc&94}=(6@Pw(05%vjGydZQt zIb_9`V%Rm@W3mJIw|HmLa`5;{oH(DzT{(D9oqcKDTU z`B-V_r%SM`N_uBK9yO^MPbzFbeM3SPgUnRptRYg(DESDMm-3&)KUKKcOa3JZ;Er|cFJHkN{?AJw(OJ#`a>uk?-c|*U2OBfdg5`gbhiuF z)RxJ5{i_s=It%x}hL2=E{|4=5#o7fxk?FIDG*yT)4qVJfuymmy&YKH-#;iy253F~6 zdj>8#u@H^AN&!j31|ud5FwSdNJoSa9ap$wWNVlkwrcTg83`ISa@(GCSNT(ApL9@y( z=zFK5MU7Uk3cdJNvNoX{2OH5zK<$wK?%cyAhec%5N8l)WZK9W{mPXEoqaZY0bV|`F zpA)(D9g%qc>901G1Bd|aynMJ4*WpS<9=wID3lzur&7CtLo^4W*j18aSrzETDLw5Py z$5bOA8vL}q+BSpSugvr`(6uFkc3)#D`MZB;jl%Lue|cu@g~8Ynb^rP`RDy*a2sWuJA$K9LKdU@V;EpVWPC&NvE zUv*Jx@?m(6nJb%63G_QMx0snDG*^~Q5Tx9F2)9zX2+96gJ#y6;3VM#eY-O}x%D8PN zFD6lSj`9Ii)CvWPNC&K}E`sxtLYs=!zzaMn+98KxtQ@{Bfp`)3l>G7scWmeJ7~cwi zl(m|vCMu|c%6&mkFKLh!qUocD-FS>z9$yAGcVbX=LX@Bgguv{i#HDV(C_Ox6w7T*6 zr7*ru+lA;I1osBT89Q4aNU!lBgF$NvOCJHkAA+ z{(OP<$S??$EV=<-E1M$q%gxmJEQif>2t!Liz;{Ka zGqTsC4c3?kF1=F^i6b3rm=UiD2zgEt>lIR@Q%Qs}ku)C^`tNq>Ff>+HlqR0L z29*q&aLGj*)q4@{d_$GwfXAl_lvuJR%D>8?hE|o*)U}!_0r3|?h3xpxlDf~Tl_-c> zjHI=RT+4;mLSF98RF@|66N8|vV$>II7U2l7ora?UV!x5;;I^o_%x#NmzKpyXO91)f z>WSLk8Poh0`9G0zAVR+fSEFo$g4=k^XU7nqwM|5SRDEPNre1w~j?u;}R z!fju^OI?Pn%`1BE$DnbB3w)xa zT&9pv&Puo~$}(H0D%X;^sooCy2;)^t8n=2ZjKv3|3&;n#3qu*a`KeKAt3w_9m4yG8 zt-1!NZ<5r5NwL1x>a@pENn~jM`I5kl+H=n(J65AJ>$XKXqL*%B?uC|nD~tT6%;TXJeg`K=du|3g zk$77y!2UXbRLOL*J1PE*fwoMa3BH3S*cTycna!;{Q8jpeKYKq|KfvUiV+f5(c++>% zy8;ul2J4i?)6p*U^u-lMvzC6uUsX}3zZGW`O=p1vi2*EeWX1`TJ8r5T;nZ`h3rD(Y z1LHRVUPXYS^BVE3s|w5E%7m6xL6QUtBr92oq@{Ci{a7;;E1rZ)P^( zv4$Qz2x17%k^_Isw=ian{d$z|JXu`TIM-)?nZUTxfmB1`1AVza??DQ0oj+5ICm+T>~`4d#j?9x(}lfx zDjjIPeFk?RqwGRNu;Z3o8R4NoIt)zB`iVz6??)FHsh_&7udYd%SRML!83J}|#tb>~ z+Lz92HU{Swwukmldqdu?G9|UX6yu;)Z*5qE3OG=quhMYlHIqzNCiQkbQFX17k~X$I zO1+3}JeDEkn>E80J-2OrVRwgVbs`i_oJx&TF6~An-hoV@5phlHu%s2Mj0*~}jE*ME zYot{tPW>Hwai~@fI~<=>R!mpQI$m}t)nYCBi`zB61m|E-J|XgalJ$WzVj*;GThdG< z*)wxvvb~Th?ddJ$f-iJ7uioHX%de4O4PO6b<@H`|1xeDVgVFAd0X~~-f%^VtrzuMq z5o!bbVa5E!RaST36_Xtp#oAEkbrMdcY6qeTXGSx{L*?6xd{1a?UU?-?i&hCobb0j zBU(3P^^Ru>R^333H{^~Za}fETv4E!3@|9r1{DAcO)iHx*HI?;pOV_2Vz>;EtkeUbN z2mCs@IBFea*UpJu*+_b#@RDZhMet*ODUJS-cn#&jxwAh6nmbGA2x}jao?@4F&G_)= z!Ewx7Y$E`5t9LtXT!F*?bxJQhJX3SW&v0pcMb)tKTNU==vmcESw<$8z{1`oE*}d}b z888bU=(m8yS*iYUSV(Vfj!v`D$+S44Ry+DbzQxf3wi{I;dltubRhQwOdTflz9(_h< z`nme0j=?$TitX?%R<&1@c1DTsVoTbEomLAvsZrAA&{Y7X`j=HTFX_Pv>_B#3p znJ3f%EmWU`>jJ88pt~n#XU=)!<{!@b&4^G4vYwnRJMif9&(=7CqgGTo+w&@%Y$}XV z`H2C9$|{NQ*u23Tf^WP;GN@)Q63zvx(2d!OdT2}?NVMujT#x2ztlc3XY>TW1xJMSK z%fuQiGD>pBOaCJcq}!aQ25g-zqbn(c%6Ob6+_OyxUQz3kDZsu&xAq4ojdiRrOK17_ zDUXBq$EP2q6QS$>jcE9fRrrr+U}I+C`hVyLW;V|M!9OswasB@wAg2E#Ali|AZ}gRR zIYm~fge6MzEy_`C*20G2KMX#Zax>Tk%*^-+G@o~PT@DLWsZ^?KMoQOm&MTy)kne^u z3!qFR`7eEa+<$*Qf87Z7e&721e&74Ny~$aFe%ICM9@VQg*tzNP@q9gd>10IIc>lMR z*VFrbfA`fI7dF^QIOErLIkdQVhEiL!+S<#XolDqMFxfG4d3F7EaJ@Bs4YOu`gk#@mpPN($pSHl2~&pHkcIwMO1Xr+t6Bplv% z%%F@CR*ya>V)#`-)W`-F&P1t(J0`&ZI*CzfIR!~Pt?W>>4@4KLoRD{uK~bNQC)jz6 zFYu>5tv`g-@J(mntBx;Xrt4=9l}kzloH@xlrlNo9-x~-WT2rZz&sMvVE@_SIG_1n9 zzc?o$ayM$>A$OcznCptQb+sy@9DgH6NkYW7jkT}<6`&^k?0_ij3^WEii%CO=0;6Od zn$Y}xZ-zFz)8Lo`B-JTuQ)8}`@xaIsT;~)t>jPY*`nK6K`$&ECQwbGuzbUQz<${_4 zK{uU|{u;)qx{&W&xdu-)W%C#suHQME<7;-cm=}ENr$Tn2+Cd?EoJ&NLzScZgngHdl z;`x8xeVa*Vi2LtgkdgWB`4+Eh_`AaPVhV&XSKE4d1k(Y1hXMueP{%+B=2$&N`daT> zMWuOsUq^3ohOV%b^KBXr=%JSdlj{TVF=q!9%R5^=Kgz7Ik7*9o!-vj2y4M&Rc6kQb3O3VVI^bzKS zC1G00%xT_(Sk?UpGMjxI)b=pTJqQH#WCpVh@WS(LF zJ(Ad54J*_x-&$3@^ot=HFoEC>3zY}WO|Kxp|14B+IKVV^>B`g&S>*)61X=K`?IFW$5DPr>VN8G$s~sUPqN81p?QoPpJ3swQF+bYX(Z{0mDXX#t(}9s|sBvLY=w zDZTrpQ0()~Vb{f<@+Cz-F>I&=iXHqx>ROzGdJ)WKtvyckn>((?cmN<2m*BMI&k!ck zB|h+yn7c5S^2rRA_uybjnlp6E=J7dX1)556yEyFp8?okBaM0mW4>-hzp{oq<6Y493 z3kqu-v8QH>%gjQ|hBLIIfjyu2foQi^(9{^WQ&%BUEL8FH5a>Yb{qYp)lg~YV@ z#o}c75K&O7-Sx~DE=IuhWHcTZOogLK?k+{c4i<}6kNqpjlco%g*g09Gh>Id(0a$qw zO|M5Z8E7I|^$2`PP^1w>2-w}|=RYWMVCIAjb!p?^AI1MEl2g+UN8u=Uc_%i5?G!))iUcxp1}Q7ZnxG4v0ZiT@)O z!hOhobG@*R?#)gp%Vi0RXMq=nON0|n4>?fqAOn~z5MyLv?|Ef*Pv=ulDoG$wAC|5+ zn3g^8X_lf9YWQZC9&_&5ywFS)j`GYOp6)irJP>)HxN@r?Hg#aAQ6YnTi*ai@?%P$Jxg)V8%^uBODG z+Gg;KurOfCMA8%X`2PDmn|u)yQjtfO!09t&Z02&)qJI(1ifgQ#MIQZaa2Kd?dbWdG zf|a1{r5! zqDuN5#Db~?c(0&8CK~|Cs9g9{vS<+&5yJm(wU9{tBVm4jMIi)^RgS4@9Cjc+TdYY( zmT?A-Lph5*m90K_EQ`GZ=}vuTy{fTiG4U0DdSbB-gn2swJ z`OA4v7&X^yQlx5aj-y4^zWSFkw2cu&9Q*Q1SGNC!_M(lSgqE7}=7__QtXcspF%jmFVdkTbIb4qOxDxW=23%H7}t4!hz^f}U*~)G%YL3^bVs z@-Rw`W7?!YmmO7Bc$uZ{_q?#pEB|m?x^?uZN}o7y-s#_y*-~%S%A3f!U5FF!9lKD% zY_qL7hDeY{P=-}g2QLak?nuZRyctp`zNVYX7eKy;F{Qj+gP#L?gngc-;k6qc$qP$| zvHr2a6^PeUOh*#MEZ$$z*+v#8B2b_MZsg$Wv5~Df96ZmjfbDRXAqSm1TrQIt_le}? z1dP|59sA9rr)XbU`C`T1(Y6XuQ9mdVCJ&T?cL_X#90Q*e`IKrKe!SsE-TufHJ&p0z z2&2fr5eUv380ekNXDule7=!59nkOt#>yrWb+0;5yl4=&=floAEc+kCT_qe}v)q*ph zP$pWNeNi1)g7dEOX*m^YzB@zw;xKC`Z5#`C&O*9a&ntiu@F)UEnMX5+oMOhI0P1dg0QSb|zfHQ@cp4U+SzJo%7cz<63Ot zZg13Lq_8G%6C|s~n>U0k*v)?JE8iX|XunLLEymVwv9uvJMjdJwWSDHWOUGAQzNs!J zaFxknG?bw=;Ti_VZRQvq8x6d_;ICJNGDl4yye*2ZbNDLksufPAWy1Tr7;6r#ZSl83f@45$4qL1_AoAiid=?YPZa;P$eYCVc89@1hp_;OWv0rMxj*)HXk_ zwvuzP$=BF^RSNg!3LI{MM&tiMqmSt_?Rm-tRP3fn+5&kj6{KBwSKE0vQRxeR(Q$ft^R47ts@clTl-`hXF zOkHkX;FFnO_)$~ff{;UR(#Y@=ntb9@RmsMzoO4-+@T#~whwx&@nJ}zdF{FxZ0hbrH zTV>%d8#PW(&5d}_CTpjXQ9u60F2R_ff`56~Ml4CS*PP%jT58B9InpUyYA8nWtd}di z8__O6vxK$MZSk}s-?yJ=A*XM_i7G);GctBExyt$YOM#Y`IF4Rh$Ol5DH@AP>NenBk zbrY>Az?oDlI(%=Zpj3mIpYVo^{BPMzaH3S*2!!>6ziT?dikk{e)K{sjd4X7HtU)3) z3nb%+&6BKz%4U5aGI6Pzf}Rsb$#_NDH%CUfVnS*e(@duY*qWeEsXOs%Q#^!<%8>P& zUUnQ)Moj5lJ?Wkr&cKjB%+86p(`=T$934(mUU(UE+Vi9s-k-cQ-L@-Y%-hpAk|fOm zuG`uOb_WYmCF=NS5!|0QH~zK3uT2!@K%5XFHRE%7c#5w2-?$(H$yi{E3)UZWflFhu zPc44ChSehTB=7xF=De;HZ~qm<+R`?cT)QBm`p%EH3P0DmPh!^PvOvV&!5XYQ6AJq$DcwJZ zbuhNsrGGO*eGgR4uL{;Tn)jS+sp(5*#UB)MCQ{qHS+tvRG_8cSmPEWG7b^bRMh^*8 z8jlgX57H6Vs?xH5-y)n1vXi=&G%^qllC4AD2D?yUhWNm!Gy}XTmpNcmndUZ7>*yHO zihfVXZ9{`6dJl{k5NoYK$F*9i8*q%noM8Rfx{6^|Ig^fd#>cq|Gxi?*5>+@cy&CbV zM!FuiFt@b8gU@lV28^9a-^|6&eg_oDZ^C-cu<)Gyj8vet}E`Xn`WEDaB0xthL9ZS!4I2>Ox(1ldjMW_s47&BWvgtJ&tX(r7ZUd^|IjLn zAF$C5k$qHChPG(eo>XCO#7|Y#y0E753MaG(50Q*Y&z4ZQbt1*^3PA}!pY}LXz6t4W zjeD~VN`0^3XZ;$FGs-t=S}Cs`xMEZc7Cm4)+BBjP*@+B)@ni?le6Zy}`#jf|5&WcQ z4lYk@_$68ef=2L-^qm-Rh$~6Zc?1v_y#Rkkgh&2t=yJSUZ1CO+;Es*bI zr6kKmfpF-ka5Q?*<~=`g+f9u84ef;$73mMH?wQ`H-1FI-=s3AhPdkxqH<_7gz8~7M z+H0{s_N7di-PX=Mu(yMXKr5R~(ZY&4tv?pXt(2in6TJQhdv-K*{eJ=4{~JF4hqPI_ z*#2Ln&C0^@Kae&n%YW$m|EtvBtRwRu((ZYwrMk5(s4R(Bo(L|?=dFaPHAD=;eP()P z${l5iI$0(#{=C62m}4bZb33_QP~=TXN!))M#!OVdJi6}X{QaV^Bk1e?@cePTm-cqN zDSrtjKv-&s*r_!6)#l~t_i&-mIm>DO+3mf_|Mv1N@bxg+`=}o}xml}^7}lwOoTtF+ z$S08f>GJyWxH&y|Fm2$#VLk1;!QZpFrB|AR);Wp@X*enPCpcLfVV?v@P+^~rf;lP* z%}7AtpRcoTmxrq!j+QhjtmSi1e9|4uxZ@=hyMXmx}8uyCO@x%Y~m9wygpBEzJfj*?oGxy2WcC_wv|;yGwg`beAVs9!$knQ`X(SkE_| z_%WjRg)mrF#IBFVJCaCA(L+l*z7CJ|`t*uil&p^^7Mszut7w~lJmnOO4ELRgU*CbLoZD5WZ3;z4J!;Bd z#94>^|3%q5her}U{i73YvavT#Hrd#=ZQHhOZfx7OoosB|_Qc$9?|k3){oy{({pZ&7 zA3f7OUDeg6`qZgYr#=C4OZUHEcD^9V?Ubc!I;GEAW3{)JLuB(-X{Gt>F&Z>XEzVRq z5JWKiUpCR1tjSpBG#!edY}wHf)U*eqDBv}9j-J4ZdGG@xJ9+lzv~TmkWB+-4Y=$0Z zrE?-4-wW&bAxEmY5iZdCSR*=-70g)hO3INnJkEb&^$tQ1C-%dVc!U}jb<6%uSq#ys zGo_!B3l1_EI1J<1*?`!*kzvX|gZPI=z3m{=>T)vtPe$X@;#amu0M}0JqfYR!%Wnph zINv=Rz8$H+8=@Cy;lj2p>5r*+Jdvog2+V*cQvU2Vb3l zt^J)xE17mZOW+@W|A*J@tTOimV2ft0)o-F#7qmPZaPHAp2?xbDgqnmec8iBSL#pH0?}Zu$7^L|_eFo|jXTQY0XQN(|PaykP>;?J_FcyP* z${C{UQq)>Sz?p4Sm1ZPR0)${ksWOv(jU6ogev_2;8}KA3nl(>-K|W#i5>C!XHy`)y zP;7E5K@kCJ#rAc#e-k%)zI_r8K!ulG7t@|-g(OAd5~?dPPntBo38>JN|HCO*hfZvq zc7A>UC?Ge&%+&ZPGEEuMtitGvZ_o=+1tn|Q6eIN{ZzxCi(Qui<&(KiFqmZW@H)s#m zX_8muHIDNDO&1a!ek2b547rQk8r^f*C1J8jZqX!RRHYI(a_(T%QfV@=$bNcV>1z~j zL8!SMy{OyZ9b!R-S;3@u(kIKa!UXWf)Qq>{G(~J=dj-RaJaqEj<-LsdBZo3pJNEI; zAtAoQ2W7W8OUx6tIHM(&C`!CDcQ~)Xg_v05RFW-B+?AAaamwu(NHHd!Z%M^UtGId< zjmbWSewRvMrtTkfB)Txtp+hd;{{b^6P8O0R-s(J)z;ifWZd;fhLFF0#Od@N{!Au$G zAs2F=Xuyg(lM+<2Q345=@=+BH_tF-CE-?hv z#$Z4nA^ZJGBDcuz7@4~;x#nk`Z$di0D|Q?#ew^=bBtt)ko3Hc2mjhv(4;UZK_a8pf zygL^R8jOo@q!L|WWf-6`8hq`jM*8!?%#zw{taCt13WZUwAw0|398kRfV4PMr7lu^W z0H<$yZP~!CZYh=BHGZ0p=C;$6?Jlw?jCin^OcaNmVu4^U(TU^i9D=Q$d^9l?-}rHd z>6k@nZbR5}f>j6Bc#B4s&bI;>c};YnQ0Trysd+;;R&*4ElU1oc^PRa#%uc-%QB;2> z0bTF*i9vkDhg`bt11*E5&$r2mb}S!TdUKdcWO$I(&6B(ri$_j_RXcPSQ-#4>N!Mi_ zoqImWPVApEyB|%EEA6t@hlVJF+DKf!?MyX0OD%*%7b7D==w1HI_3+UK9NY!*3_=3e z8mUd1N#HVNR6|6$QLycD6Zlzy3KeTc;`YQC7yjs+t{XFI^%WMyOH)&rI)pboVZ-`j z{C8v@zT+Ad@2>ALF=B%U7+eo?rU+B^;DddXO(KS?$!AB*T|Zb7ldDv9;4%$iUF*$v zSr0o&=4^6FA4HJH1SpYE>uUudS6EK(h8_jNC@5QVl$ySuwxDiYO3_@61}|WcCm!?~ z(~jZ+f7T&sahf(G#h6YE0UqEPFw?q=o_RUro=)~^@Ei3)G;@hJr4Yu=oZ(JiUxm7% zxG)s?$iR43MiXz+pmJ29+q~ztS!&!`6HBq_&{?fB0>&l}k4)P1J_eWWEa|`2i-@RZ zE^PZ2=zSsJRw2m-=29&b(Rt{h2qI5mAO=yKAROy|yu0gsdhDB&8I|1(mtdSknyY&* z+VpYShg617cPFwh$FD-2PoV3E20s%4bCs1GS-1#A@s-JbLj)KF(;Ul5YJNQSyKpiy zb)c`aU?HR}4WFQyM%)q$VOWdzPG-sC-T$n{>RgnO7ZD8q21`0Yet@I?yW)JVN|Gdj zjrMzzG#Z)24@M}9{A~#ehlHoX4JBw>I6R-)W4gDWy>YUMoam-y$brPv^g{$op5)79 zVQ)ut&l+XfjKx8EeS+nO-GAojPlf>2%yqBBnVDc4AwsS!WH z8d%p+46nkNyp2Zd+BxHPwFFl65Rxn3>U_&1sg6|THC(|2PviN+w{sXMf98&U=61{M zNj=J+x-hpxDl5xD))jY}LX3zg#66 zxPQtZp;W7%;8Y0^Y}=_Lz!z& z?f8Wi)X>+b{2YEfRm&2B!8`URs24P9lcIT?FI;tgNRanJpa5N zl;^SVdw6;urOz||v&#d|E~2q)5d?W2vU(hGVglA{IZUq2Ec5q>#_a1tNQO4n?Q@vs z?H@}lR=f+!SjeRIJ~8+ozW0ay`#lbBTm4+jD7rX6u}^8i)Xy&S-GvD#u%`Las%cM?s{K}y41aUzcA@%_yVRNp=cXWwcJ&*43S6z{TM82tnD zb9Z;%zI+);-5#b2T+vUjJCRs%v6?}$j^p32N%-P<9-wE%Z1%O^5c^qBSeC%kCeu}- zE#*gL=U}t`j?ch=Nfy@aWyxrGZ6D=43fUdYnLS;5pv*xuH`-pN&;qQV z#QtbAPj&22mj9oB1q5%1p@^I2?+%Y4gC!U9u^)R4i*j$0TC4$0TBfe z4h|U;83hd;0|Nsd=?4}jIuMTGI`e< zv{QUrb{aU}coOuIa&%j(vX=zRq|vUNERf^rnofN!zJi zEUSq+QZ>;U>&4_?p(fadXK1van6D80%85jjjIdZwA4W5CJ>7dc%l*b*bP(}SrksyM z5$IY@da|mUyFD|QH*MpBz&2VFDJvIh004ZW8j|Hi1yWA-@1C7qkTI;s(N!5|rIZqn z;M`!AK6cGN*t&WT*^_qqSH8x!&Q>PWJ$~qhp-nva)O0xRx>=WuNN(q{IzhM`}xQXd`&SkQ?uIG5#s{54AQY?B0Me+GeUccG2 zz2bibRus-y^T~>`*<1$Z6lu@CBsci1uRq*wOsoXdfRXd{$adMr26OUaxODmL^4)cD zO}3mDo*xx{lU3El>)JGK_5EcRi7bF=9EWRK^YDpNS$xT>T(tfcD@KoT!_yYlJDcA< zLdC9o!a*n5#Emv$jf<0~nbdPpTQ}*|d-4^lflFfM;QGH?7eFb0&LOvXu;}z-XL7)) z&4RjiGIvYo#n`v%r1{44+!hCDWUWLjlVfM|{Fvc_?d2-DuGHgW^TUFARWCOEm@;&I zAv%4rUp~Z|C=vpe{|HXlI9LZ@8$$gFSL+F`oZdu#EXz=#ZuPdaa(v& zFD5(Z+mu`&j(qVRRD}XMpm!?dKDM}q{da3GZb#c?t6s(CsWk}E>NvRkKUe++-zI92 zj41%xh4hd_WRIz%uW{N@Hkva$JOEj_qeKJ^^eRYk@4X%=LmGR0@o3t_g??&6ZknjVNZLu8AWix9;;`)habe&s$tW}(3=dg<~hixO? zbVzd3uEVybp_w2m9i-3tkuA^Iy!trRq5tLz02odsP9936muosD`T3N=uc?_w)=t_f z*-hFBTKm!mbx=BDlnazY1^^`L%~gkNs8(;-J@p-Z7IS0Hp1j!N=&Ui}!+ zU&ejsHlDe0G`UtlPA1L6ZPgx{TJxd{lWteX0D#Oz2dMPN%*}OJ$%z-C`$O9iQLF6~<@(qixhs7@?Nkgq&W2|q(44e&f0g`SJ&?G{iuJ;pc!JCWmP9+?o?E-zwv2URz`xmmx0uC=jH-u zcYWXYzj%KOMT@w9Zz|)X^V+F#({>WkP2C)>c^pU4K6iu-sG%kT08m%dP4z_xv*fhC zlGuxDaSwOL|E%(~Dkg1deTL@jvjH>@36`q|%SK6or4C+-9`+KaH?eZfBI9SA6)fuu z3$1T{5-c{pX(PPOaaFcby1OSziLm0+ZbTDt3Nx|a;q3maT{jJI%`%nc)h5MC*chE= zDu0uqDDTR0IcH~C%-=RU?O#;RN))@QN*DRP(iBK*`#^oRtu%$`Y?(&aou-b_UN285 zz~)!AfV65#*iX zw;|a(n~@hBHR>Cfh)+Tt{DQzpL_k>p3#MHQrsDWz`Ak3wm%n6RWO6u<8Dr{X#Cu;j zF*1T208$`iPHKGfBLl1U?`3*gizOD$CdI8urp`^ytN5j0b8v#-(@j=+3vIXDK2*S9 z26V*m(?0;tgRgIBubG5B`{>gB(D>%L8MP|{^}_v|+-Tfc_pJ1ic*Vhft6(7?WyR0Q zMxG>`S7ZspsYYY~Ou>jJ-wc7D-l#IQBI~q}W}%Ib5;)HVnc<=<%ui-R2^f&|tdfDy z6m72N_4E7=ZDqYrn=GYzh}HuFz$AG6y+@watl?M#0318xvbkVQo#dIo(?f0oikeq%+7OHG_s=P>Yfy&_&J&VQmCG%vZU*xT41)jC-|+a<$Tv=kp&G4O1E$tn z_W|fr;JBmLib9r%Wcx9J(j+!DvI!=#bRLSOmQD6u77>g|Wv8a;?2+>ikO2TVYa9I2 z0#Ex2zJN9d000{8l<#U^2QmA&P1P(f{!yM^eIT{JYJqj}r_J=0Qj78@KQ0&7Q2c0u z2}qVHCS|OfCP9qXS^6|gKW{cP&4v}}#T3~_+8fu1{E#exurOZmOLysB*JqQlgvd6r z*~;^u%J_3XL}IdOCgPiz7?9G;n@-#-QU$C5P(&pu_3U4x2fa(HP}`sf37zSs7l;2P z%&yr40+pMUMLl{rR@f;(GX}4C+(`<$@y?#x%p>6Z9{x0wn9?s0AD0LpM0&WBwYT(e zZxU+Jxvmb?X?qe|3HAt}7LchXNwS8-m6hp_zu2nS z`-e8?+VpHM9%MC`YI-o|-{P1bYQq%sQZQ&%hD?V_S2b-0a){m7dnp6}nrN;q9a3^3 zjpTw`57?d0@~xYcEjA?rUGQtF=|@BXkTL%NjDKX-%UktQSFu@!-M;7PUN(D=E?`=N zga8cg^Sz$<)O0V;ojAA5X(X;SE}H1>{LvNdy$IxAaR}U(3WoZHLsAT$Jo?@G_Ds3D zEDt3O#Y|@&RXVGzmwMG?3z$(A%!)JSHZ`cS*G)tQ$@+(FQMK9D>+HdCDJ{wYKrT2j z@+*A~5}~!s{Ch)_Va@MSu0yiv(yZlu?x+}igN*-(Vd*ZldHNZu@nzlM(Ocv95Po&m zgJ{Mz)6{*(Z+*E}eqjVU$%6f(#M8%w%xB#Q$F%TQ0>LX-ns7^!s?KHf9l>j23mn2q zZWbkL%of$d`O0Kji}b#n6)?4JJrb9UQ3&vT&g9S;Sx^gNj&u5jAI=W$FoFFHiSu#1 zo^IzqA^^aSGVQX`9`K_lXywS857;|cT}k!I`O;2tD|ltRawz}+2=VUFj9xEYTh9PE z$0}Vr>HJb3a+!2CoUtlm4BAC5GD?go-)`+yK3;Xv3R`NsMob@0%r&Xi6_pRp--PG9ilqI3^ zr_P4wW}cTGk97_JXnYi(Wn|Za-^xy}O8!G2m`?^kYl%D<+pPM@sz#f`PR}$oUVGjq z&!}AyE*H$U{5uUr(vj5I7)AixhH_2^lI?jsO%36+=7Q~w8}JhFU%UYpJaL;m!hwtF zg}8!6Ku?ZFu^XvT|ANiREm^M{xrc7UD+^~{b!41xSj>W9oJh0>pTGgi6D>~$|nYu+zg%PFRG zr;&K_N4{z^zs_9y+);J91Oha8=kViGi*aIeUgeQv>qR)2H`kol1c`mVR}M|w zkv!&7lh}^fn#$fOtnZ~aFAC1|r>}{xfy|yStdjDBtJjyH17sJ16Nw5}06-a+ih(P@ zmUVeeXO6C)lDL667$5=2n(KRJ(`+|Uy3WyHP6TxY|4lrETip;5^O==xyT&p8`mBje zD>8o8=Nlhd9?}J}`*tpP$Fur&EB3=HUha8TM=vq__~(3aaW(6i)Zd8z-n1ImkWqv>El%i?lUbJDo0iRig&=A*sM zpD|zI`FnGO_0Sk83-8JjLQdlsBo-OG1)y2qH!=~cFa-brA({GNYmV7)Txuq3=?y=$ z$w_X{8l`xXbbgh^Oxp?Mcl{SZ=Q-e;W1M)S;lYva3~L*C^_rxw|EdV%IK*hTwnLmb zjC#nyp=-g;1D6{$?0a--x=slyeeBr{bJxvvm!#qwtqH&b%z5rMRE|ExiU9{!17A-~6nT4?J;CE=a98H(tMz)UVQAUaWIBXMAFI9hfMW z&yxzKGQPzFAUz>-F@F@^>(IVg>B_h*Ok|Kg`KUhden@DW#<&Z9qai5hyq(@vCamV1 z{-X^^J4IO=u=k%Egd&lOop-ai2j_`2gfrO;`2`jKjVB<24!(+ns8#>~@8_7gQ#Hx@ zbnxhS)P+{ly#u5t2VrcuKHNw>^5kC}ykh%iwAy}>kG@G8_iB0)fl4RjJ9p0(TX1Z0 zs!2ILt>G*G3@+QeMaA|m-^ke*f^RhXdDbHzHhFgP?2fVa%wPgSYzL912LnapFY$y3 znfBUVasr9h6DmvrhQk#6LtbN{isxCLW6n2U^|Xg)1f{*>8e7}SX3dWCw*6x)T41C8 zIW9Ek#orv<)1@}_1j0$T8iJyf_D3Z0EQE_1y}5WIFcFPxXUAhDdhDIUQU5&6u7%r| zO_|hwg9gp|xtLk;z9Y0b2j|TJn@&Bd&BFED_M56@cLEYzQN8E8p4P3e>;pD0s&f=m zt9%^BMH;t|aFDvf@4;~KtZX(pyDI%6`kmIVp7_*fnG6=&mrsO+I@Pcu6(d$IHMyl| zPd>#Rvub`H@JPtG6STrv^$+Mi8Z)aFg71#DlkHF&>|ULLzQua2ku zfvi-Ux5<)>@$+OWvTb~5UF$)&Wz`~Ik0YHdPat8XFG)wg>F`L^WG{fLugLIZ$;0hCY+XuA@fJZ?w#>g93Qsn0&J0@rE88q>5H zN-T{QfEK977nY0*GKUL2C-yv(jJu05Y2-4ClPT+lgT58y=pOdCG73+V+#AlVYTG7y zR*f!Lo|2F2o$JoH`0LM(F6nN{UGrw+o#DyVG_B%Ml6v-4xoU&tg(p@gV}Yd=Y(u$n zH9aV^hCF2|;Ek|!waqtsh`DM`O-scH1~L@L`RITUHJJhfNUK-0(dVn>9K5s{4qh6F zxzEx-Qyt6AVrY;5} zUL<<_K-_Y`3Yb4A=0=AM00#xxK!HMV2mmO?26CYxz#suoD5%J2MBmUEeiD-~VhH?V zV#Z`qU-gokZi8RDeu@Ll2pvoSrsaUDlr2K8 zB`FA&i#X~Md0wc0QV~6$*eslYE^(P}-E$rOceD=^gNCY#hnG<#lEmO54ufkt_D_=A zh8CTzkAYF_Goft^dCzOEL_y9TgBPVmuvy*{+eu?VX z=8NvNIO&YTlNwIjB!ipBL*^g`#!pV6NhEp2{c{oyFJ%(gEMZa;J_RLa#GwA~eJvyb z^ZW_XzhMPB)+)BM>%Xvd@!Ln4@EWj-XO~`41mM=0V8v-v)w-zOv<98h%BWSc*ecJz zcU0yUnvk}KAmurba2F&PIw!70hdGT~nlPOH+KiVOzm}81gAqw}vN88F=It{`PfMUc zA}kR(q-OL}d>nHV5kp9XhmQClbEsDu4@+QTuE6Cfgq2V+z&KOZ2L8y;@HQ3RoFx0_8?|KPIWOw-`Qy`J#^dyOikD`` zKR`q(@NqzdWTC~#KcJ+Km%l9JAK-^PoOG$euB;NHeTm=6o7+YIoA!z$1j?&0_bB$Y zI8>jm1ku4rI?c$UQTOmVo;1`+w{9RmF$I{$Zq)Oh&DB$2AA_2Kd$=O1UH zHxWr$BzeBG%>}BnrQJ^E`3?P+nl$?|d9{-2E`^+q2=$i>nNBc#Ur<$EV!u@na)o~bRdA) zV>#0JWIUIQjc>g3E=?xZbTv-(9;ZU0QtviPnO_KmcH<(cYNeZ^C2x+d^-~Hp;tJH) z1+sCC$uTY$dIhk5f$-iQ_ds%p?C^SjY!YeLjGA-LjovJ+0)HbTSQ-nLOVMrcWu1Wd zv4&A%BjcCY{MN(ALp2%OBbwtNlMHRcgoH1XN9W&wkd%`{Y*-8`PXog5zWhzaL+FHD z$I|k$P^T4kLcp}GY3LShR$kAxLqBDdHaREFjl_vg>uOkDI^`6X$mHYTUNC3EYn?^v z-KgH|`siO1aesaWIXK3YwjRf@1phKI@53JDUj*xYsluX!0<%K=G{&NW0>gF%kEedh zH!jB9cI8fR+UiAB=0qW#i-hKoG|MP#Q<%tPmGUG1JNfbnR7r5L^D>MYUCF!-LpEU0 z#G2UK@=GBJK}B25P7o0pu(=6wfWT`Zhw1yCO(Q@$de9U&nNr&1^%lC@R^WO2dns0f zq}iPIjx~C{%*zFX&+%{6`%P_?bjx}8&a#*)hcyJ|zPYqZ=n(6##DQFA6bKY{AJyyP&-=9tZx-2dC5!{(mXbN8%1v4r6`%U; zCvW3l^7G8L3JiIg9oNC==-7rk;zjFee#HY?swtN)Cn_i$rHJ#3E^CZ`0LblMfgg<3 z>HP$utQyYq~vaFlu6Y|9F)_R5VrekV*!{P|^>aMCNG zQ@ZUeNkUnGPV3IKbC@|7qdNN9E~yok!^%hTCYW>zqu)hVfn;8zM>ux7d!MEv!DVkY z__s*uf33aFECt;a{R+pTK@{8YfLqvYks19SNWn3!udbG$Ei%6`db}C7T_fwNSo!9s zn$US{0|I+Q*Ij(hZF-uxzJX3EGqnUKulxs4_y@rIdIRF*Tc%X6bH`zgf#@qDy&S#K zm|128u|RvpTDhR;ymslzbTg!}NWzl7v?f2M+GtugxY~sNe&5-oRDKTJuRZsB z;^{I)>ozM=Qu76OYVsyOm_GVsfc`YXq97l3SZyg{puAgbIB;WL1VOEVAWla!+*xIJHtc9&tAGnz4)i*Vp=;GCw5-M z1VsK~{L{Hf42&;UHz)x=xKJ@x1hmLXu2YT-Xc3g-@MRa+#=|5H_EMKJA7Bip4q@k`RF@xL^GKl_@r9I92-2W7MpDJYdeQ+r>#!T#-n zrv;XzT+JzlM)_w!W{jL8sF_uF!RM{YT{61jp=qf=<NMFm+M{dR`g z#rE;^$z)5NX7RGi?^&*LnJ53O`@GPR9VD(W1j`vKEKRA`Xq` z;gY?ks~qw7%rCF6tSg+ND@<00xyA@#2Dk_^4+gkyEalfvjy1E45C+GFI;eO*lYE-X zt1Kqwj1l)R$oy_rUlEs13@y`OEXv;^>ogfVYU7F>j)cUQIQ6t(hrfm-??04=e=a;V zrmB>qFNs0`m@Phf*sUEOtO75Vn(qrAo6@9H3V@7zn*0}~G6rE@2%v?ahn{r_BkrTb z?gKgmcGmqI9DgMRG}kxTOw5_1pI8T%uS$y`^Y3Xiq!|f9$xFOxHOwlyJbHGM>Ixeq~l|H^U3k#i02z%hGpPGElcL#K(< zA=Td=I(_%S3$JCM=G%)u1t+yi)7V1f8ZiJnPBpkGz1U&3;2Q z3-Rc>7SPaoCZn%2kWy7BW?cCIN8Qn2Er(h>H z;fuZkkn7euy~epi7`&9`J6!J);@00TOu}h=Q*es8+2(1Qt)Ph!=M77OosI>Q_CwXGzZgUA9d*{W@GR-}wPV$ab{e$GRD-!!aNCV@}FVLP}bC z@>ByoN=dBTMDc-^>p^}pcej3nv_1iH&^yWv(JN!h^Q+rh`+Zj;Ss!v{{V6+qlWOe} ze^^LARM{lNz;NmiRv)pY_xw(n+ctf}$IN*Fcqn}6^!uVdNixET5TU(o@!9*$5BdA4 z841WV9g2ST^LYV1FZ7Nc663g$HLO^l+L#2lp^d5Ikz(JE#DmzHRF7ng2GHS6=upx2 z-zN1PJ@VfpZnHC{F?4IVkDh4dwmTn2d}zcs3$>m*DZI#vZt<__Pfj~-)mW9q=LeAS{SB1BKgH_GMB?qnw7bX{ zqLD05;-hzoE@4RUZl`Xc9ebONoKcws1I!}Ov|DM#efZCz?DImJ8lZmb24eNp{Oa9$o1rYtegW5LrH`Jw?uQR_ z@$T{nd9IHHSkZ4`wW`OcTlxF}Y7ahTg39IrYLb#TrMkD8QwCHYtS^X`)h9z$>@Byk z@CIt~Y|cOqm9G@uFtI2xFNsv#a_mPzN*1?x$@LL&WOL3=AlA=^5CK zjI@$N{UOyK){U4ewJNg+YVPnE1KE!$NM~Nzu=I6~(VwzpFUpH{n?3yIJ>vT-Dcg(P z#jP_;y66j%n=*91o6en$Gv8@IFRK0&xrY?(S(*^agfEe!ui%@iz%QwftXIXoe}LK; zPUcKoB!8nGhw8e#Wg%^Pk8JQG9BYrJlJIvHYejX1zjjDe#XNA;Q;5F93CJMJLcv5~ z-OQ`rF~=Oxc@H%6kK^>zyTa!;33ba{e$IFs@pHJV;!Yk}Tvmhr>zOS?dYZ5Dd*v&v zV(3pC!rq;}F`ym8+&wt|nnY-|r|cH%0nT`2R!&J1qAi_6MyF8E@tj|0mu*63<7#4O zJBeFFY(C~Ae7I4?UPnA7@6X_;QVZI8i6U;Qe^H&FTq1Y>@$s$s4OOo~9|hy6Z`t{K zg6<#0`refy@@)3MzaB#WmQ9QdO9T>c5_t{T*f9FK(FyiYeGbpl28`4-`@wuf0oT}? zEEFtN_+!gHae--y*C=wD`i>HLr3x*Z**}8`=PfqUdgXJnqH1!BOAk0=x{p8}z9veW zWI7&nX0fHP>b_vYlxnxjr)gb#CzW9VBMGm-vAF?}W=ivyr|G77Da$L#R~`w#;_Bf&d3=FlsAao%x{N_MM}vKVNt>X%*7yJT##CyrsoHhK>FCB4jQ zK-tYaW6HRKmD5WT=ScwkwS6@0&_ElzH zIo4>+0Syra9Vb#F4w}QI)3zd8<+`la;ZojuZz*%E7Mjq2+*Kt5x{P{^j_i+DsEXM9LEf=-gx>o*0ie6%huW)U4EPylS87efhv~ z7XeN>D<(WJ^t0(xd*s`EEXi^##!Q*SawMPeLP>^TbiWwhu+h9LbT9Rys$HEIkUl4? zL$C5;XymT$TyJ_?$~`@%dlq=ql#-JlgeN&NKhc$o-0ETRsOdB<8smC2N}=-kXVKa4 zI~{Lrs8Pdq>~OhivPdJ+=TGX_LWMtS`6v{Gg;$T1e)JjhmD|3vlBnF}{D-Db zK6S*aR ztb~a)dZOpqhQj&znd5+wdngivrZdvHSMrpF*yk>EVOb*&zyZWDWAmK)4dg|ry7f4zl27u=8v~WwtHyvvW)FpI(M!!L z7bxC>4f3GCM#a}3eON@uF*5alMoWdcX$pmax)CE-a1+yp_M!W@v$yz=7EX%-dC#64 zgrM^6+Tmi=<;pOK}qIQ-YkL(t!ATj5PbH!EBmWp|6FnxN`b(R#fJ;c%kf!z}WLPFl16t zLpinCPCbWHW*jPIyG7k+rFV)pGPsp8xbTYn=>n80nmI|)+uMCyBE~+Ck_RsPke zA0C~GppL%$xSe*aFQYE!?NG~qF_VPLLLU9fVD3z@dD>vAic#V9yN$8w@omJ?FV*)g zN`<{|N{uJ|1GMbX?)>xet-STkL#2m=SV3V94JKB(6!=?9BtL9g|5*RbWzJ()e!)(> ztYQQ)Ou~s}V?IHV1pIf%6Uw`qP8bePkP!|XpW>0@X7cRj{e{*+`SIpd>*!Qa*j;E` zY09P%14PlzAusp+6r{+Hm`*`6oTO_1n?tRwBB%tHQuZM1Ivlt1X+Fyf)tk{6Aevr} ziKvNB%)3eNh>QM)OhiOPP#pbV?nCFG#uk2s#-aN${Kh-q7T|m8n^rcA%iwmk;Yo&7s)T(7&rw8Iqod(zmMe{*3{^gNH$zJ z?QFkjdHdmS>yun4ky^LtL^ACH8Kvr*+J?;w$}-DAcZ-Ha!0!JiGoF}L<*u1IxMExC!QU${CV z*hOTnArb}#PYHPkRBYz^R-c1#e{P#9RLkg|2whWKtm!Djf9^BKHxM*&n=fZb%eyWv zHk(*(^U78T)1A9&TUJDNDzW;j8f)3nB=o&`s5ZMI=Ik~9A!iatZ&z?(jS?G47EJop z@h<(#jK`R0%n>I6k#3B=2$LpuNaT4F<(2)z5q7Eid)?9xb+8MMqdy7@9J0l0cX16h z?_S*Jb2n;wm}O!jt{Vo>b&CN1N@HuSmMRWrTt~_g8qdJnRA_=?ZxedYMPDBK-xSE* zD^I59D!*?p%PP6**(M41q0u0F1%#RL)fObr-_qB{az3!e6iA&3bRHh6W)s=$&vPl%NiU zq;g#Tz8bv2XADq{K9oB!j*TGNvl3E%XOn`PhHIKdu!V~E6E-bO>dRyyKa;+7w^{==;+6f+EoTe-;8xJjENdfehsD&DYvZ?DdK zXx{c*5N4qzCUHBm63n%S##@+_zq2F%v1VWxqiu3^sg#q~Pod5bCDT06w44A601O-) z3g$aF6!CnSkS$To|EfX>kIYYEvIU5Ki&5l@qTH|c$=ldCMriueWH2Bsjx?Ai!8svSj zXtd&5TtFbqG`Jf#f;T>>F#$Q1l5F8jI4;sl-9RcF09E_&+rqp z?I+>_qdYe%yC8LgiW-F)j(p1d=VeY(?J@kl1=#50M=y0x-Co3Xj%~ywRK40Sc zVvxnZnF!#}V6s5o69prr0r>{EfZJX@tiz>-F!5gpXt=ul6)~tM`%W&>X7s~sgj6>9(i+|cMpsn?$vwavB3i@jncn%5^y=Yg@D_jh}KWq<+MC%*W`=^?SGabV+ z_>1QrjftKX%{=}Mh~A`o+MM2@iV=4uy~hOe?4uH;z!nUCHJ-JU4_z~w*?srC-*ryc zFmVA-kg*8;g+a_=S;@zzoULQ#waQtI=9tKm@CNyMa-@&(l3{mvTRA1s{x{h$*ylrP zI!29h=m#&%o#-AR9TlFN2-9k)hQl_-ves`J7PG)6Jon2%{bn5I3i=A9zndLOl<@Fx zR{X}A?{V%ey2UbN|?e`Ppa&)MdNZ;XXS!d2i0PJu`Y zo@$7f*X)Pbl;g5#Y4nQ{0a4&0SHo5jZ!?Tp4CM4FXw4a$aip>K_l~uk!L7?DA?CrT zm?l|oqwf#9!)`WXgVeCaLJ8F@#F}tjJGv$o#V*+XWnA$V7V#HBMGJpQ&ly@Ch^C}2 z*$=le7Y#khUYPRfOP}8%EvupS~EAcFtm}FQYvT(*?p>XZ%AD z#U6hv6*3h}O1KMYceZgbmdwaxmjY+izmWYw@H6(GJ?vYj-y&x^7~%#D!$8>34o%Mx zb^icGM+NnMF4jHr>?xSkyJ$T0&x1k6Ltn;9@o0zs6+h9ec zryr(V9)qIqV}`9te6wx)&f_4)U}I*Ud4SI?Ft91Nj7b@Jo_9!!zpSSj)9u?#aYsJK zbGa9uDu!#T5<0#(PGE+==5Ud1g6uDQ-~4djahnwO4rpyt=Awzv5-sA+UfJlR?-b2Cd!r4(P_@y^S(F!&XU) zlI-EHD}j$7`#xJwSk6m}9R0-D2LK0-lTqz8UL& zkRhhf=TcdQE1_VR%m(wPwdr(^jC;~2nSRZ;WmH(`V>S)MLUgv!)57ggeyp;Nc?5GR zJS@6wE6Fo~K(NEZhTEG?AR-zLi*`2KEfjR8Tk}`I9??julY(boIr25DyRrQ&<|P-4?Y0+-epmHP zN4a76Xrd`9fn*`a#c1mxguz_z#(_^^`WZ{13;)Q%;1Tt$!xwk#ox=5AuX1=Zz4$UTr7sZBm*)6usQN$r< zWrXcG{(buM-GaaH_R@voPa-1Q-_8Grt8Z+qtPQqIC+VnTCnvUTbZpzUZQHgww(X>2 zJ14ent0(WBJ74A>?ERpgs#UAjDi-yQ(S6wcR)L>N5Ju0y#f&ZMzd&VE*0;sdUAs&) zs%+vgZkHp$q%Zni$hqc9Q4i){sL=V_mg5HRUX~~pmJQ&NYjEXq)hjZEfXt~)Es422 zre?u96blbMpOOJ%^HiZka<;~jJI=-GB>SiE{H~-lk;mOx-D9OhM!}E`;F}q3#yzvy z`Lr8zED!&+sEpg~#fIPqYihsXW`0l@InBr&)|>ln)n@QwKe`(#J~hppqle8Bz(K#6 zD(OxH791J6w~*y3#ai~@?r?StX*{Js8E+_nbaG_;YI*zcfGa?-Q5}A|NnGz&0I}j!T6%tz6C6C-J2b-p`$oPqf4G-5fo7q*1=pF_o_!#|GHX6+%bvE}vG$ zsfl&vM0^$|#Fm+M3Jy6EV(~UmUQA_}M2_!GEa+&y-|6JrPgIK5crOBL!!(5P^5tkS zfOUnD*^9-N;lo4dr2`Dt6XtTcmlkVidE?UX9kh3poyf^-j3`CoRiwXq+qa6~2+0yQx%K~qcsg9!HO&;|J) zVdGPM=qP!x(ftNUpq(Vi#|8>zk2bbJWm7%)VhaN=is1|7?0uM%OC~)tDx8~XToVDg znO26K%B?rAg0ZVhF5OOq80+QVd%fO9Uj|p#qe=Vy97wynA7>DeCW_-ITk_f_dA!P6 zSR~A`xQnh;p5{%v$QKIOOyWVYunos{yn}{;X|-=WHc>cOY0NmL zez#XMEKj<`%aUbmj=MQyO=9s6R$+S`tpHF?d?E7@`tm{Q>$Z=|X^AG=370fX6c$Wu zJl87r6Qowk167m{s##jML%#v}Phr|iY3j3CqU23Jvw_2U#{-e{pjTe;#+Qza;Dc-* z-lZL5oe7mgSY1;p3Ru}T*%xEH6b_av$^+HHQZy+Avz1_;32Cr*EYS;!Dv` z=|oVyqJ`7N84*v(YuvpmQKu{GA1_q>sx-TVAUgUwn1*IKD`g22RhIb!pJtt#ibQHm z7$z1eXFPn1oa>9ATISMmk?>ZpPr?TIG$|Xb6)Pdy+7$x_RCR~+`X#e8qNMY=k@SCx zw11?-v;*Tor31@}Exq~IA-NYy?%B~`(2VL8@fA`;UQH5e7M0bp*Qc+r>=vvY;mT{R zUYk{NMg!^R5)%`bip!xZimEo1$ceBgK3;TlF)eqZ%>WRhOzr#-@Yd_y!Y*zmjnv$9 z%CWPX$&aYM*_0hX^_Bw=h9l=qNA_TPDt3|T#JD+ssBt7^udHrG1d;W-?Eh*F-v4S1 zFmMQ{?}^`U65#)7fe90C&R8Txi_f1(l#Dl!W>&hsZ42KN6? zp#l0|q0zHo!HC1);aC6aL=6i9LA?6RHxWpr#s!3u$NF>d?i7(k*>yF>AriH={a3-6 z;A!%8rI-pK@Wk59oGu(T0;-QW`*@FoOpBbc7Ax^3F$Wzia$XswD#zjc!KK$0xlMIU} zFrIEPq>KD@gWhI2I~`;faPXuJZF@$L6&uw`URZt}_m`54*<-J4%=u&El5=Noa^2n9 z$%A5eFgB1v&5f%{$}4yGoUuB;+)~b(m1|LIfm9RBSaPV6`x6xF1jDD+8&tu5kjq?3 zd%YyCZX@pNn%0VV4EQ>Mh<4o2Qjy8kaILLb;sU`&8dwy=4}VQPL!2 z3F^YG`Ry*2<=tj4NDSXhY7?n_0SCN(KvPu{YHZpq2M)gE7SQ|T&0HR~j$Cxad&`xJ zQb)uiZ~1_lWHL`qe}Nr^L}YX>5M&P5NfhXzlO_Txw#u*M8U}+DIzQbBQM9^UsIX%o zg;F$TLi?+pPNNxl-7hE$B(Bp`+DjOOpj;~K!iNVfjFPHu`@Yh7@82luxyUe5kO_x! zM0@UY=a@hSh)CER)^Y(ap7)tSMs(-GrR}>r>|{d5jAYQ-unEX7w=_3<*`i@~e5}aB zPb!^l#y+ziSoeF(P>8#XUis67te`6=LSQ``g2CYR(@smBF2LfKoYKNGIF;R*z{b$n z&PS6imlTTBpkM?#@`Jq9tY1}@9uubFE2?@oMEqeGO=tzi!u42Nr?DF_Zf1QMf*)aR(N^@8uQmycY z*wIKyNp&hw;_ca!2$>4iPa}dR!kAveCVu;t!I_wb!y{7xHq9a!pRab(Z;|q+=E4vP z`j5?&I?wVN3xk)e@xhlme$MCV9Pdb48XE@uY-mWtxY={mOTFY_iyj>?)^fJk@eol06>ZL<9W{z^d=qs-E+xxsB}e^ zf?nAAjRyU<30zzUxxC^)B7~vaTAp)tmJ{GT3AUr_bLi&JIg6yv@C>bT~Jg3`L5WoFIL0uC6hc{Y=gAgCH!s3!U- z@~1#r{rbpN=IL?H9QZn8x+-SCWMAXT;lTJg84_OX8n5TLnBuKsFOrh7B0xDZM{=Oq zICic$1Vh>&EfaTanw|r2RMr<#2CZwM14=Gf*vEh`M|ayeX!)Ke6g;$K_P|&?8LM^b zOdQH_3wUcaq((kVR#z_0lO-1J7g8nt?%^sJ01Ko~5Rvob$lM9@$=GE0r9^Uapz4B6 zcPSgKiadz93j%}=&$3>sa|&VAT$*P~ap-e%^XDKWy)eR+WouQ64G74dME$uUvqI2G zFy|S$0x%d9vR?P2#7Mz(CrZ*b1ZV#qPI8Z`wU z#LcC8;_mO4Rtsd8)#5!p_OX(ay5624xHH06vaFq#GUV` z_R~t_*hH~7Kr@M&A3&KjD}c=;tB^Yslg2`~r`>n;UI!EcVNZY4tJu z!P$}n3dAh5qR3lUL=_7kVH|~QR+yXGU9$JV%;D6gN!))ET6cYk9C1eu{8P{=pX6TELq3} z+*ol0AzUz0Q-NJCZk4QU90uXuFBcRD8+J6<30Y21h|IHtD2zmXoFzHp5xUgEm%X4g zuKj06uH@ZwxQrRO{(sEXv%l&>e!l^KkVvPn{sjhfq87WFE4Z1%*QF*9K&N1@atTe?ZvVJffWS1F zd06v$dZ$3dHIE9L7&ZN^%dWCYK$>?H7EOn$8buklgk`heX$w4M+ED%x5qS#?%$gOH%<|{FvJ{yHwSLU>mi}VyU8TO86UNp*UW?I;N zi%*!_^yNqUg!%0kKS6jnxCuiMJ!!MhqyhQ#$zeZn%xN~W%-_V#O3pH=wha{g5ZKxE zal?Zg6O4mr*FQZ994&0pg+mo%!yMcv$h9>`(f_mC8|YF&qdR>?eh^ILrTvm)F(+g` zr5ltJF5rrSO{O&yI^*X8okUoD^ABX@$h+-38!|T^rL1IeGV{}#iA(KmNnql)qM9>7 zvfOya$D^pfnZ_OA(~g9PNDJn-PY?-q^|;{-re$2My5dvjL-z7g+}idi(OSD$zmRX? z=j+gAdFBs;jtUjO6tg_dZwcuGNdJ&F0{&j>TS3`i|42JF?0R%_;3ExK33qtS#Y&lN zE@}UM&1EKPF?YcxB7if20mjyx7|K_8ziuhE*K8|tx6H&5VjlZGeCDNH5-b(t3b$2rRk9O#|+X$gM&i9?dVFz6ZF^Z6F zy^;aUd)cy&%LlAZd-?Tsq3Ay?;^x?dep^<_OPjZC#@A-77aX0#Oxb?c`?$K_zHfOB zYYNMTa1AcU7IQaKe8UIRStB(@Q$}g#1W%pBH{3Ee!iR|Dqu50J<)Ref8`3DpEL(~6 zW^O1V5W}Za4_iKxHmLyE(Tr;iphzSko9DuY(f3r(bM78@7#HvlhVU59<0;=;v|d>5 z{BN=&SBRu{vUdlDYQnk`?gS%Uu6~PYC!<}6O#A!CCz*?Oyirx%&h5wsRr z)e_ghR=mdPVFy(Z#>Nl#{|r|LK_n6XD|f&k|Ld)Qf&TpYzpWKQL-Tp}@r3pCkn=@gy=-a3zZaEYiGg@ix4q`{%ZMeKtWQ90}du1fsDY3lw zP_ob%<*K)%(WuOEpwhZiw|Sq25ztjhjo$cO=_oTF%KJvWiTd)B><6q@J2TC-Mho!h z4t07S9+l8con*oNEIW@0tAg`n!RJZ;9DjP1*bp;x?V99Mb?!o`aqB?*Rl&MC^o2HI zcXCliB{ErbB9&sQA}`i7#0vhVWPzdRP-q6dO*8a-t6lRw6nCF2y-#Rt zGfCB*DpXBvu|04=4Zk2+JqeY~77s?oE(T3!S44o`cm;QKUP-eUOGTyZEYm_7i`HQa zb>+02Q~o|RyRmk?V|s@{akv$%b{oSQ;G38KQ*{dyj5kHqEQ?*~{207c zm>fBfLFW+viyKk=K?C@C2TK1-?W=4#05e%yURWBQ|EI3)FATsqEdd^oa$3#9;%NBq z8lN%d7z&rcT9%zozlbLr!~w%AB@(VfRC{-NDeu8h{gvWr%M}+>*A5zh@S0xy zv|3j5Ykr+irE+Y;mz>3CsgbbGA>y5i3rq|HqT+s06rEz9hT(x$}TQv$!!5aKcY?|2bH7S{KI=X;W_U6L+r{FNvu6NdU8 zcP~5bD4vTJ@zHOSp6agoPF(#P9!e(Zf?|@hVUUW$BmqUq1g2~usW}kHL{$k#bd2?* z8!8Uje8u4HaOh~Kan5pIv!sOK%tBHOuTGUT|90Y~j5nZ>gQ;15K zCT9trJ@Xqj+z*>9-PqA`V>C8jLnXFkz(gOM{_;-uZobGfx56!R^9$RKZIr^wlt%uD z>Ged2rsW2Wimk*Xa|b`UE`+Q!Q}!rHo#8{8w>Z0fFA+4s?lY#w`J-UyGX3|SYC|o( zUWTf6qpqKteX!z6KgFSvd>R#6>&)YAo3b#x>V&JdQ{NXp?CI?l z9d)3}5{X#-GD5Fb;z@zAu1J_|*o;jW3CyCTi%d#zU^1^-JX@jdyvHwqGmi%(I7Ryl z(g;vmGsE+C2y?b%+QEnx+=vE*&NC-8|8%nxI*C?OIX-IJPn4;}9jh{u7O!bD43<@) zsNF;;*#2#(1LlVC{xiJFT2y~0;$SB23rDa19|)DgZpW`@e4@%z$SL_{xL0zg1aRYq zt-B&RWubzdATnV@dDvB`L}O4SJW^O|_A8I*vE(o8wGxu*eo@J7Udf zkHBoFHA4~?In~(p9jjMNhwrMey~bOq^~N#St4A`Yqll z_%M*EE0ks+W+m?ZHjjdnC6npumU1XRt~&AYJ7v>UWgHU@y~e1mb?gOV0PI=_g8P?_Y|qlmswf;~q-0rCX>0QbQ;- zt{(!FU%LxsyAk5nfs}A|6dhC91uU{w2)3l=kwn6wsIx6HPA zFmLXx$3R+{l7m)Wd^Sy7yNc_}6r3FkvOQ=p&N$08WZaVpdrqbgL&Sx=@nY$iQa=kN z^;|e5)o(Y1!Ia4izZPjR3>LfX)j{l2>QhK7MYvLH@#CXLV2qO{j?zBEp##Npg4ha{1Me6&3o04$$Ua`zEGg?D8N+ag4cxbedM z-TA<}gLD{l`<4m@@c%n#*qkT&X1h@x13$CT0E>58Xjs-+k#*-y86k4Vk%#oI)0Ke7 ze;|h!^X$Yq+}yXqZ1Gxd_@)_o(heEcm(Yjw9u0FI8l!wYWt3twcISZ%S(&$7H{Ga|#;Oz6qN<*7OZRe%RG?kq<-GS@wh&z`O6Y1y^b zk`2N9W;mc#{nIz$@M-Vb?`d3u3CweAOMKvSlm+@nyX>7gHa)4C-g(@FzecM~tIVW* zmNtnXgHAQvR`sARPk-HI{{5JXV8TQ;#x;!B^NBDK+1uK$B&KCiCmzc(vx{mY=|YiJ zrZzjiY?M7)vYaTUdon25EoN)s$f7j!StGQ{0tn_B7OT3kECR(Zce~+E%E)WZB z-CbZ$X^Ul&96lrv#yQNgNMKup`<*ihE;*QOI}XGj6^!!W1~wl-1LYzJlLYDi9y2$Q9KCJ9J{A|w z=nn#EQ)mrbvPv7aOuPFDbL+zwRh!Kb(Bec=_PBzBrV?xR{wVoL7s=F#IxaNx%))H$ zqn4mf!79E>sz$p(G$`KeMf!(PvU+NCl~g>-30`GJgLVOjsi#7;LXO?m&Ter_1h@2J z^wsMM6f4P|zWo9NAto@J7keCeD`Ef5R1yvc>#PVsyb<5{cm4`kz%!HdcNPjg7@2lL zJK_rug*Q3Y+H^~-bCucB_$5hjuoI=$vzG*#Bn>r)E2lcje;&7v^cR8b9k6}Wh`?F@r= z3{6MV5xV2AZ+Ty`MP0c{3Sar0wK9iL81vvY;<^XI4A^Zs2qzJ+=OaA?vth-dl$?-v z-rrpr%x=*#_6w5>_!KOt@?3u}K+DJsc^7J|Xs@SL$k_r31WG#tu0@c$c7Ak2|MFyn zA)kq=+%8o|FJfY`irtW!PTRFI^HIfY*)e;!4cHo*!OSjY!Oyh6A)>49Bsqt|=+>OK zB>=Q+qDZ>@SqMOFbLIrY$M!yllCPdahxhlu*;j$xZuHBDkRd^o9bWdP#Z zk;ZhRKyYo3z^U}WD&L=o0>h!Xse;}b|HL;{Ot)2*nT!jyBVq=cpb5ks9K+9!g_NNv-5p`R; z{=-UaJ%D#fvy`DX-7lS3JM*y&mrt-KMHZgTRN$eZ%rQ=?p-v>6ek;~H9KNz1;(F|7 zsqsIM+mVldAhs4oSEbA!(gZfGOArrPM~H3$%dZEC&20zp8y893;cq2DO)s|iLdT`5 zfh8m8Xtid|Dq$U!mTkBk2?bb;fhNNLKokzaY_?)C<}f%WQ+~Dyq0RxrkDkz~hWVO% zB-~Nmvs3{#U{MTJ)RZ4WyfiQw;MSl`WU(k9918Y zNaOiTvi?QeF^#jK`g||{DqRV?>SpkHP|Vxah!N6M-ATD3G7~SlWhNkV;Kau%9QOJeiadoP zENR||S;3~@9eE2{&9&FQ=%{4V(73OId(V;iQ`;ijiS+tF=gQOJnvj|_d%RKta>TNg zGVLHV3Hxt?LPpY?!#J_gz;J8UYxuf=cBq^(-^Pd%n<0#YlAaZOQz7N`VoYq}tfZ>}`sI_OAGiuLR_~V~x_+buW3Ju!RbnPiq_Zd1@gcoCBm|$T&?z%PUMk zx3k`z=A`{=1&0$FNVQtR`gdsdrmRa}AlqU;m85`&2hwem>?~x%^{B;OegF6h`)i?@ z!P-qOr-7xZi>_&S|` zzu;&*cIjRa5Zi?-wAy)?n1=_f(BA6*pC^rZQ>B?Wpd?!YkXqlu`&LocxI?W-EC*K6 zoGGfVU0fo&>VR1*xlVW9IHrm0#Wgiw8o8fmfXy3f!uY<&<$3> ztK$A{4oPH=db?Mm6vm<-;`8I2xJi*BsZ;FoLDm!voA6WenQZb*Y>~IKm*aF+$UD@6~otC*qqG`0+PVhr?yez*h zDpp#>IhYK)BhF2wY{2}XuBH2n%0$z3^&d$1yf^Q@POslIwni#&j_z{a$PFg%=Ri&r zEc77ue?h%#wwj z`5Zh(5G!w+9lF1JW+g7d4)ZJ8$zJ^ie7TAR$d!G*GSQE-tS*%_w(0oL@gcW~$dqG` zA)!N*1lw{RH~KwsP`?TM38i_fp`9tq3+&cLvBZo~GcDc6ald=q$GMsBF~ym?a2a$n z#FaGc&+mR3p(&Q;hl^y)Sj<*^uU~5%JG$20Sy$|1EnMtX+MM>2_fnB6-Wp{pmQg2} z!Qi(PLE9%%4ryecB~R?*DIx2IR)tEIqnRQ_`Ynt-T&=5KSgb6G;1TuLM(@b5;Wg5mX?_R7`)`qk+aH-*Y$*F{BIqDZhDPk-s)>=r)){W4u z%*QE^)~~nsN?|#?s(S~XMF;t>4s`D=scZR6nE8V?MPpJwXNhhaV^-XoexLOF4zxbX zQZz5e5Xg=dcA})ancpG&15wF@KcvIW&CTi#MCqUlqX&C0m?tHE|GbOE5wY zuZ2|nT<_77wWQeYlvT?{Zw=)?+6q<|o9p}{|EZ>h_tMmy7cdkmnegj3+bgXU<8PEF zMR!^bG~N{If-UlSiV4G89@Lr24aRYe9=y7X?RcRtD_8fM1!I}Z#s4mH+?!E{VmSGy zhUP*&r)$YTD9PLfPRhQit-;%8Qs`y=>t;NfaVAd7&_!*g@pP4)sFlQn?-$RaUZ{D~ z7G=H)5T8{BQYeCF;(B)o9dAEYlQK*#Mzsr_!;sZC^11(VNxEu+HRl@Po*t(=9K~g% zp0mw(I;Otm_nRnI2U)G}AuU87?L)@5z2Ii5G$vb4AX3#z6Up#!i;(ss&hAFY$yOc#Yh4ILUL?#Dz{cw)plPe%`xTekDP!(;vx_gcxOyHk8b zTa}}Pf@%edU150~{9~oMnehn|+0z;KGr1WUdj7Fk z`**+KMQ?Fy^9Nj@BZ!Qtfz^-?G(LY8%=6YBd#>Rjtc~`GEm$8LVLAJ^8fkXOH%KD| zaS@CiSjE%v8YbJrQHjKNhShux-^u`1auQ|=pxWOEqYUqZt~p_ueEwtj-!bu@P_ZZ( zSuA+bZSm);f7d~fhqHy6(hNsHCJKJP zZ3`Y!xQ93hn?2Z#RrZNHEDs}CZb~>ha zd%C;E=`>NKBTUEEN{C0`adM;nR%C0@TWc&dw~6afYxHs%*}f0`mIlk7({ndJS|dkF z!HrCe0pLX`{hF$NlnGp*1Wx}Yt1pl-kH;IE060wZ9e*ibWj1o^D?bM_NmE{rWt(T5 z!U|^O-psKL|&B~ z{e+H01$Tui#69VOm6*tT36(#} zKy0i+#wB}{j4xNsp^zCSOgt6iTSNR&ZA^P<-bJ*5DqdP#2DI5<7%bmmcv63F(MGVp zlPM}9jqh|vLzXpF2n5$jR9y5Z1?>%vaJ&013ileNAz1ttOs_UjUyXvY-e6a*&naQx zaCT6fm@Hq)Gjm|hLZlNh$}N6u73~qRLq?SMCb9YMHUxXg8Mr_vpJmVN5q2P*%Lhe1 zI=xtSOZ@|BW}f3(cd;aunE-zDFVlqGa(cetZ$)pN3`U?w{yYIQ7_iSbFIRFP*>h}A zv1j9nZz3OSXC?8JeKJ)HMXWXWZFv@GHbUX#Dl_h3&2^C&;jkGA=fDu<5&+QYLbs_x z+#7iGx8t?_WdD0`@kRKIGHYicQg0PpGg}Nn>M$Y{n>}?*z0+w*@LI6ouBs_z*lHZJ z|MOh$b9_)N4Kj+AN)xN~0`~<~(+*2p%L51&Y0Tkf=cc}YF`G4K&H0kM%8~83!aG{O zYUT)Q9dM4uTj~;XB4w?NI(idUWP`K1#oo-s!W#w$yC4vQ|B&J53*%jWXLcgQa?L$! zg^fLD4;7ohsE6@Rk04U@hDI+4*4Y$6$TCn^J4P zypcUgckyH^ZzHQ{H%fNBou6&KjPXPbaZ|3MnJ1ux1*`BWr5?Athikdvx%#uQ%2j=> z?U~lmg9fiqu86nP%`LJXIv{2@nW;9?Hh8?Pa6B7(;7$5Hhu+xjVPfL|+@6Xh`&~dXx+;xjH<^d zTJ8{&{HyY)1}lxJtnxdV1Gal2(LpsE^c_&r0y}O6Ts6Fpmc1^ym4lP{5N;FKG8sGXH9qt9cYr;9VoX zM&tdcK)d+XniugN*AYuwnW17%0!^bsyz+ze;3ZlGeb-);j)OK#`h>}Fddf)%*Ht^f z^NN?KDov8w66d!FlmjmY<<{o(#h6(_6W>1&taY$|Am{C7h8!btZ*iL|?B#5OQuPZ7C)+p4TA@;Wljh&9SX<+6=1|rGF})s20Kr4PRDL(EKV#$KC|TC-3s)Jk zoTT8I&(kwk)g0@7>L(hfwxWOr#R?M*SAq8a{lKYQP1tq)iQYhKzDJJKFfnH)pDR9E zre)}0qy9&)e$qu(Oeb`QqaR&%IOt^fQ=PFAQNYg3PxT;piXitflRy(tE7WbCmJxR) z3?jte!%K~&h;p4;7i|#tC?Ox;RsN-mz;in~{7WNv<)FB8^2e zn)e=EQVl~A*o_LW@DoNwkJVOQiOpopqz0yVo~bg-m+qZJ4y`=N9<}@;85baMI?a-Ho$;mblnosOF8`=rqH--D08=^)uVvcHzJW985maK2DEp+$*ADkvDuO zFttnyCLr@TlhE@lwM>*LSgeOUjF}XeXdZ$ZE?y93A=|-G0#d@>h)9y zKy{9vWIfmuqk^Kuz*23QeyPndqcoLK*^%8RH!oBE8iI#uo&{1VEsfcvUE>-X_HnlL z-?%-MOR-`?r<}3;PN zfty-4c+JK)eJDWeRXQKIVGZlljm zh}i%e0i15{&l%;tn!d)>y@YNXb+5lk-=-CUme z$*~S@ne^(3*se9PYa4B6XO{_%736?3u=fvy4x!L&Xr9jwr#X1*j9$%bSBp>NOhC8x zNUg%oUCElQ=>{7<*iC1pvWdb`=^HE)GpA~@@3Kg9hF{KX>~1=aX7dzZv9+_D7WHsy zg&U|NZ(nSn6S!LPXhVa*d7AoQ&s*|eiUdJ7Sq3zWLp5LLq*xqte8^r+(cniCgjD)s zbA-sLuD_&^%9tAsQhDl1OWzy04IFf%%Gg}6*k8?)ri5Rr!fM+}2U8pC#o@Ws_J0lH zw#^hXlxqXP{9+^u>nV{VU2|R&sliBA))7| zE|t`tLAiwpG2b_oFFmrnmznst`y)WBg7_s2PK+Ra}&+RF}#w`1 ztOO-sU4+=N?)(|Y`Bc!7Tls3YME4njMOWJxDQt`!F1NDlNxx`qF@<}YlY~kobsKTq z8%5;FQqqsoW%f~Pz4!2OuBNXWlv6%n(T4u-?Z<#EUpq)cT=| z92~dGYTos*F`*D{S%B=|^@O>$W4Hr+&9Qz7XT#H3%+@m+xjSVX92FXQ?4uBiwi{(f z0(%=(^trok@A?o8N+lQHT9Ahlv)Ch+>enc5EP_S*6f@4nGgrbP8}eaJheWnK-+YPe?~`@ZJsNVpJWH@|m1#pMg2 zZAp8~%{+Ki@m*y_dIwo!F~T!*RV-o=Y-yQ~#P#H(;4a^co&3s7{yTO|QCQV(s?Y9Z zv2rk?%Ff#MiP_>;a2a`v_&H}AWb)e`k~L}lWz?}@Ds7dBSgs2(Q>tM_F+Ie!R|ACR zzia1OTm8};tvOtxFsE%dQ1rtf0=D*tFuk)z(AeABZbuD-OMaT>NVAZw$6O9cyG64M zV4dT-!BdUij?kt-hj4ff92JSIRI!{W=c)*4C)#JGJB@gMRm53+!~UFc&Ut$S@S^Wb zucesUHKd+w)f2-OEsY8eS;ms~5o0-o4x#5tw}}?cLNI=1{YX=yVdy$ya>6mw6$t%b zlL4Q4B{IGW(A~9ALE}5$c_ss`tvoIs|%{gl0DK} zXw@&$Bcx1kew(!B&iy-id22nX>L@JODfJk%n}s)M*s1DN`P8Gu%KZjvK8Bo=;wmUfafQ52npc*o)5ng*?*hLk*UDw2n5(K_rXv_cQ&95%{KIhMu$ZEv5c zm(5lk{3~phoH{~|J2GY2fx;2)*J10FtcioUsQIP-^c?U2UHe5vXp6N636#0jLt05g zt~Px-uPX=t9x-h+*-S!KbON#H)ezUX%sJQi>rHjG=h)u)6e>lx%10uwQ7*dI=$(@q z`wR%PZ1JJ-TjcHp&DsL2h1(T5K6n-m+z+WYb8cNh*R9u$=kSQaZ19?9tu;nhy4}pC zcSDFe$7$hh!k*Uvz^*69E}J4ktpXGY0xLzhAI=@i)G9bE#3Mqu*?h67H~h*~&6{O66m#J2JL`aXx&JU?HsT8cG*`TplU%B%C z13`r$7W5(X!%1P%tR{~rAn6Evr&egJld`e>+7~%3Y|^QOFTHQ~YYnQVZA;ypo3LoXHf@OIk zVbxtH43N>W(|kxK*{g1l`wx8+=@>l{yN3DJ{_9UcK%2B;uGpy+Dd&#^?0=xgAn!M^ zm#&xVGjXwHe92$rvH{ws;kcMn{tS_bf)Ihld4dGYh__8NJEmp@35{6)eLo05DSA>H zjBAJp8Sq~BWJyid(1r9UUDi!wqyc{%U; z>-7s{JkDAl#v#A>-O{`N#=;JS{cijZ>_)NYqB4<`xbO5PUX=0GRZ5j+Dx+V=O-4e&9fJsV(m#@9O zHo_dIAGMzs;!U&`luKplJIJBxi6THe8O-#I%ja|9j?i|`!_R6NBRC?C=yML)KMxV9 zZjlXA;=D5w#$R$ik6h(q3hN{2Yw_W4-Rn`RhV4?l4wi>XF#Z75-^7Qa66Khm$$8$f zSq{noqBXAjOUe4VU=(;-j`1L-zx0HLGpZ5ae%@+LN?Z|ab}PJljmT?`XpgjzLa;u3 zAO!?rOyT@JA(0^Zhi{SH2+5zX`QlDmk1XL*@`6SY%r83W-IW5F+*gqbp)cJ(Uj2Wk zC*>f0oXu_}8@V#DafBfYADt0!cLCEEuD!o&D8JI7e9Tqn*NONnY9lJ}=&E2puiq~XVu4+HKj zJ&_1jE~~BRQhQxM2`4_t!4t8kArngzl@S}U#(qCsvE}-uppZU}bnC?%4|RPgk+f3v zk!Oe}z%>1KrYo5_@J;=Tr4#FHelSY?UUV*+$H=YyjDzC3ME=!6VOYDF{&jUj<=)?R z-9`yD&U7t7SiZmfH#N9ea>v6)^ewXynpEEoeXDS`H%o4&7)rd}b@aT4qJ=O!cy_r` zi>M9StG!b>oTTAAhtI{IzOr&(1G*bEgC!+IJ4x)onkom<8lS~Z{imFq)`t>6jcE}! zru02;B_=>n5&kc}q&vSEiOgQ$BQ%;~RVbp_T6BM_$TyTP7X?N4;(c}})J!yGhpZgU z%82B)l;p9Qy{JBgmf`fl^@_sJK2+$I71WFYQRhF%C;qBsx?qnn?&NV(?`Pgs!AvK5 ziET0j2h&6ASr!+Gz{h-;H%S+il^`y~0o8tfhz37_G$y=Qtxr6vfXB9Bap<6vZ|sBZbw|Ty)2!bGD{B zz_y~SB}BGa9*e*`z}#FEL#d_lsfZDrZkzO7WpX8>{9SarS38$I@FgBzNWg`=wEH zf(JT&&2l=>jt;C!>xW<5pDN~V!D}GGR+` z%(KE?<+COp3R79?6JR3!0?AuQ)k(@pm4(prApo=r)yMd~oQ@dbP$)q;5#TcNBM1&OGf zXym@cM7xyaM8nULOS)1LfAx7O-1JWOZnW1mV~%Jaiq8B~`sRut#c4p&yEcb|lxos5 zmtUG-%=ap3j+wvG2tbhrbQowf0O<~8vwZ`u@RvR%B^a(JOslLKWsnt39`Z#fiiwCD z#Z{hYR#YNTu`}UKv}`J2Nn})mcFl<Qwtul@EKLD}4@{Ke~BA(I-WRkFL6zb$WxS z4KsHFVPgspcc%YBdBc@mNBTtPy6xNNh33y1%Xk3mB+zw{NZ$Ie0CmmvFbadOL6uj6>3e+!KE^fc(19X8rTwI6$!`E8|x6w4=qB1ixJBisb zvn?|-LmaamGsVozF~rQw%rP^g3^H@f%nZ4DzjN-tTUWIuRjGHTdwR61*`9u$j?w|% z20z`oRQFmlqIOxX`ii%y{_J!FW%rhUtUX@bV`4t(Ri!GHE#aw6NJ3yl;a#wpIy*$a z80P+(y$08Oe4l|(9f@VrRjyI`0ZKv+b2K>4!}KJvhGo(xfMtm0cWz3*`A&(|arC0A z^o`~j?yD2{e{T6fPh`U|8E$W~bg1b~xzvy6RJSjrtt=@@j#yrWB5PrIVIq#6er$ia z;Xb0Cw36&xmA1$5=NB&;TwzZ8S(I$Pm;6@YBGBfT)6k~q@9JgTEScuKO(21fFj~9# zY%piZ2rZ8#=43D_=vQ?Z9AF8Lj0~S_wT&95egZ^5*zWX6$_`sj>+%{$8Pi zi}FC>RzAAbX6VPr<*UJzjnKE@saxQ&B zfj^4iBxOC1`xjHmDz|eNhw)zAhOIO6KntQJ_)pVSgo$ZThluHX{B$%dDsGJiCvVn% z-(tihwfo_VK)cEtK6GGRu|ECLXKj|%k@;axWBsf@clicbOs*sES6ig-}aS{dT)Gf#Ho_f9I&KpM~NYXFq`IbFwq5#ZEue?Z*a+nBBfXpB61-5 zN_VDC2cp-Y(8BI5FT5yTAGMDAbN6QITq^I*k4w3F*{F<=#nq@wQTmqn+?0SiF<^|> z@*k#Z0H)5HM=7Im)ofthKfn&4FK~43J5m>a-|`mqfwOj7<_N9uT%OZUB%Z7X1|-~c z?(-2Zt({&{&fEvaN%0=o&J+e^TRu94Fwg)p>v~2y@=IFEash4_@hV7Obh9zy9?dpV zZ((1n7d7^rxN#zz1&99z`rKrwhZ8Z;!X&V$7L>Ko@T@x8@ekndN|p(Z;<4AHpvF3c zda8;`rrk+NRl4-P{JY@!sHwGsFafVEfqc|>_1&2x}= z4N9?`H3)l5UpCWeF$gM;60N7tyZXZ687|ud|3lON$I9b)wPwUwn`P@jfybm&VIam9(BFL3-pW&B-I{;CRfotuhu;`g-I`w}sOCW-LnSJ06lJF*j~ z&uh3uumev>UF=SDnPuh>;y{M`{ntKk#Xt% zd%f9Vp)O=)G1+J%p|DLqv@e$heqpwn*jVrl4()_;F80LB*Bug>=Ip(1Z>t6RDqOUG$TZ z3y}+6mDV1DJa1rq@xfsjDi-Y~(Yj(->A34UyQ^;7&IyR^AAm$l0PBav9XRuZk1Ruq z-Eyu$oqjrj(Do{=IP6nHjjr=9(o)iQw*}z{fYE#HO;9mET1!44I<`}qH`YCMODa*` z)f}xA8e)yAsOYnEn7mXFYP-8<7hC@~XU#<#>OP*QZWgg|BX@93nBrQKBeq#ixl>Mc ztbv0jnKyg@0?8st>*@K_;h4@Q8d;9g9ljdjvd1U*Nn(F`+(@KiF3-sI&D`Iov(X?N zQyD=BM>6h=bb$`}<*h41TMJYe9NO`L(fZ7;7{mY-71d|xKw3aC_0OW`uJ-Hu8rpch z(jQxk7fn0~PHK`CIK9K)6)p0U3V&0X2?P4_E}nGoeZ=Qa%R$xOq(Tc5{feRBrFLbh zco+bc)25LIWFu19H{3odpFgoQqvKI?{C?o zarzteD&K)s;d%nLiOl@b0y8X?N@RN&an$6QsWpDRlWmCw?x~ZU{=3u zOSs-@pIpDSVY4iAtT7oX`ZM^gzS0b=L-RM56_d^UDxo**kTE697i3gK`zy+_70L*K z8E+IFk(N(OoDuS0^sOoUvO|{oO&uLa?kVR>FsdW+fV~Zk4GNlDKQSYcJU*Y3ofzZ-vSHoR& z$1H*2cR7(FXiaVcj(G6zyq&ZBU#c1ARc7i25TYk1M=tE}gzCHTb>Hd7%r{vKZGZ<& zW=BGMG#}U#@^(+tk%gBtnTw>T?6Tw|_ZjO^A^> zwNs*EI@8l~TT6J3|GIzr#8PFXcpR`kMmlB5`ke+}SrdRbx0;2m={aTf`em^>amM#=KB$bm z37FZQJ7{-+sgq7x&#YRg%cpHV+(|8heWvmGlmNq&GuEiL<#IFV_cELO*A^d3In{FY z--&l!_+uQFx_5nX*)$R!IB*2DT*cX((FMd*KunCp8&Iff+Y zbVxp6N0VTu51d$}t0lPaXSe$&#sdJ<5!+&&F<+`H3zr^wjR}-HUMpv_2tmud(wNoa zIo{2e>S~P)W4l^fmjq=#ZI@i7!lJjrnyu{^of>{Of|i~<89s=5XyXI>dtBrl7?gIk z+49zlt1>@Mn_n++3YY4tQKJG+qRz3j$wk5{G7OLJ9O zPI}045FRKxR7tv4^K9w0preY}GrDKokN+k;vd~_k>B@skcHB1vGag(^8SIbIp4jU` ztL0{8TM+m@g{3zVFr0s3q?T5I!tu7rJ_ZG(Ns%1ny!(xoIr|MAq2}3ZXngH$&`Xro^C_^vPiwZ;nryC+rfB5=c>F0mpr^>3q-j&{puJqA5~>>4mg=I#n+LS* z4%u~y=R+bl41`@r`eiVUV|{S^$=aFk&W4av`b%R!OPVwSgVBgDL;p9(it%_$~we%(1UM|;JW|DUWD8=eXI?EAT1hqT%Lb=Dw1(8r%d3cfoafZiJy-q`J z-!b6x(V{B6!{Dt`(bO^Lp6}E4r0(P4%jLXq7#5zM=i3JvreJcFjT4`2vs9EQ0l^4> zy>+GZr=KQj$e4uJ3Y}RgYy+(g-5(MA$EQvQwS*FeHFiNrmLjnMxtFI_aOUb=7YBeJ zVPb^maMP1?UBfh;M5n0@*7Z@2KyE%7_F|;p2dhESTL57i&AP?gK=xKr+qEA5PiFF& zo#EG|T2w!b;vV;8MaJyz>rBp}WEs#*XJxI0!W1!r!Swg8mOM&89Yxgfp6A3<72Q<; zX-%|%n%@mNdI#=B?5sWmg+`-<1?`;{c4{8^@l&$D>cqX)4HJt#arobyv}%C|E4+)l zoNE>HW1lkE=&V*T2rvD#D2WZolGvLv21SIvVGtMAzc((fj~ec?=2!^E9GP$u#NJSE z?UBi_=B2J&dhf-&6Hv0Zoy7##sW{$e&%%AFrapImHPG3S)8GD!jHt$6d9gV95p8?# z$BF}}-)>=tt!gsU5y-<1yv>&J5F^x4`>%2 ziqmE>_zb)&IPp4U6|U-~PPC8YYR`G;Q97K)OhC_G?c-}mL#+23djTusCFJb`SN6*d z@-GvgvDYg^g%Wm7E;<_ok15tz0A;p}uN7rB>GGFL!{XemuF5rKA;nYMF4AfkugC?sGgadaYS2~iTD8yHFRwtU zfQPSnIhDAjWtkd>+Ef&HCo!o5i|rk9_4@KR~1gT(A54!{6b|EaT3FG2_87rwX^Uu8Ppy1d!X;>C4jPT)pm^ z;Se4Q>(`{mp99bD97=yVxSX?npq&}XYcI*YM29Rl@cay#Ytha<4_*ITozez)G>J2K1j7VG<*SL-5sUrh0jn4c z#!1iDgD$WMj5Hd^r7*s2IiPG}HsAa`mdY!lJ!OcOZ9o0zWx0{!cS!L&w5N;{F~li- z{U3iLLzW4C&rwLnT{b)TD0K)YO!;}9;HCeND3G6q{(#jA4Oprl55Ux6m=wz0*jHCO z5bEUPJ0Nlw+@#0gZucOzQmfSl#@{|8zW2qjC_7c@3dJ3^;GVH?gyv~g@oP+@_|Dqc z6&+e*BjN9TEL@`c(0iCRZC!aC;IS~3c`g2SS9un0_o++lNxY!PL&69!P6(p0%E)Y= zeVP#*IeMd{HtAr|MWtt_A~aJ#|3M@Q#j3Tr(fWn%H~)>#3^z2OtZ0zT`uO9D@8?=v zzNdRp_yE_9i$>s(m6eCw=r4my&>q5G(aNV%DG?p}^b5l-EMA5|k~3xgu?KvWLsRxzqVX(}%qjvb1?eH)%x)p9S+}OzDub3!>4r z7Cw{3)Nuo$%fHUBiRtw;zveLYcJx^l7xydt_59`Ir*Gqe7PaXz>eYeqIABho>(DV5 z;D~Qy<98SVjjiMgZ{O126`QyUNnl=qEVGuoppwwWQDmrVTd*AB;5*vjr@YWDjveHd zHX)#$lag3q;E0@raiiK+)aqiAt-CAd`M&Dgv9jp)7Tm((&HSJwrq75MyfZaGzwS@S~COzCWf>3Y6Hy{-q*kQ|A|>DH@^svl#?9sEL~@ST^T4 zpnE>n?AL6N5)j0)6eNo_p6(12B*DDVSurz{KSP!-jEw_R=9#ojb28O_s%Et(0r~k| zyZWTrEc0INs3KEaEzY=P3viWhZ2R&p)gr97RC9N1d3#tJ&!D*voS&%Rdp(6DV$Rr? zA!%JEcZu4sm{WWPX2^RLroI0I@UOd(e>KXNyAwPR*6*b3q*uojv+}LhXzH}Y^h4On z1(~QCqX0au(no<9h#QX=Z;B_22Bn~EdKvf2QI19Zt(bTdO1CBmJv_>CL)U!QS^0F1 zj347Ha&C2(O)&!PRPUZ8eEXyCTu@(jq?yJ}qg%MhdT5;Piw@uSxvIrX_u{@I+%p;d zxY3WD;z-*NT0#%eTVMsgC{53}$oBZWpcy}}flXE!(Xes(!+Y5oia_b*urWC2akn2i z#F&d0wW(FiqRzL)s~;+IEB6pJeO~+{jv+{%22!Cq9Dc6kj$PI{?65dHn^+=}SAUXE zIhjZVn}%XA5I5)<<$CwAy<5bYi@e$hZT%|OJ@~%jON&qOS#(JUQ zY=23{PXD!0BYrCfJeMemv>2cT6|gd%l}DfzSaRHa@KnlxEmc4zqR8zgQCfnnT)!Ac zXX&GjmDU2ukU)v#I^2=?TK(9?f{a}6ZoARb`wrSGPm{-=Z47!v5^rye<`@b@ZE~KU zD#2td`ZLkO>h4D;pq$wSTgV94mgeq+V1=)ux3#*Le&$Fir+t=@J@XwS1Rg+>N(Z_vVgf@xLLhn8J068nR zHh@XVJpV{1NNJ3dknkmbUBUb>Uk6#yp2dZx=~7^xzie0l@l9>rZ-d zZhz7r3ZC0!s{r$KxuzAWayK6s>J6H^x=oHR1q=JMP-i8vII5M2bJx!;RVw+?cye<7ue!ogu*O~-MQ|HdBhtBeG+W@+QQkc(mc8o?5 ziH4kHv}IfjDK%uLCk4E`ucbaAoOgB1iT4Hkp&A>TEHw}Q5?J8jSuUWEJ$3^`{xku- zI_qTEeJ-M$$h-eS)-y;TTD^daQz9?hPaE{9O6@NJ2HO595SAA+33>GQZ;6#Xzw&*f zvxsHVTI@?tpeoO1*8$q5jgqQjrC&^TzhN(gUF8C~?O-VO*hq}=Rau%5 zk)YU`$>LMRQpVY3{d+1B`MzF(HN|96*!ph)0e+E6win40w#t6`bVzV|N+`G`{QbKf zwW&^Oy+DdS?-oP2@Q(Za(?QfSMycC4hVK0z77?hV1;yS+rs0auZ628MD3QegtYt01 z6C@~>Jj+vM4rs(8G33Yg+ea(C^;T&Kt8aFTdmGNYI%$k&)}9)GlMBYURD$ht?67HD zLm8JMO0`}a)%^_!gVPVgu0y4oYO;LyV*T>u>?z_vf{(DO93qn!!ycjB{qH9@yk#nO z(Ffli@>QZ~iec2N41L?RkSr)j9pRr#khNjLqhS(d4j(xOs}^NNJkN`c?HGFbU58I$ zYO4txZCFo0E~I6M07^8V@UZ;Z^W2a!YUcHO9ueOq>4>SFJoBCRJhv&VgXc_?hKz!@$V}`T z5KR_^w&Hyjhg76ZijBQF_M4}MFl8>QzW)@*&k@dCJM#2Se*CAu8CcATx~$Vat%bo~ zbi-KvCl?zS4qjfzi&gNoTco1%p2&7y3uQl#)6(otjs#7sImLP*a5sxDkwak7BQ!CE zz1!$X#EA92uZv+a9#)C4k2B>&zJ+1dw_mS18gk<1w+4)!yK=R*iwG(k_amnk4csQ0}9?Ni9FK}-=mg{Y8GL8iEO58Gl6RJgpIuPiMiA@SaJoPW)&m zS8O+%JA_tOZ$G*H8xWW9jD~KDSN3Z&c)^#}GXo$Zy7QXuV*|VJx6$7Y$Ojc?@rG-z z7nZ<_N&^p;p;R8cWlY%2JwD$dG;5T|Ir2RS4Vb6h>M9!#2&hriADMrf9@i(MJI6!Z zmJZMawQ20Z2toV3sGxphC;kb;JeqIEh=EGznjAb9vDPLXU@1$}sP1NKvcUe$qRU|U zZ(h#aX$w!X&X}|9jX@hQO5pc6wSB7h3@ehEYl(PfuHWku&NK-wWS?y0A~xr19ES)i z=E=?Z8Sf{=p_3k$kdg_ncDarz=K(7H0xseZ*SY~e_|K|H3gaocLjHSq-2pU3^&O$5 zhtW2W*inb}Z>z2GXeYf?uMDJ;HQcMnAfb!*|ez1 z70TU{%_lr9AA#5Wj{k9`4QmrKe|K9Ra@Bk+M8H zsS+S1txI#v?pZvkP8B)BAJ-^$9z-jGsjO`@1Hi{7&E{^^6$vRIH#gW}G6W|6?x1#p@*U-Ld{D}ec{Maa`%1-*}Ku~~$ zHtxBA-cyn!b5RLp@5XJd@gre1Z}y52EA|EubxQFxN$7Mh+2j69TE{|n7GXjBRh)$)O_xL3d#-nkq_{q;+Cvm_% z5GTOHkv4c@Jie)ABkfN|g8h?ml|qgmEIoG0kku&1>+pV&Z_WI;WAGLHcHZIuQ; zrd^qFIgd~+ah$g-Co2&)6IRtsrVJAo--UwNuSXOGjbXfA742NuUQ~28`%AR#58s@T zcpr&xbo&Ra7#c=TJBOI=(E1-J=O{eD_uQhH;E~)Et30cH5A`r_qV&OjX^deV9G2(tIvWLPTxT2CZ(932Z zTQN56c2^AxpEv&5w(O@iu@R#u^{Vx0^0sQNdx9YWjz{GMBaHcMY4q_WzKAc|1ZZ#M zhPbZ-ZGAY8(CJ6sGwG-~Hl6fBcTC?;HwX$wIQg=QS?G#OgK+HP4! zpOu*t#rTYGh?9aT?Zvc{W}gY^U`z@(5_C^nHoRuW`Xuz9D7wL)vUBrGqoe_*{xk(K z;1B+_?|!}Q_xD-huF zL=&b9^wh1fVey~X%T?>S@R#0=qgA&0m=Zh2Usg>@{&`I`^LbDIkI?1B4XIPs=WJ8D z7cG!M(pZQI_0hczw~n#KH>+C`3c>P5YR-7Ytz<;j+7#AI)7ocXco1`Pm;DT7EF%o zc6xazUF_E!J4M^)p5}zzlS%gKXJkxeyJ*kzoFSy~EBPaf*?zY?H@pQy=*9K=B)?|; z6zA;L`Ato{zF?m5qfLz@8UexOnSDrNG3~HRgtA`cE-iDL#~ShEVJ@NWJGQB4eNHIR z6~+4P-*WwoCCoNnw>QaPUTge)=MCX@eA#ghH6d&2nj;Og4FkBO63aofYcXmVrv$kl zHTI#KoaaUAYVE(2fejx=Yg-s0_X^JC&c+;=vY{XY&8TqI`gN6RX|g-ePeah1X=!bj z^T2bD`!;GMHnEgT)5l$*O0rpLM!d`HuB?{$SYq3`q}^9W>5;X zI}%msr;oS{`tBp}X1!y0cJoDf1nFrHF9LXm)%~~QE-O?N=}im7mZjA?Jho@ zLQI=qh5nFOq|Nb;_1LA#dauS$bUplUwkH-eZTX+LL!SQu7HoK{a{{LFQZ<^(c}?W( zvw3G!|8Pcr_A}`XQTu(cTO6M$-&Q#Ao5+>zc7SSh*+w>O4I{Frh~8e+M*TqrTdws9 z_E(OsF{*o%9*1f=K^KK@5nRZ!J6y^06okprq6Ul@LV_!khGsdL*=1P4|0VY5WPkcv zM5h0ornu^B{akUdZ;+;~U{taRHBrv#lt-`Kk?r+}0tsmxvzIFFm~gZ%f<+;h(@Gfv zQgX3~5cLrc1B;jn_cIsW^-j#QTJ$gX0by$LzBY?QT}i@$Wbg4|KCWWQ(TCf6*J>3X z1pf)s$#%BmGi|zDZRITlxbzw?m0y;o!P1i^v#)fK)OyMUU%ixkeNU%8)-!C5=9LJl zY;^wtvZdG(#3T=4l|A!y+UhffP2%P#bVq`_t2r|f=;hEO@D^;*40X+>&BTs|njA7z z0Fr|y+lknhcyJ7*3Oxw zm(9=?la2jk&3$#3qF6tx5O(fLm?P^l`D_pE?{dXc%p+VTxe*eDl8ahX$kjr+O+H;d z*%$GVLBO2~@sr>Z62M{pYYV!pe`#$G4nCyn%acQm7=K#B9V!Q{#E!|;8oeAer8o0e zgY~7eEZ9GkEyt>tE5E+wj0B5N8y#vf(YXp&{IpHbS>G^_Jc^)2G>`it%+c>} z66Rf(Ijnmu@rk=Hv+ZCp@cJ8bUVAfh?0k{U&xhN&CMk*fDiVtj=)$Dgca20Bo~GZ| zS+~Y@LZ{Nni8NmS0Db}@u4(ISxSyppe^__w#N1iyE(Dx>n2tB|8>#H{%mpMt%6#G@ z6~f(Y7E*t{)}=hu%AZB)CkF}AA&8YYX!7J8zY61-QKA02#625{jFY~|Nk^Mi!^Uc1 z$HEgp&w-?{nhhODv!230eaT@m2|t9;*l^`t|n=A zMT`Iyj%-QT8m7qKR;&QS{A1(K^iQcGBS%t7eR%tem?-)>$+O>??X9=9&y>S#a|hhz zWyv`f3hK(x;&rE@0xUd_$qF(El$YCV92I^|dD!e8ga$K2x^Oz;dA&1EKo!aZ z@TCq)wuKU?_%ke6PDn6HUj1kPK--l-GMZ$m8pM&SF*gR-bKTo>&h}$m9VQ7`VZ*PI z>0vDj6q{7# ztgG?*eIJQwmvQi-yH7}_hT(07DE0JK?}h2eg!;Wn zN)>@?K3EZGOQxybz7Z_|0VJ5lL#m`+Z;MF~VAooTTwej-j_T)Wz%!rg2(;3WIJ|vw z?Yn8C_0U~NPi|e`pTT<3N?knXDqnNM#al|7>G6k|!sTR)8}$wy4tIMA70=1a=&^Bn z3-%SM8|hY4#nWlGr<4+#dzdxso3iVVavtWau`EfDXiVN`WmJU*1Q*vqYroP-N?xzX z=a%1-f)MVI&6u;ttx7UN>u>{vVDGYgX}EymiiP)v)xbYMG-$ffj}eAo&-ibZ@i~_b zJU3f6lK3+TsjV}N&|I(8Y^%19GWc3LC#z zy@sOOPNhmECG&r(ZJLxIhQUaI_+py`P>P!>m5z&qg<$NBI91qn0yx3eAF0sRcCby9 zV~^`jj9Vn{)&{;Al2>eBB(9OavNqegIv*aku6~KX!s*H+o61NuQz6c6+0&t}m!#|f zh96&wNXV=ZXIYnO`~jt2FrZ}T)l@gitz9FHOFK0}Rh_Dna;HCLK$ac2+cGiIkGRHs z_Udnv#>9(ojlvjS_HgxxO7}F!qQ8V(aVJAC4_sV)Doaj!DuTQ%hD0MD{jBK&CpC6R z&6cz-oQ}ZHVDlIPd#qd0qR)evw`GM2Y^3~a`jzxb{8v6zTNpIIW*qn&k-mr&hC{Gw zcSGuqKU5-JQW_h4iL-L&*fo>K=Vpm>jJ%0e9M2ys_RA5)IOcn!8W{}Bj zJm}IDrQ?g2kg(p>l0E+eT8P6xz~-x28C9^VX;%kM2%86fH!biM^uJ?5*rKQDiOG;s z-4X#s@$MLhZA)nF|A_v3N3V9rK%XZxqHcTK#QWv|`Nr@6HvCVDCRG|Lr2=nF%}!16 zUvJm{0FVzs(9}PGPma&+bcleOljmd*B0czjjlP0Fz;U_g18vuTfRB3Z{2WBe6-3IQ z#Q&>~?B>TmKn^_~gw-1GvA5^mzxE?%Obn6Q=l^KD`9QI`!W~)qPdxR;G6KmkTF=8B z|6k|p5N#1OF!CVa)ztf<5BT-6`VFi#P`db^@ZH!DcsnKroMn4-0N&nJikP}SPLob; z%J`o^29>W5Y1@gVcn=aTHFyiabbmdK;c}=nKmT~X@a<8C41&P_?bqX$OUKrjDZ1Y) z($>OI_ts@xgP1F%;mx`*H_O}gmUuK`u<$eRwa(M~7dE}2--VoXH2_OY zRR5Jo>0RjAzlIK`^FQZI_NU(XKwL!0#un;~13T>`e_4Key8Zf}-+-;uDv8R#o1LH0 ztm6!liw#?Nuje0!5c46@k?3cOhTG}J2-eZbo#5Sd=EsGP!{-0>2^l|y^nn@u)&$C+ zx;P~#l^shHz6!qg|N6Y0=&c)FOOF$(*xiP~96-mj+74JkW%*y9AmAP=wwUln$v;3} z5vw>VZ~%?e0gbEtKYfs6Du~dTj=q}ubwoOXwU3H*Abe)M2mkH=NICgPkIb9pw1F*- zqNsHPsN7=4m&~RAS0xPK-kQZbJAcQg;V2rws%+oyb33s0zlQvso41A&IJbwNq(Q)L zkV6Xy;nom%jRDapSdpk)wgtT1!+ZN4sGa*iMa`Q2Am&F9a5`H^yMK5d1Z>EGM$tXc z{_lJtr46FnaqvN{W|@}LWLDGd2se{dXYp-xdll>2@bxrV(^zQu+Z=6w-h1?CDA8JA6PXnQN6UyQ{eG0GlXCMtxWs;u1dMhI0DPu5g_AdOIi_D122g>j=3$Up_~#logIT ztQBgToJDATd}hT8_zD+{2N(9TYre(R%&MRAx!rD~&I;BDDJajecFO+A$XT69!88ao zv~hQTR{&2?SaGnuhdvj~L@35%eaGd?H>n2AG)LPV8wf5Y_yl4}{Yy_oy&cVh8;l~L zVaw_&eo)LBM>`;K6=xU}lo&20Sn-D8@fa4GgdAV36exMEh~M>f>f*`geM)cgrg0a; zrWyD?qAo;r_*ASzu6BFKv3-8)XpxL}IA%PRK z`rx`sUZtR-82&8a_tcivu3lY0ULpYZywyA_R8ZfLL+0+pw74(z+I(I=`q2DiJVhqh zZR@caJ0x>w{~>DHVdbPJkRCUmuX2R}U+m_!T0G)|hwiI*9{CWgD1r7xTP_pHrHb!C zT3Xf+h09&Fn5&=^ai5UvDK&x9In3yr#`^x6A=;ZZ7vgR#+@Wx|FkU=JK*;g&Tr2cl znri+qq*6*++j#0oZn+enQil-2TgJ%f1=F<1wd}O9{HrMo={r1Rgite!sX$O<{`j+g zfJ*CS?T9(qZORzinT=R@`}m#Rg2UXb$=vDG3|A0SK|`|1my}wqa9ZC}Qv{=rn_Ek& zbRfB*1}Y0i3NXsq(%Jsm^#G3NbLZv9pI5yP(i~H#>hV{dhrY98#p|4@+${&ZPf?gx zmhU42ZSUj7IE)$;R66M!fzTiT>5^t;4FG_{B(7O1wi#jLn7pG*Tfc93jEu-;X z{Zc5YFW=TLuJGrqP$sN~XA666a;$@!mQF634^GDOQ*Q7_zU2IBSaKvZ&rEQX-L_j} zeK_XC|C$|WEa1JG^5e2{_U6u#w#Z>&Y0U`oH)P?qMjHkOM!01PDv|3xG3>8tHWA-Q z*Ca~YX5N19MkA@v;6zfeX6dUu2tqX`)4gEMB#hP=9<@+y>;TcM(c}BK`5|+B*DTNx zS>!os$ruCwvJ`vQw*wb}SYFB~xpe3s{Cvpuve8Tvn?b3)R!$f;D|D>#72eHg`!l5t zs<|$rf~AXfx8vGY;(O;R6C^3#4&cOGOa#VjS3Q9KcepieHPc1gNg=5#6*}>h?`Y~5 zNBXk4S{#9B`e8Bbn*k^SVH*TIf$fwLJjE4T=!Z-=_lU8FyMk^e-?#2Xv?`wc7qD(z z_?wPhXDZ{)$cSCrFO?Cl(TNzvNPO6DcckEt*MT3`1cb%a9KU9qy0wk4>9mCOgBb(5 zoQM_9oR|4B6{Uh5kHM1J>-#|!c#P?jR~|{UX(Jr!Rzt_c;e{b*jGHPYMIzl{*BiH%{A1?hYH1t1!1qaQaP`p$*(STmLgQaat z>p$>WWMfN@ATH026Q^}sVR3rR%;YhQ!a|uLJ5PZ-Ncur;5Yd6p8^uvzZmRja3vo;D zEYRXHm9cO8LsW-D(t61fnNaTbn+^M@qXy*q?;?wtpm3ske<1p`5sE6TX*)~b7)x41}$r={4<9D z@~frZyW@^-OsiHUxswHawbEBl;1g_3Xm-jamvFRW z4@!MTBT4=Y40EbyHhgfk7a2y1ftRYSde7dx4|u6Oyp2;7`+zFuA%=h*DvC9!&D`99 zqiU9C)YZELwbH11|MSGY9{dTV5mKG87@`UxM)LT{Rx18t)nTd3^(*PhL=WOt-?%LBG{V@K*QC)N@0P-api#L&5xNXf2X7es(RoItOO z=#d}n>+r$WhBa1t#0Ax(fh-g$Y#ikxUAEacJ-MuhvSPK10TR&)s4Z;qiJ8&ZgMJFhhY0U`+}f$xm~L$Q_7waYGiDe0Jwxerwq2 zlsDpc$>-AQFmV5+De5my&qEh&EuKjlG-Ce^Cl-HZ!=-yXQKdtOXMfAvZ0po5QOC>v zlLRhKFPGM-v6oJo^G29u45uDEww_a`%4(_<%PW;k`wK(bVCto5yXJeeW6m8*kTuK< zIXX6Ym^oWME<*s?m(OiT>{#W8mwFC7@}p)Q9C(I6zwGljf|#u6pBpjHJT#SU=BYQB{?zzRxWD9pTIaz#{CYL1iGe5+1ETZ*!H9pg~ZC--?(Py;6KX zoeIYS2Yc^Se95uFkXjkP)8Ih%4{wj>(Y|3>3XHHrfk^jF=8xJf6q^l|#W^)r^5Yz4^ICWDBlE z;ZQdN^>ypa^1-~xtIW@Uz7J%aG)PPb!GvwLZ6`jTprnB#vHT5OpKvIBiotOO-#eQy zNn2&m5yP;ti{EHBZ4Umtyz5SD(R=Kzfut^qgu5bckN&3r^aX!&PwvO9DdV^b(S+-Q zyZ_LN!x@G>_ViGPu(o>%wrZ;NnnUA#rA0G4q7oZX-chTI^I!eMh|E6>xG=6_qBM=? z6fWsgJL3;ZRatjwWRq!1g-(qbZ8_+7Y_ff#Dg@;qD0Aju(GjgzLQCGSUJzJZ60&U$ z?sGo1m6R@tAVt+fUVb8my0Gt&VtLoe0w*xntIefT0}=*X@~adg)QiGV54v}SOn66> zx+&?GFVVb8kJPD@R6q`U^tSpB zuB+TzGM+XJ^ZFRVYkQP3E*?6yy~YaPjDG-5csv+U5}pI!bYWFxhJ)CHdoDZ+M`i)x zPT-#sRLXDMZZEE%mI7^0pS-f1XC=>-cw@w2Si*Vq#WN@&w(jYRH!uB7XP;G+%Rr5t zekT>Kz%eGt6kdK;59pFj=(1W;h%IkDF`G*W&f*souC66Wi<7f`qn`dz@nUA?U*pWQ znf%QoQj*>xDlCDRrBA^#JM(^}a@5jT#9vvn{qiFS@8Aw*Db_<`Jd8(ZiqECTSZzg? zk3}ZBJB{3YGkn&M;GQ&5dTUZu9K|?f?13M`i(!W~mg;X_iIPFoHlXf5LXD&bokJj0 z?+%$}PhzlP@PfNuEd-i+T2@A`y;8IA`%p(%<62BcE~_X1#bxDErp$vs3h4~Ql&Joi z%&(l`wC*aXp&Z=Rw9*i>xJ1>)``CroJS}?E-`3m)vVQ4e>Y zFsJ?!FfX3@0RD596BpUSGc)gys*PYeSPJL=a40W*O@DRSQOmU9e1*7CUTa_>ME6tN z!>S=~NquDOZ$yruU+k^64SE}J_s#iP#b7oTcs<;^~&`qr9{=J#(Xq;z0@yf}6b%>Z81JzMx8<;Ir zKih@S(H484Ohzwp+?|C_hqhsvB1Z*J%T}w7QEZ8jf0yCIMZR2=CrCu0CTQuAEB~ta z1)7`|kRXhP;xAjwLtff~M*<%QMn6rb1F=%7Sz^_KHVK=27w!&>!;kBYO?*E{(FLe%P7nY29{@ZFmLuW-xb|&E zB!uw;aRtJ;{Nw@*Ja1i#N9*<-Y#(=^Xl&?vkMyrgJvQTFJ*_q>N9)J;87Kb%z8mf7 zMwvB^ACYb;OSp!%!<#0ZRzLJ0sf!R3^XHoH%bc_m`sXUPqH5EU&gQ^us$!f zZPvATejmWFzjwO6^WmxD=jFUD<1PcAXd;FA{sVNCxm&yy{F;fN6A2XZ67@^O<$N=U zOHv!nBn{l|Sd@xNK-aqM@k(n{goj}sdEl{J3u79qIGCRotAz_1QQkDL(<#u?u;2YD zpzK+o*y=q3-LS3IG#^VTo^rlEQ#oHOh2(zT_vSmW6@`yt)~V|?H>9n$?pQ^K#J>fi zaLBMKx!j6H!1(`*aQs)d`wBC^ewMOt=l_jx{8z6V^L{jWL}n?#a?#x?%PPS+LEqn& zS|(1~li}h5y<8FTyU$S8cv8_8NSHux3N~ct=L*8lyo5g0W89qD0(Qnh#>f08vxiDt zrhe~!z9ES%-s<_|lpGT76lGcrN%yz8Y}XIr4i$X614{(B<&IWx<_56>6r!~;+t@4n zPZrV2Cs^%usrotN*~mh4ayM}dc#qToVmPYsWxfpZmk@bHqO1{mb|nTkb!^N5TQ@9P zzQTT}{NpgCV)!H{>A$6|N=R24gN6AwxP6~J)>XpvOZ3a@+F3f|yiAC1yF^u0kLDCJ zB4QC_a?!E0n$2(5pQ)_4NDY7TISnNBANjHHU$zk3_qgD|S!ZgSUgSvzg@M`8cs_a;18%NBx-!nA4gjA4p6A-C>QpC^Nu|w;;LpSFAe2D>uXAnb{#iEfLPR*&`2RE}a z1VN2|UpTLT(3d(RI%OVAwJ)(wnF}+0Bf{7xaa~dX4~&Kiqg<6I+%g}E-V(0S4a1a_ zA1q;D1Y zKp?;0jBhkdZ2tgD;KZ#lfDtAKJ3VOKQ=1?S-R0c*nuQ_>Y&C+)Xi0Y`cA-P+~}ns5)lkhK>lP%MSp&J1ezCu-G8>{{T$ct2@Mj zJj^{wj3rweZe;6`*70cq3v9nurx_sLge14CNaEIG7u|mcSZ`2CE(|5uaXC6dgO;+n zeA1nl9yoD$e9{$e-Cbxb#i9FuMx60jp<>U1aT|_}C^|5nF({p-pb;=*cSD-kqOj0F z%QNR!s;cowhvi(nlDS2=Np#rYO`&Lo&qyBm5x`!dY2v-i=n`1?z*kN6mTgO5B><2 z@r1H+OZ3C7BD9B!JOt8qIN84u)cDpY9JB(2%f9ALUSCe00UVcGf=FO`H%2G zgrhAc&)@x|rD)FzW)CB8@5VQ$uK`4$E{SB@i8U@;Ar!2ZGMn=mzXPrmAtdx?{{Sv0 z5}D*T*jx>@HtK#QDlm2*r}-sGL53eiQ*(b*0E5-_KLr9>5n&kne!AxY4iVaflng&_ z9k!%>_w;f2p(^YXC-ZT$+NPYeJDXkG#A4_SPofy)X`*Vm`!r&*h0ajO_8na2W7P;} z6QZ7z@BVOE!$|d?jsCxl03h{$!yrKS>rS++dsXWrJ$a%`I-1qvaF-?MbU*eH0 z{wfZq&UDmHp|+>l@yem__pR@RVG8#8sTfrb&$r!3!h}gZ8{y5zhu>}e8F+bbz~Q|c zxH#D7<><^Fj$POL{eA}9X_v5a>BD;xrYIm;Hh#4@Rw>|h4w`i&>rO*DJDml`pcvM? zLtz3ZX=W%keV@vavArxOC#V*hzai%;zjNQ}q{R{}Pb>UXf{XtEHS07=_xw<*N&
#k@z|a#TW+H`Kz)Ix5QMf6W{CR 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%0DpQZ?YVg9K+}HrX6xuHUg{&Z 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�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
8Hyc`uU;*CUxI9eMpCXZO1(E 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/HGCal_testbeam/README b/examples/advanced/HGCal_testbeam/README new file mode 100644 index 0000000000..93092d98eb --- /dev/null +++ b/examples/advanced/HGCal_testbeam/README @@ -0,0 +1,227 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example HGCal_testbeam + ---------------------- + + This example is based on the Geant4 standalone application developed + by Thorben Quast for the CMS HGCal studies: + https://github.com/ThorbenQuast/HGCal_TB_Geant4. + + The goal of this example is to demonstrate a test beam setup used + in HEP experiments, and as a base for the validation studies and + comparison with experiment data. + + It presents a test beam setup used in the HGCal studies in October + 2018. It can be easily extended to other configurations. + + Details on the High Granularity Calorimeter (HGCal) can be found + i.a. in the Technical Design Report: + https://cds.cern.ch/record/2293646/files/CMS-TDR-019.pdf + + 1. Detector description + ----------------------- + + Detector construction in this example assumes that the setup is + constructed with different elements placed one behind another along + z axis (beam axis). + There are 3 configurations user can choose from, and could be set + with UI command: + + /HGCalTestbeam/setup/configuration + + where by default is equal to 0, which means the HGCal testbeam + setup used in October 2018. + 1 builds the same calorimeter setup, but places in front of it + several beamline elements. + 2 builds a very simplistic test configuration. + + Whenever a silicon wafer or SiPM is placed in the detector, a sensitive + volume is attached to it, and will be used to collect signal. + + Silicon wafer is divided into cells (pixels), and each individual pixel + can collect signal. + + In order to change the maximum step size allowed in silicon pixels: + + /HGCalTestbeam/setup/stepSilicon + + where is value of the max step size in micrometres. By default + is equal to 30 um. + + 2. Signal + --------- + + Energy deposited within silicon pixels and SiPMs is registered in the + sensitive detectors. Each deposit is added individually to the vector + of hits, in order to allow the digitisation. + + Digitisation is performed at the end of the event. It accumulates the + energy deposits within pixels, taking into account the time cut on the + arrival of signal (global time of energy deposit). By default no time + cut is applied which means all the deposits are counted. It can be set + using UI command: + + /HGCalTestbeam/hits/timeCut
+ the Geant4 User's Guide for Application Developers, Appendix 10: + Geant4 Materials Database + . + +\section B1_s2 PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the QBBC physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in + + Geant4 Installation Guide, Chapter 3.3: Note On Geant4 Datasets . + The following datasets: G4LEDATA, G4LEVELGAMMADATA, G4NEUTRONXSDATA, + G4SAIDXSDATA and G4ENSDFSTATEDATA are mandatory for this example. + + In addition the build-in interactive command: +\verbatim +/process/(in)activate processName +\endverbatim + allows to activate/inactivate the processes one by one. + +\section B1_s3 ACTION INITALIZATION + + A newly introduced class, B1::ActionInitialization, instantiates and registers + to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + B1::ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + B1::ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + +\section B1_s4 PRIMARY GENERATOR + + The primary generator is defined in the B1::PrimaryGeneratorAction class. + The default kinematics is a 6 MeV gamma, randomly distributed in front + of the envelope across 80% of the transverse (X,Y) envelope size. + This default setting can be changed via the Geant4 built-in commands + of the G4ParticleGun class. + +\section B1_s5 DETECTOR RESPONSE + + This example demonstrates a simple scoring implemented directly + in the user action classes. Alternative ways of scoring via Geant4 classes + can be found in the other examples. + + The energy deposited is collected step by step for a selected volume + in B1::SteppingAction and accumulated event by event in B1::EventAction. + + At end of event, the value acummulated in B1::EventAction is added in B1::RunAction + and summed over the whole run (see B1::EventAction::EndOfevent()). + + Total dose deposited is computed at B1::RunAction::EndOfRunAction(), + and printed together with informations about the primary particle. + In multi-threading mode the energy accumulated in G4Accumulable objects per + workers is merged to the master in B1::RunAction::EndOfRunAction() and the final + result is printed on the screen. + + G4Accumulable type instead of G4double type is used for the B1::RunAction + data members in order to facilitate merging of the values accumulated on workers + to the master. Currently the accumulables have to be registered to G4AccumulablesManager + and G4AccumulablesManager::Merge() has to be called from the users code. This is planned + to be further simplified with a closer integration of G4Accumulable classes in + the Geant4 kernel next year. + + An example of creating and computing new units (e.g., dose) is also shown + in the class constructor. + +
+ +The following paragraphs are common to all basic examples + +\section B1_A VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in exampleB1.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main function when the example is used in interactive running mode. + + By default, vis.mac opens an OpenGL viewer (/vis/open OGL). + The user can change the initial viewer by commenting out this line + and instead uncommenting one of the other /vis/open statements, such as + HepRepFile or DAWNFILE (which produce files that can be viewed with the + HepRApp and DAWN viewers, respectively). Note that one can always + open new viewers at any time from the command line. For example, if + you already have a view in, say, an OpenGL window with a name + "viewer-0", then +\verbatim +/vis/open DAWNFILE +\endverbatim + then to get the same view +\verbatim +/vis/viewer/copyView viewer-0 +\endverbatim + or to get the same view *plus* scene-modifications +\verbatim +/vis/viewer/set/all viewer-0 +\endverbatim + then to see the result +\verbatim +/vis/viewer/flush +\endverbatim + + The DAWNFILE, HepRepFile drivers are always available + (since they require no external libraries), but the OGL driver requires + that the Geant4 libraries have been built with the OpenGL option. + + From Release 9.6 the vis.mac macro in example B1 has additional commands + that demonstrate additional functionality of the vis system, such as + displaying text, axes, scales, date, logo and shows how to change + viewpoint and style. Consider copying these to other examples or + your application. To see even more commands use help or + ls or browse the available UI commands in the Application + Developers Guide, Section 7.1. + + For more information on visualization, including information on how to + install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, + for example,\n + - + OpenGL Tutorial + - + DAWN Tutorial + - + HepRApp Tutorial + + The tracks are automatically drawn at the end of each event, accumulated + for all events and erased at the beginning of the next run. + + +\section B1_B USER INTERFACES + + The user command interface is set via the G4UIExecutive class + in the main() function in exampleB1.cc + The selection of the user command interface is then done automatically + according to the Geant4 configuration or it can be done explicitly via + the third argument of the G4UIExecutive constructor (see exampleB4a.cc). + +\section B1_C HOW TO RUN + + - Execute exampleB1 in the 'interactive mode' with visualization +\verbatim +% exampleB1 +and type in the commands from run1.mac line by line: +Idle> /control/verbose 2 +Idle> /tracking/verbose 1 +Idle> /run/beamOn 10 +Idle> ... +Idle> exit +\endverbatim + or +\verbatim +Idle> /control/execute run1.mac +.... +Idle> exit +\endverbatim + + - Execute exampleB1 in the 'batch' mode from macro files + (without visualization) +\verbatim +% exampleB1 run2.mac +% exampleB1 exampleB1.in > exampleB1.out +\endverbatim + +*/ + + diff --git a/examples/basic/B1/README b/examples/basic/B1/README new file mode 100644 index 0000000000..03d428dfd1 --- /dev/null +++ b/examples/basic/B1/README @@ -0,0 +1,172 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example B1 + ----------- + + This example demonstrates a very simple application where an energy + deposit is accounted in user actions and their associated objects + and a dose in a selected volume is calculated. + + + 1- GEOMETRY DEFINITION + + The geometry is constructed in the B1::DetectorConstruction class. + The setup consists of a an envelope of box shape containing two + volumes: a spherical cone and a trapezoid. + + In this example we use some common materials materials for medical + applications. The envelope is made of water and the two inner volumes + are made from tissue and bone materials. + The materials are created with the help of the G4NistManager class, + which allows to build a material from the NIST database using their + names. All available materials can be found in the Geant4 User's Guide + for Application Developers, Appendix 10: Geant4 Materials Database. + + 2- PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the QBBC physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in Geant4 Installation Guide, + Chapter 3.3: Note On Geant4 Datasets: + http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides + /InstallationGuide/html/ch03s03.html + The following datasets: G4LEDATA, G4LEVELGAMMADATA, G4NEUTRONXSDATA, + G4SAIDXSDATA and G4ENSDFSTATEDATA are mandatory for this example. + + In addition the build-in interactive command: + /process/(in)activate processName + allows to activate/inactivate the processes one by one. + + 3- ACTION INITALIZATION + + A newly introduced class, B1::ActionInitialization, instantiates and registers + to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + B1::ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + B1::ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + + 4- PRIMARY GENERATOR + + The primary generator is defined in the B1::PrimaryGeneratorAction class. + The default kinematics is a 6 MeV gamma, randomly distributed in front + of the envelope across 80% of the transverse (X,Y) envelope size. + This default setting can be changed via the Geant4 built-in commands + of the G4ParticleGun class. + + 5- DETECTOR RESPONSE + + This example demonstrates a simple scoring implemented directly + in the user action classes. Alternative ways of scoring via Geant4 classes + can be found in the other examples. + + The energy deposited is collected step by step for a selected volume + in B1::SteppingAction and accumulated event by event in B1::EventAction. + + At end of event, the value acummulated in B1::EventAction is added in B1::RunAction + and summed over the whole run (see B1::EventAction::EndOfevent()). + + Total dose deposited is computed at B1::RunAction::EndOfRunAction(), + and printed together with informations about the primary particle. + In multi-threading mode the energy accumulated in G4Accumulable objects per + workers is merged to the master in B1::RunAction::EndOfRunAction() and the final + result is printed on the screen. + + G4Parameter type instead of G4double type is used for the B1::RunAction + data members in order to facilitate merging of the values accumulated on workers + to the master. Currently the accumulables have to be registered to G4AccumulablesManager + and G4AccumulablesManager::Merge() has to be called from the users code. This is planned + to be further simplified with a closer integration of G4Accumulable classes in + the Geant4 kernel next year. + + An example of creating and computing new units (e.g., dose) is also shown + in the class constructor. + + The following paragraphs are common to all basic examples + + A- VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in exampleB1.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main function when the example is used in interactive running mode. + + By default, vis.mac opens an OpenGL viewer (/vis/open OGL). + The user can change the initial viewer by commenting out this line + and instead uncommenting one of the other /vis/open statements, such as + HepRepFile or DAWNFILE (which produce files that can be viewed with the + HepRApp and DAWN viewers, respectively). Note that one can always + open new viewers at any time from the command line. For example, if + you already have a view in, say, an OpenGL window with a name + "viewer-0", then + /vis/open DAWNFILE + then to get the same view + /vis/viewer/copyView viewer-0 + or to get the same view *plus* scene-modifications + /vis/viewer/set/all viewer-0 + then to see the result + /vis/viewer/flush + + The DAWNFILE, HepRepFile drivers are always available + (since they require no external libraries), but the OGL driver requires + that the Geant4 libraries have been built with the OpenGL option. + + From Release 9.6 the vis.mac macro in example B1 has additional commands + that demonstrate additional functionality of the vis system, such as + displaying text, axes, scales, date, logo and shows how to change + viewpoint and style. Consider copying these to other examples or + your application. To see even more commands use help or + ls or browse the available UI commands in the Application + Developers Guide, Section 7.1. + + For more information on visualization, including information on how to + install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, + for example, + http://geant4.slac.stanford.edu/Presentations/vis/G4[VIS]Tutorial/G4[VIS]Tutorial.html + (where [VIS] can be replaced by DAWN, OpenGL and HepRApp) + + The tracks are automatically drawn at the end of each event, accumulated + for all events and erased at the beginning of the next run. + + B- USER INTERFACES + + The user command interface is set via the G4UIExecutive class + in the main() function in exampleB1.cc + The selection of the user command interface is then done automatically + according to the Geant4 configuration or it can be done explicitly via + the third argument of the G4UIExecutive constructor (see exampleB4a.cc). + + C- HOW TO RUN + + - Execute exampleB1 in the 'interactive mode' with visualization: + % ./exampleB1 + and type in the commands from run1.mac line by line: + Idle> /control/verbose 2 + Idle> /tracking/verbose 1 + Idle> /run/beamOn 10 + Idle> ... + Idle> exit + or + Idle> /control/execute run1.mac + .... + Idle> exit + + - Execute exampleB1 in the 'batch' mode from macro files + (without visualization) + % ./exampleB1 run2.mac + % ./exampleB1 exampleB1.in > exampleB1.out + + diff --git a/examples/basic/B2/.README.txt b/examples/basic/B2/.README.txt new file mode 100644 index 0000000000..351a3524c8 --- /dev/null +++ b/examples/basic/B2/.README.txt @@ -0,0 +1,230 @@ + +///\file "B2/.README.txt" +///\brief Example B2 README page + +/*! \page ExampleB2 Example %B2 + +This example simulates a simplified fixed target experiment. + +\section B2_s1 GEOMETRY DEFINITION + + The setup consists of a target followed by six chambers of increasing + transverse size at defined instances from the target. These chambers are + located in a region called the Tracker region. + Their shape are cylinders, constructed as simple cylinders + (in B2a::DetectorConstruction) and as parametrised volumes + (in B2b::DetectorConstruction), see also B2b::ChamberParameterisation class. + + In addition, a global, uniform, and transverse magnetic field can be + applied using G4GlobalMagFieldMessenger, instantiated in + B2a::DetectorConstruction::ConstructSDandField with a non zero field value, + or via interactive commands. + For example: +\verbatim +/globalField/setValue 0.2 0 0 tesla +\endverbatim + An instance of the B2::TrackerSD class is created and associated with each + logical chamber volume (in B2a) and with the one G4LogicalVolume associated + with G4PVParameterised (in B2b). + + One can change the materials of the target and the chambers + interactively via the commands defined in B2a::DetectorMessenger + (or B2b::DetectorMessenger). For example: +\verbatim +/B2/det/setTargetMaterial G4_WATER +/B2/det/setChamberMaterial G4_Ar +\endverbatim + +\section B2_s2 PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in + + Geant4 Installation Guide, Chapter 3.3: Note On Geant4 Datasets . + The following datasets: G4LEDATA, G4LEVELGAMMADATA, G4SAIDXSDATA and + G4ENSDFSTATEDATA are mandatory for this example. + + In addition, the build-in interactive command: +\verbatim +/process/(in)activate processName +\endverbatim + allows the user to activate/inactivate the processes one by one. + +\section B2_s3 ACTION INITALIZATION + + A newly introduced class, B2::ActionInitialization, + instantiates and registers to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + B2::ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + B2::ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + +\section B2_s4 PRIMARY GENERATOR + + The primary generator action class employs the G4ParticleGun. + The primary kinematics consists of a single particle which starts at the world boundary + and hits the target perpendicular to the entrance face. The type of the particle + and its energy can be changed via the G4 built-in commands of + the G4ParticleGun class. + Note that this particular case of starting a primary particle on the world boundary + requires shooting in a direction towards inside the world. + +\section B2_s5 RUNS and EVENTS + + A run is a set of events. + + The user has control: + - at Begin and End of each run (class B2::RunAction) + - at Begin and End of each event (class B2::EventAction) + - at Begin and End of each track (class TrackingAction, not used here) + - at End of each step (class SteppingAction, not used here) + + The event number is written to the log file every requested number + of events in B2::EventAction::BeginOfEventAction() and + B2::EventAction::EndOfEventAction(). + Moreover, for the first 100 events and every 100 events thereafter + information about the number of stored trajectories in the event + is printed as well as the number of hits stored in the G4VHitsCollection. + + The run number is printed at B2::RunAction::BeginOfRunAction(), where the + G4RunManager is also informed how to SetRandomNumberStore for storing + initial random number seeds per run or per event. + + \section B2_s6 USER LIMITS + + This example also illustrates how to introduce tracking constraints + like maximum step length, minimum kinetic energy etc. via the G4UserLimits + class and associated G4StepLimiter and G4UserSpecialCuts processes. + See B2a::DetectorConstruction (or B2b::DetectorConstruction). + + The maximum step limit in the tracker region can be set by the interactive + command (see B2a::DetectorMessenger, B2b::DetectorMessenger classes). + For example: + +\verbatim +/B2/det/stepMax 1.0 mm +\endverbatim + +\section B2_s7 DETECTOR RESPONSE + + A HIT is a step per step record of all the information needed to + simulate and analyse the detector response. + + In this example the Tracker chambers are considered to be the detector. + Therefore, the chambers are declared 'sensitive detectors' (SD) in + the B2a::DetectorConstruction (or B2b::DetectorConstruction) class. + They are associated with an instance of the B2::TrackerSD class. + + Then, a Hit is defined as a set of 4 informations per step, inside + the chambers, namely: + - the track identifier (an integer), + - the chamber number, + - the total energy deposit in this step, and + - the position of the energy deposit. + + A given hit is an instance of the class B2::TrackerHit which is created + during the tracking of a particle, step by step, in the method + B2::TrackerSD::ProcessHits(). This hit is inserted in a HitsCollection. + + The HitsCollection is printed at the end of each event (via the method + B2::TrackerSD::EndOfEvent()), under the control of the command: +\verbatim +/hits/verbose 2 +\endverbatim + +
+ + The following paragraphs are common to all basic examples + +\section B2_A VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main () function in exampleB2a.cc (or exampleB2b.cc). + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main function when the example is used in interactive running mode. + + By default, vis.mac opens an OpenGL viewer (/vis/open OGL). + The user can change the initial viewer by commenting out this line + and instead uncommenting one of the other /vis/open statements, such as + HepRepFile or DAWNFILE (which produce files that can be viewed with the + HepRApp and DAWN viewers, respectively). Note that one can always + open new viewers at any time from the command line. For example, if + you already have a view in, say, an OpenGL window with a name + "viewer-0", then +\verbatim +/vis/open DAWNFILE +\endverbatim + then to get the same view +\verbatim +/vis/viewer/copyView viewer-0 +\endverbatim + or to get the same view *plus* scene-modifications +\verbatim +/vis/viewer/set/all viewer-0 +\endverbatim + then to see the result +\verbatim +/vis/viewer/flush +\endverbatim + + The DAWNFILE, HepRepFile drivers are always available + (since they require no external libraries), but the OGL driver requires + that the Geant4 libraries have been built with the OpenGL option. + + For more information on visualization, including information on how to + install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, + for example,\n + - + OpenGL Tutorial + - + DAWN Tutorial + - + HepRApp Tutorial + + The tracks are automatically drawn at the end of each event, accumulated + for all events and erased at the beginning of the next run. + +\section B2_B USER INTERFACES + + The user command interface is set via the G4UIExecutive class + in the main () function in exampleB2a.cc + The selection of the user command interface is then done automatically + according to the Geant4 configuration or it can be done explicitly via + the third argument of the G4UIExecutive constructor (see exampleB2a.cc). + +\section B2_C HOW TO RUN + + - Execute exampleB2a in the 'interactive mode' with visualization +\verbatim +% exampleB2a +and type in the commands from run1.mac line by line: +Idle> /tracking/verbose 1 +Idle> /run/beamOn 1 +Idle> ... +Idle> exit +\endverbatim + or +\verbatim +Idle> /control/execute run1.mac +.... +Idle> exit +\endverbatim + + - Execute exampleB2a in the 'batch' mode from macro files + (without visualization) +\verbatim +% exampleB2a run2.mac +% exampleB2a exampleB2.in > exampleB2.out +\endverbatim + +*/ diff --git a/examples/basic/B2/README b/examples/basic/B2/README new file mode 100644 index 0000000000..c5ff5bd957 --- /dev/null +++ b/examples/basic/B2/README @@ -0,0 +1,205 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example B2 + ---------- + + This example simulates a simplified fixed target experiment. + + 1- GEOMETRY DEFINITION + + The setup consists of a target followed by six chambers of increasing + transverse size at defined instances from the target. These chambers are + located in a region called the Tracker region. + Their shape are cylinders, constructed as simple cylinders + (in B2a::DetectorConstruction) and as parametrised volumes + (in B2b::DetectorConstruction), see also B2b::ChamberParameterisation class. + + In addition, a global, uniform, and transverse magnetic field can be + applied using G4GlobalMagFieldMessenger, instantiated in + B2[a,b]::DetectorConstruction::ConstructSDandField with a non zero field value, + or via interactive commands. + For example: + + /globalField/setValue 0.2 0 0 tesla + + An instance of the B2::TrackerSD class is created and associated with each + logical chamber volume (in B2a) and with the one G4LogicalVolume associated + with G4PVParameterised (in B2b). + + One can change the materials of the target and the chambers + interactively via the commands defined in B2a::DetectorMessenger + (or B2b::DetectorMessenger). For example: + + /B2/det/setTargetMaterial G4_WATER + /B2/det/setChamberMaterial G4_Ar + + 2- PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in Geant4 Installation Guide, + Chapter 3.3: Note On Geant4 Datasets: + http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/InstallationGuide/html/ch03s03.html + The following datasets: G4LEDATA, G4LEVELGAMMADATA, G4SAIDXSDATA and + G4ENSDFSTATEDATA are mandatory for this example. + + In addition, the build-in interactive command: + /process/(in)activate processName + allows the user to activate/inactivate the processes one by one. + + 3- ACTION INITALIZATION + + A newly introduced class, B2::ActionInitialization, + instantiates and registers to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + B2::ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance has is created also in the method + B2::ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + + 4- PRIMARY GENERATOR + + The primary generator action class employs the G4ParticleGun. + The primary kinematics consists of a single particle which starts at the world boundary + and hits the target perpendicular to the entrance face. The type of the particle + and its energy can be changed via the G4 built-in commands of + the G4ParticleGun class. + Note that this particular case of starting a primary particle on the world boundary + requires shooting in a direction towards inside the world. + + 5- RUNS and EVENTS + + A run is a set of events. + + The user has control: + - at Begin and End of each run (class B2::RunAction) + - at Begin and End of each event (class B2::EventAction) + - at Begin and End of each track (class TrackingAction, not used here) + - at End of each step (class SteppingAction, not used here) + + The event number is written to the log file every requested number + of events in B2::EventAction::BeginOfEventAction() and + B2::EventAction::EndOfEventAction(). + Moreover, for the first 100 events and every 100 events thereafter + information about the number of stored trajectories in the event + is printed as well as the number of hits stored in the G4VHitsCollection. + + The run number is printed at B2::RunAction::BeginOfRunAction(), where the + G4RunManager is also informed how to SetRandomNumberStore for storing + initial random number seeds per run or per event. + + 6- USER LIMITS + + This example also illustrates how to introduce tracking constraints + like maximum step length, minimum kinetic energy etc. via the G4UserLimits + class and associated G4StepLimiter and G4UserSpecialCuts processes. + See B2a::DetectorConstruction (or B2b::DetectorConstruction). + + The maximum step limit in the tracker region can be set by the interactive + command (see B2a::DetectorMessenger, B2b::DetectorMessenger classes). + For example: + + /B2/det/stepMax 1.0 mm + + 7- DETECTOR RESPONSE + + A HIT is a step per step record of all the information needed to + simulate and analyse the detector response. + + In this example the Tracker chambers are considered to be the detector. + Therefore, the chambers are declared 'sensitive detectors' (SD) in + the B2a::DetectorConstruction (or B2b::DetectorConstruction) class. + They are associated with an instance of the B2::TrackerSD class. + + Then, a Hit is defined as a set of 4 informations per step, inside + the chambers, namely: + - the track identifier (an integer), + - the chamber number, + - the total energy deposit in this step, and + - the position of the energy deposit. + + A given hit is an instance of the class B2::TrackerHit which is created + during the tracking of a particle, step by step, in the method + B2::TrackerSD::ProcessHits(). This hit is inserted in a HitsCollection. + + The HitsCollection is printed at the end of each event (via the method + B2::TrackerSD::EndOfEvent()), under the control of the command: + /hits/verbose 2 + + The following paragraphs are common to all basic examples + + A- VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in exampleB2a.cc (or exampleB2b.cc). + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main function when the example is used in interactive running mode. + + By default, vis.mac opens an OpenGL viewer (/vis/open OGL). + The user can change the initial viewer by commenting out this line + and instead uncommenting one of the other /vis/open statements, such as + HepRepFile or DAWNFILE (which produce files that can be viewed with the + HepRApp and DAWN viewers, respectively). Note that one can always + open new viewers at any time from the command line. For example, if + you already have a view in, say, an OpenGL window with a name + "viewer-0", then + /vis/open DAWNFILE + then to get the same view + /vis/viewer/copyView viewer-0 + or to get the same view *plus* scene-modifications + /vis/viewer/set/all viewer-0 + then to see the result + /vis/viewer/flush + + The DAWNFILE, HepRepFile drivers are always available + (since they require no external libraries), but the OGL driver requires + that the Geant4 libraries have been built with the OpenGL option. + + For more information on visualization, including information on how to + install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, + for example, + http://geant4.slac.stanford.edu/Presentations/vis/G4[VIS]Tutorial/G4[VIS]Tutorial.html + (where [VIS] can be replaced by DAWN, OpenGL and HepRApp) + + The tracks are automatically drawn at the end of each event, accumulated + for all events and erased at the beginning of the next run. + + B- USER INTERFACES + + The user command interface is set via the G4UIExecutive class + in the main() function in exampleB2a.cc + The selection of the user command interface is then done automatically + according to the Geant4 configuration or it can be done explicitly via + the third argument of the G4UIExecutive constructor (see exampleB4a.cc). + + C- HOW TO RUN + + - Execute exampleB2a in the 'interactive mode' with visualization + % exampleB2a + and type in the commands from run1.mac line by line: + Idle> /tracking/verbose 1 + Idle> /run/beamOn 1 + Idle> ... + Idle> exit + or + Idle> /control/execute run1.mac or run2.mac + .... + Idle> exit + + - Execute exampleB2a in the 'batch' mode from macro files + (without visualization) + % exampleB2a run2.mac + % exampleB2a exampleB2.in > exampleB2.out + diff --git a/examples/basic/B3/.README.txt b/examples/basic/B3/.README.txt new file mode 100644 index 0000000000..f619820dfe --- /dev/null +++ b/examples/basic/B3/.README.txt @@ -0,0 +1,221 @@ + +///\file "B3/.README.txt" +///\brief Example B3 README page + +/*! \page ExampleB3 Example %B3 + + This example simulates schematically a Positron Emitted Tomography system. + +\section B3_s1 GEOMETRY DEFINITION + + The support of gamma detection are scintillating crystals. A small number + of such crystals are optically grouped in a matrix of crystals. In + this example, individual crystals are not described; only the matrix of + crystals is and it is still called 'Crystal' hereafter. + + Crystals are circularly arranged to form a ring. Few rings make up the full + detector (gamma camera). This is done by positionning Crystals in + Ring with an appropriate rotation matrix. Several copies of Ring are + then placed in the full detector. + + The head of a patient is schematised as a homogeneous cylinder of brain + tissue, placed at the center of full detector. + + The Crystal material, Lu2SiO5, is not included in the G4Nist database. + Therefore, it is explicitly built in DefineMaterials(). + +\section B3_s2 PHYSICS LIST + + The physics list contains standard electromagnetic processes and the + radioactiveDecay module for GenericIon. It is defined in the B3::PhysicsList + class as a Geant4 modular physics list with registered physics builders + provided in Geant4: + - G4DecayPhysics - defines all particles and their decay processes + - G4RadioactiveDecayPhysics - defines radioactiveDecay for GenericIon + - G4EmStandardPhysics - defines all EM standard processes + + This physics list requires data files for: + - low energy electromagnetic processes which path is defined via + the G4LEDATA envirnoment variable + - data files for nuclides properties which path is defined via + the G4ENSDFSTATEDATA envirnoment variable + - radioactive decay hadronic processes which path is defined via + the G4RADIOACTIVEDATA envirnoment variable. + + See more on installation of the datasets in + + Geant4 Installation Guide, Chapter 3.3: Note On Geant4 Datasets . + +\section B3_s3 ACTION INITALIZATION + + B3a::ActionInitialization class (see also B3b::ActionInitialization) instantiates and registers to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + B3a::ActionInitialization::Build() + (see also B3b::ActionInitialization::Build) + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + B3a::ActionInitialization::BuildForMaster() + (see also B3b::ActionInitialization::Build) + which is invoked only in multi-threading mode. + +\section B3_s4 PRIMARY GENERATOR + + The default particle beam is an ion (F18), at rest, randomly distributed + within a zone inside a patient and is defined in + B3::PrimaryGeneratorAction::GeneratePrimaries(). + The type of a primary particle can be changed with G4ParticleGun commands + (see run2.mac). + +\section B3_s5 DETECTOR RESPONSE : scorers + + A 'good' event is an event in which an identical energy of 511 keV is + deposited in two separate Crystals. A count of the number of such events + corresponds to a measure of the efficiency of the PET system. + The total dose deposited in a patient during a run is also computed. + + Scorers are defined in B3::DetectorConstruction::ConstructSDandField(). There are + two G4MultiFunctionalDetector objects: one for the Crystal (EnergyDeposit), + and one for the Patient (DoseDeposit) + + The scorers hits are saved in form of ntuples in a Root file using Geant4 + analysis tools. This feature is activated in the main () function with instantiating + G4TScoreNtupleWriter. + + Two variants of accumulation event statistics in a run are demonstrated + in this example: + + %B3a: + + At the end of event, the values acummulated in B3a::EventAction are passed + in B3a::RunAction and summed over the whole run (see B3a::EventAction::EndOfevent()). + In multi-threading mode the data accumulated in G4Accumulable objects per + workers is merged to the master in B3a::RunAction::EndOfRunAction() and the final + result is printed on the screen. + + G4Accumulable<> type instead of G4double and G4int types is used for the B3a::RunAction + data members in order to facilitate merging of the values accumulated on workers + to the master. Currently the accumulables have to be registered to G4AccumulablesManager + and G4AccumulablesManager::Merge() has to be called from the users code. This is planned + to be further simplified with a closer integration of G4Accumulable classes in + the Geant4 kernel next year. + + %B3b: + + B3b::Run::RecordEvent(), called at end of event, collects informations + event per event from the hits collections, and accumulates statistic for + B3b::RunAction::EndOfRunAction(). + In addition, results for dose are accumulated in a + standard floating-point summation and using a new lightweight statistical + class called G4StatAnalysis. The G4StatAnalysis class records four values: + (1) the sum, (2) sum^2, (3) number of entries, and (4) the number of entries + less than mean * machine-epsilon (the machine epsilon is the difference + between 1.0 and the next value representable by the floating-point type). + From these 4 values, G4StatAnalysis provides the mean, FOM, relative error, + standard deviation, variance, coefficient of variation, efficiency, r2int, + and r2eff. + + In multi-threading mode the statistics accumulated per workers is merged + to the master in B3b::Run::Merge(). + +\section B3_s6 STACKING ACTION + + Beta decay of Fluor generates a neutrino. One wishes not to track this + neutrino; therefore one kills it immediately, before created particles + are put in a stack. + The function B3::StackingAction::ClassifyNewTrack() is invoked by G4 kernel + each time a new particle is created. + +
+ +The following paragraphs are common to all basic examples + +\section B3_A VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main () function in exampleB3.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main function when the example is used in interactive running mode. + + By default, vis.mac opens an OpenGL viewer (/vis/open OGL). + The user can change the initial viewer by commenting out this line + and instead uncommenting one of the other /vis/open statements, such as + HepRepFile or DAWNFILE (which produce files that can be viewed with the + HepRApp and DAWN viewers, respectively). Note that one can always + open new viewers at any time from the command line. For example, if + you already have a view in, say, an OpenGL window with a name + "viewer-0", then +\verbatim +/vis/open DAWNFILE +\endverbatim + then to get the same view +\verbatim +/vis/viewer/copyView viewer-0 +\endverbatim + or to get the same view *plus* scene-modifications +\verbatim +/vis/viewer/set/all viewer-0 +\endverbatim + then to see the result +\verbatim +/vis/viewer/flush +\endverbatim + + The DAWNFILE, HepRepFile drivers are always available + (since they require no external libraries), but the OGL driver requires + that the Geant4 libraries have been built with the OpenGL option. + + For more information on visualization, including information on how to + install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, + for example,\n + - + OpenGL Tutorial + - + DAWN Tutorial + - + HepRApp Tutorial + + The tracks are automatically drawn at the end of each event, accumulated + for all events and erased at the beginning of the next run. + +\section B3_B USER INTERFACES + + The user command interface is set via the G4UIExecutive class + in the main () function in exampleB3.cc + The selection of the user command interface is then done automatically + according to the Geant4 configuration or it can be done explicitly via + the third argument of the G4UIExecutive constructor (see exampleB4a.cc). + +\section B3_C HOW TO RUN + + - Execute exampleB3a in the 'interactive mode' with visualization +\verbatim +% ./exampleB3a +and type in the commands from run1.mac line by line: +Idle> /control/verbose 2 +Idle> /tracking/verbose 2 +Idle> /run/beamOn 1 +Idle> ... +Idle> exit +\endverbatim + or +\verbatim +Idle> /control/execute run1.mac +.... +Idle> exit +\endverbatim + + - Execute exampleB3a in the 'batch' mode from macro files + (without visualization) +\verbatim +% ./exampleB3a run2.mac +% ./exampleB3a exampleB3.in > exampleB3.out +\endverbatim + +*/ diff --git a/examples/basic/B3/README b/examples/basic/B3/README new file mode 100644 index 0000000000..4a64cff14a --- /dev/null +++ b/examples/basic/B3/README @@ -0,0 +1,202 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example B3 + ---------- + + This example simulates schematically a Positron Emitted Tomography system. + + 1- GEOMETRY DEFINITION + + The support of gamma detection are scintillating crystals. A small number + of such crystals are optically grouped in a matrix of crystals. In + this example, individual crystals are not described; only the matrix of + crystals is and it is still called 'Crystal' hereafter. + + Crystals are circularly arranged to form a ring. Few rings make up the full + detector (gamma camera). This is done by positionning Crystals in + Ring with an appropriate rotation matrix. Several copies of Ring are + then placed in the full detector. + + The head of a patient is schematised as a homogeneous cylinder of brain + tissue, placed at the center of full detector. + + The Crystal material, Lu2SiO5, is not included in the G4Nist database. + Therefore, it is explicitly built in DefineMaterials(). + + 2- PHYSICS LIST + + The physics list contains standard electromagnetic processes and the + radioactiveDecay module for GenericIon. It is defined in the B3::PhysicsList + class as a Geant4 modular physics list with registered physics builders + provided in Geant4: + - G4DecayPhysics - defines all particles and their decay processes + - G4RadioactiveDecayPhysics - defines radioactiveDecay for GenericIon + - G4EmStandardPhysics - defines all EM standard processes + + This physics list requires data files for: + - low energy electromagnetic processes which path is defined via + the G4LEDATA envirnoment variable + - nuclides properties which path is defined via + the G4ENSDFSTATEDATA envirnoment variable + - radioactive decay hadronic processes which path is defined via + the G4RADIOACTIVEDATA envirnoment variable. + + See more on installation of the datasets in Geant4 Installation Guide, + Chapter 3.3: Note On Geant4 Datasets: + http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides + /InstallationGuide/html/ch03s03.html + 3- ACTION INITALIZATION + + B3[a,b]::ActionInitialization class instantiates and registers to Geant4 kernel + all user action classes. + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + B3[a,b]::ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + B3[a,b]::ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + + 4- PRIMARY GENERATOR + + The default particle beam is an ion (F18), at rest, randomly distributed + within a zone inside a patient and is defined in + B3::PrimaryGeneratorAction::GeneratePrimaries(). + The type of a primary particle can be changed with G4ParticleGun commands + (see run2.mac). + + 5- DETECTOR RESPONSE: scorers + + A 'good' event is an event in which an identical energy of 511 keV is + deposited in two separate Crystals. A count of the number of such events + corresponds to a measure of the efficiency of the PET system. + The total dose deposited in a patient during a run is also computed. + + Scorers are defined in B3::DetectorConstruction::ConstructSDandField(). There are + two G4MultiFunctionalDetector objects: one for the Crystal (EnergyDeposit), + and one for the Patient (DoseDeposit) + + The scorers hits are saved in form of ntuples in a Root file using Geant4 + analysis tools. This feature is activated in the main () function with instantiating + G4TScoreNtupleWriter. + + Two variants of accumulation event statistics in a run are demonstrated + in this example: + + B3a: + + At the end of event, the values acummulated in B3a::EventAction are passed + in B3a::RunAction and summed over the whole run (see B3a::EventAction::EndOfevent()). + In multi-threading mode the data accumulated in G4Accumulable objects per + workers is merged to the master in B3a::RunAction::EndOfRunAction() and the final + result is printed on the screen. + + G4Accumulable<> type instead of G4double and G4int types is used for the B3a::RunAction + data members in order to facilitate merging of the values accumulated on workers + to the master. Currently the accumulables have to be registered to G4AccumulablesManager + and G4AccumulablesManager::Merge() has to be called from the users code. This is planned + to be further simplified with a closer integration of G4Accumulable classes in + the Geant4 kernel next year. + + B3b: + + B3b::Run::RecordEvent(), called at end of event, collects informations + event per event from the hits collections, and accumulates statistic for + B3b::RunAction::EndOfRunAction(). + In addition, results for dose are accumulated in a + standard floating-point summation and using a new lightweight statistical + class called G4StatAnalysis. The G4StatAnalysis class records four values: + (1) the sum, (2) sum^2, (3) number of entries, and (4) the number of entries + less than mean * machine-epsilon (the machine epsilon is the difference + between 1.0 and the next value representable by the floating-point type). + From these 4 values, G4StatAnalysis provides the mean, FOM, relative error, + standard deviation, variance, coefficient of variation, efficiency, r2int, + and r2eff. + + In multi-threading mode the statistics accumulated per workers is merged + to the master in B3b::Run::Merge(). + + 6- STACKING ACTION + + Beta decay of Fluor generates a neutrino. One wishes not to track this + neutrino; therefore one kills it immediately, before created particles + are put in a stack. + The function B3::StackingAction::ClassifyNewTrack() is invoked by G4 kernel + each time a new particle is created. + + The following paragraphs are common to all basic examples + + A- VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in exampleB3.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main function when the example is used in interactive running mode. + + By default, vis.mac opens an OpenGL viewer (/vis/open OGL). + The user can change the initial viewer by commenting out this line + and instead uncommenting one of the other /vis/open statements, such as + HepRepFile or DAWNFILE (which produce files that can be viewed with the + HepRApp and DAWN viewers, respectively). Note that one can always + open new viewers at any time from the command line. For example, if + you already have a view in, say, an OpenGL window with a name + "viewer-0", then + /vis/open DAWNFILE + then to get the same view + /vis/viewer/copyView viewer-0 + or to get the same view *plus* scene-modifications + /vis/viewer/set/all viewer-0 + then to see the result + /vis/viewer/flush + + The DAWNFILE, HepRepFile drivers are always available + (since they require no external libraries), but the OGL driver requires + that the Geant4 libraries have been built with the OpenGL option. + + For more information on visualization, including information on how to + install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, + for example, + http://geant4.slac.stanford.edu/Presentations/vis/G4[VIS]Tutorial/G4[VIS]Tutorial.html + (where [VIS] can be replaced by DAWN, OpenGL and HepRApp) + + The tracks are automatically drawn at the end of each event, accumulated + for all events and erased at the beginning of the next run. + + B- USER INTERFACES + + The user command interface is set via the G4UIExecutive class + in the main() function in exampleB3.cc + The selection of the user command interface is then done automatically + according to the Geant4 configuration or it can be done explicitly via + the third argument of the G4UIExecutive constructor (see exampleB4a.cc). + +C- HOW TO RUN + + - Execute exampleB3a in the 'interactive mode' with visualization + % ./exampleB3a + and type in the commands from run1.mac line by line: + Idle> /control/verbose 2 + Idle> /tracking/verbose 2 + Idle> /run/beamOn 1 + Idle> ... + Idle> exit + or + Idle> /control/execute run1.mac + .... + Idle> exit + + - Execute exampleB3a in the 'batch' mode from macro files + (without visualization) + % ./exampleB3a run2.mac + % ./exampleB3a exampleB3.in > exampleB3.out + + diff --git a/examples/basic/B4/.README.txt b/examples/basic/B4/.README.txt new file mode 100644 index 0000000000..a19bdda843 --- /dev/null +++ b/examples/basic/B4/.README.txt @@ -0,0 +1,322 @@ + +///\file "B4/.README.txt" +///\brief Example B4 README page + +/*! \page ExampleB4 Example %B4 + + This example simulates a simple Sampling Calorimeter setup. + To demonstrate several possible ways of data scoring, the example + is provided in four variants: %B4a, %B4b, %B4c, %B4d. + (See also examples/extended/electromagnetic/TestEm3) + +\section B4_s1 GEOMETRY DEFINITION + + The geometry is constructed in B4::DetectorConstruction class + (see also + \link B4c::DetectorConstruction B4c \endlink, + \link B4d::DetectorConstruction B4d \endlink variants). + The calorimeter is a box made of a given number of layers. A layer + consists of an absorber plate and of a detection gap. The layer is + replicated. + + Four parameters define the geometry of the calorimeter : + - the thickness of an absorber plate, + - the thickness of a gap, + - the number of layers, and + - the transverse size of the calorimeter (the entrance face is a square). + + In addition, a global, uniform, and transverse magnetic field can be + applied using G4GlobalMagFieldMessenger, instantiated in + B4::DetectorConstruction::ConstructSDandField() + (see also + \link B4c::DetectorConstruction::ConstructSDandField() B4c \endlink, + \link B4d::DetectorConstruction::ConstructSDandField() B4d \endlink variants) + with a non zero field value, or via interactive commands. + For example: + +\verbatim +/globalField/setValue 0.2 0 0 tesla +\endverbatim + +
+        |<----layer 0---------->|<----layer 1---------->|<----layer 2---------->|
+        |                       |                       |                       |
+        ==========================================================================
+        ||              |       ||              |       ||              |       ||
+        ||              |       ||              |       ||              |       ||
+ beam   ||   absorber   |  gap  ||   absorber   |  gap  ||   absorber   |  gap  ||
+======> ||              |       ||              |       ||              |       ||
+        ||              |       ||              |       ||              |       ||
+        ==========================================================================
+
+
+ + A more general version of this geometry can be found in: + examples/extended/electromagnetic/TestEm3 + where all the geometry parameters, the absorber and gap materials + can be modified interactively via the commands defined in the DetectorMessenger + class. + +\section B4_s2 PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in + + Geant4 Installation Guide, Chapter 3.3: Note On Geant4 Datasets . + The following datasets: G4LEDATA, G4LEVELGAMMADATA, G4SAIDXSDATA and + G4ENSDFSTATEDATA are mandatory for this example. + + In addition the build-in interactive command: +\verbatim +/process/(in)activate processName +\endverbatim + allows to activate/inactivate the processes one by one. + +\section B4_s3 ACTION INITALIZATION + + A newly introduced class, B4a::ActionInitialization, (see also + \link B4b::ActionInitialization B4b \endlink, + \link B4c::ActionInitialization B4c \endlink, + \link B4d::ActionInitialization B4d \endlink variants), + instantiates and registers to Geant4 kernel all user action classes; + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + B4a::ActionInitialization::Build() + (see also + \link B4b::ActionInitialization::Build() B4b \endlink, + \link B4c::ActionInitialization::Build() B4c \endlink, + \link B4d::ActionInitialization::Build() B4d \endlink variants), + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + B4a::ActionInitialization::BuildForMaster() + (see also + \link B4b::ActionInitialization::BuildForMaster() B4b \endlink, + \link B4c::ActionInitialization::BuildForMaster() B4c \endlink, + \link B4d::ActionInitialization::BuildForMaster() B4d \endlink variants), + which is invoked only in multi-threading mode. + +\section B4_s4 PRIMARY GENERATOR + + The primary beam consists of a single particle which hits the + calorimeter perpendicular to the input face. The type of the particle + and its energy are set in the B4::PrimaryGeneratorAction class, and can + be changed via the G4 built-in commands of the G4ParticleGun class (see + the macros provided with this example). + +\section B4_s5 RUNS and EVENTS + + A run is a set of events. + + The user can choose the frequency of printing via the Geant4 interactive + command, for example: +\verbatim +/run/printProgress 100 +\endverbatim + +\section B4_s6- DETECTOR RESPONSE + + The energy deposit and track lengths of the charged particles are recorded on + an event by event basis in the Absober and Gap layers. + + In order to demonstrate several possible ways of data scoring, + the example is provided in four variants: + +\subsection s6a Variant a: User Actions + + These 4 quantities are data members of the B4a::EventAction class. + They are collected step by step in + B4a::SteppingAction::UserSteppingAction(), and passed to the event action + via two methods: B4a::EventAction::AddAbs() and B4a::EventAction::AddGap(). + + In B4a::EventAction::EndOfEventAction(), these quantities are printed and + filled in H1D histograms and ntuple to accumulate statistic and compute + dispersion. + +\subsection s6b Variant b: User data object + + In order to avoid dependencies between action classes, a user object + B4b::RunData, derived from G4Run, is defined with data members needed + for the accounted information. + In order to reduce the number of data members a 2-dimensions array + is introduced for each quantity. + Then the quantities are collected step by step in user action classes: + B4b::SteppingAction::UserSteppingAction() and + B4b::EventAction::EndOfEventAction() in a similar way as in variant a. + +\subsection s6c Variant c: Hits and Sensitive detectors + + In this option, the physics quantities are accounted using the hits + and sensitive detectors framework defined in the Geant4 kernel. + The physics quantities are stored in B4c::CalorHit via two B4c::CalorimeterSD + objects, one associated with the Absorber volume and another one with Gap + in B4c::DetectorConstruction::ConstructSDandField(). + + In contrary to the B2 example (Tracker) where a new hit is created + with each track passing the sensitive volume (in the calorimeter), only one + hit is created for each calorimeter layer and one more hit to account for + the total quantities in all layers. In addition to the variants a and b, + the quantities per each layer are also available in addition to the total + quantities. + +\subsection s6d Variant d: Scorer + + In this option, the Geant4 scorers which are defined on the top of hits + and sensitive detectors Geant4 framework are used. + In practice this means that the user does not need to define hits and sensitive + detector classes but rather uses the classes already defined + in Geant4. In this example, the G4MultiFunctionalDetector with + G4PSEnergyDeposit and G4PSTrackLength primitive scores are used (see + B4d::DetectorConstruction::ConstructSDandField()). + + The scorers hits are saved in form of ntuples in a Root file using Geant4 + analysis tools. This feature is activated in the main () function with instantiating + G4TScoreNtupleWriter. + + Also with this approach, the quantities per each layer are available + in addition to the total quantities. + +\section B4_s7 HISTOGRAMS + + The analysis tools are used to accumulate statistics and compute the dispersion + of the energy deposit and track lengths of the charged particles. + H1D histograms are created in B4::RunAction::RunAction() (see also + \link B4b::RunAction::RunAction() B4b \endlink variant) for the + following quantities: + - Energy deposit in absorber + - Energy deposit in gap + - Track length in absorber + - Track length in gap + + The same values are also saved in an ntuple. + + The histograms and the ntuple are saved in the output file in a format + according to a specified file extension, the default in this example + is ROOT. + + The accumulated statistic and computed dispersion is printed at the end of + run, in B4::RunAction::EndOfRunAction() ((see also + \link B4b::RunAction::EndOfRunAction() B4b \endlink variant). + When running in multi-threading mode, the histograms and the ntuple accumulated + on threads are merged in a single output file. While merging of histograms is + performed by default, merging of ntuples is explicitly activated in the B4::RunAction + constructor. + + The ROOT histograms and ntuple can be plotted with ROOT using the plotHisto.C + and plotNtuple.C macros. + +\section B4_s8 HOW TO RUN + + This example handles the program arguments in a new way. + It can be run with the following optional arguments: +\verbatim +% exampleB4a [-m macro ] [-u UIsession] [-t nThreads] [-vDefault] +\endverbatim + + The -vDefault option will activate using the default Geant4 stepping verbose + class (G4SteppingVerbose) instead of the enhanced stepping verbose with best + units (G4SteppingVerboseWithUnits) used in the example by default. + + The -t option is available only in multi-threading mode + and it allows the user to override the Geant4 default number of + threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS + environment variable which has the top priority. + + - Execute exampleB4a in the 'interactive mode' with visualization +\verbatim +% exampleB4a +and type in the commands from run1.mac line by line: +Idle> /tracking/verbose 1 +Idle> /run/beamOn 1 +Idle> ... +Idle> exit +\endverbatim + or +\verbatim +Idle> /control/execute run1.mac +.... +Idle> exit +\endverbatim + + - Execute exampleB4a in the 'batch' mode from macro files + (without visualization) +\verbatim +% exampleB4a -m run2.mac +% exampleB4a -m exampleB4.in > exampleB4.out +\endverbatim + + - Execute exampleB4a in the 'interactive mode' with a selected UI session, + e.g. tcsh +\verbatim +% exampleB4a -u tcsh +\endverbatim + +
+ +The following paragraphs are common to all basic examples + +\section B4_A VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main () function in exampleB4a.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main function when the example is used in interactive running mode. + + By default, vis.mac opens an OpenGL viewer (/vis/open OGL). + The user can change the initial viewer by commenting out this line + and instead uncommenting one of the other /vis/open statements, such as + HepRepFile or DAWNFILE (which produce files that can be viewed with the + HepRApp and DAWN viewers, respectively). Note that one can always + open new viewers at any time from the command line. For example, if + you already have a view in, say, an OpenGL window with a name + "viewer-0", then +\verbatim +/vis/open DAWNFILE +\endverbatim + then to get the same view +\verbatim +/vis/viewer/copyView viewer-0 +\endverbatim + or to get the same view *plus* scene-modifications +\verbatim +/vis/viewer/set/all viewer-0 +\endverbatim + then to see the result +\verbatim +/vis/viewer/flush +\endverbatim + + The DAWNFILE, HepRepFile drivers are always available + (since they require no external libraries), but the OGL driver requires + that the Geant4 libraries have been built with the OpenGL option. + + For more information on visualization, including information on how to + install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, + for example,\n + - + OpenGL Tutorial + - + DAWN Tutorial + - + HepRApp Tutorial + + The tracks are automatically drawn at the end of each event, accumulated + for all events and erased at the beginning of the next run. + +\section B4_B USER INTERFACES + + The user command interface is set via the G4UIExecutive class + in the main () function in exampleB4a.cc + The selection of the user command interface is then done automatically + according to the Geant4 configuration or it can be done explicitly via + the third argument of the G4UIExecutive constructor (see exampleB4a.cc). + +*/ + + diff --git a/examples/basic/B4/README b/examples/basic/B4/README new file mode 100644 index 0000000000..9fde52e7d6 --- /dev/null +++ b/examples/basic/B4/README @@ -0,0 +1,269 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example B4 + ----------- + + This example simulates a simple Sampling Calorimeter setup. + To demonstrate several possible ways of data scoring, the example + is provided in four variants: B4a, B4b, B4c, B4d. + (See also examples/extended/electromagnetic/TestEm3) + + 1- GEOMETRY DEFINITION + + The geometry is constructed in B4[c,d]::DetectorConstruction class. + The calorimeter is a box made of a given number of layers. A layer + consists of an absorber plate and of a detection gap. The layer is + replicated. + + Four parameters define the geometry of the calorimeter : + - the thickness of an absorber plate, + - the thickness of a gap, + - the number of layers, and + - the transverse size of the calorimeter (the entrance face is a square). + + In addition, a global, uniform, and transverse magnetic field can be + applied using G4GlobalMagFieldMessenger, instantiated in + B4[c,d]::DetectorConstruction::ConstructSDandField + with a non zero field value, or via interactive commands. + For example: + + /globalField/setValue 0.2 0 0 tesla + + + |<----layer 0---------->|<----layer 1---------->|<----layer 2---------->| + | | | | + ========================================================================== + || | || | || | || + || | || | || | || + beam || absorber | gap || absorber | gap || absorber | gap || +======> || | || | || | || + || | || | || | || + ========================================================================== + + A more general version of this geometry can be found in: + examples/extended/electromagnetic/TestEm3 + where all the geometry parameters, the absorber and gap materials + can be modified interactively via the commands defined in the DetectorMessenger + class. + + 2- PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in Geant4 Installation Guide, + Chapter 3.3: Note On Geant4 Datasets: + http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/InstallationGuide/html/ch03s03.html + The following datasets: G4LEDATA, G4LEVELGAMMADATA, G4SAIDXSDATA and + G4ENSDFSTATEDATA are mandatory for this example. + + In addition the build-in interactive command: + /process/(in)activate processName + allows to activate/inactivate the processes one by one. + + 3- ACTION INITALIZATION + + A newly introduced class, B4[a,b,c,d]::ActionInitialization, + instantiates and registers to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + B4[a,b,c,d]::ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + B4[a,b,c,d]::ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + + 4- PRIMARY GENERATOR + + The primary beam consists of a single particle which hits the + calorimeter perpendicular to the input face. The type of the particle + and its energy are set in the B4::PrimaryGeneratorAction class, and can + be changed via the G4 built-in commands of the G4ParticleGun class (see + the macros provided with this example). + + 5- RUNS and EVENTS + + A run is a set of events. + The user can choose the frequency of printing via the Geant4 interactive + command, for example: + + /run/printProgress 100 + + 6- DETECTOR RESPONSE + + The energy deposit and track lengths of the charged particles are recorded on + an event by event basis in the Absober and Gap layers. + + In order to demonstrate several possible ways of data scoring, + the example is provided in four variants: + + Variant a: User Actions + + These 4 quantities are data members of the B4a::EventAction class. + They are collected step by step in + B4a::SteppingAction::UserSteppingAction(), and passed to the event action + via two methods: B4a::EventAction::AddAbs() and B4a::EventAction::AddGap(). + + In B4a::EventAction::EndOfEventAction(), these quantities are printed and + filled in H1D histograms and ntuple to accumulate statistic and compute + dispersion. + + Variant b: User data object + + In order to avoid dependencies between action classes, a user object + B4b::RunData, derived from G4Run, is defined with data members needed + for the accounted information. + In order to reduce the number of data members a 2-dimensions array + is introduced for each quantity. + Then the quantities are collected step by step in user action classes: + B4b::SteppingAction::UserSteppingAction() and + B4b::EventAction::EndOfEventAction() in a similar way as in variant a. + + Variant c: Hits and Sensitive detectors + + In this option, the physics quantities are accounted using the hits + and sensitive detectors framework defined in the Geant4 kernel. + The physics quantities are stored in B4c::CalorHit via two B4c::CalorimeterSD + objects, one associated with the Absorber volume and another one with Gap + in B4c::DetectorConstruction::ConstructSDandField(). + + In contrary to the B2 example (Tracker) where a new hit is created + with each track passing the sensitive volume (in the calorimeter), only one + hit is created for each calorimeter layer and one more hit to account for + the total quantities in all layers. In addition to the variants a and b, + the quantities per each layer are also available in addition to the total + quantities. + + Variant d: Scorer + + In this option, the Geant4 scorers which are defined on the top of hits + and sensitive detectors Geant4 framework are used. + In practice this means that the user does not need to define hits and sensitive + detector classes but rather uses the classes already defined + in Geant4. In this example, the G4MultiFunctionalDetector with + G4PSEnergyDeposit and G4PSTrackLength primitive scores are used (see + B4d::DetectorConstruction::ConstructSDandField()). + + The scorers hits are saved in form of ntuples in a Root file using Geant4 + analysis tools. This feature is activated in the main () function with instantiating + G4TScoreNtupleWriter. + + Also with this approach, the quantities per each layer are available + in addition to the total quantities. + + 7- HISTOGRAMS + + The analysis tools are used to accumulate statistics and compute the dispersion + of the energy deposit and track lengths of the charged particles. + H1D histograms are created in B4[b]::RunAction::RunAction() for the + following quantities: + - Energy deposit in absorber + - Energy deposit in gap + - Track length in absorber + - Track length in gap + The same values are also saved in an ntuple. + + The histograms and the ntuple are saved in the output file in a format + according to a specified file extension, the default in this example + is ROOT. + + The accumulated statistic and computed dispersion is printed at the end of + run, in B4::RunAction::EndOfRunAction(). + When running in multi-threading mode, the histograms and the ntuple accumulated + on threads are merged in a single output file. While merging of histograms is + performed by default, merging of ntuples is explicitly activated in the B4::RunAction + constructor. + + The ROOT histograms and ntuple can be plotted with ROOT using the plotHisto.C + and plotNtuple.C macros. + + 8- HOW TO RUN + + This example handles the program arguments in a new way. + It can be run with the following optional arguments: + % exampleB4a [-m macro ] [-u UIsession] [-t nThreads] [-vDefault] + + The -vDefault option will activate using the default Geant4 stepping verbose + class (G4SteppingVerbose) instead of the enhanced stepping verbose with best + units (G4SteppingVerboseWithUnits) used in the example by default. + + The -t option is available only in multi-threading mode + and it allows the user to override the Geant4 default number of + threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS + environment variable which has the top priority. + + - Execute exampleB4a in the 'interactive mode' with visualization + % exampleB4a + and type in the commands from run1.mac line by line: + Idle> /tracking/verbose 1 + Idle> /run/beamOn 1 + Idle> ... + Idle> exit + or + Idle> /control/execute run1.mac + .... + Idle> exit + + - Execute exampleB4a in the 'batch' mode from macro files + (without visualization) + % exampleB4a -m run2.mac + % exampleB4a -m exampleB4.in > exampleB4.out + + - Execute exampleB4a in the 'interactive mode' with a selected UI session, + e.g. tcsh + % exampleB4a -u tcsh + + The following paragraphs are common to all basic examples + + A- VISUALIZATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in exampleB4a.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main function when the example is used in interactive running mode. + + By default, vis.mac opens an OpenGL viewer (/vis/open OGL). + The user can change the initial viewer by commenting out this line + and instead uncommenting one of the other /vis/open statements, such as + HepRepFile or DAWNFILE (which produce files that can be viewed with the + HepRApp and DAWN viewers, respectively). Note that one can always + open new viewers at any time from the command line. For example, if + you already have a view in, say, an OpenGL window with a name + "viewer-0", then + /vis/open DAWNFILE + then to get the same view + /vis/viewer/copyView viewer-0 + or to get the same view *plus* scene-modifications + /vis/viewer/set/all viewer-0 + then to see the result + /vis/viewer/flush + + The DAWNFILE, HepRepFile drivers are always available + (since they require no external libraries), but the OGL driver requires + that the Geant4 libraries have been built with the OpenGL option. + + For more information on visualization, including information on how to + install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, + for example, + http://geant4.slac.stanford.edu/Presentations/vis/G4[VIS]Tutorial/G4[VIS]Tutorial.html + (where [VIS] can be replaced by DAWN, OpenGL and HepRApp) + + The tracks are automatically drawn at the end of each event, accumulated + for all events and erased at the beginning of the next run. + + B- USER INTERFACES + + The user command interface is set via the G4UIExecutive class + in the main() function in exampleB4a.cc + The selection of the user command interface is then done automatically + according to the Geant4 configuration or it can be done explicitly via + the third argument of the G4UIExecutive constructor (see exampleB4a.cc). diff --git a/examples/basic/B5/.README.txt b/examples/basic/B5/.README.txt new file mode 100644 index 0000000000..18595075b2 --- /dev/null +++ b/examples/basic/B5/.README.txt @@ -0,0 +1,341 @@ + +///\file "B5/.README.txt" +///\brief Example B5 README page + +/*! \page ExampleB5 Example %B5 + + Example B5 implements a double-arm spectrometer with wire chambers, + hodoscopes and calorimeters. Event simulation and collection are + enabled, as well as event display and analysis. + + +\section B5_s1 GEOMETRY + + The spectrometer consists of two detector arms + (see B5::DetectorConstruction). One arm provides + position and timing information of the incident particle while the + other collects position, timing and energy information of the particle + after it has been deflected by a magnetic field centered at the + spectrometer pivot point. + + - First arm: box filled with air, also containing: + - 1 hodoscope (15 vertical strips of plastic scintillator) + - 1 drift chamber (5 horizontal argon gas layers with a + "virtual wire" at the center of each layer) + + - Second arm: box filled with air, also containing: + - 1 hodoscope (25 vertical strips of plastic scintillator) + - 1 drift chamber (5 horizontal argon gas layers with a + "virtual wire" at the center of each layer) + - 1 electromagnetic calorimeter: + a box sub-divided along x,y and z + axes into cells of CsI + - 1 hadronic calorimeter: + a box sub-divided along x,y, and z axes + into cells of lead, with a layer of + plastic scintillator placed at the center + of each cell + + - Magnetic field region: air-filled cylinder which contains + the field (see B5::MagneticField) + + The maximum step limit in the magnetic field region is also set + via the G4UserLimits class in a similar way as in Example B2 + (see \ref B2_s6 in B2 example documentation). + + The rotation angle of the second arm and the magnetic field value + can be set via the interactive commands defined using the G4GenericMessenger + class. + +\section B5_s2 PHYSICS + + This example uses the reference hadronic physics list, FTFP_BERT, + and also adds the G4StepLimiter process. + +\section B5_s3 ACTION INITALIZATION + + B5::ActionInitialization class + instantiates and registers to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + B5::ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + B5::ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + +\section B5_s4 PRIMARY GENERATOR + + The primary generator action class employs the G4ParticleGun. + The primary kinematics consists of a single particle which is + is sent in the direction of the first spectrometer arm. + + The type of the particle and its several properties can be changed + via the G4 built-in commands of the G4ParticleGun class or + this example command defined using the G4GenericMessenger class. + + +\section B5_s5 EVENT + + An event consists of the generation of a single particle which is + transported through the first spectrometer arm. Here, a scintillator + hodoscope records the reference time of the particle before it passes + through a drift chamber where the particle position is measured. + Momentum analysis is performed as the particle passes through a magnetic + field at the spectrometer pivot and then into the second spectrometer + arm. In the second arm, the particle passes through another hodoscope + and drift chamber before interacting in the electromagnetic calorimeter. + Here it is likely that particles will induce electromagnetic showers. + The shower energy is recorded in a three-dimensional array of CsI + crystals. Secondary particles from the shower, as well as primary + particles which do not interact in the CsI crystals, pass into the + hadronic calorimeter. Here, the remaining energy is collected in a + three-dimensional array of scintillator-lead sandwiches. + + Several aspects of the event may be changed interactively by the user: + - angle of the second spectrometer arm + - strength of magnetic field + - initial particle type + - initial momentum and angle + - momentum and angle spreads + - type of initial particle may be randomized + + The initial particle type can be changed using the G4ParticleGun command: +\verbatim +/gun/particle particleName +\endverbatim + + The UI commands specific to this example are available in /B5 command + directory: +\verbatim +/B5/detector/armAngle angle unit +/B5/field/value field unit +/B5/generator/momentum value unit +/B5/generator/sigmaMomentum value unit +/B5/generator/sigmaAngle value unit +/B5/generator/randomizePrimary [true|false] +\endverbatim + + They are implemented in + - B5::DetectorConstruction::DefineCommands(), + - B5::MagneticField::DefineCommands() and + - B5::PrimaryGeneratorAction::DefineCommands() methods + using G4GenericMessenger class. + + In first execution of B5::EventAction::BeginOfEventAction() + the hits collections identifiers are saved in data members of the class + and used in B5::EventAction::EndOfEventAction() for accessing + the hists collections and filling the accounted information in defined + histograms and ntuples and printing its summary in a log file. + The frequency of printing can be tuned with the built-in command +\verbatim +/run/printProgress frequency +\endverbatim + +\section B5_s6 DETECTOR RESPONSE + + All the information required to simulate and analyze an event is + recorded in hits. This information is recorded in the following + sensitive detectors: + + - hodoscope: + - particle time + - strip ID, position and rotation + - see B5::HodoscopeSD, B5::HodoscopeHit + + - drift chamber: + - particle time + - particle position + - layer ID + - see B5::DriftChamberSD, B5::DriftChamberHit classes + + - electromagnetic calorimeter: + - energy deposited in cell + - cell ID, position and rotation + - see B5::EmCalorimeterSD, B5::EmCalorimeterHit classes + + - hadronic calorimeter: + - energy deposited in cell + - cell column ID and row ID, position and rotation + - see B5::HadCalorimeterSD, B5::HadCalorimeterHit classes + + The hit classes include methods GetAttDefs and CreateAttValues to define + and then fill extra "HepRep-style" Attributes that the visualization system + can use to present extra information about the hits. + For example, if you pick a B5::HadCalorimeterHit in OpenGL or a HepRep viewer, + you will be shown the hit's "Hit Type", "Column ID", "Row ID", + "Energy Deposited" and "Position". + These attributes are essentially arbitrary extra pieces of information + (integers, doubles or strings) that are carried through the visualization. + Each attribute is defined once in G4AttDef object and then is filled for + each hit in a G4AttValue object. + These attributes can also be used by commands to filter which hits are drawn: + /vis/filtering/hits/drawByAttribute + Detector Geometry and trajectories also carry HepRep-style attributes, + but these are filled automatically in the base classes. + HepRep is further described at the + HepRep Home Page + +\section B5_s7 ANALYSIS + + The analysis tools are used to accumulate statistics. + Histograms and an ntuple are created in B5::RunAction::RunAction() + constructor for the following quantities: + + - 1D histograms: + - Number of hits in Chamber 1 + - Number of hits in Chamber 2 + + - 2D histograms: + - Drift Chamber 1 X vs Y positions + - Drift Chamber 2 X vs Y positions + + - Ntuple: + - Number of hits in Chamber 1 + - Number of hits in Chamber 2 + - Total energy deposit in EM calorimeter + - Total energy deposit in Hadronic calorimeter + - Time of flight in Hodoscope 1 + - Time of flight in Hodoscope 2 + - Vector of energy deposits in EM calorimeter cells + - Vector of energy deposits in Hadronic calorimeter cells + + The histograms and ntuple are saved in two output files in a default + (Root) file format. + + Another file format (for example xml) can be selected either by + changing the generic analysis manager default file type: +\verbatim +analysisManager->SetDefaultFileType("xml"); +\endverbatim + or by providing the file names with the extension: +\verbatim +analysisManager->SetFileName("B5.xml"); +analysisManager->SetNtupleFileName(0, "B5ntuple.xml"); +\endverbatim + + When running in multi-threading mode, the histograms and ntuple accumulated + on threads are automatically merged in a single output file. + +\section B5_s8 PLOTTING: + + This example comes with a commented plotter.mac that shows how to use the + plotting coming with some of the visualization drivers (for example the + ToolsSG ones) to see the histograms. In it you will see how to activate + the vis driver (create a "scene handler"), create a viewer, create a scene + containing a plotter model object, create plotting "regions" (here 2x2 + regions) and attach the histograms to each region. When done, each + run beamOn should display at end the content of the histograms. + + In the second part of plotter.mac, is shown various ways to customize the + regions, for example changing the bins color, the axis labels fonts, etc... + This could be done by using default embedded styles, defining styles with commands, + or setting up directly parameters of the various parts of a plot by using a + dedicated command. + + By default the fonts used are the Hershey vectorial ones that do not need + an extra package, but you can use some freetype fonts if building with the + cmake flag -DGEANT4_USE_FREETYPE=ON. Two embedded ttf fonts comes with the + ToolsSG plotting: roboto_bold (some open source kind of the Microsoft arialbd) + and lato_regular (close to an helvetica). You can use your own .ttf files by + using the TOOLS_FONT_PATH environment variable to specify the directory where + they could be found. + +
+ +The following paragraphs are common to all basic examples + +\section B5_A VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main () function in exampleB5.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main function when the example is used in interactive running mode. + + By default, vis.mac opens an OpenGL viewer (/vis/open OGL). + The user can change the initial viewer by commenting out this line + and instead uncommenting one of the other /vis/open statements, such as + HepRepFile or DAWNFILE (which produce files that can be viewed with the + HepRApp and DAWN viewers, respectively). Note that one can always + open new viewers at any time from the command line. For example, if + you already have a view in, say, an OpenGL window with a name + "viewer-0", then +\verbatim +/vis/open DAWNFILE +\endverbatim + then to get the same view +\verbatim +/vis/viewer/copyView viewer-0 +\endverbatim + or to get the same view *plus* scene-modifications +\verbatim +/vis/viewer/set/all viewer-0 +\endverbatim + then to see the result +\verbatim +/vis/viewer/flush +\endverbatim + + The DAWNFILE, HepRepFile drivers are always available + (since they require no external libraries), but the OGL driver requires + that the Geant4 libraries have been built with the OpenGL option. + + vis.mac has additional commands that demonstrate additional functionality + of the vis system, such as displaying text, axes, scales, date, logo and + shows how to change viewpoint and style. + To see even more commands use help or ls or browse the available UI commands + in the Application Developers Guide. + + For more information on visualization, including information on how to + install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, + for example,\n + - + OpenGL Tutorial + - + DAWN Tutorial + - + HepRApp Tutorial + + The tracks are automatically drawn at the end of each event, accumulated + for all events and erased at the beginning of the next run. + +\section B5_B USER INTERFACES + + The user command interface is set via the G4UIExecutive class + in the main () function in exampleB5.cc + The selection of the user command interface is then done automatically + according to the Geant4 configuration or it can be done explicitly via + the third argument of the G4UIExecutive constructor (see exampleB4a.cc). + +\section B5_C HOW TO RUN + + - Execute exampleB5 in the 'interactive mode' with visualization +\verbatim +% exampleB5 +and type in the commands from run1.mac line by line: +Idle> /control/verbose 2 +Idle> /tracking/verbose 1 +Idle> /run/beamOn 10 +Idle> ... +Idle> exit +\endverbatim + or +\verbatim +Idle> /control/execute run1.mac +.... +Idle> exit +\endverbatim + + - Execute exampleB5 in the 'batch' mode from macro files + (without visualization) +\verbatim +% exampleB5 run2.mac +% exampleB5 exampleB5.in > exampleB5.out +\endverbatim +*/ + diff --git a/examples/basic/B5/README b/examples/basic/B5/README new file mode 100644 index 0000000000..44dba5c369 --- /dev/null +++ b/examples/basic/B5/README @@ -0,0 +1,314 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Extended Example B5 + -------------------- + + Example B5 implements a double-arm spectrometer with wire chambers, + hodoscopes and calorimeters. Event simulation and collection are + enabled, as well as event display and analysis. + + + 1- GEOMETRY + + The spectrometer consists of two detector arms + (see B5::DetectorConstruction). One arm provides + position and timing information of the incident particle while the + other collects position, timing and energy information of the particle + after it has been deflected by a magnetic field centered at the + spectrometer pivot point. + + - First arm: box filled with air, also containing: + + 1 hodoscope (15 vertical strips of plastic scintillator) + 1 drift chamber (5 horizontal argon gas layers with a + "virtual wire" at the center of each layer) + + - Second arm: box filled with air, also containing: + + 1 hodoscope (25 vertical strips of plastic scintillator) + 1 drift chamber (5 horizontal argon gas layers with a + "virtual wire" at the center of each layer) + 1 electromagnetic calorimeter: + a box sub-divided along x,y and z + axes into cells of CsI + 1 hadronic calorimeter: + a box sub-divided along x,y, and z axes + into cells of lead, with a layer of + plastic scintillator placed at the center + of each cell + + - Magnetic field region: air-filled cylinder which contains + the field (see B5::MagneticField) + + The maximum step limit in the magnetic field region is also set + via the G4UserLimits class in a similar way as in Example B2. + + The rotation angle of the second arm and the magnetic field value + can be set via the interactive command defined using the G4GenericMessenger + class. + + 2- PHYSICS + + This example uses the reference hadronic physics list, FTFP_BERT, + and also adds the G4StepLimiter process. + + + 3- ACTION INITALIZATION + + B5::ActionInitialization class + instantiates and registers to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + B5::ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + B5::ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + + 4- PRIMARY GENERATOR + + The primary generator action class employs the G4ParticleGun. + The primary kinematics consists of a single particle which is + is sent in the direction of the first spectrometer arm. + + The type of the particle and its several properties can be changed + via the G4 built-in commands of the G4ParticleGun class or + this example command defined using the G4GenericMessenger class. + + + 5- EVENT + + An event consists of the generation of a single particle which is + transported through the first spectrometer arm. Here, a scintillator + hodoscope records the reference time of the particle before it passes + through a drift chamber where the particle position is measured. + Momentum analysis is performed as the particle passes through a magnetic + field at the spectrometer pivot and then into the second spectrometer + arm. In the second arm, the particle passes through another hodoscope + and drift chamber before interacting in the electromagnetic calorimeter. + Here it is likely that particles will induce electromagnetic showers. + The shower energy is recorded in a three-dimensional array of CsI + crystals. Secondary particles from the shower, as well as primary + particles which do not interact in the CsI crystals, pass into the + hadronic calorimeter. Here, the remaining energy is collected in a + three-dimensional array of scintillator-lead sandwiches. + + Several aspects of the event may be changed interactively by the user: + - angle of the second spectrometer arm + - strength of magnetic field + - initial particle type + - initial momentum and angle + - momentum and angle spreads + - type of initial particle may be randomized + + The initial particle type can be changed using the G4ParticleGun command: + /gun/particle particleName + + The UI commands specific to this example are available in /B5 command + directory: + /B5/detector/armAngle angle unit + /B5/field/value field unit + /B5/generator/momentum value unit + /B5/generator/sigmaMomentum value unit + /B5/generator/sigmaAngle value unit + /B5/generator/randomizePrimary [true|false] + + They are implemented in + B5::DetectorConstruction::DefineCommands(), + B5::MagneticField::DefineCommands() and + B5::PrimaryGeneratorAction::DefineCommands() methods + using G4GenericMessenger class. + + In first execution of BeginOfEventAction() + the hits collections identifiers are saved in data members of the class + and used in EndOfEventAction() for accessing + the hists collections and filling the accounted information in defined + histograms and ntuples and printing its summary in a log file. + The frequency of printing can be tuned with the built-in command + /run/printProgress frequency + + 6- DETECTOR RESPONSE: + + All the information required to simulate and analyze an event is + recorded in hits. This information is recorded in the following + sensitive detectors: + + - hodoscope: + particle time + strip ID, position and rotation + (see B5::HodoscopeSD, B5::HodoscopeHit classes) + + - drift chamber: + particle time + particle position + layer ID + (see B5::DriftChamberSD, B5::DriftChamberHit classes) + + - electromagnetic calorimeter: + energy deposited in cell + cell ID, position and rotation + (see B5::EMCalorimeterSD, B5::EMCalorimeterHit classes) + + - hadronic calorimeter: + energy deposited in cell + cell column ID and row ID, position and rotation + (see B5::HadCalorimeterSD, B5::HadCalorimeterHit classes) + + The hit classes include methods GetAttDefs and CreateAttValues to define + and then fill extra "HepRep-style" Attributes that the visualization system + can use to present extra information about the hits. + For example, if you pick a B5::HadCalorimeterHit in OpenGL or a HepRep viewer, + you will be shown the hit's "Hit Type", "Column ID", "Row ID", + "Energy Deposited" and "Position". + These attributes are essentially arbitrary extra pieces of information + (integers, doubles or strings) that are carried through the visualization. + Each attribute is defined once in G4AttDef object and then is filled for + each hit in a G4AttValue object. + These attributes can also be used by commands to filter which hits are drawn: + /vis/filtering/hits/drawByAttribute + Detector Geometry and trajectories also carry HepRep-style attributes, + but these are filled automatically in the base classes. + HepRep is further described at: http://www.slac.stanford.edu/~perl/heprep/ + + 7- ANALYSIS: + + The analysis tools are used to accumulate statistics. + Histograms and an ntuple are created in B5::RunAction::RunAction() + constructor for the following quantities: + + 1D histograms: + - Number of hits in Chamber 1 + - Number of hits in Chamber 2 + + 2D histograms: + - Drift Chamber 1 X vs Y positions + - Drift Chamber 2 X vs Y positions + + Ntuple: + - Number of hits in Chamber 1 + - Number of hits in Chamber 2 + - Total energy deposit in EM calorimeter + - Total energy deposit in Hadronic calorimeter + - Time of flight in Hodoscope 1 + - Time of flight in Hodoscope 2 + - Vector of energy deposits in EM calorimeter cells + - Vector of energy deposits in Hadronic calorimeter cells + + The histograms and ntuple are saved in two output files in a default + (Root) file format. + + Another file format (for example xml) can be selected either by + changing the generic analysis manager default file type: + analysisManager->SetDefaultFileType("xml"); + or by providing the file names with the extension: + analysisManager->SetFileName("B5.xml"); + analysisManager->SetNtupleFileName(0, "B4ntuple.xml"); + + When running in multi-threading mode, the histograms and ntuple accumulated + on threads are automatically merged in a single output file. + + 8- PLOTTING: + + This example comes with a commented plotter.mac that shows how to use the + plotting coming with some of the visualization drivers (for example the + ToolsSG ones) to see the histograms. In it you will see how to activate + the vis driver (create a "scene handler"), create a viewer, create a scene + containing a plotter model object, create plotting "regions" (here 2x2 + regions) and attach the histograms to each region. When done, each + run beamOn should display at end the content of the histograms. + + In the second part of plotter.mac, is shown various ways to customize the + regions, for example changing the bins color, the axis labels fonts, etc... + This could be done by using default embedded styles, defining styles with commands, + or setting up directly parameters of the various parts of a plot by using a + dedicated command. + + By default the fonts used are the Hershey vectorial ones that do not need + an extra package, but you can use some freetype fonts if building with the + cmake flag -DGEANT4_USE_FREETYPE=ON. Two embedded ttf fonts comes with the + ToolsSG plotting: roboto_bold (some open source kind of the Microsoft arialbd) + and lato_regular (close to an helvetica). You can use your own .ttf files by + using the TOOLS_FONT_PATH environment variable to specify the directory where + they could be found. + + The following paragraphs are common to all basic examples + + A- VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in exampleB5.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main function when the example is used in interactive running mode. + + By default, vis.mac opens an OpenGL viewer (/vis/open OGL). + The user can change the initial viewer by commenting out this line + and instead uncommenting one of the other /vis/open statements, such as + HepRepFile or DAWNFILE (which produce files that can be viewed with the + HepRApp and DAWN viewers, respectively). Note that one can always + open new viewers at any time from the command line. For example, if + you already have a view in, say, an OpenGL window with a name + "viewer-0", then + /vis/open DAWNFILE + then to get the same view + /vis/viewer/copyView viewer-0 + or to get the same view *plus* scene-modifications + /vis/viewer/set/all viewer-0 + then to see the result + /vis/viewer/flush + + The DAWNFILE, HepRepFile drivers are always available + (since they require no external libraries), but the OGL driver requires + that the Geant4 libraries have been built with the OpenGL option. + + vis.mac has additional commands that demonstrate additional functionality + of the vis system, such as displaying text, axes, scales, date, logo and + shows how to change viewpoint and style. + To see even more commands use help or ls or browse the available UI commands + in the Application Developers Guide. + + For more information on visualization, including information on how to + install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, + for example, + http://geant4.slac.stanford.edu/Presentations/vis/G4[VIS]Tutorial/G4[VIS]Tutorial.html + (where [VIS] can be replaced by DAWN, OpenGL and HepRApp) + + The tracks are automatically drawn at the end of each event, accumulated + for all events and erased at the beginning of the next run. + + B- USER INTERFACES + + The user command interface is set via the G4UIExecutive class + in the main() function in exampleB5.cc + The selection of the user command interface is then done automatically + according to the Geant4 configuration or it can be done explicitly via + the third argument of the G4UIExecutive constructor (see exampleB4a.cc). + + C- HOW TO RUN + + - Execute exampleB5 in the 'interactive mode' with visualization: + % ./exampleB5 + and type in the commands from run1.mac line by line: + Idle> /control/verbose 2 + Idle> /tracking/verbose 1 + Idle> /run/beamOn 10 + Idle> ... + Idle> exit + or + Idle> /control/execute run1.mac + .... + Idle> exit + + - Execute exampleB5 in the 'batch' mode from macro files + (without visualization) + % ./exampleB5 run2.mac + % ./exampleB5 exampleB5.in > exampleB5.out + + diff --git a/examples/basic/README b/examples/basic/README new file mode 100644 index 0000000000..0be3f2ea9c --- /dev/null +++ b/examples/basic/README @@ -0,0 +1,57 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Basic Examples + ---------------- + + The set of basic examples is oriented to "novice" users and covering many + basic general use-cases typical of an "application"-oriented kind of + development. + + ExampleB1 + - Simple geometry with a few solids + - Geometry with simple placements (G4PVPlacement) + - Scoring total dose in a selected volume user action classes + - Using G4Accumulable for automatic merging of scored values in multi-threading mode + - Geant4 physics list (QBBC) + + ExampleB2 + - Simplified tracker geometry with global constant magnetic field + - Geometry with simple placements (G4PVPlacement) and parameterisation + (G4PVParameterisation) + - Scoring within tracker via G4 sensitive detector and hits + - Geant4 physics list (FTFP_BERT) with step limiter + - Started from novice/N02 example + + ExampleB3 + - Schematic Positron Emitted Tomography system + - Geometry with simple placements with rotation (G4PVPlacement) + - Radioactive source + - Scoring within Crystals via G4 scorers + - Using G4Accumulable for automatic merging of scored values in multi-threading mode (a) + and G4StatAnalysis for accumulating statistics (b) + - Modular physics list built via builders provided in Geant4 + + ExampleB4 + - Simplified calorimeter with layers of two materials + - Geometry with replica (G4PVReplica) + - Scoring within layers in four ways: via user actions (a), via user own + object (b), via G4 sensitive detector and hits (c) and via scorers (d) + - Geant4 physics list (FTFP_BERT) + - Histograms (1D) and ntuple saved in the output file + - Started from novice/N03 example + + ExampleB5 + - A double-arm spectrometer with wire chambers, hodoscopes and calorimeters + with a local constant magnetic field + - Geometry with placements with rotation, replicas and parameterisation + - Scoring within wire chambers, hodoscopes and calorimeters via + G4 sensitive detector and hits + - Geant4 physics list (FTFP_BERT) with step limiter + - UI commans defined using G4GenericMessenger + - Histograms (1D, 2D) and ntuple saved in two output files + - Plotting of histograms with visualization drivers + - Started from extended/analysis/A01 diff --git a/examples/extended/.README.txt b/examples/extended/.README.txt new file mode 100644 index 0000000000..a0611ecafa --- /dev/null +++ b/examples/extended/.README.txt @@ -0,0 +1,64 @@ + +///\file "extended/.README.txt" +///\brief Geant4 Extended Examples README page + +/*! \page README_extended Extended Examples + +The set of "extended" examples is covering various +use-cases and may require some additional libraries besides of Geant4. + + The HTML documentation for extended examples is still work in progres. +Webified README pages are not yet available for all examples. + +\section ext_s1 Extended level examples: + +- \link Examples_analysis analysis \endlink + - Histogramming through the Geant4 analysis and external tools +- \link Examples_biasing biasing \endlink + - Examples of event biasing, scoring and reverse-MC- +- \link Examples_common common \endlink + - A set of common classes which can be reused in other examples demonstrating just a particular feature +- \link Examples_electromagnetic electromagnetic \endlink + - Specific EM physics simulation with histogramming +- \link Exampleerrorpropagation errorpropagation \endlink + - Use of the error propagation utility (Geant4e) +- \link Examples_eventgenerator eventgenerator \endlink + - Applications demonstrating various ways of primary event generation: + using Geant4 particle gun, Geant4 general particle source, + using interface to HepMC, Pythia +- \link Examples_exoticphysics exoticphysics \endlink + - Exotic simulation applications (classical magnetic monopole, etc...) +- \link Examples_field field \endlink + - Specific simulation setups in magnetic field +- \link Examples_g3tog4 g3tog3 \endlink + - Examples of usage of the g3tog4 converter tool +- \link Examples_geometry geometry \endlink + - Specific geometry examples +- \link Examples_hadronic hadronic \endlink + - Specific hadronic physics simulation with histogramming +- \link Examples_medical medical \endlink + - Specific examples for medical physics applications +- \link Examples_optical optical \endlink + - Examples of generic optical processes simulation setups +- \link Examples_parallel parallel \endlink + - Examples of event-level parallelism in Geant4 using the + TOP-C distribution, and MPI technique +- \link Examples_parameterisations parameterisations \endlink + - Examples for fast shower parameterisations according to specific models + (gflash) +- \link Examples_persistency persistency \endlink + - Persistency of geometry (GDML or ASCII) and simulation output +- \link Examples_physicslists physicslists \endlink + - Examples to demonstrate usage of Geant4 reference physics lists and physics builders +- \link Examples_polarisation polarisation \endlink + - Use of physics processes including polarization +- \link Examples_radioactivedecay radioactivedecay \endlink + - Examples to simulate the decays of radioactive isotopes and + induced radioactivity resulted from nuclear interactions +- \link Examples_runAndEvent runAndEvent \endlink + - Examples to demonstrate how to connect the information between + primary particles and hits and utilize user-information classes +- \link Examples_visualization visualization \endlink + - Specific visualization features and graphical customisations + +*/ diff --git a/examples/extended/analysis/.README.txt b/examples/extended/analysis/.README.txt new file mode 100644 index 0000000000..b221e0ce0e --- /dev/null +++ b/examples/extended/analysis/.README.txt @@ -0,0 +1,23 @@ + +///\file "analysis/.README.txt" +///\brief Examples analysis README page + +/*! \page Examples_analysis Category "analysis" + + Examples in this directory demonstrate how to make histograms and ntuples + +\link ExampleAnaEx01 AnaEx01 \endlink + + Simple example showing use of g4tools. + +\link ExampleAnaEx02 AnaEx02 \endlink + + As AnaEx01, but direct interface to ROOT. + +\link ExampleB1Con B1Con \endlink + + B1Con shows how to use the statistical tool G4ConvergenceTester. + It does not make histograms. + It has the same geometry as B1. + +*/ diff --git a/examples/extended/analysis/AnaEx01/.README.txt b/examples/extended/analysis/AnaEx01/.README.txt new file mode 100644 index 0000000000..545dc15634 --- /dev/null +++ b/examples/extended/analysis/AnaEx01/.README.txt @@ -0,0 +1,145 @@ + +///\file "analysis/AnaEx01/.README.txt" +///\brief Example AnaEx01 README page + +/*! \page ExampleAnaEx01 Example AnaEx01 + + Examples AnaEx01 and AnaEx02 show the usage of histogram and tuple + manipulations using G4Analysis and ROOT compliant systems on the same + scenario. All analysis manipulations (histo booking, filling, saving histos + in a file, etc...) are located in one class : HistoManager, implementation of + which is different in each example. All the other classes are same in all + three examples. + + This example shows the usage of histogram and tuple manipulations using + G4Analysis system. + + The example is an adaptation of examples/novice/N03. It describes a simple + sampling calorimeter setup. + +\section AnaEx01_s1 Detector description + + The calorimeter is a box made of a given number of layers. A layer + consists of an absorber plate and of a detection gap. The layer is + replicated. + + Six parameters define the calorimeter : + - the material of the absorber, + - the thickness of an absorber plate, + - the material of the detection gap, + - the thickness of a gap, + - the number of layers, + - the transverse size of the calorimeter (the input face is a square). + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be modified interactively via + the commands defined in the DetectorMessenger class. + +
+        |<----layer 0---------->|<----layer 1---------->|<----layer 2---------->|
+        |                       |                       |                       |
+        ==========================================================================
+        ||              |       ||              |       ||              |       ||
+        ||              |       ||              |       ||              |       ||
+ beam   ||   absorber   |  gap  ||   absorber   |  gap  ||   absorber   |  gap  ||
+======> ||              |       ||              |       ||              |       ||
+        ||              |       ||              |       ||              |       ||
+        ==========================================================================
+
+
+ +\section AnaEx01_s2 Physics list + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. + +\section AnaEx01_s3 Action Initialization + + A newly introduced class, ActionInitialization, + instantiates and registers to Geant4 kernel all user action classes + which are defined thread-local and a run action class + which is defined both thread-local and global. + + The thread-local action classes are defined in + ActionInitialization::Build() + and the global run action class is defined in + ActionInitialization::BuildForMaster(). + Note that ActionInitialization::Build() is also used to + instatiate user action clasess in sequential mode. + +\section AnaEx01_s4 An event : PrimaryGeneratorAction + + The primary kinematic consists of a single particle which hits the + calorimeter perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of ParticleGun class. + + +\section AnaEx01_s5 Histograms + + AnaEx01 can produce 4 histograms : + + - EAbs : total energy deposit in absorber per event + - EGap : total energy deposit in gap per event + - LAbs : total track length of charged particles in absorber per event + - LGap : total track length of charged particles in gap per event + + And 2 Ntuples : + - Ntuple1: + - one row per event : EnergyAbs EnergyGap + - Ntuple2: + - one row per event : TrackLAbs TrackLGap + + These histos and ntuples are booked in HistoManager and filled from + EventAction. + + One can control the name of the histograms file and its format: + - default name : AnaEx01 + The format of the histogram file can be : root (default), + xml, csv. Include correct g4nnn.hh in HistoManager.hh + +\section AnaEx01_s7 How to build + + An additional step is needed when building the example with GNUmake + due to using the extra shared directory: +\verbatim +% cd path_to_AnaEx01/AnaEx01 +% gmake setup +% gmake +\endverbatim + + This will copy the files from shared in the example include and src; + to remove these files: +\verbatim +% gmake clean_setup +\endverbatim + +\section AnaEx01_s8 HOW TO RUN + +- Execute AnaEx01 in the 'interactive mode' with visualization +\verbatim +% ./AnaEx01 +and type in the commands from run.mac line by line: +Idle> /control/verbose 2 +Idle> /tracking/verbose 1 +Idle> /run/beamOn 10 +Idle> ... +Idle> exit +\endverbatim + or +\verbatim +Idle> /control/execute run.mac +.... +Idle> exit +\endverbatim + +- Execute AnaEx01 in the 'batch' mode from macro files +(without visualization) +\verbatim +% ./AnaEx01 run.mac +% ./AnaEx01 run.mac > run.out +\endverbatim + +The AnaEx01.in macro is used in Geant4 testing. + +*/ diff --git a/examples/extended/analysis/AnaEx01/README b/examples/extended/analysis/AnaEx01/README new file mode 100644 index 0000000000..c6f0cd92d1 --- /dev/null +++ b/examples/extended/analysis/AnaEx01/README @@ -0,0 +1,140 @@ +-------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + AnaEx01 + ------- + + Examples AnaEx01 and AnaEx02 show the usage of histogram and tuple + manipulations using G4Analysis and ROOT compliant systems on the same + scenario. All analysis manipulations (histo booking, filling, saving histos + in a file, etc...) are located in one class : HistoManager, implementation of + which is different in each example. All the other classes are same in all + three examples. + + This example shows the usage of histogram and tuple manipulations using + G4Analysis system. + + The example is an adaptation of examples/novice/N03. It describes a simple + sampling calorimeter setup. + + 1- Detector description + ----------------------- + + The calorimeter is a box made of a given number of layers. A layer + consists of an absorber plate and of a detection gap. The layer is + replicated. + + Six parameters define the calorimeter : + - the material of the absorber, + - the thickness of an absorber plate, + - the material of the detection gap, + - the thickness of a gap, + - the number of layers, + - the transverse size of the calorimeter (the input face is a square). + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be modified interactively via + the commands defined in the DetectorMessenger class. + + |<----layer 0---------->|<----layer 1---------->|<----layer 2---------->| + | | | | + ========================================================================== + || | || | || | || + || | || | || | || + beam || absorber | gap || absorber | gap || absorber | gap || +======> || | || | || | || + || | || | || | || + ========================================================================== + + + 2- Physics list + --------------- + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. + + 3- Action Initialization + ------------------------ + + A newly introduced class, ActionInitialization, + instantiates and registers to Geant4 kernel all user action classes + which are defined thread-local and a run action class + which is defined both thread-local and global. + + The thread-local action classes are defined in + ActionInitialization::Build() + and the global run action class is defined in + ActionInitialization::BuildForMaster(). + Note that ActionInitialization::Build() is also used to + instatiate user action clasess in sequential mode. + + 4- An event : PrimaryGeneratorAction + ------------------------------------ + + The primary kinematic consists of a single particle which hits the + calorimeter perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of ParticleGun class. + + 5- Histograms + ------------- + + AnaEx01 can produce 4 histograms : + + EAbs : total energy deposit in absorber per event + EGap : total energy deposit in gap per event + LAbs : total track length of charged particles in absorber per event + LGap : total track length of charged particles in gap per event + + And 2 Ntuples : + - Ntuple1: + - one row per event : EnergyAbs EnergyGap + - Ntuple2: + - one row per event : TrackLAbs TrackLGap + + These histos and ntuples are booked in HistoManager and filled from + EventAction. + + One can control the name of the histograms file and its format: + default name : AnaEx01 + The format of the histogram file can be : root (default), + xml, csv. Include correct g4nnn.hh in HistoManager.hh + + 6- How to build + --------------- + + An additional step is needed when building the example with GNUmake + due to using the extra shared directory: + % cd path_to_AnaEx01/AnaEx01 + % gmake setup + % gmake + + This will copy the files from shared in the example include and src; + to remove these files: + % gmake clean_setup + + 7- How to run + -------------- + + - Execute AnaEx01 in the 'interactive mode' with visualization + % ./AnaEx01 + and type in the commands from run.mac line by line: + Idle> /control/verbose 2 + Idle> /tracking/verbose 1 + Idle> /run/beamOn 10 + Idle> ... + Idle> exit + or + Idle> /control/execute run.mac + .... + Idle> exit + + - Execute AnaEx01 in the 'batch' mode from macro files + (without visualization) + % ./AnaEx01 run.mac + % ./AnaEx01 run.mac > run.out + + The AnaEx01.in macro is used in Geant4 testing. diff --git a/examples/extended/analysis/AnaEx02/.README.txt b/examples/extended/analysis/AnaEx02/.README.txt new file mode 100644 index 0000000000..204ed5507c --- /dev/null +++ b/examples/extended/analysis/AnaEx02/.README.txt @@ -0,0 +1,149 @@ + +///\file "analysis/AnaEx02/.README.txt" +///\brief Example AnaEx02 README page + +/*! \page ExampleAnaEx02 Example AnaEx02 + + Examples AnaEx01 and AnaEx02 show the usage of histogram and tuple + manipulations using G4Analysis and ROOT compliant systems on the same + scenario. All analysis manipulations (histo booking, filling, saving histos + in a file, etc...) are located in one class : HistoManager, implementation of + which is different in each example. All the other classes are same in all + three examples. + + This example shows the usage of histogram and tuple manipulations using + ROOT system. Please install ROOT before building this example: + http://root.cern.ch + + The example is an adaptation of examples/novice/N03. It describes a simple + sampling calorimeter setup. + +\section AnaEx02_s1 Detector description + + The calorimeter is a box made of a given number of layers. A layer + consists of an absorber plate and of a detection gap. The layer is + replicated. + + Six parameters define the calorimeter : + - the material of the absorber, + - the thickness of an absorber plate, + - the material of the detection gap, + - the thickness of a gap, + - the number of layers, + - the transverse size of the calorimeter (the input face is a square). + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be modified interactively via + the commands defined in the DetectorMessenger class. + +
+        |<----layer 0---------->|<----layer 1---------->|<----layer 2---------->|
+        |                       |                       |                       |
+        ==========================================================================
+        ||              |       ||              |       ||              |       ||
+        ||              |       ||              |       ||              |       ||
+ beam   ||   absorber   |  gap  ||   absorber   |  gap  ||   absorber   |  gap  ||
+======> ||              |       ||              |       ||              |       ||
+        ||              |       ||              |       ||              |       ||
+        ==========================================================================
+
+
+ +\section AnaEx02_s2 Physics list + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. + +\section AnaEx02_s3 Action Initialization + + A newly introduced class, ActionInitialization, + instantiates and registers to Geant4 kernel all user action classes + which are defined thread-local and a run action class + which is defined both thread-local and global. + + The thread-local action classes are defined in + ActionInitialization::Build() + and the global run action class is defined in + ActionInitialization::BuildForMaster(). + Note that ActionInitialization::Build() is also used to + instatiate user action clasess in sequential mode. + +\section AnaEx02_s4 An event : PrimaryGeneratorAction + + The primary kinematic consists of a single particle which hits the + calorimeter perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of ParticleGun class. + + +\section AnaEx02_s5 Histograms + + To produce histograms, ROOT system must be installed + + AnaEx02 can produce 4 histograms : + + - EAbs : total energy deposit in absorber per event + - EGap : total energy deposit in gap per event + - LAbs : total track length of charged particles in absorber per event + - LGap : total track length of charged particles in gap per event + + And 2 Ntuples : + - Ntuple1: + - one row per event : EnergyAbs EnergyGap + - Ntuple2: + - one row per event : TrackLAbs TrackLGap + + These histos and ntuples are booked in HistoManager and filled from + EventAction. + + One can control the name of the histograms file : + - default name : AnaEx02 + Format : root + + See HistoManager constructor + +\section AnaEx02_s6 How to build + + An additional step is needed when building the example with GNUmake + due to using the extra shared directory: +\verbatim +% cd path_to_AnaEx02/AnaEx02 +% gmake setup +% gmake +\endverbatim + + This will copy the files from shared in the example include and src; + to remove these files: +\verbatim +% gmake clean_setup +\endverbatim + +\section AnaEx02_s8 HOW TO RUN + +- Execute AnaEx02 in the 'interactive mode' with visualization +\verbatim +% ./AnaEx02 +and type in the commands from run.mac line by line: +Idle> /control/verbose 2 +Idle> /tracking/verbose 1 +Idle> /run/beamOn 10 +Idle> ... +Idle> exit +\endverbatim + or +\verbatim +Idle> /control/execute run.mac +.... +Idle> exit +\endverbatim + +- Execute AnaEx02 in the 'batch' mode from macro files + (without visualization) +\verbatim +% ./AnaEx02 run.mac +% ./AnaEx02 run.mac > run.out +\endverbatim + +The AnaEx02.in macro is used in Geant4 testing. + +*/ diff --git a/examples/extended/analysis/AnaEx02/README b/examples/extended/analysis/AnaEx02/README new file mode 100644 index 0000000000..87cb7623e2 --- /dev/null +++ b/examples/extended/analysis/AnaEx02/README @@ -0,0 +1,145 @@ +-------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + AnaEx02 + ------- + Examples AnaEx01 and AnaEx02 show the usage of histogram and tuple + manipulations using G4Analysis and ROOT compliant systems on the same + scenario. All analysis manipulations (histo booking, filling, saving histos + in a file, etc...) are located in one class : HistoManager, implementation of + which is different in each example. All the other classes are same in all + three examples. + + This example shows the usage of histogram and tuple manipulations using + ROOT system. Please install ROOT before building this example: + http://root.cern.ch + + The example is an adaptation of examples/novice/N03. It describes a simple + sampling calorimeter setup. + + 1- Detector description + ----------------------- + + The calorimeter is a box made of a given number of layers. A layer + consists of an absorber plate and of a detection gap. The layer is + replicated. + + Six parameters define the calorimeter : + - the material of the absorber, + - the thickness of an absorber plate, + - the material of the detection gap, + - the thickness of a gap, + - the number of layers, + - the transverse size of the calorimeter (the input face is a square). + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be modified interactively via + the commands defined in the DetectorMessenger class. + + |<----layer 0---------->|<----layer 1---------->|<----layer 2---------->| + | | | | + ========================================================================== + || | || | || | || + || | || | || | || + beam || absorber | gap || absorber | gap || absorber | gap || +======> || | || | || | || + || | || | || | || + ========================================================================== + + 2- Physics list + --------------- + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. + + 3- Action Initialization + ------------------------ + + A newly introduced class, ActionInitialization, + instantiates and registers to Geant4 kernel all user action classes + which are defined thread-local and a run action class + which is defined both thread-local and global. + + The thread-local action classes are defined in + ActionInitialization::Build() + and the global run action class is defined in + ActionInitialization::BuildForMaster(). + Note that ActionInitialization::Build() is also used to + instatiate user action clasess in sequential mode. + + 4- An event : PrimaryGeneratorAction + ------------------------------------ + + The primary kinematic consists of a single particle which hits the + calorimeter perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of ParticleGun class. + + + 5- Histograms + ------------- + To produce histograms, ROOT system must be installed + + AnaEx02 can produce 4 histograms : + + EAbs : total energy deposit in absorber per event + EGap : total energy deposit in gap per event + LAbs : total track length of charged particles in absorber per event + LGap : total track length of charged particles in gap per event + + And 2 Ntuples : + - Ntuple1: + - one row per event : EnergyAbs EnergyGap + - Ntuple2: + - one row per event : TrackLAbs TrackLGap + + These histos and ntuples are booked in HistoManager and filled from + EventAction. + + One can control the name of the histograms file : + default name : AnaEx02 + format : root + + See HistoManager constructor + + 6- How to build + --------------- + + An additional step is needed when building the example with GNUmake + due to using the extra shared directory: + % cd path_to_AnaEx02/AnaEx02 + % gmake setup + % gmake + + This will copy the files from shared in the example include and src; + to remove these files: + % gmake clean_setup + + 7- How to run + -------------- + + - Execute AnaEx02 in the 'interactive mode' with visualization: + % ./AnaEx02 + and type in the commands from run.mac line by line: + Idle> /control/verbose 2 + Idle> /tracking/verbose 1 + Idle> /run/beamOn 10 + Idle> ... + Idle> exit + or + Idle> /control/execute run.mac + .... + Idle> exit + + - Execute AnaEx02 in the 'batch' mode from macro files + (without visualization) + % ./AnaEx02 run.mac + % ./AnaEx02 run.mac > run.out + + The AnaEx02.in macro is used in Geant4 testing. + + + diff --git a/examples/extended/analysis/B1Con/.README.txt b/examples/extended/analysis/B1Con/.README.txt new file mode 100644 index 0000000000..6680220af2 --- /dev/null +++ b/examples/extended/analysis/B1Con/.README.txt @@ -0,0 +1,113 @@ + +///\file "analysis/B1Con/.README.txt" +///\brief Example B1Con README page + +/*! \page ExampleB1Con Example B1Con + + +Example of Convergence Tester + + Koi, Tatsumi \n + SLAC National Accelerator Laboratory / PPA \n + tkoi@slac.stanford.eedu \n + +This example shows how to use convergece tester in Geant4. +The aim of Convergence Tester +- After a Monte Carlo simulation, we get an answer. However how to estimate quality of the answer. +The answer is usually given in a form of average value. +But sometimes the value is strongly affected by single or a few events in the full calculation. +In such case, we must concern about quality of the value. + +What we must remember is +- Large number of history does not valid result of simulation. +- Small Relative Error does not valid result of simulation +Convergence tester provides statistical information +to assist establishing valid confidence intervals for Monte Carlo results for users. + +Geometry and Physics are same to exampleB1. Please see \ref ExampleB1. +Note that in this example, the classes with the code added for +the purpose of demonstration of the Convergence Tester start with a prefix +B1Con instead of B1 and also the executable and the test macro names are changed +in exampleB1Con and exampleB1Con.in. + +Known problem: +Computing time of T cannot be gotten properly in current MT migration of example of B1Con. Therefore +FOM (=1/(R^2T) where R is relative error and T is computing time) relates numbers are unusable. + +\verbatim +*********************************************************************************************************************** +Output example + +// Part I.A +// Basic statistics values + +G4ConvergenceTester Output Result of DOSE_TALLY + EFFICIENCY = 0.601 + MEAN = 4.81721e-12 + VAR = 2.15334e-23 + SD = 4.64041e-12 + R = 0.0304622 + SHIFT = 2.22459e-13 + VOV = 0.000166754 + FOM = 1238.68 + +// Part I.B +// If the largeset scored events happen at next to the last event, +// then how much the event effects the statistics values of the calculation + +THE LARGEST SCORE = 1.07301e-11 and it happend at 487th event + Affected Mean = 4.82311e-12 and its ratio to orignal is 1.00123 + Affected VAR = 2.15468e-23 and its ratio to orignal is 1.00062 + Affected R = 0.0304192 and its ratio to orignal is 0.998587 + Affected SHIFT = 2.1804e-13 and its ratio to orignal is 0.980133 + Affected FOM = 1238.68 and its ratio to orignal is 1 + +// Part I.C +// Convergence tests results + +MEAN distribution is RANDOM +r follows 1/std::sqrt(N) +r is monotonically decrease +r is less than 0.1. r = 0.0304622 +VOV follows 1/std::sqrt(N) +VOV is monotonically decrease +FOM distribution is not RANDOM +SLOPE is not large enough +This result passes 6 / 8 Convergence Test. + +// Part II +// Profile of statistics values in the history + +G4ConvergenceTester Output History of DOSE_TALLY +i/16 till_ith mean var sd r vov fom shift e r2eff r2int + 1 62 4.94618e-12 2.04631e-23 4.52362e-12 0.115225 0.00313634 86.5745 -1.73435e-14 0.619048 0.00976801 0.00329797 + 2 124 4.69364e-12 2.10698e-23 4.59018e-12 0.0874712 0.001597 150.228 3.11143e-13 0.6 0.00533333 0.00225666 + 3 187 4.72161e-12 2.14009e-23 4.62612e-12 0.0714575 0.00101852 225.105 3.1009e-13 0.590426 0.00368986 0.00138916 + 4 249 4.95617e-12 2.13982e-23 4.62582e-12 0.0590299 0.000690138 329.865 9.71971e-14 0.62 0.00245161 0.00101898 + 5 312 4.8529e-12 2.13482e-23 4.62041e-12 0.0538155 0.000573301 396.887 1.95662e-13 0.607029 0.00206827 0.000818582 + 6 374 5.14255e-12 2.15736e-23 4.64474e-12 0.046641 0.000432121 528.379 -6.42963e-14 0.637333 0.00151743 0.000652145 + 7 437 5.03849e-12 2.13484e-23 4.62043e-12 0.0438173 0.000379317 598.673 2.54207e-14 0.636986 0.00130112 0.000614447 + 8 499 4.96962e-12 2.1429e-23 4.62914e-12 0.0416574 0.000329007 662.364 9.27708e-14 0.63 0.0011746 0.000557264 + 9 562 4.91513e-12 2.14709e-23 4.63367e-12 0.0397316 0.000285324 728.13 1.33544e-13 0.623446 0.0010728 0.000502991 + 10 624 4.82995e-12 2.13825e-23 4.62412e-12 0.0382954 0.000272664 783.766 2.19101e-13 0.616 0.000997403 0.000466792 + 11 687 4.79197e-12 2.13975e-23 4.62574e-12 0.0368022 0.000251788 848.661 2.48547e-13 0.606105 0.000944593 0.000407838 + 12 749 4.77183e-12 2.15116e-23 4.63807e-12 0.0354912 0.000227501 912.513 2.6728e-13 0.601333 0.000883962 0.000373986 + 13 812 4.76087e-12 2.14479e-23 4.63119e-12 0.0341162 0.000212259 987.548 2.70437e-13 0.597786 0.000827601 0.000334885 + 14 874 4.81359e-12 2.13296e-23 4.6184e-12 0.0324353 0.0001976 1092.56 2.14521e-13 0.603429 0.000751082 0.000299767 + 15 937 4.82018e-12 2.14558e-23 4.63204e-12 0.0313767 0.000181379 1167.52 2.18545e-13 0.601279 0.000706952 0.000276498 + 16 999 4.81721e-12 2.15334e-23 4.64041e-12 0.0304622 0.000166754 1238.68 2.22459e-13 0.601 0.000663894 0.000263125 + + +************************************************************************************************************************** +\endverbatim + +Reference of this Convergence tests: \n +MCNP(TM) -A General Monte Carlo N-Particle Transport Code \n +Version 4B \n +Judith F. Briesmeister, Editor \n +LA-12625-M, Issued: March 1997, UC 705 and UC 700 \n +CHAPTER 2. GEOMETRY, DATA, PHYSICS, AND MATHEMATICS \n + VI. ESTIMATION OF THE MONTE CARLO PRECISION \n + +*/ + diff --git a/examples/extended/analysis/B1Con/README b/examples/extended/analysis/B1Con/README new file mode 100644 index 0000000000..2652a80e9c --- /dev/null +++ b/examples/extended/analysis/B1Con/README @@ -0,0 +1,102 @@ + +Example of Convergence Tester + + Koi, Tatsumi + SLAC National Accelerator Laboratory / PPA + tkoi@slac.stanford.eedu + +This example shows how to use convergece tester in Geant4. +The aim of Convergence Tester +After a Monte Carlo simulation, we get an answer. However how to estimate quality of the answer. +The answer is usually given in a form of average value. +But sometimes the value is strongly affected by single or a few events in the full calculation. +In such case, we must concern about quality of the value. +What we must remember is + Large number of history does not valid result of simulation. + Small Relative Error does not valid result of simulation +Convergence tester provides statistical information +to assist establishing valid confidence intervals for Monte Carlo results for users. + +Geometry and Physics are same to exampleB1. Please see README.B1 +Note that in this example, the classes with the code added for +the purpose of demonstration of the Convergence Tester start with a prefix +B1Con instead of B1 and also the executable and the test macro names are changed +in exampleB1Con and exampleB1Con.in. + +Known problem: +Computing time of T cannot be gotten properly in current MT migration of example of B1Con. Therefore +FOM (=1/(R^2T) where R is relative error and T is computing time) relates numbers are unusable. + +*********************************************************************************************************************** +Output example + +// Part I.A +// Basic statistics values + +G4ConvergenceTester Output Result of DOSE_TALLY + EFFICIENCY = 0.601 + MEAN = 4.81721e-12 + VAR = 2.15334e-23 + SD = 4.64041e-12 + R = 0.0304622 + SHIFT = 2.22459e-13 + VOV = 0.000166754 + FOM = 1238.68 + +// Part I.B +// If the largeset scored events happen at next to the last event, +// then how much the event effects the statistics values of the calculation + +THE LARGEST SCORE = 1.07301e-11 and it happend at 487th event + Affected Mean = 4.82311e-12 and its ratio to orignal is 1.00123 + Affected VAR = 2.15468e-23 and its ratio to orignal is 1.00062 + Affected R = 0.0304192 and its ratio to orignal is 0.998587 + Affected SHIFT = 2.1804e-13 and its ratio to orignal is 0.980133 + Affected FOM = 1238.68 and its ratio to orignal is 1 + +// Part I.C +// Convergence tests results + +MEAN distribution is RANDOM +r follows 1/std::sqrt(N) +r is monotonically decrease +r is less than 0.1. r = 0.0304622 +VOV follows 1/std::sqrt(N) +VOV is monotonically decrease +FOM distribution is not RANDOM +SLOPE is not large enough +This result passes 6 / 8 Convergence Test. + + +// Part II +// Profile of statistics values in the history + +G4ConvergenceTester Output History of DOSE_TALLY +i/16 till_ith mean var sd r vov fom shift e r2eff r2int + 1 62 4.94618e-12 2.04631e-23 4.52362e-12 0.115225 0.00313634 86.5745 -1.73435e-14 0.619048 0.00976801 0.00329797 + 2 124 4.69364e-12 2.10698e-23 4.59018e-12 0.0874712 0.001597 150.228 3.11143e-13 0.6 0.00533333 0.00225666 + 3 187 4.72161e-12 2.14009e-23 4.62612e-12 0.0714575 0.00101852 225.105 3.1009e-13 0.590426 0.00368986 0.00138916 + 4 249 4.95617e-12 2.13982e-23 4.62582e-12 0.0590299 0.000690138 329.865 9.71971e-14 0.62 0.00245161 0.00101898 + 5 312 4.8529e-12 2.13482e-23 4.62041e-12 0.0538155 0.000573301 396.887 1.95662e-13 0.607029 0.00206827 0.000818582 + 6 374 5.14255e-12 2.15736e-23 4.64474e-12 0.046641 0.000432121 528.379 -6.42963e-14 0.637333 0.00151743 0.000652145 + 7 437 5.03849e-12 2.13484e-23 4.62043e-12 0.0438173 0.000379317 598.673 2.54207e-14 0.636986 0.00130112 0.000614447 + 8 499 4.96962e-12 2.1429e-23 4.62914e-12 0.0416574 0.000329007 662.364 9.27708e-14 0.63 0.0011746 0.000557264 + 9 562 4.91513e-12 2.14709e-23 4.63367e-12 0.0397316 0.000285324 728.13 1.33544e-13 0.623446 0.0010728 0.000502991 + 10 624 4.82995e-12 2.13825e-23 4.62412e-12 0.0382954 0.000272664 783.766 2.19101e-13 0.616 0.000997403 0.000466792 + 11 687 4.79197e-12 2.13975e-23 4.62574e-12 0.0368022 0.000251788 848.661 2.48547e-13 0.606105 0.000944593 0.000407838 + 12 749 4.77183e-12 2.15116e-23 4.63807e-12 0.0354912 0.000227501 912.513 2.6728e-13 0.601333 0.000883962 0.000373986 + 13 812 4.76087e-12 2.14479e-23 4.63119e-12 0.0341162 0.000212259 987.548 2.70437e-13 0.597786 0.000827601 0.000334885 + 14 874 4.81359e-12 2.13296e-23 4.6184e-12 0.0324353 0.0001976 1092.56 2.14521e-13 0.603429 0.000751082 0.000299767 + 15 937 4.82018e-12 2.14558e-23 4.63204e-12 0.0313767 0.000181379 1167.52 2.18545e-13 0.601279 0.000706952 0.000276498 + 16 999 4.81721e-12 2.15334e-23 4.64041e-12 0.0304622 0.000166754 1238.68 2.22459e-13 0.601 0.000663894 0.000263125 + +************************************************************************************************************************** + +Reference of this Convergence tests +MCNP(TM) -A General Monte Carlo N-Particle Transport Code +Version 4B +Judith F. Briesmeister, Editor +LA-12625-M, Issued: March 1997, UC 705 and UC 700 +CHAPTER 2. GEOMETRY, DATA, PHYSICS, AND MATHEMATICS + VI. ESTIMATION OF THE MONTE CARLO PRECISION + diff --git a/examples/extended/analysis/B1Con/README.B1 b/examples/extended/analysis/B1Con/README.B1 new file mode 100644 index 0000000000..3f52b42ca1 --- /dev/null +++ b/examples/extended/analysis/B1Con/README.B1 @@ -0,0 +1,167 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example B1 + ----------- + + This example demonstrates a very simple application where an energy + deposit is accounted in user actions and their associated objects + and a dose in a selected volume is calculated. + + + 1- GEOMETRY DEFINITION + + The geometry is constructed in the B1DetectorConstruction class. + The setup consists of a an envelope of box shape containing two + volumes: a spherical cone and a trapezoid. + + In this example we use some common materials materials for medical + applications. The envelope is made of water and the two inner volumes + are made from tissue and bone materials. + The materials are created with the help of the G4NistManager class, + which allows to build a material from the NIST database using their + names. All available materials can be found in the Geant4 User's Guide + for Application Developers, Appendix 10: Geant4 Materials Database. + + 2- PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the QBBC physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in Geant4 Installation Guide, + Chapter 3.3: Note On Geant4 Datasets: + http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides + /InstallationGuide/html/ch03s03.html + The following datasets: G4LEDATA, G4LEVELGAMMADATA, G4NEUTRONXSDATA and + G4SAIDXSDATA are mandatory for this example. + + In addition the build-in interactive command: + /process/(in)activate processName + allows to activate/inactivate the processes one by one. + + 3- ACTION INITALIZATION + + A newly introduced class, B1ActionInitialization, instantiates and registers + to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + B1ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance has is created also in the method + B1ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + + 4- PRIMARY GENERATOR + + The primary generator is defined in the B1PrimaryGeneratorAction class. + The default kinematics is a 6 MeV gamma, randomly distributed in front + of the envelope across 80% of the transverse (X,Y) envelope size. + This default setting can be changed via the Geant4 built-in commands + of the G4ParticleGun class. + + 5- DETECTOR RESPONSE + + This example demonstrates a simple scoring implemented directly + in the user action classes and B1Run object. + Alternative ways of scoring via Geant4 classes can be found in the + other examples. + + The energy deposited is collected step by step for a selected volume + in B1SteppingAction and accumulated event by event in B1EventAction. + + At end of event, the value acummulated in B1EventAction is added in B1Run + and summed over the whole run (see B1EventAction::EndOfevent()). + + Total dose deposited is computed at B1RunAction::EndOfRunAction(), + and printed together with informations about the primary particle. + + In multi-threading mode the energy accumulated in B1Run objects per + workers is merged to the master in B1Run::Merge() and the final + result is printed on the screen. + + An example of creating and computing new units (e.g., dose) is also shown + in the class constructor. + + The following paragraphs are common to all basic examples + + A- VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in exampleB1.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main function when the example is used in interactive running mode. + + By default, vis.mac opens an OpenGL viewer (/vis/open OGL). + The user can change the initial viewer by commenting out this line + and instead uncommenting one of the other /vis/open statements, such as + HepRepFile or DAWNFILE (which produce files that can be viewed with the + HepRApp and DAWN viewers, respectively). Note that one can always + open new viewers at any time from the command line. For example, if + you already have a view in, say, an OpenGL window with a name + "viewer-0", then + /vis/open DAWNFILE + then to get the same view + /vis/viewer/copyView viewer-0 + or to get the same view *plus* scene-modifications + /vis/viewer/set/all viewer-0 + then to see the result + /vis/viewer/flush + + The DAWNFILE, HepRepFile drivers are always available + (since they require no external libraries), but the OGL driver requires + that the Geant4 libraries have been built with the OpenGL option. + + From Release 9.6 the vis.mac macro in example B1 has additional commands + that demonstrate additional functionality of the vis system, such as + displaying text, axes, scales, date, logo and shows how to change + viewpoint and style. Consider copying these to other examples or + your application. To see even more commands use help or + ls or browse the available UI commands in the Application + Developers Guide, Section 7.1. + + For more information on visualization, including information on how to + install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, + for example, + http://geant4.slac.stanford.edu/Presentations/vis/G4[VIS]Tutorial/G4[VIS]Tutorial.html + (where [VIS] can be replaced by DAWN, OpenGL and HepRApp) + + The tracks are automatically drawn at the end of each event, accumulated + for all events and erased at the beginning of the next run. + + B- USER INTERFACES + + The user command interface is set via the G4UIExecutive class + in the main() function in exampleB1.cc + The selection of the user command interface is then done automatically + according to the Geant4 configuration or it can be done explicitly via + the third argument of the G4UIExecutive constructor (see exampleB4a.cc). + + C- HOW TO RUN + + - Execute exampleB1 in the 'interactive mode' with visualization: + % ./exampleB1 + and type in the commands from run1.mac line by line: + Idle> /control/verbose 2 + Idle> /tracking/verbose 1 + Idle> /run/beamOn 10 + Idle> ... + Idle> exit + or + Idle> /control/execute run1.mac + .... + Idle> exit + + - Execute exampleB1 in the 'batch' mode from macro files + (without visualization) + % ./exampleB1 run2.mac + % ./exampleB1 exampleB1.in > exampleB1.out + + diff --git a/examples/extended/analysis/README b/examples/extended/analysis/README new file mode 100644 index 0000000000..8e9c8ec42f --- /dev/null +++ b/examples/extended/analysis/README @@ -0,0 +1,22 @@ + + Geant4 extended examples - analysis + ----------------------------------- + + Examples in this directory demonstrate how to make histograms and ntuples + +AnaEx01 +-------- + + Simple example showing use of g4tools. + +AnaEx02 +-------- + + As AnaEx01, but direct interface to ROOT. + +B1Con +------ + + B1Con shows how to use the statistical tool G4ConvergenceTester. + It does not make histograms. + It has the same geometry as B1. diff --git a/examples/extended/biasing/.README.txt b/examples/extended/biasing/.README.txt new file mode 100644 index 0000000000..f5ec22befc --- /dev/null +++ b/examples/extended/biasing/.README.txt @@ -0,0 +1,129 @@ + +///\file "biasing/.README.txt" +///\brief Examples biasing README page + +/*! \page Examples_biasing Category "biasing" + +\section biasing_s1 B01, B02 and B03 + +B01, B02 and B03 applications demonstrate the usage of different variance +reduction techniques supported in Geant4, or possible from the user +applications. + +\subsection biasing_sub_11 General remark to variance reduction + +The tools provided for importance sampling (or geometrical splitting and +Russian roulette) and for the weight window technique require the user to +have a good understanding of the physics in the problem. This is because +the user has to decide which particle types have to be biased, define the +cells (physical volumes, replicas) and assign importances or weight +windows to that cells. If this is not done properly it can not be +expected that the results describe a real experiment. The examples given +here only demonstrate how to use the tools technically. They don't intend +to produce physical correct results. + +\subsection biasing_sub_12 General remark to scoring + +Scoring is carried out using the built-in Multifunctional detectors. For +parallel geometries this requires a special scoring physics process. +See examples/extended/runAndEvent (especailly RE05) for clarification. + +\subsection biasing_sub_13 Known problems - should not happen + +In the following scenario it can happen that a particle is not +biased and it's weight is therefore not changed even if it crosses +a boundary where biasing should happen. +Importance and weight window sampling create particles on boundaries +between volumes. If the GPIL method of a physical process returns +0 as step length for a particle on a boundary and if the PostStepDoIt of +that process changes the direction of the particle to go back in the +former volume the biasing won't be invoked. +This will produce particles with weights that do not correspondent to the +importance of the current volumes. + +\subsection biasing_sub_14 Further information: + +Short description of importance sampling and scoring: +http://cern.ch/geant4/working_groups/geometry/biasing/Sampling.html + +\subsection biasing_sub_15 Example B01 + +The example uses importance sampling or the weight window technique +according to an input parameter. It uses scoring in both cases. +Importance values or weight windows are defined according to the mass +geometry. In this example the weight window technique is configured such +that it behaves equivalent to importance sampling: The window is actually +not a window but simply the inverse of the importance value and only +one energy region is used that covers all energies in the problem. +The user may change the weight window configuration by changing the +initialization of the weight window algorithm in example,cc. +Different energy bounds for the weight window technique may be specified +in B01DetectorConstruction. + +The executable takes one optional argument: 0 or 1. Without argument or +with argument: 0, the importance sampling is applied with argument: 1, +the weight window technique is applied. + + +\subsection biasing_sub_16 Example B02 + +This example uses a parallel geometry to define G4GeometryCell objects +for scoring and importance sampling. The output should be equivalent to B01. + +A modular approach is applied to the physicslist and the extension for biasing. +The parallel geometry is included in this extension. + +\subsection biasing_sub_17 Example B03 + +This example uses a parallel geometry to define G4GeometryCell objects +for scoring and importance sampling. The output should be statistically +equivalent to B02 (and B01). + +This demonstrates a customised "flat" physics implementation with the addition +of biasing. Complementary approach to the modular physics lists of B01 and B02 + + +\section biasing_s2 Generic biasing examples GB01 - GB06 + +These examples illustrate the usage of a biasing scheme implemented since +version Geant4 10.0. +The scheme is meant to be extensible, not limited to these six examples. + +\link ExampleGB01 Example GB01 \endlink + +This example illustrates how to bias process cross-sections in this scheme. + +\link ExampleGB02 Example GB02 \endlink + +Illustrates a force collision scheme similar to the MCNP one. + +\link ExampleGB03 Example GB03 \endlink + +Illustrates geometry based biasing. + +\link ExampleGB04 Example GB04 \endlink + +Illustrates a bremsstrahlung splitting. + +\link ExampleGB05 Example GB05 \endlink + +Illustrates a "splitting by cross-section" technique: a splitting-based +technique using absorption cross-section to control the neutron population. + +\link ExampleGB06 Example GB06 \endlink + +Illustrates the usage of parallel geometries with generic biasing. + +\link ExampleGB07 Example GB07 \endlink + +Illustrates the usage of leading particle biasing with generic biasing. + +\section biasing_s3 Reverse MonteCarlo Technique example + +\link ExampleReverseMC01 Example ReverseMC01 \endlink + +Example illustrating the use of the Reverse Monte Carlo (RMC) mode in a Geant4 +application. See details in \link ExampleReverseMC01 Example README page +\endlink. + +*/ diff --git a/examples/extended/biasing/GB01/.README.txt b/examples/extended/biasing/GB01/.README.txt new file mode 100644 index 0000000000..9d8df3d7b9 --- /dev/null +++ b/examples/extended/biasing/GB01/.README.txt @@ -0,0 +1,49 @@ + +///\file "biasing/GB01/.README.txt" +///\brief Example GB01 README page + +/*! \page ExampleGB01 Example GB01 + +\section ExampleGB01_s1 Cross-section biasing + +This example illustrates how to bias process cross-sections. + +Generally speaking, the scheme consists of a G4VBiasingOperator that takes +decisions on what sort of biasing is to be applied. The operator makes these +decision on requests of the G4BiasingProcessInterface process. This process +wraps an actual physics process and asks to the operator about what sort of +biasing it should apply. This operator selects G4VBiasingOperation objects that +implement the actual biasing content. + +In the present case, the G4VBiasingOperation objects are +- G4BOptnChangeCrossSection +instances. This class is defined in processes/biasing/generic. + +A first operator is defined to handle the case of one particle: +- GB01BOptrChangeCrossSection . + +The change of cross-section is generally speaking a change of process occurence. +G4BOptnChangeCrossSection objets are then selected in the method: +- G4VBiasingOperation* GB01BOptrChangeCrossSection::ProposeOccurenceBiasingOperation(...) + +To allow this same cross-section change to be applied to several particle +types, an other operator is defined +- GB01BOptrMultiParticleChangeCrossSection +which holds one GB01BOptrChangeCrossSection per particle type, and which +delegates then everything to it. + +The geometry is simple : a single volume to which an instance of +GB01BOptrMultiParticleChangeCrossSection is attached to. + +The wrapping of physics processes by G4BiasingProcessInterface processes +is simply handled by the G4GenericBiasingPhysics physics constructor, as shown +in the main program (see exampleGB01.cc). + + +Then, at whatever level (stepping action, or sensitive detector) the +statistical weight of the track can be obtained as: +\verbatim +w = track->GetWeight() ; +\endverbatim + +*/ diff --git a/examples/extended/biasing/GB01/README b/examples/extended/biasing/GB01/README new file mode 100644 index 0000000000..c7121a2767 --- /dev/null +++ b/examples/extended/biasing/GB01/README @@ -0,0 +1,50 @@ + Example GB01 : cross-section biasing + ------------------------------------ + + This example illustrates how to bias process cross-sections. + + Generally speaking, the scheme consists of a G4VBiasingOperator that takes +decisions on what sort of biasing is to be applied. The operator makes these +decision on requests of the G4BiasingProcessInterface process. This process +wraps an actual physics process and asks to the operator about what sort of +biasing it should apply. This operator selects G4VBiasingOperation objects that +implement the actual biasing content. + + In the present case, the G4VBiasingOperation objects are + + G4BOptnChangeCrossSection + +instances. This class is defined in processes/biasing/generic. + + A first operator is defined to handle the case of one particle: + + GB01BOptrChangeCrossSection . + +The change of cross-section is generally speaking a change of process occurence. +G4BOptnChangeCrossSection objets are then selected in the method: + + G4VBiasingOperation* ProposeOccurenceBiasingOperation(...) + +of the GB01BOptrChangeCrossSection operator. + + + To allow this same cross-section change to be applied to several particle +types, an other operator is defined + + GB01BOptrMultiParticleChangeCrossSection + +which holds one GB01BOptrChangeCrossSection per particle type, and which +delegates then everything to it. + + The geometry is simple : a single volume to which an instance of +GB01BOptrMultiParticleChangeCrossSection is attached to. + + The wrapping of physics processes by G4BiasingProcessInterface processes +is simply handled by the G4GenericBiasingPhysics physics constructor, as shown +in the main program. + + + Then, at whatever level (stepping action, or sensitive detector) the +statistical weight of the track can be obtained as: + + w = track->GetWeight() ; \ No newline at end of file diff --git a/examples/extended/biasing/GB02/.README.txt b/examples/extended/biasing/GB02/.README.txt new file mode 100644 index 0000000000..1f842efd06 --- /dev/null +++ b/examples/extended/biasing/GB02/.README.txt @@ -0,0 +1,52 @@ + +///\file "biasing/GB02/.README.txt" +///\brief Example GB02 README page + +/*! \page ExampleGB02 Example GB02 + +\section ExampleGB02_s1 Force collision biasing + +This example illustrates how to make a force collision biasing in a way +that is essentially the same than the MCNP one. + +Generally speaking, the scheme consists of a G4VBiasingOperator that takes +decisions on what sort of biasing is to be applied. The operator makes these +decision on requests of the G4BiasingProcessInterface process. This process +wraps an actual physics process and asks to the operator about what sort of +biasing it should apply. This operator selects G4VBiasingOperation objects that +implement the actual biasing content. + +In the present case, we make use of the biasing operator +- G4BOptrForceCollision +that implements an "a la MCNP" force collision scheme for one particle type. +This operator is defined in processes/biasing/generic. It is a non-trivial +operator. +It starts by "splitting" the track at the volume entrance. Then this +track is forced to fly through the volume with no interaction. The +G4OptnForceFreeFlight biasing operation is used for that. +The second copy is then forced to interact within the volume, which is +handled by the G4BOptnForceCommonTruncatedExp operation : it is common as it +takes care of several processes by itself, and it applies a truncated +exponential law : ie and exponential law limited to the [0,L] range, L being +the volume width along the track flight. + +To allow several particle types to undergo this force interaction scheme, +an other operator is defined +- GB02BOptrMultiParticleForceCollision +which holds one G4BOptrForceCollision per particle type, and which +delegates then everything to it. + +The geometry is simple : a single volume to which an instance of +GB02BOptrMultiParticleForceCollision is attached to. + +The wrapping of physics processes by G4BiasingProcessInterface processes +is simply handled by the G4GenericBiasingPhysics physics constructor, as shown +in the main program. + +Then, at whatever level (stepping action, or sensitive detector) the +statistical weight of the track can be obtained as: +\verbatim +w = track->GetWeight() ; +\endverbatim + +*/ diff --git a/examples/extended/biasing/GB02/README b/examples/extended/biasing/GB02/README new file mode 100644 index 0000000000..aea0a362af --- /dev/null +++ b/examples/extended/biasing/GB02/README @@ -0,0 +1,49 @@ + Example GB02 : force collision biasing + -------------------------------------- + + This example illustrates how to make a force collision biasing in a way +that is essentially the same than the MCNP one. + + Generally speaking, the scheme consists of a G4VBiasingOperator that takes +decisions on what sort of biasing is to be applied. The operator makes these +decision on requests of the G4BiasingProcessInterface process. This process +wraps an actual physics process and asks to the operator about what sort of +biasing it should apply. This operator selects G4VBiasingOperation objects that +implement the actual biasing content. + + In the present case, we make use of the biasing operator + + G4BOptrForceCollision + +that implements an "a la MCNP" force collision scheme for one particle type. +This operator is defined in processes/biasing/generic. It is a non-trivial +operator. + It starts by "splitting" the track at the volume entrance. Then this +track is forced to fly through the volume with no interaction. The +G4OptnForceFreeFlight biasing operation is used for that. + The second copy is then forced to interact within the volume, which is +handled by the G4BOptnForceCommonTruncatedExp operation : it is common as it +takes care of several processes by itself, and it applies a truncated +exponential law : ie and exponential law limited to the [0,L] range, L being +the volume width along the track flight. + + To allow several particle types to undergo this force interaction scheme, +an other operator is defined + + GB02BOptrMultiParticleForceCollision + +which holds one G4BOptrForceCollision per particle type, and which +delegates then everything to it. + + The geometry is simple : a single volume to which an instance of +GB02BOptrMultiParticleForceCollision is attached to. + + The wrapping of physics processes by G4BiasingProcessInterface processes +is simply handled by the G4GenericBiasingPhysics physics constructor, as shown +in the main program. + + + Then, at whatever level (stepping action, or sensitive detector) the +statistical weight of the track can be obtained as: + + w = track->GetWeight() ; \ No newline at end of file diff --git a/examples/extended/biasing/GB03/.README.txt b/examples/extended/biasing/GB03/.README.txt new file mode 100644 index 0000000000..1d8b168761 --- /dev/null +++ b/examples/extended/biasing/GB03/.README.txt @@ -0,0 +1,54 @@ + +///\file "biasing/GB03/.README.txt" +///\brief Example GB03 README page + +/*! \page ExampleGB03 Example GB03 + +\section ExampleGB03_s1 Geometry based biasing + +This example illustrates a use of generic biasing classes to implement a +technique near to "geometry importance biasing". + +The geometry is the same than in EM tests, with the sampling calorimeter +made of a series of layers of absorber and gap. + +The biasing applies to neutrons only. + +Instead of explicitely assigning "importance" values to the layers, we +split neutrons moving forward and kill the ones moving backward, when they +reach the exit of an absorber volume. + +The splitting factor can be controlled by command line, eg: +\verbatim +/GB03/biasing/setSplittingFactor 2 +\endverbatim + +which also determines the killing probability : 1/(splitting factor). + +It can be seen than when defining 10 layers (see exampleGB03.in), a +splitting factor 2 works fine : we don't suffer from under- or over-splitting. +If going to 20 layers, then a splitting with a factor 2 is too large, +and the biasing suffers from over-splitting. (And we can not go lower than +"2", which would mean "1" and hence, no biasing...) + +To alleviate the over-splitting, we introduce a probability to apply the +splitting (and killing) (this is one solution, others can be considered), that +can be changed as: + +\verbatim +/GB03/biasing/setApplyProbability 0.5 +\endverbatim + +With above value, we can see that we recover a satisfactory biasing scheme, +with neutrons penetrating the entire setup, without over-splitting. + + +The classes involved are: + +- GB03BOptnSplitOrKillOnBoundary : which is the biasing operation making + the splitting and killing; +- GB03BOptrGeometryBasedBiasing : which is the biasing operator, making + decision to use above operation, and configuring it, passing it the + splitting factor and probability to apply the biasing. + +*/ diff --git a/examples/extended/biasing/GB03/README b/examples/extended/biasing/GB03/README new file mode 100644 index 0000000000..13889b70da --- /dev/null +++ b/examples/extended/biasing/GB03/README @@ -0,0 +1,45 @@ + Example GB03 : geometry based biasing + ------------------------------------- + + This example illustrates a use of generic biasing classes to implement a +technique near to "geometry importance biasing". + + The geometry is the same than in EM tests, with the sampling calorimeter +made of a series of layers of absorber and gap. + + The biasing applies to neutrons only. + + Instead of explicitely assigning "importance" values to the layers, we +split neutrons moving forward and kill the ones moving backward, when they +reach the exit of an absorber volume. + + The splitting factor can be controlled by command line, eg: + + /GB03/biasing/setSplittingFactor 2 + +which also determines the killing probability : 1/(splitting factor). + + It can be seen than when defining 10 layers (see exampleGB03.in), a +splitting factor 2 works fine : we don't suffer from under- or over-splitting. + If going to 20 layers, then a splitting with a factor 2 is too large, +and the biasing suffers from over-splitting. (And we can not go lower than +"2", which would mean "1" and hence, no biasing...) + + To alleviate the over-splitting, we introduce a probability to apply the +splitting (and killing) (this is one solution, others can be considered), that +can be changed as: + + /GB03/biasing/setApplyProbability 0.5 + + With above value, we can see that we recover a satisfactory biasing scheme, +with neutrons penetrating the entire setup, without over-splitting. + + + The classes involved are: + + - GB03BOptnSplitOrKillOnBoundary : which is the biasing operation making + the splitting and killing; + - GB03BOptrGeometryBasedBiasing : which is the biasing operator, making + decision to use above operation, and configuring it, passing it the + splitting factor and probability to apply the biasing. + \ No newline at end of file diff --git a/examples/extended/biasing/GB04/.README.txt b/examples/extended/biasing/GB04/.README.txt new file mode 100644 index 0000000000..7c2493f0ae --- /dev/null +++ b/examples/extended/biasing/GB04/.README.txt @@ -0,0 +1,41 @@ + +///\file "biasing/GB04/.README.txt" +///\brief Example GB04 README page + +/*! \page ExampleGB04 Example GB04 + +\section ExampleGB04_s1 bremsstrahlung splitting + +This example illustrates the use of the generic biasing classes to create +a bremsstrahlung splitting technique. +Note that the EM package also offers a bremsstrahlung splitting, that is +built-in to the package. + + +- GB04BOptnBremSplitting +The bremsstrahlung splitting is implemented in the GB04BOptnBremSplitting +class (BOptn = Biasing Operation), which acts on the final state creation +of the bremsstrahlung process. + + +- GB04BOptrBremSplitting +Decisions when to apply the GB04BOptnBremSplitting biasing operation are +taken by the GB04BOptrBremSplitting (BOptr = Biasing Operator) operator. This +one also configures the biasing operation, setting it the splitting factor +and its behavior regarding electrons to be biased : only the primary one, or +all, and only the first bremsstrahlung operation, or all. These are +controled by this specific example commands: +\verbatim +/GB04/biasing/setSplittingFactor [N splitting] +/GB04/biasing/biasPrimaryOnly [true/false] +/GB04/biasing/biasOnlyOnce [true/false] +\endverbatim + +The geometry is minimal : a single volume to which an instance of +GB04BOptrBremSplitting is attached to. + +The wrapping of physics processes by G4BiasingProcessInterface processes +is simply handled by the G4GenericBiasingPhysics physics constructor, as shown +in the main program. + +*/ diff --git a/examples/extended/biasing/GB04/README b/examples/extended/biasing/GB04/README new file mode 100644 index 0000000000..5ef6ec9124 --- /dev/null +++ b/examples/extended/biasing/GB04/README @@ -0,0 +1,36 @@ + Example GB04 : bremsstrahlung splitting + --------------------------------------- + + This example illustrates the use of the generic biasing classes to create +a bremsstrahlung splitting technique. + Note that the EM package also offers a bremsstrahlung splitting, that is +built-in to the package. + + + GB04BOptnBremSplitting + + The bremsstrahlung splitting is implemented in the GB04BOptnBremSplitting +class (BOptn = Biasing Operation), which acts on the final state creation +of the bremsstrahlung process. + + + GB04BOptrBremSplitting + + Decisions when to apply the GB04BOptnBremSplitting biasing operation are +taken by the GB04BOptrBremSplitting (BOptr = Biasing Operator) operator. This +one also configures the biasing operation, setting it the splitting factor +and its behavior regarding electrons to be biased : only the primary one, or +all, and only the first bremsstrahlung operation, or all. These are +controled by this specific example commands: + + /GB04/biasing/setSplittingFactor [N splitting] + /GB04/biasing/biasPrimaryOnly [true/false] + /GB04/biasing/biasOnlyOnce [true/false] + + + The geometry is minimal : a single volume to which an instance of +GB04BOptrBremSplitting is attached to. + + The wrapping of physics processes by G4BiasingProcessInterface processes +is simply handled by the G4GenericBiasingPhysics physics constructor, as shown +in the main program. diff --git a/examples/extended/biasing/GB05/.README.txt b/examples/extended/biasing/GB05/.README.txt new file mode 100644 index 0000000000..2b658444da --- /dev/null +++ b/examples/extended/biasing/GB05/.README.txt @@ -0,0 +1,53 @@ + +///\file "biasing/GB05/.README.txt" +///\brief Example GB05 README page + +/*! \page ExampleGB05 Example GB05 + +\section ExampleGB05_s1 Splitting by cross-section + +This example illustrates a technique that uses physics cross-sections to +determine the splitting [killing] rate in a shielding problem. This technique +is supposed to be an invention, and this example here is not optimized. The +technique is applied here to neutrons. + +In the classical treatment of the shielding problem, the shield is divided +in slices at the boundaries of which particles are splitted[killed] if moving +forward[backward]. In the present technique, we collect the cross-section of +"absorbing/destroying" processes : decay, capture, inelastic. We then use the +generic biasing facilities to create an equivalent of a spitting process, that +has a "cross-section" which is the sum of the previous ones. This process is +competing with other processes, as a regular one. The occurence of this process +is hence the same than the "absorbing/destroying" processes together. When this +process wins the competition, it splits the track, with a splitting factor 2 (ie +the original track is kept and a copy of it is created). This splitting is hence +occuring at the same rate than the absorption, resulting in an expected +maintained (unweighted) flux. + + +The geometry is made of a single block of concrete it. Behind it (in the +z +direction) a thin empty volume is placed to print out the particles which are +exiting the shield. + +As in any generic biasing use, a biasing operator (taking decisions on what +biasing to apply) and a biasing operation (applying these decisions) are defined. +These are: + GB05BOptrSplitAndKillByCrossSection for the operator, + GB05BOptnSplitAndKillByCrossSection for the operation. + +The operator is created in the detector construction, and receives here the +names of the absorbing/destroying processes to counterbalance for. +At tracking time, it collects the up to date cross-section of these processes +in the ProposeNonPhysicsBiasingOperation(...) method, and passes the sum to the +GB05BOptnSplitAndKillByCrossSection operation. + +The operation uses the cross-section (interaction length) to sample the +distance to "interaction" with a classical exponential. If it wins the race +(ie it proposes the smallest of the interaction distances among all processes) +its GenerateBiasingFinalState(...) method is called, and it applies splitting +or killing (Russian roulette) if the track moves forward or backward. + + +*/ + + diff --git a/examples/extended/biasing/GB05/README b/examples/extended/biasing/GB05/README new file mode 100644 index 0000000000..09051cbc9d --- /dev/null +++ b/examples/extended/biasing/GB05/README @@ -0,0 +1,47 @@ + Example GB05: splitting by cross-section + ---------------------------------------- + + This example illustrates a technique that uses physics cross-sections to +determine the splitting [killing] rate in a shielding problem. This technique +is supposed to be an invention, and this example here is not optimized. The +technique is applied here to neutrons. + + In the classical treatment of the shielding problem, the shield is divided +in slices at the boundaries of which particles are splitted[killed] if moving +forward[backward]. In the present technique, we collect the cross-section of +"absorbing/destroying" processes : decay, capture, inelastic. We then use the +generic biasing facilities to create an equivalent of a spitting process, that +has a "cross-section" which is the sum of the previous ones. This process is +competing with other processes, as a regular one. The occurence of this process +is hence the same than the "absorbing/destroying" processes together. When this +process wins the competition, it splits the track, with a splitting factor 2 (ie +the original track is kept and a copy of it is created). This splitting is hence +occuring at the same rate than the absorption, resulting in an expected +maintained (unweighted) flux. + + + The geometry is made of a single block of concrete it. Behind it (in the +z +direction) a thin empty volume is placed to print out the particles which are +exiting the shield. + + As in any generic biasing use, a biasing operator (taking decisions on what +biasing to apply) and a biasing operation (applying these decisions) are defined. +These are: + GB05BOptrSplitAndKillByCrossSection for the operator, + GB05BOptnSplitAndKillByCrossSection for the operation. + + The operator is created in the detector construction, and receives here the +names of the absorbing/destroying processes to counterbalance for. + At tracking time, it collects the up to date cross-section of these processes +in the ProposeNonPhysicsBiasingOperation(...) method, and passes the sum to the +GB05BOptnSplitAndKillByCrossSection operation. + + The operation uses the cross-section (interaction length) to sample the +distance to "interaction" with a classical exponential. If it wins the race +(ie it proposes the smallest of the interaction distances among all processes) +its GenerateBiasingFinalState(...) method is called, and it applies splitting +or killing (Russian roulette) if the track moves forward or backward. + + + + diff --git a/examples/extended/biasing/GB06/.README.txt b/examples/extended/biasing/GB06/.README.txt new file mode 100644 index 0000000000..c8595203eb --- /dev/null +++ b/examples/extended/biasing/GB06/.README.txt @@ -0,0 +1,108 @@ + +///\file "biasing/GB06/.README.txt" +///\brief Example GB06 README page + +/*! \page ExampleGB06 Example GB06 + +\section ExampleGB06_s1 Parallel geometries with generic biasing + + +This example demonstrates the use of parallel geometries in generic biasing, +on a classical shield problem, using geometry-based importance biasing. + +\subsection ExampleGB06_sub_s1 Geometry and activation of navigation in parallel world: + + +The geometry is made of two parts: +- the mass (standard) geometry, which is made of a single block of + concrete ; this is implemented in GB06DetectorConstuction ; +- a parallel geometry, in which a series of slices is defined, these + slices being created using a replica volume ; this is implemeted in + GB06ParallelGeometryForSlices, which derives from the base class + G4VUserParallelWorld . + +The navigation in the parallel geometry is activated for neutrons. This is +done in the main program exampleGB06.cc. The activation is made using the +facilities of the G4GenericBiasingPhysics class, as: + +\verbatim +biasingPhysics->AddParallelGeometry("neutron", + "parallelWorldForSlices"); +\endverbatim + +where the first name is for the particle type to be aware of the parallel word, +the second argument is the name of the parallel world. + +When checking the process list of neutrons (/particle/select neutron and +then /particle/process dump ) a new process, `biasingLimiter', is visible. This +process handles the step limitation in the parallel geometry. This process can +handle several parallel geometries, these being passed to the process as +biasingPhysics->AddParallelGeometry("neutron", "parallelWorld1") , +biasingPhysics->AddParallelGeometry("neutron", "parallelWorld2") , etc. + +The geometry-based importance technique utilizes only splitting and killing, +hence techniques which are "non-physics biasing" techniques, in the sense they +don't modify the behavior of physics processes. For this reason, only a process +making the interface between the tracking and the biaising is inserted in the +physics list, the physics processes themselves being untouched, this is made as: + +\verbatim +biasingPhysics->NonPhysicsBias("neutron"); +\endverbatim + +Finally, the volume (ie the slice) importances are defined in a simple +"importance map" that is created in the GB06ParallelGeometryForSlices class, this +map associating a replica number to a volume importance. The map is hold by the +biasing operator. + + +\subsection ExampleGB06_sub_s2 Biasing classes: + +As usual, with the generic biasing scheme, a biasing operator and a biasing +operation are defined, these are, respectively the +- GB06BOptrSplitAndKillByImportance and +- GB06BOptnSplitAndKillByImportance + +classes. The operator here only handles one particle type. In the StartRun() +method, it configures the biasing operation GB06BOptnSplitAndKillByImportance +passing it the information related to the parallel geometry, and passing it the +importance map. + +The biasing operation GB06BOptnSplitAndKillByImportance applies a classical +importance-based geometry technique, with spliting / killing at the slice +bondaries. Splitting is made if the track goes from a smaller importance to a +volume of larger importance, and killing (Russian roulette) is applied in the +other case. + +The particularity of this biasing operation is its handling of the parallel +geometry information. It has to get by itself geometry information that, in the +case of information of the mass geometry, are provided in the G4StepPoint objects +(pre step point, post step point) of the G4Step. Here, in the +DistanceToApplyOperation(...), which is called at the beginning of the step, it +gets a "snapshot" of the geometry state keeping a G4TouchableHistoryHandle. Then +in the GenerateBiasingFinalState, which is called at the end of the step, it gets +the new geometry state, with an other G4TouchableHistoryHandle. For a step that +ends on the boundary, this last touchable history will logically point to the +next volume. In this case, the biasing is applied, and the importances are +obtained from the replica numbers taken from the two touchable histories, and +then from the importance map. + +\subsection ExampleGB06_sub_s3 Output + +A simple sensitive detector is defined (GB06SD) and is attached to a thin +volume ("meas.logical") placed after the concrete shield. This sensitive +detector simply prints the information (particle type, kinetic energy, etc, +and weight) of particles leaving the shield. + + +\subsection ExampleGB06_sub_s4 Known problems + +In exampleGB06.in the neutron killer process, nKiller, is de-activated +(process that kills neutrons after some time), for two reasons. First, killing +neutrons in a shield problem is not desirable because neutrons may fly for long +time before leaving the shield, and hence must be accounted for. Second, if +nKiller is left active, an exception message about a spurious displacement by +1e-7mm will appear sometimes : this happens when a neutron is killed on a volume +boundary, and the navigation "sees" a (tiny) displacement, that should not exist. + +*/ diff --git a/examples/extended/biasing/GB06/README b/examples/extended/biasing/GB06/README new file mode 100644 index 0000000000..de7cccd701 --- /dev/null +++ b/examples/extended/biasing/GB06/README @@ -0,0 +1,100 @@ + Example GB06: parallel geometries with generic biasing + ------------------------------------------------------ + + + This example demonstrates the use of parallel geometries in generic biasing, +on a classical shield problem, using geometry-based importance biasing. + +1) Geometry and activation of navigation in parallel world: + -------------------------------------------------------- + + The geometry is made of two parts: + - the mass (standard) geometry, which is made of a single block of + concrete ; this is implemented in GB06DetectorConstuction ; + - a parallel geometry, in which a series of slices is defined, these + slices being created using a replica volume ; this is implemeted in + GB06ParallelGeometryForSlices, which derives from the base class + G4VUserParallelWorld . + + The navigation in the parallel geometry is activated for neutrons. This is +done in the main program exampleGB06.cc. The activation is made using the +facilities of the G4GenericBiasingPhysics class, as: + + biasingPhysics->AddParallelGeometry("neutron", + "parallelWorldForSlices"); + +where the first name is for the particle type to be aware of the parallel word, +the second argument is the name of the parallel world. + + When checking the process list of neutrons (/particle/select neutron and +then /particle/process dump ) a new process, `biasingLimiter', is visible. This +process handles the step limitation in the parallel geometry. This process can +handle several parallel geometries, these being passed to the process as +biasingPhysics->AddParallelGeometry("neutron", "parallelWorld1") , +biasingPhysics->AddParallelGeometry("neutron", "parallelWorld2") , etc. + + The geometry-based importance technique utilizes only splitting and killing, +hence techniques which are "non-physics biasing" techniques, in the sense they +don't modify the behavior of physics processes. For this reason, only a process +making the interface between the tracking and the biaising is inserted in the +physics list, the physics processes themselves being untouched, this is made as: + + biasingPhysics->NonPhysicsBias("neutron"); + + Finally, the volume (ie the slice) importances are defined in a simple +"importance map" that is created in the GB06ParallelGeometryForSlices class, this +map associating a replica number to a volume importance. The map is hold by the +biasing operator. + + +2) Biasing classes: + ---------------- + + As usual, with the generic biasing scheme, a biasing operator and a biasing +operation are defined, these are, respectively the + + GB06BOptrSplitAndKillByImportance and + GB06BOptnSplitAndKillByImportance + +classes. The operator here only handles one particle type. In the StartRun() +method, it configures the biasing operation GB06BOptnSplitAndKillByImportance +passing it the information related to the parallel geometry, and passing it the +importance map. + + The biasing operation GB06BOptnSplitAndKillByImportance applies a classical +importance-based geometry technique, with spliting / killing at the slice +bondaries. Splitting is made if the track goes from a smaller importance to a +volume of larger importance, and killing (Russian roulette) is applied in the +other case. + The particularity of this biasing operation is its handling of the parallel +geometry information. It has to get by itself geometry information that, in the +case of information of the mass geometry, are provided in the G4StepPoint objects +(pre step point, post step point) of the G4Step. Here, in the +DistanceToApplyOperation(...), which is called at the beginning of the step, it +gets a "snapshot" of the geometry state keeping a G4TouchableHistoryHandle. Then +in the GenerateBiasingFinalState, which is called at the end of the step, it gets +the new geometry state, with an other G4TouchableHistoryHandle. For a step that +ends on the boundary, this last touchable history will logically point to the +next volume. In this case, the biasing is applied, and the importances are +obtained from the replica numbers taken from the two touchable histories, and +then from the importance map. + +3) Output: + ------- + + A simple sensitive detector is defined (GB06SD) and is attached to a thin +volume ("meas.logical") placed after the concrete shield. This sensitive +detector simply prints the information (particle type, kinetic energy, etc, +and weight) leaving the shield. + + +4) Known problems: + --------------- + + In exampleGB06.in the neutron killer process, nKiller, is de-activated +(process that kills neutrons after some time), for two reasons. First, killing +neutrons in a shield problem is not desirable because neutrons may fly for some +time before leaving the shield, and hence must be accounted for. Second, if +nKiller is left active, an exception message about a spurious displacement by +1e-7mm will appear sometimes : this happens when a neutron is killed on a volume +boundary, and the navigation "sees" a (tiny) displacement, that should not exist. diff --git a/examples/extended/biasing/GB07/.README.txt b/examples/extended/biasing/GB07/.README.txt new file mode 100644 index 0000000000..d7acfe1550 --- /dev/null +++ b/examples/extended/biasing/GB07/.README.txt @@ -0,0 +1,88 @@ + +///\file "biasing/GB07/.README.txt" +///\brief Example GB07 README page + +/*! \page ExampleGB07 Example GB07 + +\section ExampleGB07_s1 Leading particle biasing + +This example illustrates how to use the leading particle biasing option. + +It uses the G4BOptnLeadingParticle biasing operation located in: + + source/processes/biasing/generic , + +and defines the following biasing operation to handle it: + + GB07OptrLeadingParticle. + +As a reminder, the generic biasing scheme consists of a G4VBiasingOperator +that takes decisions on what sort of biasing technique to be applied. The +techniques are called biasing operations, represented by the G4VBiasingOperation +class. The operator is attached to a logical volume in which the biasing must +happen. Decisions are made on requests of the G4BiasingProcessInterface process +that messages the operator when the track is travelling in the volume. To equip +the phyics list with this process, the G4GenericBiasingPhysics physics +constructor is used. In this example, several processes -to which the technique +is applied- are wrapped by this process to control their final state production +for applying the biasing technique. + +\section ExampleGB07_s2 Geometry + +The geometry is simply : +- a volume in which the biasing occurs and to which an instance of + GB07OptrLeadingParticle is attached, +- a thin volume placed after the above volume, that is used to tally the + particles exiting biasing volume. +- a sensitive detector is attached to the thin volume to simply print the + particles entering here. In particular the statistical weight is printed, + this one is obtained by: + +\verbatim +w = track->GetWeight() ; +\endverbatim + +\section ExampleGB07_s3 Biasing configuration + +The particle types and processes under the leading particle biasing are +visible in the main program exampleGB07.cc, these are: + + pi+ and pi-, inelastic process, + proton and anti-proton, inelastic process, + neutron, inelastic and capture processes, + anti-neutron, inelastic process, + gamma, conversion and photonNuclear processes, + electron, electronNuclear process, + positron, annihilation and positronNuceal processes, + pi0, decay process. + +For the inelastic and lepto/gamma-nuclear processes, leading particle is applied in a rather +classical way: + - keep the leading particle, + - keep one particle of each species (particles and anti-particles are considered a one +species, and all hadrons with Z>=2 are counted as one species too). + +For e+, e-, gamma and pi0 processes (which means in practice main conversion, annihililation +and pi0 decay processes), the leading particle is kept, and the companion track(s) is(are) randomly +kept/killed under a Russian roulette, with a 2/3 killing probabilty. See +GB07BOptrLeadingParticle::StartTracking( ... ) for this killing probability setting. + +\section ExampleGB07_s4 Running the program: + +The program can be run in batch or interactive mode and has the following options: + +- batch mode: +\verbatim +./exampleGB07 [-m macro ] [-b biasing {'on' = default,'off'}] +\endverbatim +or +\verbatim +./exampleGB07 [macro.mac] +\endverbatim + +- interactive mode: +\verbatim +./exampleGB07 [-b biasing {'on' = default,'off'}] +\endverbatim + +*/ diff --git a/examples/extended/biasing/GB07/README b/examples/extended/biasing/GB07/README new file mode 100644 index 0000000000..ad7b66377d --- /dev/null +++ b/examples/extended/biasing/GB07/README @@ -0,0 +1,84 @@ + Example GB07 : leading particle biasing + ---------------------------------------- + + This example illustrates how to use the leading particle biasing option. + + It uses the G4BOptnLeadingParticle biasing operation located in: + + source/processes/biasing/generic , + +and defines the following biasing operation to handle it: + + GB07OptrLeadingParticle. + + As a reminder, the generic biasing scheme consists of a G4VBiasingOperator +that takes decisions on what sort of biasing technique to be applied. The +techniques are called biasing operations, represented by the G4VBiasingOperation +class. The operator is attached to a logical volume in which the biasing must +happen. Decisions are made on requests of the G4BiasingProcessInterface process +that messages the operator when the track is travelling in the volume. To equip +the phyics list with this process, the G4GenericBiasingPhysics physics +constructor is used. In this example, several processes -to which the technique +is applied- are wrapped by this process to control their final state production +for applying the biasing technique. + + +Geometry: +--------- + + The geometry is simply : + - a volume in which the biasing occurs and to which an instance of + GB07OptrLeadingParticle is attached, + - a thin volume placed after the above volume, that is used to tally the + particles exiting biasing volume. + - a sensitive detector is attached to the thin volume to simply print the + particles entering here. In particular the statistical weight is printed, + this one is obtained by: + + w = track->GetWeight() ; + + +Biasing configuration: +---------------------- + + The particle types and processes under the leading particle biasing are +visible in the main program exampleGB07.cc, these are: + + pi+ and pi-, inelastic process, + proton and anti-proton, inelastic process, + neutron, inelastic and capture processes, + anti-neutron, inelastic process, + + gamma, conversion and photonNuclear processes, + electron, electronNuclear process, + positron, annihilation and positronNuceal processes, + + pi0, decay process. + + For the inelastic and lepto/gamma-nuclear processes, leading particle is applied in a rather +classical way: + - keep the leading particle, + - keep one particle of each species (particles and anti-particles are considered a one +species, and all hadrons with Z>=2 are counted as one species too). + For e+, e-, gamma and pi0 processes (which means in practice main conversion, annihililation +and pi0 decay processes), the leading particle is kept, and the companion track(s) is(are) randomly +kept/killed under a Russian roulette, with a 2/3 killing probabilty. See +GB07BOptrLeadingParticle::StartTracking( ... ) for this killing probability setting. + + +Running the program: +-------------------- + + The program can be run in batch or interactive mode and has the following options: + +in batch: + ./exampleGB07 [-m macro ] [-b biasing {'on' = default,'off'}] + or + ./exampleGB07 [macro.mac] +interactive: + ./exampleGB07 [-b biasing {'on' = default,'off'}] + + + + + \ No newline at end of file diff --git a/examples/extended/biasing/README b/examples/extended/biasing/README new file mode 100644 index 0000000000..065c26504e --- /dev/null +++ b/examples/extended/biasing/README @@ -0,0 +1,149 @@ + + Examples for event biasing: B01, B02 and B03 + -------------------------------------------- + +B01, B02 and B03 applications demonstrate the usage of different variance +reduction techniques supported in Geant4, or possible from the user +applications. + +General remark to variance reduction +------------------------------------ +The tools provided for importance sampling (or geometrical splitting and +Russian roulette) and for the weight window technique require the user to +have a good understanding of the physics in the problem. This is because +the user has to decide which particle types have to be biased, define the +cells (physical volumes, replicas) and assign importances or weight +windows to that cells. If this is not done properly it can not be +expected that the results describe a real experiment. The examples given +here only demonstrate how to use the tools technically. They don't intend +to produce physical correct results. + +General remark to scoring +------------------------- +Scoring is carried out using the built-in Multifunctional detectors. For +parallel geometries this requires a special scoring physics process. +See examples/extended/runAndEvent (especailly RE05) for clarification. + +Known problems - should not happen +---------------------------------- +In the following scenario it can happen that a particle is not +biased and it's weight is therefore not changed even if it crosses +a boundary where biasing should happen. +Importance and weight window sampling create particles on boundaries +between volumes. If the GPIL method of a physical process returns +0 as step length for a particle on a boundary and if the PostStepDoIt of +that process changes the direction of the particle to go back in the +former volume the biasing won't be invoked. +This will produce particles with weights that do not correspondent to the +importance of the current volumes. + +Further information: +-------------------- +Short description of importance sampling and scoring: +http://cern.ch/geant4/working_groups/geometry/biasing/Sampling.html + +Example B01 +=========== + +The example uses importance sampling or the weight window technique +according to an input parameter. It uses scoring in both cases. +Importance values or weight windows are defined according to the mass +geometry. In this example the weight window technique is configured such +that it behaves equivalent to importance sampling: The window is actually +not a window but simply the inverse of the importance value and only +one energy region is used that covers all energies in the problem. +The user may change the weight window configuration by changing the +initialization of the weight window algorithm in example,cc. +Different energy bounds for the weight window technique may be specified +in B01DetectorConstruction. + +The executable takes one optional argument: 0 or 1. Without argument or +with argument: 0, the importance sampling is applied with argument: 1, +the weight window technique is applied. + +A modular approach is applied to the physicslist and the extension for biasing. + +Example B02 +=========== + +This example uses a parallel geometry to define G4GeometryCell objects +for scoring and importance sampling. The output should be equivalent to B01. + +A modular approach is applied to the physicslist and the extension for biasing. +The parallel geometry is included in this extension. + +Example B03 +=========== + +This example uses a parallel geometry to define G4GeometryCell objects +for scoring and importance sampling. The output should be statistically +equivalent to B02 (and B01). + +This demonstrates a customised "flat" physics implementation with the addition +of biasing. Complementary approach to the modular physics lists of B01 and B02 + + + ___________________________________________________________________________ + + + Generic biasing examples GB01 - GB06 + ------------------------------------ + +These examples illustrate the usage of a biasing scheme implemented since +version Geant4 10.0. +The scheme is meant to be extensible, not limited to these six examples. + +Example GB01: +============= + +This example illustrates how to bias process cross-sections in this scheme. + + +Example GB02: +============= + +Illustrates a force collision scheme similar to the MCNP one. + + +Example GB03: +============= + +Illustrates geometry based biasing. + + +Example GB04: +============= + +Illustrates a bremsstrahlung splitting. + + +Example GB05: +============= + +Illustrates a "splitting by cross-section" technique: a splitting-based +technique using absorption cross-section to control the neutron population. + + +Example GB06: +============= + +Illustrates the usage of parallel geometries with generic biasing. + +Example GB07: +============= + +Illustrates the usage of leading particle biasing with generic biasing. + + + ___________________________________________________________________________ + + + Reverse MonteCarlo Technique example: ReverseMC01 + ------------------------------------------------- + +Example ReverseMC01 +=================== + +Example illustrating the use of the Reverse Monte Carlo (RMC) mode in a Geant4 +application. See details in ReverseMC01/README. + diff --git a/examples/extended/biasing/ReverseMC01/.README.txt b/examples/extended/biasing/ReverseMC01/.README.txt new file mode 100644 index 0000000000..3bc6538b9e --- /dev/null +++ b/examples/extended/biasing/ReverseMC01/.README.txt @@ -0,0 +1,487 @@ + +///\file "biasing/ReverseMC01/.README.txt" +///\brief Example ReverseMC01 README page + +/*! \page ExampleReverseMC01 Example ReverseMC01 + +This example illustrates the use of Reverse Monte Carlo in Geant4. + +\section ReverseMC01_author Author + +This example code and the adjoint classes in the G4 toolkit have been developed by L.Desorgher (SpaceIT GmbH) +under the ESA contract 21435/08/NL/AT. For any (reasonable) question you may contact the author +at the following email address : desorgher@spaceit.ch + + + +\section ReverseMC01_abstract Abstract + +This is the README file for the first G4 example illustrating the use of the Reverse Monte Carlo (RMC) mode in a Geant4 +application. The Reverse Monte Carlo method is also known as the Adjoint Monte Carlo (AMC) method and +in this document we will alternate both Reverse and Adjoint terms. + +\section ReverseMC01_other_doc Other documentation + +See also the section 3.7.3 Adjoint/Reverse Monte carlo in the +Geant4 User guide for application developers. + + +\section ReverseMC01_s1 Definition of Reverse/Adjoint Monte Carlo + +When the sensitive part of a detector is small compared to its entire size and to the size of the +external extended primary particle source, a lot of computing time is spent during a normal Monte Carlo run +in the simulation of particle showers that are not contributing to the detector signal. +In such particular case the Reverse Monte Carlo (RMC) method, also known as the +Adjoint Monte Carlo method, can be used. +In this method particles are generated in or on the external surface of the sensitive volume +of the instrument and then are tracked backward in the geometry till they reach the source surface, +or exceed an energy threshold. During the reverse tracking reverse reactions are applied to the particles. + + + +\section ReverseMC01_s2 The Reverse Monte Carlo mode in Geant4 (since G4.9.3 release) + +(See also the section 3.7.3 Adjoint/Reverse Monte carlo in the +Geant4 User guide for application developers.) + +Different G4Adjoint classes have been implemented into the Geant4 +toolkit to run an adjoint/reverse simulation in a Geant4 application. +In this implementation an adjoint run is divided in a succession +of alternative adjoint and forward tracking of adjoint and normal particles. +One Geant4 event treats one of this tracking phase. + + +\subsection ReverseMC01_sub_s2_1 Reverse tracking phase + +Adjoint particles (adjoint_e-, adjoint_gamma,...) are generated one by one on the so called +adjoint source with random position, energy (1/E distribution) and direction. The adjoint +source is the external surface of a user defined volume or of a user defined sphere. The +adjoint source should contain one or several sensitive volumes and should be small +compared to the entire geometry. The user can set the minimum and maximum energy of the +adjoint source. After its generation the adjoint primary particle is tracked backward in +the geometry till a user defined external surface (spherical or boundary of a volume) +or is killed before if it reaches a user defined upper energy limit that represents the +maximum energy of the external source. During the reverse tracking, reverse processes take +place where the adjoint particle being tracked can be either scattered or transformed in +another type of adjoint particle. During the reverse tracking the +G4AdjointSimulationManager replaces the user defined primary, run, stepping, ... actions, +by its own actions. + +\subsection ReverseMC01_sub_s2_2 Forward tracking phase: + +When an adjoint particle reaches the external surface its weight, type, position, +and direction are registered and a normal primary particle with a type equivalent +to the last generated adjoint primary is generated with the same energy, +position but opposite direction and is tracked in the forward direction +in the sensitive region as in a forward MC simulation. +During this forward tracking phase the event, stacking, stepping, tracking actions defined +by the user for its general forward application are used. +By this clear separation between adjoint and forward tracking phases, the code of the +user developed for a forward simulation should be only slightly +modified to adapt it for an adjoint simulation. Indeed the computation of the signal +is done by the same user actions or analysis classes that the one used in the forward +simulation mode. Before the G4.10.0 release the reverse and forward tracking mode +took place in separated events. Since the G4.10.0 release, +in order to preapre to the migration of the +ReverseMC to the G4 Multiple Threading mode, the reverse and forward tracking +phase of corresponding adjoint and forward primaries have been merged in the same +event. + + +\subsection ReverseMC01_sub_s2_3 Reverse Processes + +During the reverse tracking phase reverse processes act on the adjoint particles. +The Reverse processes that are available at the moment in Geant4 are the: + - Reverse discrete Ionization for e-, proton and ions + - Continuous gain of energy by ionization and bremsstrahlung for e- and by ionization for protons and ions + - Reverse discrete e- bremsstrahlung + - Reverse photoelectric effect + - Reverse Compton scattering + - Approximated multiple scattering (MS) (see section 5.3) + + +It is important to note that the electromagnetic reverse processes are cut dependent +as their equivalent forward processes. The implementation of the reverse processes is + based on the forward processes +implemented in the G4 standard electromagnetic package. + + +\subsection ReverseMC01_sub_s2_4 Remark on Nb of adjoint particle types and Nb of G4 events considered in an adjoint simulation + +The list of type of adjoint and forward particles that are generated on the adjoint source +and considered in the simulation is a function of the adjoint processes declared in the +physics list. For example if only the e- and gamma electromagnetic processes are considered +, only adjoint e- and adjoint gamma will be considered as primaries. In this case an +adjoint event will be divided in two G4 events. The first event will consist +into the coupled reverse and forward tracking of an adjoint e- and its equivalent +forward e-, while the second events will process the reverse and forward trackings +of corresponsing adjoint and forward primary gamms. In this case a +run of 100 adjoint events will consist into 200 Geant4 events. If the proton ionization is +also considered adjoint and forward protons are also generated as primaries +and 300 Geant4 events are processed for 100 adjoint events. + +\subsection ReverseMC01_sub_s2_5 Modifications to bring in a existing G4 application to use the Reverse MC method + +(for more details see also the section 3.7.3 Adjoint/Reverse Monte carlo in the +Geant4 User guide for application developers.) + +Due the clear separation between the reverse and forward tracking phase only few modifications are needed +to an existing Geant4 application in order to adapt it for the use of the reverse simulation mode. +Except in the physics list where all the reverse processes and their forward equivalent +have to be declared, the principal code modifications are needed only in the analysis phase at the end +of the forward tracking where computed signals have to be multiplied by the weight +of the last reverse tracks and then normalized to different user defined spectra and angular distribution representing +the external source. +The weight of the adjoint tracks is computed by the G4Adjoint classes and the user needs +only to multiply them to the primary differential, directional spectrum of its choice. +The adjoint weight a the end of tracks can be also registered if needed in answer matrices. + +More precisely, in order to be able to use the Reverse MC method in his simulation, the user should modify +its code as such: + + - Adapt its physics list to use Reverse Processes for adjoint particles. An example of such physics list is provided in an extended + example. + - Create an instance of G4AdjointSimManager somewhere in the main () code. + + - Modify the analysis part of the code to normalize the signal computed during the forward phase to the weight of the last adjoint particle + that reaches the external surface. This is done by using the following method of G4AdjointSimManager: + - G4int GetIDOfLastAdjParticleReachingExtSource() + - G4ThreeVector GetPositionAtEndOfLastAdjointTrack(){ return last_pos;} + - G4ThreeVector GetDirectionAtEndOfLastAdjointTrack(){ return last_direction;} + - G4double GetEkinAtEndOfLastAdjointTrack(){ return last_ekin;} + - G4double GetEkinNucAtEndOfLastAdjointTrack(){ return last_ekin_nuc;} + - G4double GetWeightAtEndOfLastAdjointTrack(){return last_weight;} + - G4double GetCosthAtEndOfLastAdjointTrack(){return last_cos_th;} + - G4String GetFwdParticleNameAtEndOfLastAdjointTrack(){return last_fwd_part_name;} + - G4int GetFwdParticlePDGEncodingAtEndOfLastAdjointTrack(){return last_fwd_part_PDGEncoding;} + - G4int GetFwdParticleIndexAtEndOfLastAdjointTrack(). + + In order to have a code working for both forward and adjoint simulation mode, the extra code needed in user actions for the adjoint + simulation mode can be separated to the code needed only for the normal forward simulation by using the following method: + - G4bool GetAdjointSimMode() that return true if an adjoint simulation is running and false if not! + + + +\section ReverseMC01_s3 exampleRMC01 + +The example RMC01 illustrates how to modify a G4 application in order to use +both forward and reverse MC modes in the same code. + + +\subsection ReverseMC01_sub_s3_1 Geometry + +The following simple geometry is considered: + - sensitive Silicon cylinder at the center of an Aluminum spherical shielding with 10 cm Radius. + - two 0.5mm thick Tantalum plates set horizontally above and below the Sensitive Cylinder + +The free parameters of the geometry that can bes set by the user are: + - the thickness of the Aluminum shielding + - the height of the sensitive Si cylinder + - the radius of the sensitive Si cylinder + + + +\subsection ReverseMC01_sub_s3_2 Physics + +The physical processes considered are: + - Reverse and forward discrete Ionization for e- and proton + - Continuous gain and loss of energy by ionization and bremsstrahlung for e- and by ionization for protons + - Reverse and forward discrete e- bremsstrahlung + - Reverse and forward photoelectric effect + - Reverse and forward Compton scattering + - Reverse and forward Multiple scattering + +These processes are implemented in the class G4AdjointPhysicsList distributed with the example. The G4AdjointPhysicsMessenger allows the user +to switch on/off some processes for testing purpose. By default all processes cited above are considered except the proton ionization that +has to be specifically switch on in the macro file by the user. + + + +\subsection ReverseMC01_sub_s3_3 Analysis and output of the code + +The example computes the energy deposited in the sensitive Si cylinder and the current of e-, protons, and gamma +entering this cylinder. +The Hits are registered in the sensitive detector class RMC01SD that is a typical G4 sensitive detector class +used in a forward simulation and is not modified at all +for the adjoint simulation mode. +The analysis of the registered hits during forward events is done by the RMCO1AnalysisManager. +That is the class that illustrates how to adapt an analysis code of a fwd simulation in order to use it also for +an adjoint simulation. +In this class during a forward simulation the method EndOfEventForForwardSimulation is used at the end of an event +while during an adjoint simulation at the end of fwd tracking event the method EndOfEventForAdjointSimulation is called. +By looking at the source of RMCO1AnalysisManager and more particularly to its method EndOfEventForAdjointSimulation the user will +learn how to adapt its G4 analysis code for an adjoint simulation. + +The outputs of an adjoint simulation are: + + - The total energy deposited and particle current entering the sensitive cylinder normalized + automatically to a user defined primary spectrum(exponential or power law) .These results are stored in the files: + - Adj_Edep_vs_EkinPrim.txt + - Adj_ElectronCurrent.txt + - Adj_GammaCurrent.txt + - Adj_ProtonCurrent.txt + - ConvergenceOfAdjointSimulationResults.txt: + The total normalized edep and its relative error registered every 5000 adjoint events + + + - The answer matrix of the energy deposited and particles current on the sensitive cylinder in function of primary energy of e-, gamma and + protons. These results are stored in the files Adj********_Answer.txt + + + +The outputs of a forward simulation are: + - The mean energy deposited and particle current entering the sensitive cylinder per event. + These results are stored in the files: + - Fwd_Edep_vs_EkinPrim.txt + - Fwd_ElectronCurrent.txt + - Fwd_GammaCurrent.txt + - Fwd_ProtonCurrent.txt + + + +\subsection ReverseMC01_sub_s3_4 Run macrofiles + +The following example run macro files are distributed with the code: + - run_adjoint_simulation_electron.mac and run_adjoint_simulation_proton.mac for adjoint simulations + + - run_forward_simulation_electron.mac and run_forward_simulation_proton.mac for forward simulations + + +\subsection ReverseMC01_sub_s3_5 Comparison of adjoint and forward simulation results + +It is the responsibility of the user to select in the macro file the same external spectrum +for both the forward and adjoint simulations and to normalize the per event results of the forward simulation +to the fluence considered in the adjoint simulation. + +For the macro files that are provided with the examples it consists into multiplying the forward results by pi*100. +This normalization factor is explained by the following: + + - For the forward simulation the results are given per number of events. It corresponds + to a normalization to a fluence of 1 particle emanating from the external source. + + - In run_fwd_simulation.mac the source is set on a sphere of 10 cm radius (see /gps commands in + macrofile).Therefore the omnidirectional fluence for the fwd simulation is 1./(pi*R^2) with R=10cm. + + - The adjoint results are normalized to a fluence of 1/cm2. + (See command /RMC01/analysis/SetExponentialSpectrumForAdjointSim in macrofile) + + - In conclusion to compare the adjoint and forward results, the forward results should + be multiplied by pi*R^2/cm2= pi*100. + + + +\section ReverseMC01_s4 Control of the adjoint simulation and the RMC01 code by G4 macro UI commands + +Different G4 macro UI commands are provided to control the RMC01 example and the adjoint simulation. +Some macro commands are provided within the geant4 toolkit and appears in a G4 application when the singleton +class G4AdjointSimManager is called somewhere in the code, the other macro commands are +declared in the code distributed within the example. + + +\subsection ReverseMC01_sub_s4_1 G4UI commands in the directory /adjoint + +The macro command directory /adjoint appears in a user application when the singleton +class G4AdjointSimManager is called somewhere in the code. +It allows to control the adjoint source, the external source and start an adjoint simulation. + +The command to start an adjoint run is: + +- /adjoint/start_run nb \n + Start an adjoint simulation with a number of events given by nb. It is important to note that the total number of events in the sense of G4 + will be nb*2*nb_primary_considered (see 3.4.) + + +The commands to control the adjoint source are: + +- /adjoint/DefineSphericalAdjSource R X Y Z unit_length \n + The adjoint source is set on a sphere with radius R and centered on position (X,Y,Z) + +- /adjoint/DefineSphericalAdjSourceCenteredOnAVolume phys_vol_name R unit_length \n + The external source is set on a sphere with radius R and with its center position located at the center of the + the physical volume specified by the name phys_vol_name. +- /adjoint/DefineAdjSourceOnExtSurfaceOfAVolume phys_vol_name \n +The external surface is set as the external boundary of a the physical volume with name phys_vol_name + +- /adjoint/SetAdjSourceEmin Emin energy_unit \n + Set the minimum energy of the external source + +- /adjoint/SetAdjSourceEmax Emax energy_unit \n + Set the maximum energy of the external source + +- /adjoint/ConsiderAsPrimary particle_name \n + The type of particle specified by "particle_name" will be added in the list of primary adjoint particles. + The list of candidates depends on the reverse physics processes considered in the simulation. At the most the + potential candidates are (e-, gamma, proton , ion). For this example only e-, gamma, proton + can be chosen. As the proton ionization is not considered by default, the default list of particles is + [e-,gamma]. To have also the proton as candidate the proton ionization should + be switch on (/adjoint_physics/UseProtonIonisation true). + +- /adjoint/NeglectAsPrimary particle_name \n + + The type of particle specified by "particle_name" will be removed from the list of primary adjoint particles. + The list of candidates depends on the reverse physics processes considered in the simulation. At the most the + potential candidates are (e-, gamma, proton , ion). For this example only e-, gamma, proton + can be chosen. As the proton ionization is not considered by default, the default list of particles is + [e-,gamma].To have also the proton as candidate the proton ionization should + be switch on (/adjoint_physics/UseProtonIonisation true). + + +The commands to control the external source are: + +- /adjoint/DefineSphericalExtSource R X Y Z unit_length:\n +The external source is set on a sphere with radius R and centered on position (X,Y,Z) + +- /adjoint/DefineSphericalExtSourceCenteredOnAVolume phys_vol_name R unit_length\n +The external source is set on a sphere with radius R and with its center position located at the center of the +the physical volume specified by the name phys_vol_name. + +- /adjoint/DefineExtSourceOnExtSurfaceOfAVolume phys_vol_name \n +The external surface is set as the external boundary of a the physical volume with name phys_vol_name + +- /adjoint/SetExtSourceEmax Emax energy_unit \n +Set the maximum energy of the external source. An adjoint track will be stop when a an adjoint particle get an energy higher than this maximum energy. + + + +\subsection ReverseMC01_sub_s4_2 G4UI commands in the directory /adjoint_physics + +These commands allow to control the electromagnetic processes that will be considered in the simulation. + +The processes that can be used are: +- Reverse and forward e- continuous and discrete Ionization. Always switch on +- Reverse and forward e- Bremsstrahlung. Switch on by default +- Reverse and forward Compton scattering. Switch on by default +- Reverse and forward photo electric effect. Switch on by default +- Reverse and forward photo electric effect. Switch on by default +- Reverse and forward multiple scattering. Switch on by default +- Reverse and forward proton continuous and discrete Ionization. Switch off by default +- Forward e-e+ pair production. Switch off by default. + + +The commands that can be used to switch on of these processes are: + +- /adjoint_physics/UseProtonIonisation true/false \n + Switch on/off the reverse and forward proton ionization. Off by default. + +- /adjoint_physics/UseBremsstrahlung true/false \n + Switch on/off the reverse and forward e- bremsstrahlung. On by default. + +- /adjoint_physics/UseCompton true/false \n + Switch on/off the Compton scattering. On by default. + + +- /adjoint_physics/UseMS true/false \n + Switch on/off the multiple scattering. On by default. + + +- /adjoint_physics/UseEgainElossFluctuation true/false \n + Switch on/off the fluctuation in the continuous energy loss/gain. On by default. Only for test purpose. + +- /adjoint_physics/UsePEEffect true/false \n + Switch on/off the photo electric effect. On by default. + + +- /adjoint_physics/UseGammaConversion true/false \n + Switch on/off the forward e-e+ pair production from gamma. Off by default. When On all the e+ + electromagnetic physics is considered. + + +The user can also fix the maximum energy Emax and minimum energy Emin of the adjoint physical processes used +in the simulation. The adjoint process will be applied to particles within the energy range [Emin, Emax] +and will produce adjoint secondary only in this energy range. It is recommended to fix Emin to the minimum +energy of the adjoint source and fix Emax to the maximum energy of the external source. +The commands controlling Emin and Emax are: + +- /adjoint_physics/SetEminForAdjointModels Emin Energy_unit \n +Set the minimum energy of the adjoint processes/models. + +- /adjoint_physics/SetEmaxForAdjointModels Emin Energy_unit \n +Set the maximum energy of the adjoint processes/models. + + +\subsection ReverseMC01_sub_s4_3 G4UI commands in the directory /RMC01 + + +Commands/RMC01/geometry/ to control the geometry: + +- /RMC01/geometry/SetSensitiveVolumeHeight H length_unit \n +Set the height H of the Si sensitive cylinder. + + +- /RMC01/geometry/SetSensitiveVolumeRadius R length_unit \n +Set the radius R of the Si sensitive cylinder. + +- /RMC01/geometry/SetShieldingThickness D length_unit \n +Set the thickness D of the aluminum shielding. + +Commands /RMC01/analysis/ to control the primary spectrum used for the normalization of the +adjoint simulation results and fix the expected precision of the computed Edep: + +- /RMC01/analysis/SetPowerLawPrimSpectrumForAdjointSim particle_name F F_unit alpha Emin Emax E_unit \n + Set the primary spectrum to which the adjoint simulation results will be normalised to a power law + spectrum E^(-alpha) of particle defined by particle_name, with an omnidirectional fluence F, and + energy range [Emin,Emax]. The fluence unit candidates for F_unit are [1/cm2, 1/m2, cm-2, m-2]. + + +- /RMC01/analysis/SetExponentialSpectrumForAdjointSim particle_name F F_unit E0 Emin Emax E_unit \n + Set the primary spectrum to which the adjoint simulation results will be normalised to an exponential + spectrum exp(-E/E0) of particle defined by particle_name, with an omnidirectional fluence F, and + energy range [Emin,Emax]. The fluence unit candidates for F_unit are [1/cm2, 1/m2, cm-2, m-2]. + + + +- /RMC01/analysis/SetExpectedPrecisionOfResults precision \n + Set the expected precision in % for the computed energy deposited in the sensitive volume + for both the forward and adjoint simulation case. When the relative statistical error + of the computed energy deposited reach this precision the run is aborted and the results are registered. + Otherwise the run continue till the nb of events specified by the user are processed. By default the precision is set + to 0. meaning that the run will not be aborted in this case. + + + + + + +\section ReverseMC01_s5 Known issues + +\subsection ReverseMC01_sub_s5_1 Rare too high weight in the adjoint simulation + +In rare cases an adjoint track may get a much too high weight when reaching the external source. +While this happen not often it may corrupt the simulation results significantly. The reason of this high weight is +the joint use at low e- and gamma energy of both the photoelectric and bremsstrahlung processes. +Unfortunately we still need some investigations to remove this problem at the level of physical processes. +However this problem can be solved at the level of event action in the user code by adding a test on the adjoint +weight. Such test has been implemented in the example RMC01. +In this implementation an event is rejected when the relative error of the computed normalised edep +increase during one event by more than 50% when the precision is already below 10%. + + +\subsection ReverseMC01_sub_s5_2 Limitation of the reverse bremsstrahlung + +The difference between the differential cross sections used in the adjoint and forward bremsstrahlung + models is the source of a higher flux of >100 keV gamma in the reverse simulation compared to the forward simulation. +The adjoint processes/models should make use of the direct differential cross section to sample + the adjoint secondaries and compute the adjoint cross section. +The differential cross section used in G4AdjointeBremstrahlungModel is obtained by the numerical derivation +over the cut energy of the direct cross section provided by G4eBremsstrahlungModel. +This would be a correct procedure if the distribution of secondary in G4eBremsstrahlungModel +would match this differential cross section. Unfortunately it is not the case as independent parameterization are used + in G4eBremsstrahlungModel for both the cross sections and the sample of secondary. (It means that in the forward case + if one would integrate the effective differential cross section considered in the simulation we would not find back + the used cross section). + In the future we plan to correct this problem by using an extra weight correction factor after the occurrence of a reverse + bremsstrahlung. This weight factor should be the ratio between the differential CS used in the adjoint simulation and the +one effectively used in the forward processes. As it is impossible to have access to the forward differential CS + in G4eBremsstrahlungModel we are investigating the feasibility to use the differential CS considered in + G4Penelope models. + + +\subsection ReverseMC01_sub_s5_3 Limitation of the reverse multiple scattering + +For the reverse multiple scattering we are using the same models than for the forward case. +This approximation makes that the discrepancy between the adjoint and forward +simulation cases can get to a level of ~ 10-15% relative differences in the test cases that we have considered. +In the future we plan to improve the adjoint multiple scattering models by forcing the computation of +multiple scattering effect at the end of an adjoint step. + +*/ diff --git a/examples/extended/biasing/ReverseMC01/README b/examples/extended/biasing/ReverseMC01/README new file mode 100644 index 0000000000..9f7b4b0b30 --- /dev/null +++ b/examples/extended/biasing/ReverseMC01/README @@ -0,0 +1,542 @@ + Example1 for Reverse Monte Carlo + -------------------------------- + + +Author +------ +This example code and the adjoint classes in the G4 toolkit have been developed by L.Desorgher (SpaceIT GmbH) +under the ESA contract 21435/08/NL/AT. For any (reasonable) question you may contact the author +at the following email address : desorgher@spaceit.ch + + +Abstract +-------- +This is the README file for the first G4 example illustrating the use of the Reverse Monte Carlo (RMC) mode in a Geant4 +application. The Reverse Monte Carlo method is also known as the Adjoint Monte Carlo (AMC) method and +in this document we will alternate both Reverse and Adjoint terms. + +Other documentation +------------------- +See also the section 3.7.3 Adjoint/Reverse Monte carlo in the +Geant4 User guide for application developers. + + +Table of Contents: +----------------- + +1.Definition of Reverse/Adjoint Monte Carlo + +2.The Reverse Monte Carlo mode in Geant4 (since G4.9.3 release) + 2.1. Reverse tracking phase + 2.2. Forward tracking phase + 2.3. Reverse processes + 2.4. Remark on Nb of adjoint particle types and G4 events considered in an adjoint simulation + 2.5. Modifications to bring in a existing G4 application to use the Reverse MC method + +3.exampleRMC01 + 3.1. Geometry + 3.2. Physics + 3.3. Analysis and output of the code + 3.4. Run macrofiles + 3.5. Comparison of adjoint and forward simulation results. Normalization! + +4.Control of the adjoint simulation and the RMC01 code by G4 macro UI commands + 4.1. G4UI commands in the directory /adjoint + 4.2. G4UI commands in the directory /adjoint_physics + 4.3. G4UI commands in the directory /RMC01 + +5. Known issues + 5.1. Rare too high weight in the adjoint simulation + 5.2. Limitation of the reverse bremsstrahlung + 5.3.Limitation of the reverse multiple scattering + + + +1. Definition of Reverse/Adjoint Monte Carlo +----------------------------------------- +----------------------------------------- +When the sensitive part of a detector is small compared to its entire size and to the size of the +external extended primary particle source, a lot of computing time is spent during a normal Monte Carlo run +in the simulation of particle showers that are not contributing to the detector signal. +In such particular case the Reverse Monte Carlo (RMC) method, also known as the +Adjoint Monte Carlo method, can be used. +In this method particles are generated in or on the external surface of the sensitive volume +of the instrument and then are tracked backward in the geometry till they reach the source surface, +or exceed an energy threshold. During the reverse tracking reverse reactions are applied to the particles. + + + +2. The Reverse Monte Carlo mode in Geant4 (since G4.9.3 release) +---------------------------------------------------------------- +---------------------------------------------------------------- +(See also the section 3.7.3 Adjoint/Reverse Monte carlo in the +Geant4 User guide for application developers.) + +Different G4Adjoint classes have been implemented into the Geant4 +toolkit to run an adjoint/reverse simulation in a Geant4 application. +In this implementation an adjoint run is divided in a succession +of alternative adjoint and forward tracking of adjoint and normal particles. +One Geant4 event treats the reverse tracking of an adjoint primary particle +and its secondaries, and the forward tracking of a primary particle euqivalent +to the adjoint primary as well as its secondaries. + + +2.1. Reverse tracking phase: +------------------------- + +Adjoint particles (adjoint_e-, adjoint_gamma,...) are generated one by one on the so called +adjoint source with random position, energy (1/E distribution) and direction. The adjoint +source is the external surface of a user defined volume or of a user defined sphere. The +adjoint source should contain one or several sensitive volumes and should be small +compared to the entire geometry. The user can set the minimum and maximum energy of the +adjoint source. After its generation the adjoint primary particle is tracked backward in +the geometry till a user defined external surface (spherical or boundary of a volume) +or is killed before if it reaches a user defined upper energy limit that represents the +maximum energy of the external source. During the reverse tracking, reverse processes take +place where the adjoint particle being tracked can be either scattered or transformed in +another type of adjoint particle. During the reverse tracking the +G4AdjointSimulationManager replaces the user defined primary, run, stepping, ... actions, +by its own actions. + +2.2. Forward tracking phase: +-------------------------- + +When an adjoint particle reaches the external surface its weight, type, position, +and direction are registered and a normal primary particle with a type equivalent +to the last generated adjoint primary is generated with the same energy, +position but opposite direction and is tracked in the forward direction +in the sensitive region as in a forward MC simulation. +During this forward tracking phase the event, stacking, stepping, tracking actions defined +by the user for its general forward application are used. +By this clear separation between adjoint and forward tracking phases, the code of the +user developed for a forward simulation should be only slightly +modified to adapt it for an adjoint simulation. Indeed the computation of the signal +is done by the same user actions or analysis classes that the one used in the forward +simulation mode. Before the G4.10.0 release the reverse and forward tracking mode +took place in separated events. Since the G4.10.0 release, +in order to prepare to the migration of the +ReverseMC to the G4 Multiple Threading mode, the reverse and forward tracking +phase of corresponding adjoint and forward primaries have been merged in the same +event. + + +2.3. Reverse Processes: +--------------------- + +During the reverse tracking phase reverse processes act on the adjoint particles. +The Reverse processes that are available at the moment in Geant4 are the: + - Reverse discrete Ionization for e-, proton and ions + - Continuous gain of energy by ionization and bremsstrahlung for e- and by ionization for protons and ions + - Reverse discrete e- bremsstrahlung + - Reverse photoelectric effect + - Reverse Compton scattering + - Approximated multiple scattering (MS) (see section 5.3) + +For the gamma reverse physics an adjoint gamma reverse forced interaction process has been implemented +since GEANT4.10.3. THis process splits a new created gamma in two tracks. +The first tracks is used to force a free flight of the adjoint gamma through the geometry. +The second track is used to force a reverse bremsstrahlung or a reverse compton at some random +position along the free flight track. + +It is important to note that the electromagnetic reverse processes are cut dependent +as their equivalent forward processes. The implementation of the reverse processes is + based on the forward processes +implemented in the G4 standard electromagnetic package. + + +2.4. Remark on Nb of adjoint particle types and Nb of G4 events considered in an adjoint simulation: +--------------------------------------------------------------------------------- + +The list of type of adjoint and forward particles that are generated on the adjoint source +and considered in the simulation is a function of the adjoint processes declared in the +physics list. For example if only the e- and gamma electromagnetic processes are considered +, only adjoint e- and adjoint gamma will be considered as primaries. In this case an +adjoint event will be divided in two G4 events. The first event will consist +into the coupled reverse and forward tracking of an adjoint e- and its equivalent +forward e-, while the second events will process the reverse and forward trackings +of corresponsing adjoint and forward primary gammas. In this case a +run of 100 adjoint events will consist into 200 Geant4 events. If the proton ionization is +also considered adjoint and forward protons are also generated as primaries +and 300 Geant4 events are processed for 100 adjoint events. + +2.5. Modifications to bring in a existing G4 application to use the Reverse MC method +-------------------------------------------------------------------------------- +(for more details see also the section 3.7.3 Adjoint/Reverse Monte carlo in the +Geant4 User guide for application developers.) + +Due the clear separation between the reverse and forward tracking phase only few modifications are needed +to an existing Geant4 application in order to adapt it for the use of the reverse simulation mode. +Except in the physics list where all the reverse processes and their forward equivalent +have to be declared, the principal code modifications are needed only in the analysis phase at the end +of the forward tracking where computed signals have to be multiplied by the weight +of the reverse tracks that have reached the external surface of the simulatrion +and then normalized to different user defined spectra and angular distribution representing +the external source. +The weight of the adjoint tracks is computed by the G4Adjoint classes and the user needs +only to multiply them to the primary differential, directional spectrum of its choice. +The adjoint weight a the end of tracks can be also registered if needed in answer matrices. + +More precisely, in order to be able to use the Reverse MC method in his simulation, the user should modify +its code as such: + + - Adapt its physics list to use Reverse Processes for adjoint particles. An example of such physics list is provided in an extended + example. + - Create an instance of G4AdjointSimManager somewhere in the main code. + + - Modify the analysis part of the code to normalize the signal computed during the forward phase to the weight + of adjoint particle that reached the external surface during the last tracking phase. + This is done by using the following method of G4AdjointSimManager. + size_t GetNbOfAdointTracksReachingTheExternalSurface() + G4int GetIDOfLastAdjParticleReachingExtSource(size_t i) + G4ThreeVector GetPositionAtEndOfLastAdjointTrack(size_t i) + G4ThreeVector GetDirectionAtEndOfLastAdjointTrack(size_t i) + G4double GetEkinAtEndOfLastAdjointTrack(size_t i) + G4double GetEkinNucAtEndOfLastAdjointTrack(size_t i) + G4double GetWeightAtEndOfLastAdjointTrack(size_t i) + G4double GetCosthAtEndOfLastAdjointTrack(size_t i) + G4String GetFwdParticleNameAtEndOfLastAdjointTrack(size_t i) + G4int GetFwdParticlePDGEncodingAtEndOfLastAdjointTrack(size_t i) + G4int GetFwdParticleIndexAtEndOfLastAdjointTrack(size_t i). + Since the version Geant4.10.3 several adjoint tracks can arrive on the external surface during the same events. + It is therefore important to loop over alll these tracks when normalizing the weights at the end of the event. + The method GetNbOfAdointTracksReachingTheExternalSurface() returns the number of adjoint tracks that reached the + external surface. Ine the other methods the input parameter i allows to get the information of the ith track. + + In order to have a code working for both forward and adjoint simulation mode, the extra code needed in user actions for the adjoint + simulation mode can be separated to the code needed only for the normal forward simulation by using the following method + + G4bool GetAdjointSimMode() that return true if an adjoint simulation is running and false if not! + + + +3. exampleRMC01 +--------------- +--------------- +The example RMC01 illustrates how to modify a G4 application in order to use +both forward and reverse MC modes in the same code. + + +3.1. Geometry: +-------------- + +The following simple geometry is considered: + - sensitive Silicon cylinder at the center of an Aluminum spherical shielding with 10 cm Radius. + - two 0.5mm thick Tantalum plates set horizontally above and below the Sensitive Cylinder + +The free parameters of the geometry that can bes set by the user are: + - the thickness of the Aluminum shielding + - the height of the sensitive Si cylinder + - the radius of the sensitive Si cylinder + + + +3.2. Physics: +------------- + +The physical processes considered are: + - Reverse and forward discrete Ionization for e- and proton + - Continuous gain and loss of energy by ionization and bremsstrahlung for e- and by ionization for protons + - Reverse and forward discrete e- bremsstrahlung + - Reverse and forward photoelectric effect + - Reverse and forward Compton scattering + - Reverse and forward Multiple scattering + +These processes are implemented in the class G4AdjointPhysicsList distributed with the example. The G4AdjointPhysicsMessenger allows the user +to switch on/off some processes for testing purpose. By default all processes cited above are considered except the proton ionization that +has to be specifically switch on in the macro file by the user. + + + +3.3. Analysis and output of the code: +---------------------------------- + +The example computes the energy deposited in the sensitive Si cylinder and the current of e-, protons, and gamma +entering this cylinder. +The Hits are registered in the sensitive detector class RMC01SD that is a typical G4 sensitive detector class +used in a forward simulation and is not modified at all +for the adjoint simulation mode. +The analysis of the registered hits during forward events is done by the RMCO1AnalysisManager. +That is the class that illustrates how to adapt an analysis code of a fwd simulation in order to use it also for +an adjoint simulation. +In this class during a forward simulation the method EndOfEventForForwardSimulation is used at the end of an event +while during an adjoint simulation at the end of fwd tracking event the method EndOfEventForAdjointSimulation is called. +By looking at the source of RMCO1AnalysisManager and more particularly to its method EndOfEventForAdjointSimulation the user will +learn how to adapt its G4 analysis code for an adjoint simulation. + +The outputs of an adjoint simulation are: + + -The total energy deposited and particle current entering the sensitive cylinder normalized + automatically to a user defined primary spectrum(exponential or power law) . + These results are stored in the files: + -Adj_Edep_vs_EkinPrim.txt + -Adj_ElectronCurrent.txt + -Adj_GammaCurrent.txt + -Adj_ProtonCurrent.txt + -ConvergenceOfAdjointSimulationResults.txt: + The total normalized edep and its relative error registered every 5000 adjoint events + + + -The answer matrix of the energy deposited and particles current on the sensitive cylinder in function of primary energy of e-, gamma and + protons. These results are stored in the files Adj********_Answer.txt + + + +The outputs of a forward simulation are: + -The mean energy deposited and particle current entering the sensitive cylinder per event. + These results are stored in the files: + -Fwd_Edep_vs_EkinPrim.txt + -Fwd_ElectronCurrent.txt + -Fwd_GammaCurrent.txt + -Fwd_ProtonCurrent.txt + -ConvergenceOfAdjointSimulationResults.txt: The total normalized edep and its relative error registered every 5000 adjoint events + + + +3.4. Run macrofiles: +------------------ +The following example run macro files are distributed with the code: + + -run_adjoint_simulation_electron.mac and run_adjoint_simulation_proton.mac for adjoint simulations + + -run_forward_simulation_electron.mac and run_forward_simulation_proton.mac for forward simulations + + +3.5. Comparison of adjoint and forward simulation results: +---------------------------------------------------------- +It is the responsibility of the user to select in the macro file the same external spectrum +for both the forward and adjoint simulations and to normalize the per event results of the forward simulation +to the fluence considered in the adjoint simulation. + +For the macro files that are provided with the examples it consists into multiplying the forward results by pi*100. +This normalization factor is explained by the following: + + -For the forward simulation the results are given per number of events. It corresponds + to a normalization to a fluence of 1 particle emanating from the external source. + + -In run_fwd_simulation.mac the source is set on a sphere of 10 cm radius (see /gps commands in + macrofile).Therefore the omnidirectional fluence for the fwd simulation is 1./(pi*R^2) with R=10cm. + + -The adjoint results are normalized to a fluence of 1/cm2. + (See command /RMC01/analysis/SetExponentialSpectrumForAdjointSim in macrofile) + + -In conclusion to compare the adjoint and forward results, the forward results should + be multiplied by pi*R^2/cm2= pi*100. + + + +4. Control of the adjoint simulation and the RMC01 code by G4 macro UI commands: +------------------------------------------------------------------------- +Different G4 macro UI commands are provided to control the RMC01 example and the adjoint simulation. +Some macro commands are provided within the geant4 toolkit and appears in a G4 application when the singleton +class G4AdjointSimManager is called somewhere in the code, the other macro commands are +declared in the code distributed within the example. + + +4.1. G4UI commands in the directory /adjoint +----------------------------------------------- +The macro commands in the directory /adjoint appears in a user application when the singleton +class G4AdjointSimManager is called somewhere in the code. +It allows to control the adjoint source, the external source and start an adjoint simulation. + +The command to start an adjoint run is: + +-/adjoint/start_run nb + Start an adjoint simulation with a number of events given by nb. It is important to note that the total number of events in the sense of G4 + will be nb*2*nb_primary_considered (see 3.4.) + + +The commands to control the adjoint source are: + +-/adjoint/DefineSphericalAdjSource R X Y Z unit_length + The adjoint source is set on a sphere with radius R and centered on position (X,Y,Z) + +-/adjoint/DefineSphericalAdjSourceCenteredOnAVolume phys_vol_name R unit_length + The external source is set on a sphere with radius R and with its center position located at the center of the + the physical volume specified by the name phys_vol_name. +-/adjoint/DefineAdjSourceOnExtSurfaceOfAVolume phys_vol_name + The external surface is set as the external boundary of a the physical volume with name phys_vol_name + +-/adjoint/SetAdjSourceEmin Emin energy_unit + Set the minimum energy of the external source + +-/adjoint/SetAdjSourceEmax Emax energy_unit + Set the maximum energy of the external source + +-/adjoint/ConsiderAsPrimary particle_name + The type of particle specified by "particle_name" will be added in the list of primary adjoint particles. + The list of candidates depends on the reverse physics processes considered in the simulation. At the most the + potential candidates are (e-, gamma, proton , ion). For this example only e-, gamma, proton + can be chosen. As the proton ionization is not considered by default, the default list of particles is + [e-,gamma]. To have also the proton as candidate the proton ionization should + be switch on (/adjoint_physics/UseProtonIonisation true). + +-/adjoint/NeglectAsPrimary particle_name + The type of particle specified by "particle_name" will be removed from the list of primary adjoint particles. + The list of candidates depends on the reverse physics processes considered in the simulation. At the most the + potential candidates are (e-, gamma, proton , ion). For this example only e-, gamma, proton + can be chosen. As the proton ionization is not considered by default, the default list of particles is + [e-,gamma].To have also the proton as candidate the proton ionization should + be switch on (/adjoint_physics/UseProtonIonisation true). + + +The commands to control the external source are: + +-/adjoint/DefineSphericalExtSource R X Y Z unit_length: + The external source is set on a sphere with radius R and centered on position (X,Y,Z) + +-/adjoint/DefineSphericalExtSourceCenteredOnAVolume phys_vol_name R unit_length + The external source is set on a sphere with radius R and with its center position located at the center of the + the physical volume specified by the name phys_vol_name. + +-/adjoint/DefineExtSourceOnExtSurfaceOfAVolume phys_vol_name + The external surface is set as the external boundary of a the physical volume with name phys_vol_name + +-/adjoint/SetExtSourceEmax Emax energy_unit + Set the maximum energy of the external source. An adjoint track will be stop when a an adjoint particle get an energy higher than this maximum energy. + + + +4.2. G4UI commands in the directory /adjoint_physics +------------------------------------------------------ +These commands allow to control the electromagnetic processes that will be considered in the simulation. + +The processes that can be used are: + -Reverse and forward e- continuous and discrete Ionization. Always switch on + -Reverse and forward e- Bremsstrahlung. Switch on by default + -Reverse and forward Compton scattering. Switch on by default + -Reverse and forward photo electric effect. Switch on by default + -Reverse and forward photo electric effect. Switch on by default + -Reverse and forward multiple scattering. Switch on by default + -Reverse and forward proton continuous and discrete Ionization. Switch off by default + -Forward e-e+ pair production. Switch off by default. + If switch all the e+ electromagnetic physics is considered. + + +The commands that can be used to switch on of these processes are: + +/adjoint_physics/UseProtonIonisation true/false + -Switch on/off the reverse and forward proton ionization. Off by default. + +/adjoint_physics/UseBremsstrahlung true/false + -Switch on/off the reverse and forward e- bremsstrahlung. On by default. + +/adjoint_physics/UseCompton true/false + -Switch on/off the Compton scattering. On by default. + + +/adjoint_physics/UseMS true/false + -Switch on/off the multiple scattering. On by default. + + +/adjoint_physics/UseEgainElossFluctuation true/false + -Switch on/off the fluctuation in the continuous energy loss/gain. On by default. Only for test purpose. + +/adjoint_physics/UsePEEffect true/false + -Switch on/off the photo electric effect. On by default. + + +/adjoint_physics/UseGammaConversion true/false + -Switch on/off the forward e-e+ pair production from gamma. Off by default. When On all the e+ + electromagnetic physics is considered. + + +The user can also fix the maximum energy Emax and minimum energy Emin of the adjoint physical processes used +in the simulation. The adjoint process will be applied to particles within the energy range [Emin, Emax] +and will produce adjoint secondary only in this energy range. It is recommended to fix Emin to the minimum +energy of the adjoint source and fix Emax to the maximum energy of the external source. +The commands controlling Emin and Emax are: + +/adjoint_physics/SetEminForAdjointModels Emin Energy_unit + -Set the minimum energy of the adjoint processes/models. + +/adjoint_physics/SetEmaxForAdjointModels Emin Energy_unit + -Set the maximum energy of the adjoint processes/models. + + +4.3. G4UI commands in the directory /RMC01 +---------------------------------------------- + +Commands/RMC01/geometry/ to control the geometry: + +/RMC01/geometry/SetSensitiveVolumeHeight H length_unit + Set the height H of the Si sensitive cylinder. + + +/RMC01/geometry/SetSensitiveVolumeRadius R length_unit + Set the radius R of the Si sensitive cylinder. + +/RMC01/geometry/SetShieldingThickness D length_unit + Set the thickness D of the aluminum shielding. + +Commands /RMC01/analysis/ to control the primary spectrum used for the normalization of the +adjoint simulation results and fix the expected precision of the computed Edep: + +/RMC01/analysis/SetPowerLawPrimSpectrumForAdjointSim particle_name F F_unit alpha Emin Emax E_unit + Set the primary spectrum to which the adjoint simulation results will be normalised to a power law + spectrum E^(-alpha) of particle defined by particle_name, with an omnidirectional fluence F, and + energy range [Emin,Emax]. The fluence unit candidates for F_unit are [1/cm2, 1/m2, cm-2, m-2]. + + +/RMC01/analysis/SetExponentialSpectrumForAdjointSim particle_name F F_unit E0 Emin Emax E_unit + Set the primary spectrum to which the adjoint simulation results will be normalised to an exponential + spectrum exp(-E/E0) of particle defined by particle_name, with an omnidirectional fluence F, and + energy range [Emin,Emax]. The fluence unit candidates for F_unit are [1/cm2, 1/m2, cm-2, m-2]. + + + +/RMC01/analysis/SetExpectedPrecisionOfResults precision + Set the expected precision in % for the computed energy deposited in the sensitive volume + for both the forward and adjoint simulation case. When the relative statistical error + of the computed energy deposited reach this precision the run is aborted and the results are registered. + Otherwise the run continue till the nb of events specified by the user are processed. By default the precision is set + to 0. meaning that the run will not be aborted in this case. + + + + + + +5. Known issues +-------------------------------- +-------------------------------- + +5.1 Rare too high weight in the adjoint simulation +--------------------------------------------------- + +In rare cases an adjoint track may get a much too high weight when reaching the external source. +While this happen not often it may corrupt the simulation results significantly. The reason of this high weight is +the joint use at low e- and gamma energy of both the photoelectric and bremsstrahlung processes. +Unfortunately we still need some investigations to remove this problem at the level of physical processes. +However this problem can be solved at the level of event action in the user code by adding a test on the adjoint +weight. Such test has been implemented in the example RMC01. +In this implementation an event is rejected when the relative error of the computed normalised edep +increase during one event by more than 50% when the precision is already below 10%. + + +5.2 Limitation of the reverse bremsstrahlung +------------------------------------------- +The difference between the differential cross sections used in the adjoint and forward bremsstrahlung + models is the source of a higher flux of >100 keV gamma in the reverse simulation compared to the forward simulation. +The adjoint processes/models should make use of the direct differential cross section to sample + the adjoint secondaries and compute the adjoint cross section. +The differential cross section used in G4AdjointeBremstrahlungModel is obtained by the numerical derivation +over the cut energy of the direct cross section provided by G4eBremsstrahlungModel. +This would be a correct procedure if the distribution of secondary in G4eBremsstrahlungModel +would match this differential cross section. Unfortunately it is not the case as independent parameterization are used + in G4eBremsstrahlungModel for both the cross sections and the sample of secondary. (It means that in the forward case + if one would integrate the effective differential cross section considered in the simulation we would not find back + the used cross section). + In the future we plan to correct this problem by using an extra weight correction factor after the occurrence of a reverse + bremsstrahlung. This weight factor should be the ratio between the differential CS used in the adjoint simulation and the +one effectively used in the forward processes. As it is impossible to have access to the forward differential CS + in G4eBremsstrahlungModel we are investigating the feasibility to use the differential CS considered in + G4Penelope models. + + +5.3 Limitation of the reverse multiple scattering +------------------------------------------------- +For the reverse multiple scattering we are using the same models than for the forward case. +This approximation makes that the discrepancy between the adjoint and forward +simulation cases can get to a level of ~ 10-15% relative differences in the test cases that we have considered. +In the future we plan to improve the adjoint multiple scattering models by forcing the computation of +multiple scattering effect at the end of an adjoint step. diff --git a/examples/extended/common/.README.txt b/examples/extended/common/.README.txt new file mode 100644 index 0000000000..a4fb856d0b --- /dev/null +++ b/examples/extended/common/.README.txt @@ -0,0 +1,24 @@ + +///\file "common/.README.txt" +///\brief Common classes README page + +/*! \page Examples_common Category "common" + + In order to reduce code duplication and to reduce the number of variants of + the code of same kind, we define a set of common classes which + can be reused in "feature" examples demonstrating just a particular feature. + This module may be enhanced in future. Currently it provides + the following sets of classes: + + - Detector construction classes + - two simple detector construction classes with a messenger + + - Physics list classes + - GeantinoPhysicsList - physics list with geantino and chargedgeantino only + + - Primary generator classes + - two simple primary generator classes (with G4ParticleGun and + G4ParticleGeneralSource) + +*/ + diff --git a/examples/extended/common/README b/examples/extended/common/README new file mode 100644 index 0000000000..3da6d98573 --- /dev/null +++ b/examples/extended/common/README @@ -0,0 +1,26 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Common Classes for Extended Examples + ------------------------------------- + + In order to reduce code duplication and to reduce the number of variants of + the code of same kind, we define a set of common classes which + can be reused in "feature" examples demonstrating just a particular feature. + This module may be enhanced in future. Currently it provides + the following sets of classes: + + - Detector construction classes + - two simple detector construction classes with a messenger + + - Physics list classes + - GeantinoPhysicsList - physics list with geantino and chargedgeantino only + + - Primary generator classes + - two simple primary generator classes (with G4ParticleGun and + G4ParticleGeneralSource) + + diff --git a/examples/extended/electromagnetic/.README.txt b/examples/extended/electromagnetic/.README.txt new file mode 100644 index 0000000000..dfc3ada95a --- /dev/null +++ b/examples/extended/electromagnetic/.README.txt @@ -0,0 +1,119 @@ + +///\file "electromagnetic/.README.txt" +///\brief Examples electromagnetic README page + +/*! \page Examples_electromagnetic Category "electromagnetic" + +\section electromagnetic_s1 TestEm by theme +\verbatim + -------------------------------------------------------------------------- + | Check basic quantities | + |------------------------------------------------------------------------| + | Total cross-sections, mean free paths ... | Em0 Em13 Em14 | + |------------------------------------------------------------------------| + | Stopping power, particle range ... | Em0 Em1 Em5 Em11 Em12 | + |------------------------------------------------------------------------| + | Final state : | | + | energy spectra, angular distributions ... | Em14 | + |------------------------------------------------------------------------| + | Energy loss fluctuations | Em18 | + -------------------------------------------------------------------------- + + + ------------------------------------------------------------------------- + | Multiple Coulomb scattering | + |-----------------------------------------------------------------------| + | as an isolated mechanism | Em15 | + |-----------------------------------------------------------------------| + | as a result of particle transport | Em5 | + ------------------------------------------------------------------------- + + + ------------------------------------------------------------------------- + | More global verifications | + |-----------------------------------------------------------------------| + | Single layer : | | + | transmission, absoption, reflexion ... | Em5 | + |-----------------------------------------------------------------------| + | Bragg curve, tallies | Em7 | + |-----------------------------------------------------------------------| + | Depth dose distribution | Em11 Em12 | + |-----------------------------------------------------------------------| + | Shower shapes, Moliere radius | Em2 | + |-----------------------------------------------------------------------| + | Sampling calorimeters, energy flow | Em3 | + |-----------------------------------------------------------------------| + | Crystal calorimeters | Em9 | + ------------------------------------------------------------------------- + + + ------------------------------------------------------------------------- + | Other specialized programs | + |-----------------------------------------------------------------------| + | High energy muon physics | Em17 | + |-----------------------------------------------------------------------| + | Other rare, high energy processes | Em6 | + |-----------------------------------------------------------------------| + | Synchrotron radiation | Em16 | + |-----------------------------------------------------------------------| + | Transition radiation | Em8 | + |-----------------------------------------------------------------------| + | Photo-absorption-ionization model | Em10 | + ------------------------------------------------------------------------- +\endverbatim + + + - \link ExampleTestEm0 TestEm0 \endlink - how to print cross-sections and stopping power used in input by + the standard EM package + + - \link ExampleTestEm1 TestEm1 \endlink - how to count processes, activate/inactivate them and survey + the range of charged particles. How to define a maximum step size + + - \link ExampleTestEm2 TestEm2 \endlink - shower development in an homogeneous material : + longitudinal and lateral profiles + + - \link ExampleTestEm3 TestEm3 \endlink - shower development in a sampling calorimeter : collect energy + deposited, survey energy flow and print stopping power + + - \link ExampleTestEm4 TestEm4 \endlink - 9 MeV point like photon source: plot spectrum of energy + deposited in a single media + + - \link ExampleTestEm5 TestEm5 \endlink - how to study transmission, absorption and reflection of particles + through a single, thin or thick, layer. + + - \link ExampleTestEm6 TestEm6 \endlink - physics list for rare, high energy, electromagnetic processes : + gamma conversion and e+ annihilation into pair of muons + + - \link ExampleTestEm7 TestEm7 \endlink - how to produce a Bragg curve in water phantom. + How to compute dose in tallies + + - \link ExampleTestEm8 TestEm8 \endlink - test of photo-absorption-ionisation model in thin absorbers, + and transition radiation + + - \link ExampleTestEm9 TestEm9 \endlink - shower development in a crystal calorimeter; cut-per-region + + - \link ExampleTestEm10 TestEm10 \endlink - XTR transition radiation model, investigation of ionisation + in thin absorbers + + - \link ExampleTestEm11 TestEm11 \endlink - how to plot a depth dose profile in a rectangular box + + - \link ExampleTestEm12 TestEm12 \endlink - how to plot a depth dose profile in spherical geometry : + point like source + + - \link ExampleTestEm13 TestEm13 \endlink - how to compute cross sections of EM processes from rate of + transmission coefficient + + - \link ExampleTestEm14 TestEm14 \endlink - how to compute cross sections of EM processes from direct + evaluation of the mean-free path. How to plot final state + + - \link ExampleTestEm15 TestEm15 \endlink - compute and plot final state of Multiple Scattering as an + isolated process + + - \link ExampleTestEm16 TestEm16 \endlink - simulation of synchrotron radiation + + - \link ExampleTestEm17 TestEm17 \endlink - check the cross sections of high energy muon processes + + - \link ExampleTestEm18 TestEm18 \endlink - energy lost by a charged particle in a single layer, + due to ionization and bremsstrahlung + +*/ diff --git a/examples/extended/electromagnetic/README b/examples/extended/electromagnetic/README new file mode 100644 index 0000000000..b6d75ed5c1 --- /dev/null +++ b/examples/extended/electromagnetic/README @@ -0,0 +1,118 @@ +-------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm by theme + --------------- + + -------------------------------------------------------------------------- + | Check basic quantities | + |------------------------------------------------------------------------| + | Total cross-sections, mean free paths ... | Em0 Em13 Em14 | + |------------------------------------------------------------------------| + | Stopping power, particle range ... | Em0 Em1 Em5 Em11 Em12 | + |------------------------------------------------------------------------| + | Final state : | | + | energy spectra, angular distributions ... | Em14 | + |------------------------------------------------------------------------| + | Energy loss fluctuations | Em18 | + -------------------------------------------------------------------------- + + + ------------------------------------------------------------------------- + | Multiple Coulomb scattering | + |-----------------------------------------------------------------------| + | as an isolated mechanism | Em15 | + |-----------------------------------------------------------------------| + | as a result of particle transport | Em5 | + ------------------------------------------------------------------------- + + + ------------------------------------------------------------------------- + | More global verifications | + |-----------------------------------------------------------------------| + | Single layer : | | + | transmission, absoption, reflexion ... | Em5 | + |-----------------------------------------------------------------------| + | Bragg curve, tallies | Em7 | + |-----------------------------------------------------------------------| + | Depth dose distribution | Em11 Em12 | + |-----------------------------------------------------------------------| + | Shower shapes, Moliere radius | Em2 | + |-----------------------------------------------------------------------| + | Sampling calorimeters, energy flow | Em3 | + |-----------------------------------------------------------------------| + | Crystal calorimeters | Em9 | + ------------------------------------------------------------------------- + + + ------------------------------------------------------------------------- + | Other specialized programs | + |-----------------------------------------------------------------------| + | High energy muon physics | Em17 | + |-----------------------------------------------------------------------| + | Other rare, high energy processes | Em6 | + |-----------------------------------------------------------------------| + | Synchrotron radiation | Em16 | + |-----------------------------------------------------------------------| + | Transition radiation | Em8 | + |-----------------------------------------------------------------------| + | Photo-absorption-ionization model | Em10 | + ------------------------------------------------------------------------- + + + + TestEm0 - how to print cross-sections and stopping power used in input by + the standard EM package + + TestEm1 - how to count processes, activate/inactivate them and survey + the range of charged particles. How to define a maximum step size + + TestEm2 - shower development in an homogeneous material : + longitudinal and lateral profiles + + TestEm3 - shower development in a sampling calorimeter : collect energy + deposited, survey energy flow and print stopping power + + TestEm4 - 9 MeV point like photon source: plot spectrum of energy + deposited in a single media + + TestEm5 - how to study transmission, absorption and reflection of particles + through a single, thin or thick, layer. + + TestEm6 - physics list for rare, high energy, electromagnetic processes : + gamma conversion and e+ annihilation into pair of muons + + TestEm7 - how to produce a Bragg curve in water phantom. + How to compute dose in tallies + + TestEm8 - test of photo-absorption-ionisation model in thin absorbers, + and transition radiation + + TestEm9 - shower development in a crystal calorimeter; cut-per-region + + TestEm10 - XTR transition radiation model, investigation of ionisation + in thin absorbers + + TestEm11 - how to plot a depth dose profile in a rectangular box + + TestEm12 - how to plot a depth dose profile in spherical geometry : + point like source + + TestEm13 - how to compute cross sections of EM processes from rate of + transmission coefficient + + TestEm14 - how to compute cross sections of EM processes from direct + evaluation of the mean-free path. How to plot final state + + TestEm15 - compute and plot final state of Multiple Scattering as an + isolated process + + TestEm16 - simulation of synchrotron radiation + + TestEm17 - check the cross sections of high energy muon processes + + TestEm18 - energy lost by a charged particle in a single layer, + due to ionization and bremsstrahlung diff --git a/examples/extended/electromagnetic/TestEm0/.README.txt b/examples/extended/electromagnetic/TestEm0/.README.txt new file mode 100644 index 0000000000..71fcb1f7ca --- /dev/null +++ b/examples/extended/electromagnetic/TestEm0/.README.txt @@ -0,0 +1,41 @@ + +///\file "electromagnetic/TestEm0/.README.txt" +///\brief Example TestEm0 README page + +/*! \page ExampleTestEm0 Example TestEm0 + + This program is not a simulation. It prints the cross sections and stopping + power used by the standard electromagnetic package, via G4EmCalculator + which extracts these data from the PhysicsTables. + + The program can be used in batch or interactively. + + - execute TestEm0 in 'batch' mode from macro files : +\verbatim +% TestEm0 TestEm0.in +\endverbatim + + - Interactively, a typical sequence will be : +\verbatim +% TestEm0 +.... +Idle> /run/initialize +.... +Idle> /testem/det/setMat Silicon +Idle> /run/setCut 100 um +Idle> /gun/particle e- +Idle> /gun/energy 10 MeV +Idle> /run/beamOn +\endverbatim + + The last command triggers BuildPhysicsTable() and executes the program. + + +\section TestEm0_s1 DirectAccess + + DirectAccess.cc is a small batch program which shows how to compute the same + basic data directly from the processes (indeed the models). + + To run it, change name in the first line on GNUmakefile before to compile. + +*/ diff --git a/examples/extended/electromagnetic/TestEm0/README b/examples/extended/electromagnetic/TestEm0/README new file mode 100644 index 0000000000..2e90b845fc --- /dev/null +++ b/examples/extended/electromagnetic/TestEm0/README @@ -0,0 +1,39 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm0 + ------- + + This program is not a simulation. It prints the cross sections and stopping + power used by the standard electromagnetic package, via G4EmCalculator + which extracts these data from the PhysicsTables. + + The program can be used in batch or interactively. + + - execute TestEm0 in 'batch' mode from macro files : + % TestEm0 TestEm0.in + + - Interactively, a typical sequence will be : + % TestEm0 + .... + Idle> /run/initialize + .... + Idle> /testem/det/setMat Silicon + Idle> /run/setCut 100 um + Idle> /gun/particle e- + Idle> /gun/energy 10 MeV + Idle> /run/beamOn + + The last command triggers BuildPhysicsTable() and executes the program. + + + DirectAccess + ------------ + + DirectAccess is a small batch program which shows how to compute the same + basic data directly from the processes (indeed the models). + + To run it, change name in the first line on GNUmakefile before to compile. diff --git a/examples/extended/electromagnetic/TestEm1/.README.txt b/examples/extended/electromagnetic/TestEm1/.README.txt new file mode 100644 index 0000000000..a2f27dd1e7 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm1/.README.txt @@ -0,0 +1,164 @@ + +///\file "electromagnetic/TestEm1/.README.txt" +///\brief Example TestEm1 README page + +/*! \page ExampleTestEm1 Example TestEm1 + + - How to count processes. + - How to activate/inactivate processes. + - How to survey the tracking, in particular the range of charged particles. + - How to define a maximum step size. + +\section TestEm1_s1 GEOMETRY DEFINITION + + It is a simple box which represents a 'semi infinite' homogeneous medium. + + Two parameters define the geometry : + - the material of the box, + - the full size of the box. + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, but all of + the above parameters can be changed interactively via the commands defined in + the DetectorMessenger class. + +\section TestEm1_s2 PHYSICS LIST + + Physics lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + EM physics builders can be local (eg. in this example) or from G4 kernel + physics_lists subdirectory. + + Local physics builder: + - "local" standard EM physics with current 'best' options setting. + these options are explicited in PhysListEmStandard + + From geant4/source/physics_lists/builders: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardSS" standard EM physics and single scattering model + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + Physics lists and options can be (re)set with UI commands + + A few commands have been added to PhysicsList, in order to set the production + threshold for secondaries for gamma and e-/e+. + +\section TestEm1_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the left face + of the box. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in commands + of G4ParticleGun class (see the macros provided with this example). + + In addition one can choose randomly the impact point of the incident particle. + The corresponding interactive command is built in PrimaryGeneratorMessenger. + +\section TestEm1_s4 VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm1.cc). + The initialisation of the drawing is done via the commands /vis/... in the + macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the box. + + The tracks are drawn at the end of event, and erased at the end of run. + +\section TestEm1_s5 PHYSICS SURVEY + + The particle's type and the physics processes which will be available in this + example are set in PhysicsList class. + + A set of macros defining various run conditions are provided. The processes + are actived/inactivated together with differents cuts, in order to survey the + processes one by one. + + The number of produced secondaries are counted, the number of steps, and the + number of process calls responsible of the step. + +\section TestEm1_s6 HOW TO START ? + + - Execute TestEm1 in 'batch' mode from macro files +\verbatim +% TestEm1 runs.mac +\endverbatim + + - Execute TestEm1 in 'interactive mode' with visualization +\verbatim +% TestEm1 +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + + Macros provided in this example: + - brems.mac: Bremsstrahlung only + - erange.mac: compute the csda range of primary particle + - geantino.mac: geantino as primary particle + - ionis.mac: Ionisation only + - photoelec.mac: 100 keV photon photoelectric effect + - radioactive.mac: use radioactive ion as primary particle + - range.mac: compute the csda range of the primary particle + with or without fluctuations + - runs.mac: electron 100 MeV; all processes + + Macros to be run interactively: + - annihil.mac: To visualise 100 MeV e+ annihilation + - decayinfly.mac: To visualise decay in fly of N16 + - gammaconversion.mac: To visualise gamma conversion and e+ annihilation + - photon.mac: To visualiza p300 keV photon beam + - stepMax.mac: to test command /testem/stepMax + - vis.mac: To activate visualization + +\section TestEm1_s7 TRACKING : StepMax + + In order to control the accuracy of the deposition, the user can limit + 'by hand' the maximum step size of charged particles. + As an example, this limitation is implemented as a 'full' process : + see StepMax class and its Messenger. The 'StepMax process' is registered + in the Physics List. + +\section TestEm1_s8 HISTOGRAMS + + Testem1 produces several histo which are saved as testem1.root by default. + Content of these histo: + - 1 : track length of primary particle + - 2 : number of steps primary particle + - 3 : step size of primary particle + - 4 : total energy deposit + - 5 : energy of charged secondaries at creation + - 6 : energy of neutral secondaries at creation + + The histograms are managed by G4AnalysisManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim + /analysis/setFileName name (default testem1) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default testem1) + +*/ diff --git a/examples/extended/electromagnetic/TestEm1/README b/examples/extended/electromagnetic/TestEm1/README new file mode 100644 index 0000000000..2e887537f7 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm1/README @@ -0,0 +1,157 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm1 + ------- + How to count processes. + How to activate/inactivate processes. + How to survey the tracking, in particular the range of charged particles. + How to define a maximum step size. + + 1 - GEOMETRY DEFINITION + + It is a simple box which represents a 'semi infinite' homogeneous medium. + + Two parameters define the geometry : + - the material of the box, + - the full size of the box. + + In addition a transverse uniform magnetic field can be applied. + e.g. /globalField/setValue 0 0 5 tesla + + The default geometry is constructed in DetectorConstruction class, but all of + the above parameters can be changed interactively via the commands defined in + the DetectorMessenger class. + + 2 - PHYSICS LIST + + Physics lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + EM physics builders can be local (eg. in this example) or from G4 kernel + physics_lists subdirectory. + + Local physics builder: + - "local" standard EM physics with current 'best' options setting. + these options are explicited in PhysListEmStandard + + From geant4/source/physics_lists/builders: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardSS" standard EM physics and single scattering model + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + Physics lists and options can be (re)set with UI commands + + A few commands have been added to PhysicsList, in order to set the production + threshold for secondaries for gamma and e-/e+. + + 3 - AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the left face + of the box. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in commands + of G4ParticleGun class (see the macros provided with this example). + + In addition one can choose randomly the impact point of the incident particle. + The corresponding interactive command is built in PrimaryGeneratorMessenger. + + 4 - VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm1.cc). + The initialisation of the drawing is done via the commands /vis/... in the + macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the box. + + The tracks are drawn at the end of event, and erased at the end of run. + + 5 - PHYSICS SURVEY + + The particle's type and the physics processes which will be available in this + example are set in PhysicsList class. + + A set of macros defining various run conditions are provided. The processes + are actived/inactivated together with differents cuts, in order to survey the + processes one by one. + + The number of produced secondaries are counted, the number of steps, and the + number of process calls responsible of the step. + + 6 - HOW TO START ? + + - execute TestEm1 in 'batch' mode from macro files + % TestEm1 runs.mac + + - execute TestEm1 in 'interactive mode' with visualization + % TestEm1 + .... + Idle> type your commands + .... + Idle> exit + + Macros provided in this example: + - brems.mac: Bremsstrahlung only + - erange.mac: compute the csda range of primary particle + - geantino.mac: geantino as primary particle + - ionis.mac: Ionisation only + - photoelec.mac: 100 keV photon photoelectric effect + - radioactive.mac: use radioactive ion as primary particle + - range.mac: compute the csda range of the primary particle + with or without fluctuations + - runs.mac: electron 100 MeV; all processes + + Macros to be run interactively: + - annihil.mac: To visualise 100 MeV e+ annihilation + - decayinfly.mac: To visualise decay in fly of N16 + - gammaconversion.mac: To visualise gamma conversion and e+ annihilation + - photon.mac: To visualiza p300 keV photon beam + - stepMax.mac: to test command /testem/stepMax + - vis.mac: To activate visualization + + 7 - TRACKING : StepMax + + In order to control the accuracy of the deposition, the user can limit + 'by hand' the maximum step size of charged particles. + As an example, this limitation is implemented as a 'full' process : + see StepMax class and its Messenger. The 'StepMax process' is registered + in the Physics List. + + 8 - HISTOGRAMS + + Testem1 produces several histo which are saved as testem1.root by default. + Content of these histo: + 1 : track length of primary particle + 2 : number of steps primary particle + 3 : step size of primary particle + 4 : total energy deposit + 5 : energy of charged secondaries at creation + 6 : energy of neutral secondaries at creation + + The histograms are managed by G4AnalysisManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default testem1) + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default testem1) diff --git a/examples/extended/electromagnetic/TestEm10/.README.txt b/examples/extended/electromagnetic/TestEm10/.README.txt new file mode 100644 index 0000000000..350be15731 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm10/.README.txt @@ -0,0 +1,103 @@ + +///\file "electromagnetic/TestEm10/.README.txt" +///\brief Example TestEm10 README page + +/*! \page ExampleTestEm10 Example TestEm10 + + Test for investigation of transition radiation. + Default setup for "TestEm10.in" and "TestEm10.large_N.in" is the simplified + setup for ALICE XTR test beam (~2004), defined in DetectorSimpleALICE class. + +\section TestEm10_s0 GEOMETRY DEFINITION + + The geometry setup includes "radiator" and "absorber" volumes + of a box shape. + + The "radiator" material is defined as a mixture of a gas and foil material + and the "absorber" contains a gas material. + + Several geometry setups are defined in the classes + DetectorSetupX, + where SetupX = ALICE06, Bari05, Barr90, Construction, Harris73, Messenger, SimpleALICE, Watase86 + + The default setup, SimpleALICE, can be changed via UI command: +\verbatim +/XTRdetector/setup setup + where setup = simpleALICE, alice06, bari05, harris73, watase86, barr90 +\endverbatim + + +\section TestEm10_s1 PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + absorber perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + +\section TestEm10_s2 DETECTOR RESPONSE + + In this example the total energy deposited in the "absorber" volume + is accounted in SensitevDetector class, and a spectrum of XTR gamma + particles, all secondary gamma particles and all secondary e- + particleas is accounted in StackingAction class. + +\section TestEm10_s3 PHYSICS + + The particle's type and the physic processes which will be available + in this example are set in PhysicsList class. + The trasition radiation process is defined in the + TransitionRadiationPhysics builder. + + The transition radiator models can be changed simply with: +\verbatim +Idle> /emphyslist/setXTRModel modelName +\endverbatim + See macro files "*.mac" for different setups providede with the example. + +\section TestEm10_s4 HISTOGRAMS + + Testem10 produces several histo which are saved as testem10.root by default. + Content of these histo: + - 1. Energy deposit in absorber + - 2. XTR Gamma spectrum + - 3. Secondary Gamma spectrum + - 4. Secondary e- spectrum + - 5. Energy deposit in absorber with the same histogram parameters + as in the previous version of this example (Geant4 version <=10.2) + + The histograms are managed by G4AnalysisManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default testem1) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default testem1) + +\section TestEm10_s5 HOW TO START ? + + - Execute TestEm10 in 'batch' mode from macro files e.g. +\verbatim +% TestEm10 run11.mac +\endverbatim + + - Execute TestEm10 in 'interactive' mode with visualization e.g. +\verbatim +% TestEm10 +.... +Idle> type your commands +.... +\endverbatim + +*/ diff --git a/examples/extended/electromagnetic/TestEm10/README b/examples/extended/electromagnetic/TestEm10/README new file mode 100644 index 0000000000..eafbb2fc8c --- /dev/null +++ b/examples/extended/electromagnetic/TestEm10/README @@ -0,0 +1,94 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm10 + -------- + + Test for investigation of transition radiation. + Default setup for "TestEm10.in" and "TestEm10.large_N.in" is the simplified + setup for ALICE XTR test beam (~2004), defined in DetectorSimpleALICE class. + + + 1- GEOMETRY DEFINITION + + The geometry setup includes "radiator" and "absorber" volumes + of a box shape. + + The "radiator" material is defined as a mixture of a gas and foil material + and the "absorber" contains a gas material. + + Several geometry setups are defined in the classes + DetectorSetupX, + where SetupX = ALICE06, Bari05, Barr90, Construction, Harris73, Messenger, SimpleALICE, Watase86 + + The default setup, SimpleALICE, can be changed via UI command: + /XTRdetector/setup setup + where setup = simpleALICE, alice06, bari05, harris73, watase86, barr90 + + 2- PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + absorber perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + + 3- DETECTOR RESPONSE + + In this example the total energy deposited in the "absorber" volume + is accounted in SensitevDetector class, and a spectrum of XTR gamma + particles, all secondary gamma particles and all secondary e- + particleas is accounted in StackingAction class. + + 4- PHYSICS + + The particle's type and the physic processes which will be available + in this example are set in PhysicsList class. + The trasition radiation process is defined in the + TransitionRadiationPhysics builder. + + The transition radiator models can be changed simply with: + + Idle> /emphyslist/setXTRModel modelName + + See macro files "*.mac" for different setups providede with the example. + + 5 - HISTOGRAMS + + Testem10 produces several histo which are saved as testem10.root by default. + Content of these histo: + 1: Energy deposit in absorber + 2: XTR Gamma spectrum + 3: Secondary Gamma spectrum + 4: Secondary e- spectrum + 5: Energy deposit in absorber with the same histogram parameters + as in the previous version of this example (Geant4 version <=10.2) + + The histograms are managed by G4AnalysisManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default testem1) + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default testem1) + + 6- HOW TO START ? + + - execute TestEm10 in 'batch' mode from macro files e.g. + % TestEm10 run11.mac + + - execute TestEm10 in 'interactive' mode with visualization e.g. + % TestEm10 + .... + Idle> type your commands + .... diff --git a/examples/extended/electromagnetic/TestEm11/.README.txt b/examples/extended/electromagnetic/TestEm11/.README.txt new file mode 100644 index 0000000000..36a3bfa9e1 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm11/.README.txt @@ -0,0 +1,192 @@ + +///\file "electromagnetic/TestEm11/.README.txt" +///\brief Example TestEm11 README page + +/*! \page ExampleTestEm11 Example TestEm11 + + How to plot a depth dose profile in a rectangular box. + + +\section TestEm11_s1 GEOMETRY DEFINITION + + The geometry consists of a stack of one or several blocks of homogenous + material, called absorbers. + Optionally, each absorber can be divided in thinner layers (replica) + + A minimum of 5 parameters define the geometry : + - the number of absorbers (NbOfAbsor) + - the material of each absorber, + - the thickness of each absorber, + - the tranverse dimension of the stack (sizeYZ), + - the number of divisions of each absorber (NbOfDivisions) + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + +\section TestEm11_s2 PHYSICS LIST + + Physics Lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + The following options for EM physics using builders from physics_lists + sub-package are available: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emstandardGS" standard EM physics and Goudsmit-Saunderson multiple scatt. + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + A local builder, PhysListEmStandard "local" (similar to opt3) is also + available. + + Physics lists and options can be (re)set with UI commands + +\section TestEm11_s3 ACTION INITIALIZATION + + A newly introduced class, ActionInitialization, instantiates and registers + to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instantiated just once, + via invoking the method: + ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class (if present) has to be instantiated both thread-local + and global, which is why its instance has to be created also in the method + ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + +\section TestEm11_s4 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the + left face of the box. The type of the particle and its energy are set + in the PrimaryGeneratorAction class, and can be changed via the G4 + build-in commands of G4ParticleGun class (see the macros provided with + this example). + + In addition one can choose randomly the impact point of the incident + particle. The corresponding interactive command is built in + PrimaryGeneratorMessenger class. + + A RUN is a set of events. + +\section TestEm11_s5 VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm11.cc). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the box. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged one, + or none. This command is defined in EventActionMessenger class. + +\section TestEm11_s6 HOW TO START ? + + - Execute TestEm11 in 'batch' mode from macro files +\verbatim +% TestEm11 run01.mac +\endverbatim + + - Execute TestEm11 in 'interactive mode' with visualization +\verbatim +% TestEm11 +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + + Macros provided in this example: + - alpha.mac: alpha (400 MeV) on water + - ionC12.mac: ion C12 (2.4 GeV) on water + - multiLayers.mac: gamma (6 MeV) on multi layers + - radioactive.mac: radioactive ion on multi layers + - range.mac: compute csda range of primary particle + - run01.mac: e- (500 keV) on silicon. Step max from histo 1 + - run02.mac: e- (500 keV) on silicon. Step max from geometry + - sandia.mac: to compare with Sandia data + - water.mac: e- (4 MeV) on water. No constraint on tracking step + + Macros to be run interactively: + - vis.mac: To activate visualization + +\section TestEm11_s7 TRACKING and STEP MAX + + TestEm11 computes the distribution of energy deposited along the trajectory of + the incident particle : the so-called longitudinal energy profile, + or depth dose distribution. + The energy deposited (edep) is randomly distribued along the step (see + SteppingAction). + + In order to control the accuracy of the deposition, the maximum step size + of charged particles is computed automatically from the binning of + histograms 1 and 8 (see RunAction). + + As an example, this limitation is implemented as a 'full' process : + see StepMax class and its messenger, StepMaxMessenger. The 'StepMax process' is registered + in the Physics List. + + StepMax is evaluated at RunAction::BeginOfRunAction(), + and passed to the StepMax process. + A boolean UI command allows to deactivate this mechanism. + Another UI command allows to define directly a stepMax value. + +\section TestEm11_s8 HISTOGRAMS + + TestEm11 has several predefined 1D histograms : + + - 1 : longitudinal energy profile (in MeV/mm and per event) + - 2 : total energy deposited in the absorber + - 3 : total track length of the primary track + - 4 : step size of the primary track + - 5 : projected range of the primary track + - 6 : total track length of charged secondary tracks + - 7 : step size of charged secondary tracks + - 8 : longitudinal energy profile (in MeV.cm2/g), as a function of x/r0 + where r0 is the range of the primary particle + + - 11 : energy deposited in absorber 1 + - 12 : energy deposited in absorber 2 + ...etc........ + + The histograms are managed by G4Analysis classes; + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default testem11) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default testem11) + +*/ diff --git a/examples/extended/electromagnetic/TestEm11/README b/examples/extended/electromagnetic/TestEm11/README new file mode 100644 index 0000000000..d28d6ac9b6 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm11/README @@ -0,0 +1,185 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm11 + -------- + + How to plot a depth dose profile in a rectangular box. + + + 1- GEOMETRY DEFINITION + + The geometry consists of a stack of one or several blocks of homogenous + material, called absorbers. + Optionally, each absorber can be divided in thinner layers (replica) + + A minimum of 5 parameters define the geometry : + - the number of absorbers (NbOfAbsor) + - the material of each absorber, + - the thickness of each absorber, + - the tranverse dimension of the stack (sizeYZ), + - the number of divisions of each absorber (NbOfDivisions) + + In addition a transverse uniform magnetic field can be applied. + eg: /globalField/setValue 0 0 5 tesla + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + + 2- PHYSICS LIST + + Physics Lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + The following options for EM physics using builders from physics_lists + sub-package are available: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emstandardGS" standard EM physics and Goudsmit-Saunderson multiple scatt. + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + - "emstandardMP" standard EM physics where for e- a new model + G4DiscreteScatteringModel is applied; for this model + a data set G4GBFPDATA should be requested from EM group + + A local builder, PhysListEmStandard "local" (similar to opt3) is also + available. + + Physics lists and options can be (re)set with UI commands + + 3- ACTION INITIALIZATION + + A newly introduced class, ActionInitialization, instantiates and registers + to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instantiated just once, + via invoking the method: + ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class (if present) has to be instantiated both thread-local + and global, which is why its instance has to be created also in the method + ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + + 4- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the + left face of the box. The type of the particle and its energy are set + in the PrimaryGeneratorAction class, and can be changed via the G4 + build-in commands of G4ParticleGun class (see the macros provided with + this example). + + In addition one can choose randomly the impact point of the incident + particle. The corresponding interactive command is built in + PrimaryGeneratorMessenger class. + + A RUN is a set of events. + + 5- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the box. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged one, + or none. This command is defined in EventActionMessenger class. + + 6- HOW TO START ? + + - Execute TestEm11 in 'batch' mode from macro files + % TestEm11 run01.mac + + - Execute TestEm11 in 'interactive mode' with visualization + % TestEm11 + .... + Idle> type your commands + .... + Idle> exit + + Macros provided in this example: + - alpha.mac: alpha (400 MeV) on water + - ionC12.mac: ion C12 (2.4 GeV) on water + - multiLayers.mac: gamma (6 MeV) on multi layers + - radioactive.mac: radioactive ion on multi layers + - range.mac: compute csda range of primary particle + - run01.mac: e- (500 keV) on silicon. Step max from histo 1 + - run02.mac: e- (500 keV) on silicon. Step max from geometry + - sandia.mac: to compare with Sandia data + - water.mac: e- (4 MeV) on water. No constraint on tracking step + + Macros to be run interactively: + - vis.mac: To activate visualization + + 7- TRACKING and STEP MAX + + TestEm11 computes the distribution of energy deposited along the trajectory of + the incident particle : the so-called longitudinal energy profile, + or depth dose distribution. + The energy deposited (edep) is randomly distribued along the step (see + SteppingAction). + + In order to control the accuracy of the deposition, the maximum step size + of charged particles is computed automatically from the binning of + histograms 1 and 8 (see RunAction). + + As an example, this limitation is implemented as a 'full' process : + see StepMax class and its Messenger. The 'StepMax process' is registered + in the Physics List. + + StepMax is evaluated at RunAction::BeginOfRun(), + and passed to the StepMax process. + A boolean UI command allows to deactivate this mechanism. + Another UI command allows to define directly a stepMax value. + + 8- HISTOGRAMS + + TestEm11 has several predefined 1D histograms : + + 1 : longitudinal energy profile (in MeV/mm and per event) + 2 : total energy deposited in all absorbers + 3 : total track length of the primary track + 4 : step size of the primary track + 5 : projected range of the primary track + 6 : total track length of charged secondary tracks + 7 : step size of charged secondary tracks + 8 : longitudinal energy profile (in MeV.cm2/g), as a function of x/r0 + where r0 is the range of the primary particle + + 11 : energy deposited in absorber 1 + 12 : energy deposited in absorber 2 + ...etc........ + + The histograms are managed by G4Analysis classes. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default testem11) + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default testem11) diff --git a/examples/extended/electromagnetic/TestEm11/sandia/EGSnrc/README b/examples/extended/electromagnetic/TestEm11/sandia/EGSnrc/README new file mode 100644 index 0000000000..50d2434907 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm11/sandia/EGSnrc/README @@ -0,0 +1,26 @@ +------------------ +EGSnrc Simulations +------------------ + +These results were computed with the EGSnrc user code DOSRZnrc. + Yann Perrot (perrot@clermont.in2p3.fr) December 2010 + +Simulation parameters: +---------------------- + +Electron Stepping Algorithm : PRESTA-II +Boundary Crossing Algoritm : EXACT with skin parameter=3 +Maximum Energy Loss per Step : ESTEPE = 1% +Electron tracking cut : 10keV for E>=1MeV + 1keV for E<1MeV + +References: +---------- + +Rogers and Bielajew 1986 +Med. Phys. 13, 687-694 + +Rogers et al 2003 +NRC User Codes for EGSnrc +Technical Report PIRS-702(RevB) +National Research Council of Canada diff --git a/examples/extended/electromagnetic/TestEm12/.README.txt b/examples/extended/electromagnetic/TestEm12/.README.txt new file mode 100644 index 0000000000..5f79ed3d93 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm12/.README.txt @@ -0,0 +1,174 @@ + +///\file "electromagnetic/TestEm12/.README.txt" +///\brief Example TestEm12 README page + +/*! \page ExampleTestEm12 Example TestEm12 + + + How to plot a depth dose profile in spherical geometry. + + +\section TestEm12_s1 GEOMETRY DEFINITION + + The geometry consists of a single sphere of an homogenous material. + Optionally, the sphere can be divided in thin shells. + + 3 parameters define the geometry : + - the material of the sphere, + - the radius of the sphere (absorRadius), + - the number of shells (nbOfLayers) + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + +\section TestEm12_s2 PHYSICS LIST + + Physics Lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + The following options for EM physics using builders from physics_lists + sub-package are available: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emstandardGS" standard EM physics and Goudsmit-Saunderson multiple scatt. + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + - "dna" process and models for Geant4-DNA + - "dna_opt1" process and models for Geant4-DNA + - "dna_opt2" process and models for Geant4-DNA + - "dna_opt3" process and models for Geant4-DNA + - "dna_opt4" process and models for Geant4-DNA + - "dna_opt5" process and models for Geant4-DNA + - "dna_opt6" process and models for Geant4-DNA + - "dna_opt7" process and models for Geant4-DNA + + A local builder, PhysListEmStandard "local" (similar to opt0) is also + available. + + Physics lists and options can be (re)set with UI commands + +\section TestEm12_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle randomly shot at + the centre of the sphere. The type of the particle and its energy are set + in the PrimaryGeneratorAction class, and can be changed via the G4 + built-in commands of G4ParticleGun class (see the macros provided with + this example). + + In addition one can deactivate the randomness of the direction of the + incident particle. The corresponding interactive command is built in + PrimaryGeneratorMessenger class. + + A RUN is a set of events. + +\section TestEm12_s4 VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm12.cc). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the + box. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged ones, + or none. This command is defined in EventActionMessenger class. + +\section TestEm12_s5 HOW TO START ? + + - Execute TestEm12 in 'batch' mode from macro files +\verbatim +% TestEm12 run01.mac +\endverbatim + + - Execute TestEm12 in 'interactive mode' with visualization +\verbatim +% TestEm12 +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + + Macros provided in this example: + - berger.mac: e- (100 keV) on water + - dna.mac: e- (1 keV) on water. DNA physics list + - run01.mac: e- (4 MeV) on water. Step max from histos 1 and 8 + - run02.mac: e- (4 MeV) on water. Step max from geometry + + Macros to be run interactively: + - vis.mac: To activate visualization + +\section TestEm12_s6 TRACKING and STEP MAX + + TestDm12 computes the total energy deposited along the trajectory of + the incident particle : the so-called longitudinal energy profile, + or depth dose distribution. + The energy deposited (edep) is randomly distributed along the step (see + SteppingAction). + + In order to control the accuracy of the deposition, the maximum step size + of charged particles is computed automatically from the binning of + histograms 1 and 8 (see RunAction). + + As an example, this limitation is implemented as a 'full' process : + see StepMax class and its messenger. + The 'StepMax process' is registered in the Physics List. + + StepMax is evaluated in RunAction::BeginOfRun() and passed + to the StepMax process. + A boolean UI command allows to deactivate this mechanism. + Another UI command allows to define directly a stepMax value. + +\section TestEm12_s7 HISTOGRAMS + + Testem12 has several predefined 1D histograms : + + - 1 : energy profile dE/dr (in MeV/mm per event) + - 2 : total energy deposited in the absorber + - 3 : total track length of the primary track + - 4 : step size of the primary track + - 5 : projected range of the primary track + - 6 : total track length of charged secondary tracks + - 7 : step size of charged secondary tracks + - 8 : normalized energy profile d(E/E0)/d(r/r0), where r0 is the range of + the primary particle of energy E0 + + The histograms are managed by G4AnalysisManager class and its messenger. + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default testem12) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default testem12) + +*/ diff --git a/examples/extended/electromagnetic/TestEm12/README b/examples/extended/electromagnetic/TestEm12/README new file mode 100644 index 0000000000..60c8ff5ed2 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm12/README @@ -0,0 +1,163 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm12 + -------- + + + How to plot a depth dose profile in spherical geometry. + + + 1- GEOMETRY DEFINITION + + The geometry consists of a single sphere of an homogenous material. + Optionally, the sphere can be divided in thin shells. + + 3 parameters define the geometry : + - the material of the sphere, + - the radius of the sphere (absorRadius), + - the number of shells (nbOfLayers) + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + + 2- PHYSICS LIST + + Physics Lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + The following options for EM physics using builders from physics_lists + sub-package are available: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emstandardGS" standard EM physics and Goudsmit-Saunderson multiple scatt. + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + - "dna" process and models for Geant4-DNA + - "dna_opt1" process and models for Geant4-DNA + - "dna_opt2" process and models for Geant4-DNA + - "dna_opt3" process and models for Geant4-DNA + - "dna_opt4" process and models for Geant4-DNA + - "dna_opt5" process and models for Geant4-DNA + - "dna_opt6" process and models for Geant4-DNA + - "dna_opt7" process and models for Geant4-DNA + + A local builder, PhysListEmStandard "local" (similar to opt0) is also + available. + + Physics lists and options can be (re)set with UI commands + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle randomly shot at + the centre of the sphere. The type of the particle and its energy are set + in the PrimaryGeneratorAction class, and can be changed via the G4 + built-in commands of ParticleGun class (see the macros provided with + this example). + + In addition one can deactivate the randomness of the direction of the + incident particle. The corresponding interactive command is built in + PrimaryGeneratorMessenger class. + + A RUN is a set of events. + + 4- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the + box. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged ones, + or none. This command is defined in EventActionMessenger class. + + 5- HOW TO START ? + + - execute TestEm12 in 'batch' mode from macro files + % TestEm12 run01.mac + + - execute TestEm12 in 'interactive mode' with visualization + % TestEm12 + .... + Idle> type your commands + .... + Idle> exit + + Macros provided in this example: + - berger.mac: e- (100 keV) on water + - dna.mac: e- (1 keV) on water. DNA physics list + - run01.mac: e- (4 MeV) on water. Step max from histos 1 and 8 + - run02.mac: e- (4 MeV) on water. Step max from geometry + + Macros to be run interactively: + - vis.mac: To activate visualization + + 6- TRACKING and STEP MAX + + TestDm12 computes the total energy deposited along the trajectory of + the incident particle : the so-called longitudinal energy profile, + or depth dose distribution. + The energy deposited (edep) is randomly distributed along the step (see + SteppingAction). + + In order to control the accuracy of the deposition, the maximum step size + of charged particles is computed automatically from the binning of + histograms 1 and 8 (see RunAction). + + As an example, this limitation is implemented as a 'full' process : + see StepMax class and its Messenger. The 'StepMax process' is registered + in the Physics List. + + StepMax is evaluated in RunAction::BeginOfRun() and passed + to the StepMax process. + A boolean UI command allows to deactivate this mechanism. + Another UI command allows to define directly a stepMax value. + + 7- HISTOGRAMS + + Testem12 has several predefined 1D histograms : + + 1 : energy profile dE/dr (in MeV/mm per event) + 2 : total energy deposited in the absorber + 3 : total track length of the primary track + 4 : step size of the primary track + 5 : projected range of the primary track + 6 : total track length of charged secondary tracks + 7 : step size of charged secondary tracks + 8 : normalized energy profile d(E/E0)/d(r/r0), where r0 is the range of + the primary particle of energy E0 + + The histograms are managed by G4AnalysisManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default testem12) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default testem12) diff --git a/examples/extended/electromagnetic/TestEm12/berger/EGSnrc/README b/examples/extended/electromagnetic/TestEm12/berger/EGSnrc/README new file mode 100644 index 0000000000..8f0ce6b57b --- /dev/null +++ b/examples/extended/electromagnetic/TestEm12/berger/EGSnrc/README @@ -0,0 +1,27 @@ +------------------ +EGSnrc Simulations +------------------ + +These results were computed with the EGSnrc user code EDKnrc, +developed by E. Mainegra et al. + Yann Perrot (perrot@clermont.in2p3.fr) December 2010 + +Simulation parameters: +---------------------- + +Electron Stepping Algorithm : PRESTA-II +Boundary Crossing Algoritm : EXACT with skin parameter=3 +Maximum Energy Loss per Step : ESTEPE = 1% +Electron tracking cut : 10keV for E>=1MeV + 1keV for E<1MeV + +References: +---------- + +Mainegra et al 2005 +Med. Phys. 32, 685-99 + +Rogers et al 2003 +NRC User Codes for EGSnrc +Technical Report PIRS-702(RevB) +National Research Council of Canada diff --git a/examples/extended/electromagnetic/TestEm13/.README.txt b/examples/extended/electromagnetic/TestEm13/.README.txt new file mode 100644 index 0000000000..ebd47b15e6 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm13/.README.txt @@ -0,0 +1,84 @@ + +///\file "electromagnetic/TestEm13/.README.txt" +///\brief Example TestEm13 README page + +/*! \page ExampleTestEm13 Example TestEm13 + + How to compute cross sections from the transmition coefficient + ( see below, \ref TestEm13_s4). + +\section TestEm13_s1 GEOMETRY DEFINITION + + It is a single box representing a layer of finite thickness of + homogeneous material. + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + + The default geometry (1 cm of water) is constructed in + DetectorConstruction, but the above parameters can be changed + interactively via the commands defined in DetectorMessenger. + +\section TestEm13_s2 PHYSICS LIST + + The physics list contains the standard electromagnetic processes. + In order not to introduce 'artificial' constraints on the step size, the + multiple scattering is not instanciated, and all processes are + registered as discrete : there is no continuous energy loss. + +\section TestEm13_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the edge + of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (1 MeV gamma), and can be changed via the G4 + build-in commands of G4ParticleGun class (see the macros provided with + this example). + +\section TestEm13_s4 PHYSICS + + An event is killed at the first step of the incident paticle. + Either the particle has interacted or is transmitted through the layer. + The cross section, also called absorption coefficient, is computed from + the rate of unaltered transmitted incident particles. + + The result is compared with the 'input' data, i.e. with the cross + sections stored in the PhysicsTables and used by Geant4. + + A set of macros defining various run conditions are provided. + The processes are actived/inactived in order to survey the processes + individually. + + +\section TestEm13_s6 VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm13.cc). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the + box. + + The tracks are drawn at the end of event, and erased at the end of run. + +\section TestEm13_s7- HOW TO START ? + + - Execute TestEm13 in 'batch' mode from macro files : +\verbatim +% TestEm13 compt.mac +\endverbatim + + - Execute TestEm13 in 'interactive mode' with visualization : +\verbatim +% TestEm13 +Idle> control/execute vis.mac +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + + +*/ diff --git a/examples/extended/electromagnetic/TestEm13/README b/examples/extended/electromagnetic/TestEm13/README new file mode 100644 index 0000000000..4996e58299 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm13/README @@ -0,0 +1,79 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm13 + -------- + + How to compute cross sections from the transmition coefficient + ( see below, item Physics). + + 1- GEOMETRY DEFINITION + + It is a single box representing a layer of finite thickness of + homogeneous material. + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + + The default geometry (1 cm of water) is constructed in + DetectorConstruction, but the above parameters can be changed + interactively via the commands defined in DetectorMessenger. + + 2- PHYSICS LIST + + The physics list contains the standard electromagnetic processes. + In order not to introduce 'artificial' constraints on the step size, the + multiple scattering is not instanciated, and all processes are + registered as discrete : there is no continuous energy loss. + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the edge + of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (1 MeV gamma), and can be changed via the G4 + build-in commands of ParticleGun class (see the macros provided with + this example). + + 4- PHYSICS + + An event is killed at the first step of the incident paticle. + Either the particle has interacted or is transmitted through the layer. + The cross section, also called absorption coefficient, is computed from + the rate of unaltered transmitted incident particles. + + The result is compared with the 'input' data, i.e. with the cross + sections stored in the PhysicsTables and used by Geant4. + + A set of macros defining various run conditions are provided. + The processes are actived/inactived in order to survey the processes + individually. + + + 6- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the + box. + + The tracks are drawn at the end of event, and erased at the end of run. + + 7- HOW TO START ? + + execute TestEm13 in 'batch' mode from macro files : + % TestEm13 compt.mac + + execute TestEm13 in 'interactive mode' with visualization : + % TestEm13 + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit + diff --git a/examples/extended/electromagnetic/TestEm14/.README.txt b/examples/extended/electromagnetic/TestEm14/.README.txt new file mode 100644 index 0000000000..2107764bfc --- /dev/null +++ b/examples/extended/electromagnetic/TestEm14/.README.txt @@ -0,0 +1,132 @@ + +///\file "electromagnetic/TestEm14/.README.txt" +///\brief Example TestEm14 README page + +/*! \page ExampleTestEm14 Example TestEm14 + + - How to compute cross sections from the direct evaluation of the mean + free path ( see below, \ref TestEm14_s4). + - How to plot final state of a process. + +\section TestEm14_s1 GEOMETRY DEFINITION + + It is a single box representing a 'semi infinite' homogeneous medium. + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + + The default geometry (100 m of water) is constructed in + DetectorConstruction, but the above parameters can be changed + interactively via the commands defined in DetectorMessenger. + +\section TestEm14_s2 PHYSICS LIST + + The physics list contains the standard electromagnetic processes. + In order not to introduce 'artificial' constraints on the step size, the + multiple scattering is not instanciated, and all processes are + registered as discrete : there is no continuous energy loss. + +\section TestEm14_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the edge + of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (1 MeV gamma), and can be changed via the G4 + build-in commands of G4ParticleGun class (see the macros provided with + this example). + +\section TestEm14_s4 PHYSICS + + An event is killed at the first interaction of the incident paticle. + The absorption length, also called mean free path, is computed as + the mean value of the track length of the incident particle. + This is why the medium must be 'infinite' : to be sure that interaction + occurs at any events. + + The result is compared with the 'input' data, i.e. with the cross + sections stored in the PhysicsTables and used by Geant4. + + The energy spectrum and the angular distribution of the scattered + particle (if any) and of the created secondaries are plotted (see + SteppingAction). + + A set of macros defining various run conditions are provided. + The processes are actived/inactived in order to survey the processes + individually. + +\section TestEm14_s5 HISTOGRAMS + + The test contains 6 built-in 1D histograms, which are managed by the + HistoManager class and its messenger, HistoMessenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + - 1 : "scattered primary particle: energy spectrum" + - 2 : "scattered primary particle: costheta distribution" + - 3 : "charged secondaries: energy spectrum" + - 4 : "charged secondaries: costheta distribution" + - 5 : "neutral secondaries: energy spectrum" + - 6 : "neutral secondaries: costheta distribution" + + The histograms are managed by the HistoManager class and its messenger, + HistoMessenger + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default testem14) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default testem14) + +\subsection TestEm14_sub_s51 Using hbook format + + Need a special treatement : the Cern Library must be installed and the + environment variable CERNLIB correctly set. Then, *before* compiling, + activate G4_USE_HBOOK in GNUmakefile and g4hbook.hh in HistoManager.hh + +\section TestEm14_s6- VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm14.cc). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the + box. + + The tracks are drawn at the end of event, and erased at the end of run. + +\section TestEm14_s7- HOW TO START ? + + - Execute TestEm14 in 'batch' mode from macro files : +\verbatim +% TestEm14 compt.mac +\endverbatim + + - Execute TestEm14 in 'interactive mode' with visualization : +\verbatim +% TestEm14 +Idle> control/execute vis.mac +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + +*/ + diff --git a/examples/extended/electromagnetic/TestEm14/README b/examples/extended/electromagnetic/TestEm14/README new file mode 100644 index 0000000000..46a84c81ed --- /dev/null +++ b/examples/extended/electromagnetic/TestEm14/README @@ -0,0 +1,121 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm14 + -------- + + How to compute cross sections from the direct evaluation of the mean + free path ( see below, item Physics). + How to plot final state of a process. + + 1- GEOMETRY DEFINITION + + It is a single box representing a 'semi infinite' homogeneous medium. + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + + The default geometry (100 m of water) is constructed in + DetectorConstruction, but the above parameters can be changed + interactively via the commands defined in DetectorMessenger. + + 2- PHYSICS LIST + + The physics list contains the standard electromagnetic processes. + In order not to introduce 'artificial' constraints on the step size, the + multiple scattering is not instanciated, and all processes are + registered as discrete : there is no continuous energy loss. + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the edge + of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (1 MeV gamma), and can be changed via the G4 + build-in commands of ParticleGun class (see the macros provided with + this example). + + 4- PHYSICS + + An event is killed at the first interaction of the incident paticle. + The absorption length, also called mean free path, is computed as + the mean value of the track length of the incident particle. + This is why the medium must be 'infinite' : to be sure that interaction + occurs at any events. + + The result is compared with the 'input' data, i.e. with the cross + sections stored in the PhysicsTables and used by Geant4. + + The energy spectrum and the angular distribution of the scattered + particle (if any) and of the created secondaries are plotted (see + SteppingAction). + + A set of macros defining various run conditions are provided. + The processes are actived/inactived in order to survey the processes + individually. + + 5- HISTOGRAMS + + The test contains 6 built-in 1D histograms, which are managed by the + HistoManager class and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + 1 "scattered primary particle: energy spectrum" + 2 "scattered primary particle: costheta distribution" + 3 "charged secondaries: energy spectrum" + 4 "charged secondaries: costheta distribution" + 5 "neutral secondaries: energy spectrum" + 6 "neutral secondaries: costheta distribution" + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default testem14) + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default testem14) + + Using hbook format + ------------------ + + Need a special treatement : the Cern Library must be installed and the + environment variable CERNLIB correctly set. Then, *before* compiling, + activate G4_USE_HBOOK in GNUmakefile and g4hbook.hh in HistoManager.hh + + 6- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the + box. + + The tracks are drawn at the end of event, and erased at the end of run. + + 7- HOW TO START ? + + execute TestEm14 in 'batch' mode from macro files : + % TestEm14 compt.mac + + execute TestEm14 in 'interactive mode' with visualization : + % TestEm14 + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit + diff --git a/examples/extended/electromagnetic/TestEm15/.README.txt b/examples/extended/electromagnetic/TestEm15/.README.txt new file mode 100644 index 0000000000..4805c4c8e2 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm15/.README.txt @@ -0,0 +1,124 @@ + +///\file "electromagnetic/TestEm15/.README.txt" +///\brief Example TestEm15 README page + +/*! \page ExampleTestEm15 Example TestEm15 + + How to compute and plot the final state of Multiple Scattering + considered as an isolated process. + The method is exposed below : see \ref TestEm15_s4. + +\section TestEm15_s1 GEOMETRY DEFINITION + + It is a single box representing a 'semi infinite' homogeneous medium. + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + + The default geometry (100 m of water) is constructed in + DetectorConstruction, but the above parameters can be changed + interactively via the commands defined in DetectorMessenger. + +\section TestEm15_s2 PHYSICS LIST + + The physics list contains the standard electromagnetic processes. + In order not to introduce 'articicial' constraints on the step size, + there is no limitation from the maximum energy lost per step. + +\section TestEm15_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the edge + of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (1 MeV electron), and can be changed via the G4 + build-in commands of G4ParticleGun class (see the macros provided with + this example). + +\section TestEm15_s4 PHYSICS + + All discrete processes are inactivated (see provided macros), + so that Multiple Scattering is 'forced' to determine the first step of + the primary particle. The step size and the final state are computed + and plotted. Then the event is immediately killed. + + The result is compared with the 'input' data, i.e. with the cross + sections stored in the PhysicsTables and used by Geant4. + + The stepMax command provides an additionnal control of the step size of + the multiple scattering. + + +\section TestEm15_s5 HISTOGRAMS + + The test contains 9 built-in 1D histograms, which are managed by the + HistoManager class and its Messenger. The histos can be individually + activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + - 1 : Multiple Scattering. True step length + - 2 : Multiple Scattering. Geom step length + - 3 : Multiple Scattering. Ratio geomSl/trueSl + - 4 : Multiple Scattering. Lateral displacement: radius + - 5 : Multiple Scattering. Lateral displac: psi_space + - 6 : Multiple Scattering. Angular distrib: theta_plane + - 7 : Multiple Scattering. Phi-position angle + - 8 : Multiple Scattering. Phi-direction angle + - 9 : Multiple Scattering. Correlation: cos(phiPos-phiDir) + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default testem15) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default testem15) + +\section TestEm15_s6 VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm15.cc). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the + box. + + The tracks are drawn at the end of event, and erased at the end of run. + +\section TestEm15_s7- HOW TO START ? + + - Execute TestEm15 in 'batch' mode from macro files : +\verbatim +% TestEm15 compt.mac +\endverbatim + + - Execute TestEm15 in 'interactive mode' with visualization : +\verbatim +% TestEm15 +Idle> control/execute vis.mac +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + +*/ + diff --git a/examples/extended/electromagnetic/TestEm15/README b/examples/extended/electromagnetic/TestEm15/README new file mode 100644 index 0000000000..eab8f15e35 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm15/README @@ -0,0 +1,128 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm15 + -------- + + How to compute and plot the final state of Multiple Scattering + or Gamma Conversion considered as an isolated processes. + The method is exposed below : see item Physics. + + 1- GEOMETRY DEFINITION + + It is a single box representing a 'semi infinite' homogeneous medium. + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + + The default geometry (100 m of water) is constructed in + DetectorConstruction, but the above parameters can be changed + interactively via the commands defined in DetectorMessenger. + + 2- PHYSICS LIST + + The physics list contains the standard electromagnetic processes. + In order not to introduce 'artificial' constraints on the step size, + there is no limitation from the maximum energy lost per step. + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the edge + of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (1 MeV electron), and can be changed via the G4 + build-in commands of ParticleGun class (see the macros provided with + this example). + + 4- PHYSICS + + All discrete processes are inactivated (see provided macros), + so that Multiple Scattering or Gamma Conversion is 'forced' to + determine the first step of the primary particle. + The step size and the final state are computed and plotted. + Then the event is immediately killed. + + The result is compared with the 'input' data, i.e. with the cross + sections stored in the PhysicsTables and used by Geant4. + + The stepMax command provides an additional control of the step size of + the multiple scattering. + + + 5- HISTOGRAMS + + The test contains 16 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + 1 Multiple Scattering. True step length + 2 Multiple Scattering. Geom step length + 3 Multiple Scattering. Ratio geomSl/trueSl + 4 Multiple Scattering. Lateral displacement: radius + 5 Multiple Scattering. Lateral displac: psi_space + 6 Multiple Scattering. Angular distrib: theta_plane + 7 Multiple Scattering. Phi-position angle + 8 Multiple Scattering. Phi-direction angle + 9 Multiple Scattering. Correlation: cos(phiPos-phiDir) + + 10 Gamma Conversion. Open Angle * Egamma + 11 Gamma Conversion. Log10(P recoil) + 12 Gamma Conversion. Phi P recoil angle + 13 Gamma Conversion. Phi P plus angle + 14 Gamma Conversion. 2 * cos(phiplus + phiminus) Asymmetry + 15 Gamma Conversion. E plus / E gamma + 16 Gamma Conversion. Phi of Gamma Polarization + + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default testem15) + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default testem15) + + 6- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialization of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualization: + > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the + box. + + The tracks are drawn at the end of event, and erased at the end of run. + + 7- HOW TO START ? + + execute TestEm15 in 'batch' mode from macro files : + % TestEm15 compt.mac + + execute TestEm15 in 'interactive mode' with visualization : + % TestEm15 + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit + +8 - MACROS + The examples of macros for Multiple Scattering: + electron.mac muon.mac proton.mac + + The example of Gamma Conversion macro : + gamma.mac - gamma to e+ e- + gamma2mumu.mac gamma to mu+ mu- diff --git a/examples/extended/electromagnetic/TestEm15/README.gamma b/examples/extended/electromagnetic/TestEm15/README.gamma new file mode 100644 index 0000000000..9ecb1684d7 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm15/README.gamma @@ -0,0 +1,48 @@ +TestEm15 : gamma.mac + +-- tests of the 5D gamma -> e+e- conversion model G4BetheHeitler5DModel + +All discrete processes are inactivated (see macro), +so Gamma Conversion is 'forced'. + +Histograms : + + 10 # Open Angle (rad)* E gamma (MeV) +The most probable value of the pair opening angle multiplied by the +photon energy is 1.6 rad*MeV. +Olsen, Phys. Rev. 131 (1963) 406. See also Fig. 7 of arXiv:1802.08253 + + 11 # Log10 ( recoil momentum) +The distribution of the recoil momentum is described by +Jost, Phys. Rev. 80 (1950) 189 (no form factor). +See also Fig. 2 of Astroparticle Physics 88 (2017) 60. + + 12 # Phi recoil + 13 # Phi positron + + 14 # Asymmetry 2 * cos(phi_+ + phi_-) +For a photon propagating along x, polarized along y, the average value of + 2 * cos(phi_+ + phi_-), +provides a measurement of the polarization asymmetry, A. +Eq. (12) of Nucl. Instrum. Meth. A 729 (2013) 765 +The azimuthal angle of the event defined as the bisector angle +of the azimuthal angles of the positron and of the electron, +(phi_+ + phi_-)/2, +provides the optimal measurement of the asymmetry +Astroparticle Physics 88 (2017) 30. + +For high-energy photons (E >> 20 MeV), the asymptotic expression for A +can be used for comparison. +Boldyshev, Yad. Fiz. 14 (1971) 1027, Sov.J.Nucl.Phys. 14 (1972) 576. +See also eq. (13) of arXiv:1802.08253 +Example : A ~ 0.17 at 100 GeV. + + 15 # E plus / E gamma +x_+ = E plus / E gamma has a more-or-less flat spectrum that extends +almost from 0. to 1. +See Fig. 16 page 261 of "The Quantum Theory of Radiation", W. Heitler, +3rd edition, 1954. + + 16 # Phi of Gamma Polarization +The phi of polarization vector after transformation into reference system + defined by gamma direction (z) , gamma polarization (x). diff --git a/examples/extended/electromagnetic/TestEm16/.README.txt b/examples/extended/electromagnetic/TestEm16/.README.txt new file mode 100644 index 0000000000..58d457ec62 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm16/.README.txt @@ -0,0 +1,143 @@ + +///\file "electromagnetic/TestEm16/.README.txt" +///\brief Example TestEm16 README page + +/*! \page ExampleTestEm16 Example TestEm16 + + Simulate synchrotron radiation + +\section TestEm16_s1 GEOMETRY DEFINITION + + The geometry consists of a single block of a homogenous material. + + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + The default is 500 m of vacuum. + + A transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + +\section TestEm16_s2 PHYSICS LIST + + The particle list is the one of novice/exampleN03 and + TestEm6 + with in addition synchrotron radiation. + To make the synchrotron radiation easily visible, a very low + pressure "vaccuum" and a magnetic field of by default 1 Tesla + in z-direction is used. + +\section TestEm16_s3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + block perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + The default is an positron of 10 GeV. + + In addition one can choose randomly the impact point of the incident + particle. The corresponding interactive command is built in + PrimaryGeneratorMessenger class. + + A RUN is a set of events. + +\section TestEm16_s4 VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm16.cc). + The initialisation of the drawing is done via the command +\verbatim +> /control/execute vis.mac +> /run/beamOn 1 +\endverbatim + + The detector has a default view which is a longitudinal view of the box. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionaly one can choose to draw all particles, only the charged one, + or none. This command is defined in EventActionMessenger class. + +\section TestEm16_s5 PHYSICS DEMO + + The particle's type and the physic processes which will be available + in this example are set in PhysicsList class. + + In addition a build-in interactive command (/process/inactivate proname) + allows to activate/inactivate the processes one by one. + + The threshold for producing secondaries can be changed. + eg: +\verbatim + /run/particle/setCut 100 micrometer + /run/initialize +\endverbatim + + To visualize the Synchrotron radiation : +\verbatim +/control/execute vis.mac +\endverbatim + +\section TestEm16_s6- HOW TO START ? + + - Execute Test in 'batch' mode from macro files +\verbatim +% TestEm16 run01.mac +\endverbatim + + - Execute Test in 'interactive mode' with visualization +\verbatim +% TestEm16 + .... +Idle> type your commands + .... +Idle> exit +\endverbatim + +\section TestEm16_s7 TRACKING : stepMax and setMaxStepLength + + In order to control the accuracy of the deposition, the user can limit + 'by hand' the maximum step size stepMax of charged particles. + + The maximum tracking step length for computing of magnetic field lines + is by default set to 1 km. + Synchrotron radiation in very weak magnetic fields of the order of 1 Gauss + may require longer pathlength. + This can be achieved with using setMaxStepLength like +\verbatim +/testem/tracking/setMaxStepLength 100 km +\endverbatim + +\section TestEm16_s8 HISTOGRAMS + + TestEm16 produces 3 histograms which illustrate synchrotron radiation. + The photon energy spectrum (photons / energy bin) and the power spectrum + (photon spectrum weighted with the photon energy) and a histogram + of the path length between photon radiation is produced. + + The histograms are managed by G4AnalysisManager and its messenger, + HistoMessenger. + + The histos can be activated individually with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where 'unit' is the desired unit for the histo (MeV or KeV, cm or mm, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default testem16) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default testem16) + +*/ diff --git a/examples/extended/electromagnetic/TestEm16/README b/examples/extended/electromagnetic/TestEm16/README new file mode 100644 index 0000000000..fb2b5ee6af --- /dev/null +++ b/examples/extended/electromagnetic/TestEm16/README @@ -0,0 +1,124 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm16 + -------- + Simulate synchrotron radiation + + 1- GEOMETRY DEFINITION + + The geometry consists of a single block of a homogenous material. + + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + The default is 500 m of vacuum. + + A transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + + 2- PHYSICS LIST + + The particle list include EM processes for gamma, e+, e-, mu+, mu-, + and protons, for the rest of particles only transportation. + Synchrotron radiation is added to all charged particles. + To make the synchrotron radiation easily visible, a very low + pressure "vaccuum" and a magnetic field of by default 1 Tesla + in z-direction is used. + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + block perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of ParticleGun class (see + the macros provided with this example). + The default is an positron of 10 GeV. + + In addition one can choose randomly the impact point of the incident + particle. The corresponding interactive command is built in + PrimaryGeneratorMessenger class. + + A RUN is a set of events. + + + 4- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the command + > /control/execute vis.mac + > /run/beamOn 1 + + The detector has a default view which is a longitudinal view of the box. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionaly one can choose to draw all particles, only the charged one, + or none. This command is defined in EventActionMessenger class. + + 5- PHYSICS DEMO + + The particle's type and the physic processes which will be available + in this example are set in PhysicsList class. + + In addition a build-in interactive command (/process/inactivate proname) + allows to activate/inactivate the processes one by one. + + The threshold for producing secondaries can be changed. + eg: /run/setCut 100 micrometer + /run/initialize + + To visualize the Synchrotron radiation : + /control/execute vis.mac + + 6- HOW TO START ? + + - execute Test in 'batch' mode from macro files + % TestEm16 run01.mac + + - execute Test in 'interactive mode' with visualization + % TestEm16 + .... + Idle> type your commands + .... + Idle> exit + + 7 - TRACKING : stepMax and setMaxStepLength + + In order to control the accuracy of the deposition, the user can limit + 'by hand' the maximum step size stepMax of charged particles. + + The maximum tracking step length for computing of magnetic field lines + is by default set to 1 km. + Synchrotron radiation in very weak magnetic fields of the order of 1 Gauss + may require longer pathlength. + This can be achieved with using setMaxStepLength like + /testem/tracking/setMaxStepLength 100 km + +8- HISTOGRAMS + + TestEm16 produces 3 histograms which illustrate synchrotron radiation. + The photon energy spectrum (photons / energy bin) and the power spectrum + (photon spectrum weighted with the photon energy) and a histogram + of the path length between photon radiation is produced. + + The histograms are managed by G4AnalysisManager and its Messenger. + + The histos can be activated individually with the command : + /analysis/h1/set id nbBins valMin valMax unit + where 'unit' is the desired unit for the histo (MeV or KeV, cm or mm, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default testem16) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default testem16) diff --git a/examples/extended/electromagnetic/TestEm17/.README.txt b/examples/extended/electromagnetic/TestEm17/.README.txt new file mode 100644 index 0000000000..9932493004 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm17/.README.txt @@ -0,0 +1,118 @@ + +///\file "electromagnetic/TestEm17/.README.txt" +///\brief Example TestEm17 README page + +/*! \page ExampleTestEm17 Example TestEm17 + + This example is intended to check implementation of the processes + of muon interactions: ionization, direct (e+,e-) production, + bremsstrahlung, mu-nuclear interaction. + It allows to compute differential cross sections (as function of the + energy transfered to secondaries), total cross sections and to compare + with analytic calculations. + +\section TestEm17_s1 GEOMETRY DEFINITION + + It is a single box of homogeneous medium. + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + + The default geometry (1 m of Iron) is constructed in + DetectorConstruction, but the above parameters can be changed + interactively via the commands defined in DetectorMessenger. + +\section TestEm17_s2 PHYSICS LIST + + The Physics List of the example uses the main local physics constructor + (builder) which called "standard". In this builder a limited set + of physics processes are defined for muons, pions and proton: + ionisation, bremsstrahlung and e+e- pair production. Energy range + for these processes is from 100*eV to 1000*PeV. + + Optionally "muNucl" builder, MuNuclearBuilder, may be added activating muon-nuclear + inelastic interaction. + +\section TestEm17_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the edge + of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (mu+ 10 TeV), and can be changed via the G4 + build-in commands of ParticleGun class (see the macros provided with + this example). + +\section TestEm17_s4 PHYSICS + + The incident particle is a muon. During the tracking, secondary + particles are killed. + + The number of interactions are plotted as a function of the energy + transfered to the secondaries. + The total number of interactions is recorded, and the total cross section + computed from this. + + At RunAction::EndOfRunAction(), the above results are compared with analytic calculations. + The functions which compute the theoretical cross sections have been + provided by the G4 MEPhI group, and grouped in MuCrossSections class. + +\section TestEm17_s5 HISTOGRAMS + + The test contains 4 built-in 1D histograms, which are managed by the + HistoManager class and its Messenger, HistoMessenger. + + - 1 Monte-Carlo relative transferred energy distribution histo + (log10(eps/Emu kin) for knock-on electrons (ionization) + - 2 ... direct (e+,e-) pair production + - 3 ... bremsstrahlung + - 4 ... nuclear interaction + + The histos can be activated individually with the command : +\verbatim +/testem/histo/setHisto id nbBins valMin valMax +\endverbatim + min and max values of log10(eps/Emu kin). + + At RunAction::EndOfRunAction() the corresponding histos for analytic calculations are + automatically created and filled (histo 11 to 14). + + One can control the name and the type of the histograms file with + the command: +\verbatim +/testem/histo/setFileName name (default testem17) +\endverbatim + + It is possible to choose the format of the histogram file : + root (default), xml, csv, by using namespace in HistoManager.hh + +\section TestEm17_s6- VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm17.cc). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the + box. + + The tracks are drawn at the end of event, and erased at the end of run. + +\section TestEm17_s7- HOW TO START ? + + - Execute TestEm17 in 'batch' mode from macro files : +\verbatim +% TestEm17 allproc.mac +\endverbatim + + - Execute TestEm17 in 'interactive mode' with visualization : +\verbatim +% TestEm17 +Idle> control/execute vis.mac +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + +*/ diff --git a/examples/extended/electromagnetic/TestEm17/README b/examples/extended/electromagnetic/TestEm17/README new file mode 100644 index 0000000000..c59329defd --- /dev/null +++ b/examples/extended/electromagnetic/TestEm17/README @@ -0,0 +1,112 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm17 + -------- + This example is intended to check implementation of the processes + of muon interactions: ionization, direct (e+,e-) production, + bremsstrahlung, mu-nuclear interaction. + It allows to compute differential cross sections (as function of the + energy transfered to secondaries), total cross sections and to compare + with analytic calculations. + + 1- GEOMETRY DEFINITION + + It is a single box of homogeneous medium. + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + + The default geometry (1 m of Iron) is constructed in + DetectorConstruction, but the above parameters can be changed + interactively via the commands defined in DetectorMessenger. + + 2- PHYSICS LIST + + The Physics List of the example uses the main physics constructor + (builder) called "emstandard_opt0". As an alternative "local" + constructor is provided in which only a limited set + of physics processes are defined for muons, pions and proton: + ionisation, bremsstrahlung and e+e- pair production. + + Default energy range for EM processes in this example + is from 100*eV to 1000*PeV. + + Optionally "muNucl" builder may be added activating muon-nuclear + inelastic interaction. + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the edge + of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (mu+ 10 TeV), and can be changed via the G4 + build-in commands of ParticleGun class (see the macros provided with + this example). + + 4- PHYSICS + + The incident particle is a muon. During the tracking, secondary + particles are killed. + + The number of interactions are plotted as a function of the energy + transfered to the secondaries. + The total number of interactions is recorded, and the total cross + section computed from this. + + At EndOfRun, the above results are compared with analytic calculations. + The functions which compute the theoretical cross sections have been + provided by the G4 MEPhI group, and grouped in MuCrossSections class. + + 5- HISTOGRAMS + + The test contains built-in 1D histograms for muons filled during + Monte Carlo simulation, which are managed by the HistoManager class + and its Messenger: + + 1 Relative muon transferred energy distribution + (log10(eps/Emu kin) for knock-on electrons (ionization) + 2 -"- direct (e+,e-) pair production by muons + 3 -"- bremsstrahlung by muons + 4 -"- nuclear interaction by muons + 5 ionistion for hadrons + 6 (e+,e-) pair production by hadrons + 7 bremsstrahlung by hadrons + + The histos can be activated individually with the command : + /testem/histo/setHisto id nbBins valMin valMax : + min and max values of log10(eps/Emu kin). + + At EndOfRun the corresponding histos for analytic calculations are + automatically created and filled (histo 11 to 14). + + One can control the name and the type of the histograms file with + the command: + /testem/histo/setFileName name (default testem17) + + 6- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the + box. + + The tracks are drawn at the end of event, and erased at the end of run. + + 7- HOW TO START ? + + execute TestEm17 in 'batch' mode from macro files : + % TestEm17 allproc.mac + + execute TestEm17 in 'interactive mode' with visualization : + % TestEm17 + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit diff --git a/examples/extended/electromagnetic/TestEm18/.README.txt b/examples/extended/electromagnetic/TestEm18/.README.txt new file mode 100644 index 0000000000..0715c7b247 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm18/.README.txt @@ -0,0 +1,135 @@ + +///\file "electromagnetic/TestEm18/.README.txt" +///\brief Example TestEm18 README page + +/*! \page ExampleTestEm18 Example TestEm18 + + This example allows to study the various contributions of the energy lost + by a charged particle in a single layer of an homogeneous material. + See any textbook of interactions of charged particles with matter, in particular : + 1- geant4.web.cern.ch --> UserSupport --> Physics Reference Manual + 2- lappweb.in2p3.fr/~maire/tutorials/index.html + +\section TestEm18_s1 GEOMETRY DEFINITION + + It is a simple cubic box of homogeneous material. + Two parameters define the geometry : + - the material of the box, + - the thickness of the box. + + The default geometry (1 cm of water) is constructed in DetectorConstruction, + but the above parameters can be changed interactively via the commands + defined in DetectorMessenger. + +\section TestEm18_s2 PHYSICS + + The physics list, PhysicsList, contains the 'standard' electromagnetic processes. + However the MultipleScattering is not registered, in order to focuse on + fluctuations of to energy loss alone. + +\section TestEm18_s3 BEAM + + The primary kinematic is a single particle starting at the edge + of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (e- 10 MeV), and can be changed via the G4 + build-in commands of G4ParticleGun class. + +\section TestEm18_s4 RUN + + During the tracking of the incident particle, by default, the secondary + particles are immediately killed, after that their energy has been registered + (see SteppingAction and StackingAction). + Therefore, we study here the various components of the total energy lost + by the incident particle, not the energy deposited in a layer of finite + thickness. + With the option /testEm/trackSecondaries one can compute and plot the energy + deposited in the layer. See edep.mac + + At EndOfRun, the above results are compared with 'reference' values, + i.e. the input data read from EnergyLoss and Range tables. + See reference 2 : Energy-Range relation, slide 4. + +\section TestEm18_s5 HISTOGRAMS + + The test contains 13 built-in 1D histograms, which are managed by + G4AnalysisManager and its messenger. + + 1 step size of primary track + 2 energy locally deposited along primary track + 3 energy transfered to secondaries by ionisation + 4 energy transfered to secondaries by Bremsstrahlung + 5 energy transfered to secondaries by (e+,e-) production + 6 total energy transfered to secondaries + 7 total energy lost by primary track + 8 total energy lost by primary track from energy balance + 9 energy continuously deposited along secondary tracks + 10 total energy deposited + 11 energy spectrum of gamma + 12 energy spectrum of e- + 13 energy spectrum of e+ + + The histograms are defined in HistoManager. + + The histos can be activated individually with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where 'unit' is the desired unit for the histo (MeV or KeV, cm or mm, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default testem18) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + For convenience, few simple Root macros are provided : plotHisto.C pixe.C + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/sweAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default testem18) + +\section TestEm18_s6 VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm18.cc). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the box. + The tracks are drawn at the end of event, and erased at the end of run. + +\section TestEm18_s7 HOW TO START ? + + - Execute TestEm18 in 'batch' mode from macro files : +\verbatim +% TestEm18 electron.mac +\endverbatim + + - Execute TestEm18 in 'interactive mode' with visualization : +\verbatim +% TestEm18 +Idle> control/execute vis.mac +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + + Macros provided in this example: + - csda.mac: test independance of user step max + - edep.mac: track secondary particles and plot energy deposited + - electron.mac: e- (10 MeV) on 1 cm of water + - ion.mac: ion C12 (4 GeV) on 1 cm of water + - muon.mac: mu+ (1 TeV) on 1 m of water + - pixe.mac: proton (20 MeV) on 50 um of gold. Plot gamma pixe + - proton.mac: proton (1 GeV) on 10 cm of water + - plotHisto.C, pixe.C: Root macros + + Macros to be run interactively: + - vis.mac: To activate visualization +*/ diff --git a/examples/extended/electromagnetic/TestEm18/README b/examples/extended/electromagnetic/TestEm18/README new file mode 100644 index 0000000000..9e943ec3c8 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm18/README @@ -0,0 +1,123 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm18 + -------- + This example allows to study the various contributions of the energy lost + by a charged particle in a single layer of an homogeneous material. + See any textbook of interactions of charged particles with matter, in particular : + 1- geant4.web.cern.ch --> UserSupport --> Physics Reference Manual + 2- lappweb.in2p3.fr/~maire/tutorials/index.html + + 1- GEOMETRY DEFINITION + + It is a simple cubic box of homogeneous material. + Two parameters define the geometry : + - the material of the box, + - the thickness of the box. + + The default geometry (1 cm of water) is constructed in DetectorConstruction, + but the above parameters can be changed interactively via the commands + defined in DetectorMessenger. + + 2- PHYSICS + + The physics list contains the 'standard' electromagnetic processes. + However the MultipleScattering is not registered, in order to focuse on + fluctuations of to energy loss alone. + + 3- BEAM + + The primary kinematic is a single particle starting at the edge + of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (e- 10 MeV), and can be changed via the G4 + build-in commands of ParticleGun class. + + 4- RUN + + During the tracking of the incident particle, by default, the secondary + particles are immediately killed, after that their energy has been registered + (see SteppingAction and StackingAction). + Therefore, we study here the various components of the total energy lost + by the incident particle, not the energy deposited in a layer of finite + thickness. + With the option /testEm/trackSecondaries one can compute and plot the energy + deposited in the layer. See edep.mac + + At EndOfRun, the above results are compared with 'reference' values, + i.e. the input data read from EnergyLoss and Range tables. + See reference 2 : Energy-Range relation, slide 4. + + 5- HISTOGRAMS + + The test contains 13 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. + + 1 step size of primary track + 2 energy continuously deposited along primary track + 3 energy transfered to secondaries by ionisation + 4 energy transfered to secondaries by Bremsstrahlung + 5 energy transfered to secondaries by (e+,e-) production + 6 total energy transfered to secondaries + 7 total energy lost by primary track + 8 total energy lost by primary track from energy balance + 9 energy continuously deposited along secondary tracks + 10 total energy deposited + 11 energy spectrum of gamma + 12 energy spectrum of e- + 13 energy spectrum of e+ + + The histograms are defined in HistoManager. + + The histos can be activated individually with the command : + /analysis/h1/set id nbBins valMin valMax unit + where 'unit' is the desired unit for the histo (MeV or KeV, cm or mm, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default testem18) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + For convenience, few simple Root macros are provided : plotHisto.C pixe.C + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default testem18) + + 6- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the box. + The tracks are drawn at the end of event, and erased at the end of run. + + 7- HOW TO START ? + + execute TestEm18 in 'batch' mode from macro files : + % TestEm18 electron.mac + + execute TestEm18 in 'interactive mode' with visualization : + % TestEm18 + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit + + Macros provided in this example: + - csda.mac: test independance of user step max + - edep.mac: track secondary particles and plot energy deposited + - electron.mac: e- (10 MeV) on 1 cm of water + - ion.mac: ion C12 (4 GeV) on 1 cm of water + - muon.mac: mu+ (1 TeV) on 1 m of water + - pixe.mac: proton (20 MeV) on 50 um of gold. Plot gamma pixe + - proton.mac: proton (1 GeV) on 10 cm of water + - plotHisto.C, pixe.C: Root macros + + Macros to be run interactively: + - vis.mac: To activate visualization diff --git a/examples/extended/electromagnetic/TestEm2/.README.txt b/examples/extended/electromagnetic/TestEm2/.README.txt new file mode 100644 index 0000000000..4f944b2a7a --- /dev/null +++ b/examples/extended/electromagnetic/TestEm2/.README.txt @@ -0,0 +1,171 @@ + +///\file "electromagnetic/TestEm2/.README.txt" +///\brief Example TestEm2 README page + +/*! \page ExampleTestEm2 Example TestEm2 + + How to do shower profiles in an homogenous medium, with virtual + voxelisation. + +\section TestEm2_s1 GEOMETRY DEFINITION + + The geometry consists of a cylinder of homogenous material. + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be modified interactively via + the commands defined in the DetectorMessenger class. + + Material can be choosen: Air Water lAr Al Fe BGO PbWO4 Pb. + eg: +\verbatim +/testem/det/setMat PbWO4 +\endverbatim + + The cylinder is virtually sliced longitudinally (slice) and radially + (ring). The size of the slices and rings are expressed in radiation + length units and can be changed. + eg: +\verbatim +/testem/det/setLbin 20 1. ---> 20 slices of 1. radl +/testem/det/setRbin 5 0.25 ---> 5 rings of 0.25 radl +/testem/det/update ---> rebuild the geometry +\endverbatim + (MaxBin = 500 in both directions) + + An uniform magnetic field along the cylinder axis can be set. + eg: +\verbatim +/testem/det/setField 5 tesla +\endverbatim + +\section TestEm2_s2 PHYSICS LISTS + + Physics lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + EM physics builders can be local (eg. in this example) or from G4 kernel + physics_lists subdirectory. + + Local physics builders: + - "local" standard EM physics with current 'best' options setting. + these options are explicited in PhysListEmStandard + + From geant4/source/physics_lists/builders: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + Physics lists and options can be (re)set with UI commands + +\section TestEm2_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + cylinder perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + + A RUN is a set of events. + +\section TestEm2_s4 VISUALIZATION + + The Visualization Manager is set in the main() (see TestEm2.cc). + The initialisation of the drawing is done via the commands + /vis/.. in the macro vis.mac. In interactive session: +\verbatim +PreInit or Idle > /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the + cylinder. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged one, + or none. This command is defined in EventActionMessenger class. + +\section TestEm2_s5 PHYSICS DEMO + + The particle's type and the physics processes which will be available + in this example are set in PhysicsList class. + + In addition a build-in interactive command (/process/inactivate procname) + allows to activate/inactivate the processes one by one. + + The threshold for producing secondaries can be changed. + eg: +\verbatim +/testem/phys/setCuts 100 microm +/run/initialize +\endverbatim + + The shower profiles are histogramed, if histograming is activated. + They can be also printed with the command /testem/run/verbose 1 + +\section TestEm2_s6 HOW TO START ? + + - Execute TestEm2 in 'batch' mode from macro files +\verbatim +% TestEm2 run01.mac +\endverbatim + + - Execute TestEm2 in 'interactive mode' with visualization +\verbatim +% TestEm2 +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + + Macros provided in this example: + - egs4.mac: + Fe; L = 20 radl; R = 5 radl; electron 30 GeV + (EGS4 simulation: Particle Data Group - Phys.Rev.D 50-3 - August94) + - run01.mac: PbWO4; L = 20 radl; R = 5 radl; electron 5 GeV + - run02.mac: Al; L = 13.5 radl; R = 1.35 radl; electron 1 GeV + (Electron-induced cascade showers: J&H Crannel - Phys. Rev. 184-2 - August69) + - run03.mac: H2O; L = 9.97 radl; R = 0.665 radl; electron 1 GeV + (Electron-induced cascade showers: J&H Crannel - Phys. Rev. 184-2 - August69) + - test.mac: PbWO4; L = 20 radl; R = 5 radl; electron 5 GeV + - vis.mac: to activate visualization + +\section TestEm2_s7 HISTOGRAMS + + TestEm2 produces several histograms: + + Content of these histo: + + - 1 : energy deposit per event + - 2 : charged track length per event + - 3 : neutral track length per event + + - 4 : longitudinal energy profile + - 5 : rms of longitudinal energy profile + - 6 : cumulated longitudinal energy profile + - 7 : rms of cumulated longitudinal energy profile + + - 8 : radial energy profile + - 9 : rms of radial energy profile + - 10 : cumulated radial energy profile + - 11 : rms of cumulated radial energy profile + + To define the output file name with histograms, use the UI command : +\verbatim +/analysis/setFileName name +\endverbatim + + The format of the histogram file can be : root (default), + xml, csv, by selecting g4nnn.hh in RunAction.hh + +*/ diff --git a/examples/extended/electromagnetic/TestEm2/README b/examples/extended/electromagnetic/TestEm2/README new file mode 100644 index 0000000000..8607be26aa --- /dev/null +++ b/examples/extended/electromagnetic/TestEm2/README @@ -0,0 +1,161 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm2 + ------- + + How to do shower profiles in an homogenous medium, with virtual + voxelisation. + + 1- GEOMETRY DEFINITION + + The geometry consists of a cylinder of homogenous material. + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be modified interactively via + the commands defined in the DetectorMessenger class. + + Material can be choosen: Air Water lAr Al Fe BGO PbWO4 Pb. + eg: /testem/det/setMat PbWO4 + + The cylinder is virtually sliced longitudinally (slice) and radially + (ring). The size of the slices and rings are expressed in radiation + length units and can be changed. + eg: /testem/det/setLbin 20 1. ---> 20 slices of 1. radl + /testem/det/setRbin 5 0.25 ---> 5 rings of 0.25 radl + /testem/det/update ---> rebuild the geometry + + (MaxBin = 500 in both directions) + + An uniform magnetic field along the cylinder axis can be set. + eg: /globalField/setValue 0 0 5 tesla + + 2- PHYSICS LISTS + + Physics lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + EM physics builders can be local (eg. in this example) or from G4 kernel + physics_lists subdirectory. + + Local physics builders: + - "local" standard EM physics with current 'best' options setting. + these options are explicited in PhysListEmStandard + + From geant4/source/physics_lists/builders: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + Physics lists and options can be (re)set with UI commands + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + cylinder perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + + A RUN is a set of events. + + 4- VISUALIZATION + + The Visualization Manager is set in the main() (see TestEm2.cc). + The initialisation of the drawing is done via the commands + /vis/.. in the macro vis.mac. In interactive session: + PreInit or Idle > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the + cylinder. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged one, + or none. This command is defined in EventActionMessenger class. + + 5- PHYSICS DEMO + + The particle's type and the physics processes which will be available + in this example are set in PhysicsList class. + + In addition a build-in interactive command (/process/inactivate procname) + allows to activate/inactivate the processes one by one. + + The threshold for producing secondaries can be changed. + eg: /testem/phys/setCuts 100 microm + /run/initialize + + The shower profiles are histogramed, if histograming is activated. + They can be also printed with the command /testem/run/verbose 1 + + 6- HOW TO START ? + + - Execute TestEm2 in 'batch' mode from macro files + % TestEm2 run01.mac + + - Execute TestEm2 in 'batch' mode using multi-threading + % TestEm2 run01.mac 4 + here 4 is number of threads, it should be user defined, + optimal value depends on hardware + + - Execute TestEm2 in 'interactive mode' with visualization + % TestEm2 + .... + Idle> type your commands + .... + Idle> exit + + + Macros provided in this example: + - egs4.mac: + Fe; L = 20 radl; R = 5 radl; electron 30 GeV + (EGS4 simulation: Particle Data Group - Phys.Rev.D 50-3 - August94) + - run01.mac: PbWO4; L = 20 radl; R = 5 radl; electron 5 GeV + - run02.mac: Al; L = 13.5 radl; R = 1.35 radl; electron 1 GeV + (Electron-induced cascade showers: J&H Crannel - Phys. Rev. 184-2 - August69) + - run03.mac: H2O; L = 9.97 radl; R = 0.665 radl; electron 1 GeV + (Electron-induced cascade showers: J&H Crannel - Phys. Rev. 184-2 - August69) + - test.mac: PbWO4; L = 20 radl; R = 5 radl; electron 5 GeV + - vis.mac: to activate visualization + + 7- HISTOGRAMS + + TestEm2 produces several histograms: + + Content of these histo: + + 1 : energy deposit per event + 2 : charged track length per event + 3 : neutral track length per event + + 4 : longitudinal energy profile + 5 : rms of longitudinal energy profile + 6 : cumulated longitudinal energy profile + 7 : rms of cumulated longitudinal energy profile + + 8 : radial energy profile + 9 : rms of radial energy profile + 10 : cumulated radial energy profile + 11 : rms of cumulated radial energy profile + + To define the output file name with histograms, use the UI command : + + "/analysis/setFileName name" + + The format of the histogram file can be : root (default), + xml, csv, by selecting g4nnn.hh in RunAction.hh + diff --git a/examples/extended/electromagnetic/TestEm3/.README.txt b/examples/extended/electromagnetic/TestEm3/.README.txt new file mode 100644 index 0000000000..6435c5716e --- /dev/null +++ b/examples/extended/electromagnetic/TestEm3/.README.txt @@ -0,0 +1,209 @@ + +///\file "electromagnetic/TestEm3/.README.txt" +///\brief Example TestEm3 README page + +/*! \page ExampleTestEm3 Example TestEm3 + + - How to collect energy deposition in a sampling calorimeter. + - How to survey energy flow. + - How to print stopping power. + +\section TestEm3_s1 GEOMETRY DEFINITION + + The calorimeter is a box made of a given number of layers. + A layer consists of a sequence of various absorbers (maximum MaxAbsor=9). + The layer is replicated. + + Parameters defining the calorimeter : + - the number of layers, + - the number of absorbers within a layer, + - the material of the absorbers, + - the thickness of the absorbers, + - the transverse size of the calorimeter (the input face is a square). + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, but all + of the above parameters can be modified interactively via the commands + defined in the DetectorMessenger class. + +
+        |<----layer 0---------->|<----layer 1---------->|<----layer 2---------->|
+        |           |           |                       |                       |
+        ==========================================================================
+        ||          |           ||          |           ||          |           ||
+        ||          |           ||          |           ||          |           ||
+        ||   abs 1  | abs 2     ||   abs 1  | abs 2     ||   abs 1  | abs 2     ||
+        ||          |           ||          |           ||          |           ||
+        ||          |           ||          |           ||          |           ||
+ beam   ||          |           ||          |           ||          |           ||
+======> ||          |           ||          |           ||          |           ||
+        ||          |           ||          |           ||          |           ||
+        ||          |           ||          |           ||          |           ||
+        ||          |           ||          |           ||          |           ||
+        ||          |           ||          |           ||          |           ||
+        ||   cell 1 | cell 2    ||   cell 3 | cell 4    ||   cell 5 | cell 6    ||
+        ==========================================================================
+        ^           ^           ^           ^           ^           ^           ^
+        pln1        pln2        pln3       pln4        pln5        pln6       pln7
+ 
+ + NB. The number of absorbers and the number of layers can be set to 1. + In this case we have a unique homogeneous block of matter, which looks like + a bubble chamber rather than a calorimeter ... + (see the macro emtutor.mac) + +\section TestEm3_s2 PHYSICS LISTS + + Physics lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + EM physics builders can be local (eg. in this example) or from G4 kernel + physics_lists subdirectory. + + Local physics builders: + - "local" standard EM physics with current 'best' options setting. + these options are explicited in PhysListEmStandard + + From geant4/source/physics_lists/builders: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + Physics lists and options can be (re)set with UI commands. + +\section TestEm3_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the calorimeter + perpendicular to the input face. The type of the particle and its energy are + set in the PrimaryGeneratorAction class, and can be changed via the + G4 build-in commands of G4ParticleGun class (see the macros provided with this + example). + + In addition one can choose randomly the impact point of the incident particle. + The corresponding interactive command is built in PrimaryGeneratorMessenger. + + A RUN is a set of events. + + TestEm3 computes the energy deposited per absorber and the energy flow through + the calorimeter. + +\section TestEm3_s4 VISUALIZATION + + The Visualization Manager is set in the main() (see TestEm3.cc). + The initialisation of the drawing is done via the commands : + /vis/... in the macro vis.mac. In interactive session: +\verbatim + PreInit or Idle > /control/execute vis.mac +\endverbatim + + The default view is a longitudinal view of the calorimeter. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged ones, or + none. This command is defined in EventActionMessenger class. + +\section TestEm3_s5 PHYSICS DEMO + + The particle's type and the physics processes which will be available + in this example are set in PhysicsList class. + + In addition a built-in interactive command (/process/inactivate processName) + allows to activate/inactivate the processes one by one. + Then one can well visualize the processes one by one, especially + in the bubble chamber setup with a transverse magnetic field. + + As a homework try to visualize a gamma conversion alone, + or the effect of the multiple scattering. + + Notice that one can control the maximum step size, via the + StepMax process and the command /testem/stepMax +\verbatim +/testem/stepMax/absorber +\endverbatim + (see StepMax and PhysicsList classes) + +\section TestEm3_s6 HOW TO START ? + + - Execute TestEm3 in 'batch' mode from macro files +\verbatim +% TestEm3 run01.mac +\endverbatim + + - Execute TestEm3 in 'interactive mode' with visualization +\verbatim +% TestEm3 +.... +Idle> type your commands. For instance: +Idle> /control/execute run01.mac +.... +Idle> exit +\endverbatim + + Macros provided in this example: + - atlashec.mac: ATLAS HEC model + - dedx.mac: to control dE/dx calculation: 1 layer; minimum ionizing particle + - emtutor.mac: for tutorial; interactivity + visualisation + - geom.mac: to play with geometry + - ionC12.mac: ion C12, 1 layer + - lhcb.mac: LHCB ECAL model + - linac.mac: Linac/Ecal from Graham Wilson + - lockwood.mac: Al-Au-Al 1 layer (G.L.Lockwood et al. SAND79-0414 (1980)) + - run01.mac: Lead-liquidArgon 50 layers; electron 1 GeV + - run02.mac: Tungsten-Silicon 50 layers; electron 1 GeV + - storeTables.mac: show how to store and retrieve physics tables + - tileCal.mac: ATLAS tileCal + - vis.mac: to activate visualization + +\section TestEm3_s7 HISTOGRAMS + + Testem3 can produce histograms : + - histo 1 : energy deposit in absorber 1 + - histo 2 : energy deposit in absorber 2 + - etc. + + - histo 11 : longitudinal profile of energy deposit in absorber 1 (MeV/event) + - histo 12 : longitudinal profile of energy deposit in absorber 2 (MeV/event) + - etc. + + - histo 21 : energy flow (MeV/event) + - histo 22 : lateral energy leak (MeV/event) + + NB. Numbering scheme for histograms: + - layer : from 1 to NbOfLayers (included) + - absorbers : from 1 to NbOfAbsor (included) + - planes : from 1 to NbOfLayers*NbOfAbsor + 1 (included) + + One can control the binning of the histo with the command: +\verbatim +/analysis/h1/set idAbsor nbin Emin Emax unit +\endverbatim + etc., + where unit is the desired energy unit for that histo (see TestEm3.in). + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default testem3) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id + \endverbatim + All selected histos will be written on a file name.ascii (default testem3) + +*/ diff --git a/examples/extended/electromagnetic/TestEm3/README b/examples/extended/electromagnetic/TestEm3/README new file mode 100644 index 0000000000..88f6d282b0 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm3/README @@ -0,0 +1,195 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm3 + ------- + + How to collect energy deposition in a sampling calorimeter. + How to survey energy flow. + how to print stopping power. + + 1- GEOMETRY DEFINITION + + The calorimeter is a box made of a given number of layers. + A layer consists of a sequence of various absorbers (maximum MaxAbsor=9). + The layer is replicated. + + Parameters defining the calorimeter : + - the number of layers, + - the number of absorbers within a layer, + - the material of the absorbers, + - the thickness of the absorbers, + - the transverse size of the calorimeter (the input face is a square). + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, but all + of the above parameters can be modified interactively via the commands + defined in the DetectorMessenger class. + + + |<----layer 0---------->|<----layer 1---------->|<----layer 2---------->| + | | | | | + ========================================================================== + || | || | || | || + || | || | || | || + || abs 1 | abs 2 || abs 1 | abs 2 || abs 1 | abs 2 || + || | || | || | || + || | || | || | || + beam || | || | || | || +======> || | || | || | || + || | || | || | || + || | || | || | || + || | || | || | || + || | || | || | || + || cell 1 | cell 2 || cell 3 | cell 4 || cell 5 | cell 6 || + ========================================================================== + ^ ^ ^ ^ ^ ^ ^ + pln1 pln2 pln3 pln4 pln5 pln6 pln7 + + NB. The number of absorbers and the number of layers can be set to 1. + In this case we have a unique homogeneous block of matter, which looks like + a bubble chamber rather than a calorimeter ... + (see the macro emtutor.mac) + + 2- PHYSICS LISTS + + Physics lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + EM physics builders can be local (eg. in this example) or from G4 kernel + physics_lists subdirectory. + + Local physics builders: + - "local" standard EM physics with current 'best' options setting. + these options are explicited in PhysListEmStandard + + From geant4/source/physics_lists/builders: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + Physics lists and options can be (re)set with UI commands. + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the calorimeter + perpendicular to the input face. The type of the particle and its energy are + set in the PrimaryGeneratorAction class, and can be changed via the + G4 build-in commands of G4ParticleGun class (see the macros provided with this + example). + + In addition one can choose randomly the impact point of the incident particle. + The corresponding interactive command is built in PrimaryGeneratorMessenger. + + A RUN is a set of events. + + TestEm3 computes the energy deposited per absorber and the energy flow through + the calorimeter. + + 4- VISUALIZATION + + The Visualization Manager is set in the main() (see TestEm3.cc). + The initialisation of the drawing is done via the commands : + /vis/... in the macro vis.mac. In interactive session: + PreInit or Idle > /control/execute vis.mac + + The default view is a longitudinal view of the calorimeter. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged ones, or + none. This command is defined in EventActionMessenger class. + + 5- PHYSICS DEMO + + The particle's type and the physics processes which will be available + in this example are set in PhysicsList class. + + In addition a built-in interactive command (/process/inactivate processName) + allows to activate/inactivate the processes one by one. + Then one can well visualize the processes one by one, especially + in the bubble chamber setup with a transverse magnetic field. + + As a homework try to visualize a gamma conversion alone, + or the effect of the multiple scattering. + + Notice that one can control the maximum step size, via the + StepMax process and the command /testem/stepMax + (see StepMax and PhysicsList classes) + + 6- HOW TO START ? + + - Execute TestEm3 in 'batch' mode from macro files + % TestEm3 run01.mac + + - Execute TestEm3 in 'interactive mode' with visualization + % TestEm3 + .... + Idle> type your commands. For instance: + Idle> /control/execute run01.mac + .... + Idle> exit + + Macros provided in this example: + - atlashec.mac: ATLAS HEC model + - dedx.mac: to control dE/dx calculation: 1 layer; minimum ionizing particle + - emtutor.mac: for tutorial; interactivity + visualisation + - geom.mac: to play with geometry + - ionC12.mac: ion C12, 1 layer + - lhcb.mac: LHCB ECAL model + - linac.mac: Linac/Ecal from Graham Wilson + - lockwood.mac: Al-Au-Al 1 layer (G.L.Lockwood et al. SAND79-0414 (1980)) + - run01.mac: Lead-liquidArgon 50 layers; electron 1 GeV + - run02.mac: Tungsten-Silicon 50 layers; electron 1 GeV + - storeTables.mac: show how to store and retrieve physics tables + - tileCal.mac: ATLAS tileCal + - vis.mac: to activate visualization + + 7- HISTOGRAMS + + Testem3 can produce histograms : + histo 1 : energy deposit in absorber 1 + histo 2 : energy deposit in absorber 2 + ...etc........... + + histo 11 : longitudinal profile of energy deposit in absorber 1 (MeV/event) + histo 12 : longitudinal profile of energy deposit in absorber 2 (MeV/event) + ...etc........... + + histo 21 : energy flow (MeV/event) + histo 22 : lateral energy leak (MeV/event) + ...etc........... + + NB. Numbering scheme for histograms: + layer : from 1 to NbOfLayers (included) + absorbers : from 1 to NbOfAbsor (included) + planes : from 1 to NbOfLayers*NbOfAbsor + 1 (included) + + One can control the binning of the histo with the command: + /analysis/h1/set idAbsor nbin Emin Emax unit + where unit is the desired energy unit for that histo (see TestEm3.in). + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default testem3) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default testem3) + diff --git a/examples/extended/electromagnetic/TestEm3/geant3/README b/examples/extended/electromagnetic/TestEm3/geant3/README new file mode 100644 index 0000000000..944c662c4a --- /dev/null +++ b/examples/extended/electromagnetic/TestEm3/geant3/README @@ -0,0 +1,51 @@ + + testem3/src is the geant3 equivalent of TestEm3 + + % cd geant3 + % gmakeB to make an executable (Batch version) + % gmakeT to make an executable (inTeractive version) + + To execute: + + % cd geant3 + % $G4SYSTEM/testem3.xb (for batch) or testem1.xt (for interactive) + + The program will ask: + G3 > gives the filename of the data cards to be read: + + run01.dat (runNN.dat is the equivalent of the G4 runNN.mac) + + It is possible to set the production cuts BCUTE, DCUTE and PPCUTM + medium by medium, via the data cards: + CUTPR imed1 bcute/m dcute/m ppcutm + CUTPR imed2 bcute/m dcute/m ppcutm + ...etc............ + + testem3 can produce histograms : + histo 1 : energy deposit in absorber 1 + histo 2 : energy deposit in absorber 2 + ...etc........... + + histo 11 : longitudinal profile of energy deposit in absorber 1 (MeV/event) + histo 12 : longitudinal profile of energy deposit in absorber 2 (MeV/event) + ...etc........... + + histo 21 : energy flow (MeV/event) + histo 22 : lateral energy leakage (MeV/event) + + One can control the binning of the histograms with the data card: + *HISTO id1 nbBins valMin valMax valUnit + *HISTO id2 nbBins valMin valMax valUnit + ... etc ........... + + valMin and ValMax are given in the desired unit, whose numerical value must + be specified in valUnit. Remember that Geant3 defaults are: GeV, cm, rad. + + The name of de histograms file must be defined with the data card: + FILE fileName (character) This data card is mandatory; it must be the first, + with the format A4,A2,A25 + + It is possible to set the max allowed step size STEMAX, + via the data card: + STEPMX stepmax (in cm) + (However this value will be taken into account only if auto=0) diff --git a/examples/extended/electromagnetic/TestEm3/geant3/g4mat/README b/examples/extended/electromagnetic/TestEm3/geant3/g4mat/README new file mode 100644 index 0000000000..01a965e183 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm3/geant3/g4mat/README @@ -0,0 +1,23 @@ + +This program compare the Geant3 and Geant4 dE/dx tables. +The Geant4 values are read as ffread data cards, as they are printed out +by TestEm3, according the standard Geant3 binning. +One must complete by hand the data cards KINE and MATE; see the file lead.dat +as an example. +The Geant3 values are computed within this program. +The g4-g3 differences are ploted in the file plmat.paw + + % cd geant3/g4mat + % gmakeB to make an executable (Batch version) + % gmakeT to make an executable (inTeractive version) + + To execute: + + % cd geant3/g4mat + % $G4SYSTEM/g4mat.xb (for batch) or g4mat.xt (for interactive) + + The program will ask: + G3 > gives the filename of the data cards to be read: + + lead.dat (XXX.dat) + diff --git a/examples/extended/electromagnetic/TestEm4/.README.txt b/examples/extended/electromagnetic/TestEm4/.README.txt new file mode 100644 index 0000000000..73b81100d2 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm4/.README.txt @@ -0,0 +1,94 @@ + +///\file "electromagnetic/TestEm4/.README.txt" +///\brief Example TestEm4 README page + +/*! \page ExampleTestEm4 Example TestEm4 + + Plot energy deposited by 9 MeV photon beam in an homogeneous medium. + +\section TestEm4_s1 GEOMETRY DEFINITION + + It is a cylinder of 5 cm radius filled with C6F6. + +\section TestEm4_s2 PHYSICS LIST + + The particle list contains only gamma, electron,positron. + The physics list contains the 'standard' electromagnetic processes. + +\section TestEm4_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic is a single 9 MeV gamma randomly shooted at the + middle of the cylinder. + +\section TestEm4_s4 VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm4.cc). + The initialisation of the drawing is done via the commands + /vis/.. in the macro vis.mac. This macro is + automatically read from the main in case of interactive running mode. + + The detector has a default view which is a transversal view of the + cylinder. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionaly one can choose to draw all particles, only the charged one, + or none. This command is defined in EventActionMessenger class. + +\section TestEm4_s5 PHYSICS SURVEY + + The energy deposited in C6F6 is histogramed. + +\section TestEm4_s6 HOW TO START ? + + - Execute TestEm4 in 'batch' mode from macro files +\verbatim +% TestEm4 TestEm4.in +\endverbatim + + - Execute TestEm4 in 'interactive mode' with visualization +\verbatim +% TestEm4 +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + +\section TestEm4_s7 USING HISTOGRAMS + + The format of the histogram file can be : root (default), + xml, csv, by selecting g4nnn.hh in RunAction.hh + +\section TestEm4_s8- RANDOM NUMBERS HANDLING + + CLHEP provides several random number engines. In this example the Ranecu + engine is choosen at beginning of the main (TestEm4.cc). + + By default, G4RunManager does not save the rndm seed. + To do so the user must set in BeginOfRunAction: + G4RunManager::GetRunManager()->SetRandomNumberStore(true); + + Then the rndm seed is systematically saved at beginning of run + (currentRun.rndm) and beginning of event (currentEvent.rndm) + Therefore, in case of abnormal end, the seed of the last event processed + is available in currentEvent.rndm + + Even in case of normal run processing, the user may wish to preserve the + rndm seed of selected events. At any time in the event, put the + following statement: +\verbatim +if (condition) G4RunManager::GetRunManager()->rndmSaveThisEvent(); +\endverbatim + currentEvent.rndm will be copied to runXXevntYY.rndm + (see SteppingAction::UserSteppingAction() ) + + To restart a run from a given rndm seed, use the UI command : +\verbatim +/random/resetEngineFrom fileName +\endverbatim + + The macro rndmSeed.mac shows how to save and reset the random number + seed between runs, from UI commands. + +*/ + diff --git a/examples/extended/electromagnetic/TestEm4/README b/examples/extended/electromagnetic/TestEm4/README new file mode 100644 index 0000000000..4e8e0b3bd3 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm4/README @@ -0,0 +1,86 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm4 + ------- + + Plot energy deposited by 9 MeV photon beam in an homogeneous medium. + + 1- GEOMETRY DEFINITION + + It is a cylinder of 5 cm radius filled with C6F6. + + 2- PHYSICS LIST + + The particle list contains only gamma, electron,positron. + The physics list contains the 'standard' electromagnetic processes. + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic is a single 9 MeV gamma randomly shooted at the + middle of the cylinder. + + 4- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/.. in the macro vis.mac. This macro is + automatically read from the main in case of interactive running mode. + + The detector has a default view which is a transversal view of the + cylinder. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionaly one can choose to draw all particles, only the charged one, + or none. This command is defined in EventActionMessenger class. + + 5- PHYSICS SURVEY + + The energy deposited in C6F6 is histogramed. + + 6- HOW TO START ? + + - execute TestEm4 in 'batch' mode from macro files + % TestEm4 TestEm4.in + + - execute TestEm4 in 'interactive mode' with visualization + % TestEm4 + .... + Idle> type your commands + .... + Idle> exit + + 7- USING HISTOGRAMS + + The format of the histogram file can be : root (default), + xml, csv, by selecting g4nnn.hh in RunAction.hh + + 8- RANDOM NUMBERS HANDLING + + CLHEP provides several random number engines. In this example the Ranecu + engine is choosen at beginning of the main (TestEm4.cc). + + By default, G4RunManager does not save the rndm seed. + To do so the user must set in BeginOfRunAction: + G4RunManager::GetRunManager()->SetRandomNumberStore(true); + + Then the rndm seed is systematically saved at beginning of run + (currentRun.rndm) and beginning of event (currentEvent.rndm) + Therefore, in case of abnormal end, the seed of the last event processed + is available in currentEvent.rndm + + Even in case of normal run processing, the user may wish to preserve the + rndm seed of selected events. At any time in the event, put the + following statement: + if (condition) G4RunManager::GetRunManager()->rndmSaveThisEvent(); + currentEvent.rndm will be copied to runXXevntYY.rndm + (see SteppingAction::UserSteppingAction() ) + + To restart a run from a given rndm seed, use the UI command : + /random/resetEngineFrom fileName + + The macro rndmSeed.mac shows how to save and reset the random number + seed between runs, from UI commands. diff --git a/examples/extended/electromagnetic/TestEm5/.README.txt b/examples/extended/electromagnetic/TestEm5/.README.txt new file mode 100644 index 0000000000..1fc66e4623 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm5/.README.txt @@ -0,0 +1,271 @@ + +///\file "electromagnetic/TestEm5/.README.txt" +///\brief Example TestEm5 README page + +/*! \page ExampleTestEm5 Example TestEm5 + + How to study the transmission, absorption and reflection of particles through + a single, thin or thick, layer of material. + In particular, the effects of the multiple scattering can be plotted. + +\section TestEm5_s1 GEOMETRY DEFINITION + + The "absorber" is a box made of a given material. + + Three parameters define the absorber : + - the material of the absorber, + - the thickness of an absorber, + - the transverse size of the absorber (the input face is a square). + + A volume "World" contains the "absorber". + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, but all the + parameters can be changed via commands defined in the DetectorMessenger class. + The parameters of the "World" can be changed, too. However, if World material + is not set to vacuum, the plots 10->43 below may be not pertinent. + +\section TestEm5_s2 PHYSICS LIST + + Physics lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + EM physics builders can be local (eg. in this example) or from G4 kernel + physics_lists subdirectory. + + Local physics builders: + - "local" standard EM physics with current 'best' options setting + these options are explicited in PhysListEmStandard + - "standardSSM" standard EM physics with alternative single Coulomb + scattering model instead of multiple scattering. + + From geant4/source/physics_lists/builders: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + Physics lists and options can be (re)set with UI commands + + Please, notice that options set through G4EmProcessOptions are global, eg + for all particle types. In G4 builders, it is shown how to set options per + particle type. + +\section TestEm5_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the absorber + perpendicular to the input face. The type of the particle and its energy are + set in the PrimaryGeneratorAction class, and can be changed via the G4 build-in + commands of G4ParticleGun class (see the macros provided with this example). + + In addition one can choose randomly the impact point of the incident particle. + The interactive command is built in PrimaryGeneratorMessenger class. + +\section TestEm5_s4 VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm5.cc). + The initialisation of the drawing is done via the commands in vis.mac + In interactive session: +\verbatim + PreInit or Idle > /control/execute vis.mac +\endverbatim + + The example has a default view which is a longitudinal view of the detector. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged, or none. + This command is defined in EventActionMessenger class. + +\section TestEm5_s5 TRACKING + + During the tracking, one can keep or not the secondaries : see StackingAction + class and its Messenger (StackingMessenger). + One can also limit 'by hand' the step lenght of the particle. As an example, + this limitation is implemented as a 'full' process : see StepMax class and its + Messenger. The 'StepMax process' is registered in the Physics List. + +\section TestEm5_s6 DETECTOR RESPONSE + + At the end of a run, from the histogram(s), one can study different + physics quantities such as : + - energy deposit in the absorber, + - energy spectrum of secondaries at creation, + - energy spectrum and angle distribution of particles at exit, + - transmission and backscattering coefficients, + - ... + +\section TestEm5_s7 List of the built-in histograms + + The test contains more than 60 built-in 1D histograms, which are managed by + G4AnalysisManager class and its Messenger. The histos can be individually activated + with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + (see the macros xxxx.mac). + + - 1 : "energy deposit in absorber" + - 2 : "energy of charged secondaries at creation" + - 3 : "energy of neutral secondaries at creation" + - 4 : "energy of charged at creation (log10(Ekin))" + - 5 : "energy of neutral at creation (log10(Ekin))" + - 6 : "x_vertex of charged secondaries (all)" + - 7 : "x_vertex of charged secondaries (not absorbed)" + - 10 : "(transmit, charged) : kinetic energy at exit of world" + - 11 : "(transmit, charged) : ener fluence: dE(MeV)/dOmega" + - 12 : "(transmit, charged) : space angle dN/dOmega" + - 13 : "(transmit, charged) : projected angle at exit of world" + - 14 : "(transmit, charged) : projected position at exit of world" + - 15 : "(transmit, charged) : radius at exit of world" + - 20 : "(transmit, neutral) : kinetic energy at exit of world" + - 21 : "(transmit, neutral) : ener fluence: dE(MeV)/dOmega" + - 22 : "(transmit, neutral) : space angle dN/dOmega" + - 23 : "(transmit, neutral) : projected angle at exit of world" + - 30 : "(reflect , charged) : kinetic energy at exit of world" + - 31 : "(reflect , charged) : ener fluence: dE(MeV)/dOmega" + - 32 : "(reflect , charged) : space angle dN/dOmega" + - 33 : "(reflect , charged) : projected angle at exit of world" + - 40 : "(reflect , neutral) : kinetic energy at exit of world" + - 41 : "(reflect , neutral) : ener fluence: dE(MeV)/dOmega" + - 42 : "(reflect , neutral) : space angle dN/dOmega" + - 43 : "(reflect , neutral) : projected angle at exit of world" + - 50 : "energy of Auger e- at creation" + - 51 : "energy of fluorescence gamma at creation" + - 52 : "energy of Auger e- at creation (log scale)" + - 53 : "energy of fluorescence gamma at creation (log scale)" + - 54 : "energy of PIXE Auger e- at creation" + - 55 : "energy of PIXE gamma at creation" + - 56 : "energy of PIXE Auger e- at creation (log scale)" + - 57 : "energy of PIXE gamma at creation (log scale)" + - 58 : "energy of G4DNA Auger e- at creation" + - 59 : "energy of G4DNA gamma at creation" + - 60 : "energy of G4DNA Auger e- at creation (log scale)" + - 61 : "energy of G4DNA gamma at creation (log scale)" + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default testem5) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default testem5) + +\subsection TestEm5_subs1 Using hbook format + + Need a special treatement : the Cern Library must be installed and the + environment variable CERNLIB correctly set. Then, *before* compiling, + activate G4_USE_HBOOK in GNUmakefile and g4hbook.hh in HistoManager.hh + +\section TestEm5_s8 GEANT4/GEANT3/DATA COMPARISON + + A Geant4/Geant3/exp. data comparison is given here for a few cases. + These cases can be classified as follow: + - e-/e+ incident particles versus protons and others. + - 3 energy regimes: low: < 1MeV; medium: 1MeV -> few 10MeV; high: > 100MeV + + We indicate here the corresponding macros. +
 
+ 	      |	low energy   |	medium energy	|  high energy
+	--------------------------------------------------------
+	      | acosta.mac   |                  |
+	e-+   |	berger.mac   |	hanson.mac      |
+	      |	hunger.mac   |	kulchi.mac      |
+	      | tavola.mac   |			|
+	--------------------------------------------------------
+	others|	bichsel.mac  | 	vincour.mac	|  shen1.mac shen2.mac
+	      | 	     |	gottsch.mac	|  tramu.mac
+	--------------------------------------------------------
+
+ +\section TestEm5_s9 HOW TO START ? + + - Execute TestEm5 in 'batch' mode from macro files e.g. +\verbatim +% $(G4INSTALL)/bin/$(G4SYSTEM)/TestEm5 myMacro.mac +\endverbatim + + - Execute TestEm5 in 'interactive' mode with visualization e.g. +\verbatim +% $(G4INSTALL)/bin/$(G4SYSTEM)/TestEm5 +\endverbatim +Then type your commands, for instance : +\verbatim +Idle> control/execute vis.mac +Idle> run/beamOn 5 +.... +\endverbatim + +Macros provided in this example: +- acosta.mac: Back x-ray emission by 20 keV electrons in Silver. + (E. Acosta et al. Journal of Applied Physics 83(11) 1998 page 6038, + Fig. 4-5-6) + - anthony.mac: LPM and dielectric effect measurement: 25 GeV electrons + through thin foils. + (P.L. Anthony et al. Phys.Rev. D 56 (1997) page 1373.) + - atima.mac: to test PhysListEm19DStandard for ions + - berger.mac: Energy deposit by 1 MeV electrons in silicon counters. + (M.J.Berger et al. NIM 69 (1969) page 181.) + - bichsel.mac: 0.766 MeV protons, transmitted through 1.37 mg/cm2 Al + (H.Bichsel Phys.Rev. 112 (1958) page 182.) + - dedx1.mac: to control dE/dx calculation. + - dedx2.mac: to control dE/dx calculation. High statistic and plot + - dna.mac: to illustrate DNA physics + - fluo.mac: to illustrate atomic deexcitation options + - gammaSpectrum.mac: to plot gamma spectrum with/without atomic deexcitation. + - geom.mac: to play with geometry (can be run interactively with visualization) + - gottsch.mac: 158.6 MeV protons, transmitted through 0.2160 g/cm2 Al + (B.Gottschalk et al. NIM B74 (1993) page 467.) + - hanson.mac: Angle distribution of 15.7 MeV electrons transmitted through + thin gold foils. + (A.O.Hanson et al. Phys.Rev.84 (1951) page 634.) + - hunger.mac: Back scattering of 41 keV electrons. + (H.J. Hunger and L. Kuchler Phys. Stat. Sol.(a) 56, K45 (1979)) + - ion.mac: ion C12 in 1m Iron + - kulchi.mac: 2.25 MeV e-, transmitted through 26.60 mg/cm2 Al + (L.Kulchitsky Phys.Rev. 61 (1941) page 254.) + - mumsc.mac: 100 GeV mu+, transmitted through 1 m of iron + - mutev.mac: 1 TeV mu+, transmitted through 1 m of iron + - pixe.mac: to illustrate atomic deexcitation options + - pixe_ANSTO.mac: to illustrate how to activate the ANSTO PIXE data libraries. + for both cross sections and fluorescence radiation yields (for materials with Z < 93). + The cross sections are available for protons with energy < 5 MeV + and alpha particles with energy < 10 MeV/nucleon. + (S. Bakr et al. (2021) NIM B, 507:1119) + (S. Bakr et al (2018), NIMB B, 436: 285-291) + - posi.mac: to test PhysListEm19DStandard for positron + - shen1.mac: Angle distribution of high energy (50-200 GeV/c) protons + transmitted through different targets. + (G. Shen et al. Phys.Rev. D20 (1979) page 1584.) + - shen2.mac: proton 175 GeV/c, transmitted through 8.004 mm Al + (G. Shen et al. Phys.Rev. D20 (1979) page 1584.) + - stepMax.cc: to test the command /testem/stepMax + - tavora.mac: Back scattering of 35 keV electrons in Silver. + (L.M. Tavora et al. J.Phys.D: Appl. Phys. 33 (2000) page 2497, + Fig. 7) + - tramu.mac: 1 TeV mu+, transmitted through 3 m of iron + (Rev. of Particle Physics Eur. Phys. Jour. C (2000) page 172. + Rev. of Particle Physics Letters B 592 (2004) page 251.) + - vincour.mac: Angle distribution of 6.56 MeV protons transmitted through + thin silicon targets. + (J.Vincour,P.Bem NIM 148 (1978) page 396.) + - vis.mac - to activate visualization + +*/ diff --git a/examples/extended/electromagnetic/TestEm5/README b/examples/extended/electromagnetic/TestEm5/README new file mode 100644 index 0000000000..a891d761ac --- /dev/null +++ b/examples/extended/electromagnetic/TestEm5/README @@ -0,0 +1,252 @@ +----------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm5 + ------- + How to study the transmission, absorption and reflection of particles through + a single, thin or thick, layer of material. + In particular, the effects of the multiple scattering can be plotted. + + 1- GEOMETRY DEFINITION + + The "absorber" is a box made of a given material. + + Three parameters define the absorber : + - the material of the absorber, + - the thickness of an absorber, + - the transverse size of the absorber (the input face is a square). + + A volume "World" contains the "absorber". + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, but all the + parameters can be changed via commands defined in the DetectorMessenger class. + The parameters of the "World" can be changed, too. However, if World material + is not set to vacuum, the plots 10->43 below may be not pertinent. + + 2- PHYSICS LIST + + Physics lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + EM physics builders can be local (eg. in this example) or from G4 kernel + physics_lists subdirectory. + + Local physics builders: + - "local" standard EM physics with current 'best' options setting + these options are explicited in PhysListEmStandard + - "standardSSM" standard EM physics with alternative single Coulomb + scattering model instead of multiple scattering. + + From geant4/source/physics_lists/builders: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + Physics lists and options can be (re)set with UI commands + + Please, notice that options set through G4EmProcessOptions are global, eg + for all particle types. In G4 builders, it is shown how to set options per + particle type. + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the absorber + perpendicular to the input face. The type of the particle and its energy are + set in the PrimaryGeneratorAction class, and can be changed via the G4 + build-in commands of G4ParticleGun class (see the macros provided with this + example). + + In addition one can choose randomly the impact point of the incident particle. + The interactive command is built in PrimaryGeneratorMessenger class. + + 4- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands in vis.mac + In interactive session: + PreInit or Idle > /control/execute vis.mac + + The example has a default view which is a longitudinal view of the detector. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged, or none. + This command is defined in EventActionMessenger class. + + 5- TRACKING + + During the tracking, one can keep or not the secondaries : see StackingAction + class and its Messenger (StackingMessenger). + One can also limit 'by hand' the step lenght of the particle. As an example, + this limitation is implemented as a 'full' process : see StepMax class and its + Messenger. The 'StepMax process' is registered in the Physics List. + + 6- DETECTOR RESPONSE + + At the end of a run, from the histogram(s), one can study different + physics quantities such as : + - energy deposit in the absorber, + - energy spectrum of secondaries at creation, + - energy spectrum and angle distribution of particles at exit, + - transmission and backscattering coefficients, + - ... + + 7- List of the built-in histograms + ---------------------------------- + + The test contains more than 60 built-in 1D histograms, which are managed by + G4AnalysisManager class and its Messenger. The histos can be individually activated + with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + (see the macros xxxx.mac). + + 1 "energy deposit in absorber" + 2 "energy of charged secondaries at creation" + 3 "energy of neutral secondaries at creation" + 4 "energy of charged at creation (log10(Ekin))" + 5 "energy of neutral at creation (log10(Ekin))" + 6 "x_vertex of charged secondaries (all)" + 7 "x_vertex of charged secondaries (not absorbed)" + 10 "(transmit, charged) : kinetic energy at exit of world" + 11 "(transmit, charged) : ener fluence: dE(MeV)/dOmega" + 12 "(transmit, charged) : space angle dN/dOmega" + 13 "(transmit, charged) : projected angle at exit of world" + 14 "(transmit, charged) : projected position at exit of world" + 15 "(transmit, charged) : radius at exit of world" + 20 "(transmit, neutral) : kinetic energy at exit of world" + 21 "(transmit, neutral) : ener fluence: dE(MeV)/dOmega" + 22 "(transmit, neutral) : space angle dN/dOmega" + 23 "(transmit, neutral) : projected angle at exit of world" + 30 "(reflect , charged) : kinetic energy at exit of world" + 31 "(reflect , charged) : ener fluence: dE(MeV)/dOmega" + 32 "(reflect , charged) : space angle dN/dOmega" + 33 "(reflect , charged) : projected angle at exit of world" + 40 "(reflect , neutral) : kinetic energy at exit of world" + 41 "(reflect , neutral) : ener fluence: dE(MeV)/dOmega" + 42 "(reflect , neutral) : space angle dN/dOmega" + 43 "(reflect , neutral) : projected angle at exit of world" + 50 "energy of Auger e- at creation" + 51 "energy of fluorescence gamma at creation" + 52 "energy of Auger e- at creation (log scale)" + 53 "energy of fluorescence gamma at creation (log scale)" + 54 "energy of PIXE Auger e- at creation" + 55 "energy of PIXE gamma at creation" + 56 "energy of PIXE Auger e- at creation (log scale)" + 57 "energy of PIXE gamma at creation (log scale)" + 58 "energy of G4DNA Auger e- at creation" + 59 "energy of G4DNA gamma at creation" + 60 "energy of G4DNA Auger e- at creation (log scale)" + 61 "energy of G4DNA gamma at creation (log scale)" + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default testem5) + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default testem5) + + 8- GEANT4/GEANT3/DATA COMPARISON + + A Geant4/Geant3/exp. data comparison is given here for a few cases. + These cases can be classified as follow: + - e-/e+ incident particles versus protons and others. + - 3 energy regimes: low: < 1MeV; medium: 1MeV -> few 10MeV; high: > 100MeV + + We indicate here the corresponding macros. + + | low energy | medium energy | high energy + -------------------------------------------------------- + | acosta.mac | | + e-+ | berger.mac | hanson.mac | + | hunger.mac | kulchi.mac | + | tavola.mac | | + -------------------------------------------------------- + others| bichsel.mac | vincour.mac | shen1.mac shen2.mac + | | gottsch.mac | tramu.mac + -------------------------------------------------------- + + 9- HOW TO START ? + + - execute TestEm5 in 'batch' mode from macro files e.g. + % $(G4INSTALL)/bin/$(G4SYSTEM)/TestEm5 myMacro.mac + + - execute TestEm5 in 'interactive' mode with visualization e.g. + % $(G4INSTALL)/bin/$(G4SYSTEM)/TestEm5 + Then type your commands, for instance : + Idle> control/execute vis.mac + Idle> run/beamOn 5 + .... + + Macros provided in this example: + - acosta.mac: Back x-ray emission by 20 keV electrons in Silver. + (E. Acosta et al. Journal of Applied Physics 83(11) 1998 page 6038, + Fig. 4-5-6) + - anthony.mac: LPM and dielectric effect measurement: 25 GeV electrons + through thin foils. + (P.L. Anthony et al. Phys.Rev. D 56 (1997) page 1373.) + - atima.mac: to test PhysListEm19DStandard for ions + - berger.mac: Energy deposit by 1 MeV electrons in silicon counters. + (M.J.Berger et al. NIM 69 (1969) page 181.) + - bichsel.mac: 0.766 MeV protons, transmitted through 1.37 mg/cm2 Al + (H.Bichsel Phys.Rev. 112 (1958) page 182.) + - dedx1.mac: to control dE/dx calculation. + - dedx2.mac: to control dE/dx calculation. High statistic and plot + - dna.mac: to illustrate DNA physics + - fluo.mac: to illustrate atomic deexcitation options + - gammaSpectrum.mac: to plot gamma spectrum with/without atomic deexcitation. + - geom.mac: to play with geometry (can be run interactively with visualization) + - gottsch.mac: 158.6 MeV protons, transmitted through 0.2160 g/cm2 Al + (B.Gottschalk et al. NIM B74 (1993) page 467.) + - hanson.mac: Angle distribution of 15.7 MeV electrons transmitted through + thin gold foils. + (A.O.Hanson et al. Phys.Rev.84 (1951) page 634.) + - hunger.mac: Back scattering of 41 keV electrons. + (H.J. Hunger and L. Kuchler Phys. Stat. Sol.(a) 56, K45 (1979)) + - ion.mac: ion C12 in 1m Iron + - kulchi.mac: 2.25 MeV e-, transmitted through 26.60 mg/cm2 Al + (L.Kulchitsky Phys.Rev. 61 (1941) page 254.) + - mumsc.mac: 100 GeV mu+, transmitted through 1 m of iron + - mutev.mac: 1 TeV mu+, transmitted through 1 m of iron + - pixe.mac: to illustrate atomic deexcitation options + - pixe_ANSTO.mac: to illustrate how to activate the ANSTO PIXE data libraries, + for both cross sections and fluorescence radiation yields (for materials with Z < 93). + The cross sections are available for protons with energy < 5 MeV + and alpha particles with energy < 10 MeV/nucleon. + (S. Bakr et al. (2021) NIM B, 507:1119), + (S. Bakr et al (2018), NIMB B, 436: 285-291). + - posi.mac: to test PhysListEm19DStandard for positron + - shen1.mac: Angle distribution of high energy (50-200 GeV/c) protons + transmitted through different targets. + (G. Shen et al. Phys.Rev. D20 (1979) page 1584.) + - shen2.mac: proton 175 GeV/c, transmitted through 8.004 mm Al + (G. Shen et al. Phys.Rev. D20 (1979) page 1584.) + - stepMax.cc: to test the command /testem/stepMax + - tavora.mac: Back scattering of 35 keV electrons in Silver. + (L.M. Tavora et al. J.Phys.D: Appl. Phys. 33 (2000) page 2497, + Fig. 7) + - tramu.mac: 1 TeV mu+, transmitted through 3 m of iron + (Rev. of Particle Physics Eur. Phys. Jour. C (2000) page 172. + Rev. of Particle Physics Letters B 592 (2004) page 251.) + - vincour.mac: Angle distribution of 6.56 MeV protons transmitted through + thin silicon targets. + (J.Vincour,P.Bem NIM 148 (1978) page 396.) + - vis.mac - to activate visualization diff --git a/examples/extended/electromagnetic/TestEm6/.README.txt b/examples/extended/electromagnetic/TestEm6/.README.txt new file mode 100644 index 0000000000..9afe595128 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm6/.README.txt @@ -0,0 +1,140 @@ + +///\file "electromagnetic/TestEm6/.README.txt" +///\brief Example TestEm6 README page + +/*! \page ExampleTestEm6 Example TestEm6 + + This example is intended to test the processes of gamma conversion + to a pair of muons and annihilation of positrons with atomic + electrons to a pair of muons. + +\section TestEm6_s1 GEOMETRY DEFINITION + + The geometry consists of a single block of a homogenous material. + + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + The default is 500 m of iron. + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + +\section TestEm6_s2 PHYSICS LIST + + Physics Lists are based on modular design. Several modules are + instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + The electromagnetic physics is chosen from one of the Geant4 EM + physics constructors in the physics_list library. + + Cross sections can be enhanced (see below). + +\section TestEm6_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + block perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + The default is a Gamma of 100 TeV. + + In addition one can choose randomly the impact point of the incident + particle. The corresponding interactive command is built in + PrimaryGeneratorMessenger class. + + A RUN is a set of events. + +\section TestEm6_s4 VISUALIZATION + + The Visualization Manager is set in the main() (see TestEm6.cc). + The initialisation of the drawing is done via the command +\verbatim +> /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the box. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged ones, + or none. This command is defined in EventActionMessenger class. + +\section TestEm6_s5 PHYSICS DEMO + + The particle's type and the physics processes which will be available + in this example are set in PhysicsList class. + + In addition a build-in interactive command (/process/inactivate procname) + allows to activate/inactivate the processes one by one. + + The threshold for producing secondaries can be changed. + eg: +\verbatim +/run/particle/setCut 100 micrometer +/run/initialize +\endverbatim + + To visualize the GammaConversionToMuons : +\verbatim +/control/execute run01.mac +/control/execute vis.mac +/run/beamOn +\endverbatim + + To visualize the AnnihiToMuPair : +\verbatim +/control/execute run11.mac +/control/execute vis.mac +/run/beamOn +\endverbatim + +\section TestEm6_s6 HOW TO START ? + + - Execute Test in 'batch' mode from macro files +\verbatim +% TestEm6 run01.mac +\endverbatim + + - Execute Test in 'interactive mode' with visualization +\verbatim +% TestEm6 + .... +Idle> type your commands + .... +Idle> exit +\endverbatim + +\section TestEm6_s7 HOW TO INCREASE STATISTICS ON gamma -> mu+mu- ? + + The processes of gamma -> mu+mu- and e+e- -> mu+mu- + have a low cross section but can be important + for leakage through thick absorbers and calorimeters. + Straight forward simulation will be quite time consuming. + To make the processes more visible, the cross section can be + artificially increased by some factor (here 1000) + using the commands (only effective after /run/initialize) + +\verbatim +/testem/phys/SetGammaToMuPairFac 1000 +/testem/phys/SetAnnihiToMuPairFac 1000 +\endverbatim + + +\section TestEm6_s8 HISTOGRAMS + + Testem6 produces 6 histograms which illustrate the final state of + the GammaConversionToMuons process. See their definitions in RunAction.cc + + By default the histograms are saved as testem6.root + + The format of the histogram file can be : root (default), xml, csv, + by selecting g4nnn.hh in RunAction.hh + +*/ diff --git a/examples/extended/electromagnetic/TestEm6/README b/examples/extended/electromagnetic/TestEm6/README new file mode 100644 index 0000000000..cb3570b690 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm6/README @@ -0,0 +1,125 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm6 + ------- + This example is intended to test the processes of gamma conversion + to a pair of muons and annihilation of positrons with atomic + electrons to a pair of muons. + + 1- GEOMETRY DEFINITION + + The geometry consists of a single block of a homogenous material. + + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + The default is 500 m of iron. + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + + 2- PHYSICS LIST + + Physics Lists are based on modular design. Several modules are + instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + The electromagnetic physics is chosen from one of the Geant4 EM + physics constructors in the physics_list library. + + Cross sections can be enhanced (see below). + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + block perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + The default is a Gamma of 100 TeV. + + In addition one can choose randomly the impact point of the incident + particle. The corresponding interactive command is built in + PrimaryGeneratorMessenger class. + + A RUN is a set of events. + + 4- VISUALIZATION + + The Visualization Manager is set in the main() (see TestEm6.cc). + The initialisation of the drawing is done via the command + > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the box. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged ones, + or none. This command is defined in EventActionMessenger class. + + 5- PHYSICS DEMO + + The particle's type and the physics processes which will be available + in this example are set in PhysicsList class. + + In addition a build-in interactive command (/process/inactivate procname) + allows to activate/inactivate the processes one by one. + + The threshold for producing secondaries can be changed. + eg: /run/particle/setCut 100 micrometer + /run/initialize + + To visualize the GammaConversionToMuons : + /control/execute run01.mac + /control/execute vis.mac + /run/beamOn + + To visualize the AnnihiToMuPair : + /control/execute run11.mac + /control/execute vis.mac + /run/beamOn + + 6- HOW TO START ? + + - execute Test in 'batch' mode from macro files + % TestEm6 run01.mac + + - execute Test in 'interactive mode' with visualization + % TestEm6 + .... + Idle> type your commands + .... + Idle> exit + + 7- HOW TO INCREASE STATISTICS ON gamma -> mu+mu- ? + + The processes of gamma -> mu+mu- and e+e- -> mu+mu- + have a low cross section but can be important + for leakage through thick absorbers and calorimeters. + Straight forward simulation will be quite time consuming. + To make the processes more visible, the cross section can be + artificially increased by some factor (here 1000) + using the commands (only effective after /run/initialize) + + /testem/phys/SetGammaToMuPairFac 1000 + /testem/phys/SetAnnihiToMuPairFac 1000 + + + 8- HISTOGRAMS + + Testem6 produces 6 histograms which illustrate the final state of + the GammaConversionToMuons process. See their definitions in RunAction.cc + + By default the histograms are saved as testem6.root + + The format of the histogram file can be : root (default), xml, csv, + by selecting g4nnn.hh in RunAction.hh diff --git a/examples/extended/electromagnetic/TestEm7/.README.txt b/examples/extended/electromagnetic/TestEm7/.README.txt new file mode 100644 index 0000000000..c4d0b08c0d --- /dev/null +++ b/examples/extended/electromagnetic/TestEm7/.README.txt @@ -0,0 +1,177 @@ + +///\file "electromagnetic/TestEm7/.README.txt" +///\brief Example TestEm7 README page + +/*! \page ExampleTestEm7 Example TestEm7 + + - How to produce a Bragg curve in a water phantom. + - How to compute the dose in 'test volumes' called tallies. + - How to define a maximum step size. + +\section TestEm7_s1 GEOMETRY DEFINITION + + The geometry consists of a single block of a homogenous material, + placed in a world. + + Three parameters define the geometry : + - the material of the box, + - the thickness of the box (sizeX), + - the transverse dimension of the box (sizeYZ). + + The default is 20 cm of water. + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + + The size, matter, positions of several test-volumes (tallies) can be + defined via UI commands : /testem/det/tally... + +\section TestEm7_s2 PHYSICS LIST + + Physics lists can be local (eg. in this example) or from G4 kernel + physics_lists subdirectory. + + Local physics lists: + - "local" standard EM physics with current 'best' options setting. + these options are explicited in PhysListEmStandard + - "standardSS" standard EM physics with single Coulomb scattering + instead of multiple scattering; + - "standardNR" standard EM physics with single Coulomb scattering + process G4ScreenedNuclearRecoil instead of the + multiple scattering for ions with energy less than + 100 MeV/nucleon; the new process was developed + by M.H. Mendenhall and R.A. Weller from Vanderbuilt + University and published in NIM B 277 (2005) 420. + In later Geant4 releases the process will be a part + of Geant4 source, currently it is released together + with its mathematical tool c2_functions in current + + From geant4/source/physics_lists/builders: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emstandardGS" standard EM physics and Goudsmit-Saunderson multiple scatt. + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + Decay and StepMax processes are added to each list. + + Optional components can be added: + - "elastic" elastic scattering of hadrons + - "HElastic" + - "QElastic" + - "binary" QBBC configuration of hadron inelastic models + - "binary_ion" Binary ion inelastic models + - "ionIoni" Ion gas models + + Physics lists and options can be (re)set with UI commands + + Please, notice that options set through G4EmProcessOptions are global, eg + for all particle types. In G4 builders, it is shown how to set options per + particle type. + +\section TestEm7_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + block perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + The default is a 160 MeV proton. + + In addition one can define randomly the impact point of the incident + particle. The corresponding interactive command is built in + PrimaryGeneratorMessenger class. + + A RUN is a set of events. + + +\section TestEm7_s4 DOSE IN 'TEST-VOLUMES' + + The energy deposited in the test-volumes (tallies) defined in + DetectorConstruction are printed at RunAction::EndOfRunAction(), both in MeV and gray. + +\section TestEm7_s5 VISUALIZATION + + The Visualization Manager is set in the main () (see TestEm7.cc). + The initialisation of the drawing is done via the command +\verbatim +> /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the box. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged one, + or none. This command is defined in EventActionMessenger class. + + +\section TestEm7_s6- HOW TO START ? + + - Execute Test in 'batch' mode from macro files +\verbatim +% TestEm7 proton.mac +\endverbatim + + - Execute Test in 'interactive mode' with visualization +\verbatim +% TestEm7 + .... +Idle> type your commands + .... +Idle> exit +\endverbatim + + +\section TestEm7_s7- HISTOGRAM OF THE BRAGG PEAK + + Testem7 computes the total energy deposited along the trajectory of + the incident particle : the so-called Bragg peak. + + In order to control the accuracy of the deposition, the user can limit + the maximum allowed for the step size of charged particles. + (command /testem/stepMax ) + + The result is a 1D histogram, which is the total energy deposited + along the trajectory of the incident particle. + + The bin size is equal to stepMax. The number of bins is determined by + the thickness of the absorber (with a minimum of 100 bins). + The total energy deposited is plotted in MeV/mm per incident particle. + + The next histogram allows to have a zoom around the Bragg peak. Its binning + should be defined via UI command: +\verbatim +/analysis/h1/set 2 nbins xmin xmax unit +\endverbatim + + The last histogram shows the projectile range. Its bining should be defined + similary by the UI command: +\verbatim +/analysis/h1/set 3 nbins xmin xmax unit +\endverbatim + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default testem7) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim + /analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default testem7) + +*/ diff --git a/examples/extended/electromagnetic/TestEm7/README b/examples/extended/electromagnetic/TestEm7/README new file mode 100644 index 0000000000..ed97024078 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm7/README @@ -0,0 +1,156 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm7 + ------- + + How to produce a Bragg curve in a water phantom. + How to compute the dose in 'test volumes' called tallies. + How to define a maximum step size. + + 1- GEOMETRY DEFINITION + + The geometry consists of a single block of a homogenous material, + placed in a world. + + Three parameters define the geometry : + - the material of the box, + - the thickness of the box (sizeX), + - the transverse dimension of the box (sizeYZ). + + The default is 20 cm of water. + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + + The size, matter, positions of several test-volumes (tallies) can be + defined via UI commands : /testem/det/tally... + + 2- PHYSICS LIST + + Physics lists can be local (eg. in this example) or from G4 kernel + physics_lists subdirectory. + + Local physics lists: + - "local" standard EM physics with current 'best' options setting. + these options are explicited in PhysListEmStandard + - "standardSS" standard EM physics with single Coulomb scattering + instead of multiple scattering; + - "standardNR" standard EM physics with single Coulomb scattering + process G4ScreenedNuclearRecoil instead of the + multiple scattering for ions with energy less than + 100 MeV/nucleon; the new process was developed + by M.H. Mendenhall and R.A. Weller from Vanderbuilt + University and published in NIM B 277 (2005) 420. + The process is released in this example with its + mathematical tool c2_functions + + From geant4/source/physics_lists/builders: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emstandardGS" standard EM physics and Goudsmit-Saunderson multiple scatt. + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + Decay and StepMax processes are added to each list. + + Optional components can be added: + - "elastic" elastic scattering of hadrons + - "HElastic" + - "QElastic" + - "binary" QBBC configuration of hadron inelastic models + - "binary_ion" Binary ion inelastic models + - "ionIoni" Ion gas models + + Physics lists and options can be (re)set with UI commands + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + block perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + The default is a 160 MeV proton. + + In addition one can define randomly the impact point of the incident + particle. The corresponding interactive command is built in + PrimaryGeneratorMessenger class. + + A RUN is a set of events. + + 4- DOSE IN 'TEST-VOLUMES' + + The energy deposited in the test-volumes (tallies) defined in + DetectorConstruction are printed at EndOfRun, both in MeV and gray. + + 5- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the command + > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the box. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionally one can choose to draw all particles, only the charged one, + or none. This command is defined in EventActionMessenger class. + + 6- HOW TO START ? + + - execute Test in 'batch' mode from macro files + % TestEm7 proton.mac + + - execute Test in 'interactive mode' with visualization + % TestEm7 + .... + Idle> type your commands + .... + Idle> exit + + 7- HISTOGRAM OF THE BRAGG PEAK + + Testem7 computes the total energy deposited along the trajectory of + the incident particle : the so-called Bragg peak. + + In order to control the accuracy of the deposition, the user can limit + the maximum allowed for the step size of charged particles. + (command /testem/stepMax ) + + The result is a 1D histogram, which is the total energy deposited + along the trajectory of the incident particle. + + The bin size is equal to stepMax. The number of bins is determined by + the thickness of the absorber (with a minimum of 100 bins). + The total energy deposited is plotted in MeV/mm per incident particle. + + The next histogram allows to have a zoom around the Bragg peak. Its binning + should be defined via UI command: + /analysis/h1/set 2 nbins xmin xmax unit + + The last histogram shows the projectile range. Its bining should be defined + similary by the UI command: + /analysis/h1/set 3 nbins xmin xmax unit + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default testem7) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default testem7) diff --git a/examples/extended/electromagnetic/TestEm8/.README.txt b/examples/extended/electromagnetic/TestEm8/.README.txt new file mode 100644 index 0000000000..6a6717be9d --- /dev/null +++ b/examples/extended/electromagnetic/TestEm8/.README.txt @@ -0,0 +1,88 @@ + +///\file "electromagnetic/TestEm8/.README.txt" +///\brief Example TestEm8 README page + +/*! \page ExampleTestEm8 Example TestEm8 + + Example for investigation of ionisation in thin absorbers and gaseous + detectors + +\section TestEm8_s1 GEOMETRY DEFINITION + + The target is a cylinder made of a given material placed inside + cylindrical container, which is placed inside the world volume. + + Following parameters define the geometry: + - the material of the target, + - the thickness of the target, + - the radius of the target, + - the material of the container, + - the thickness of the container, + - the material of the world. + + The list of materials used in gaseous detectors are built inside + the DetectorConstruction class, also NIST materials are available. + The default geometry is provided but all parameters can be changed via + UI commands defined in the DetectorMessenger class, for example, + +\verbatim +/testem/setGasMat XeCH4C3H8 +/testem/setWindowMat G4_MYLAR +/testem/setWorldMat G4_AIR +/testem/setGasThick 10 cm +/testem/setGasRad 20 cm +/testem/setWindowThick 50 um +\endverbatim + +\section TestEm8_s2 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + absorber perpendicular to the input face. The type of the particle + and its energy can be set via the G4 build-in commands of G4ParticleGun . + A RUN is a set of events. + +\section TestEm8_s3 DETECTOR RESPONSE + + The TargetSD class sending information about each step inside the target + to the HistoManager class scoring of energy deposition in the detector. + Additionally at each step of a particle inside the target the number of + ionisation clusters is sampled using G4ElectronIonPair helper class. The + parameter of transformation of energy into ionisation clusters can be + set via UI command: + +\verbatim +/testem/setPairEnergy 19 eV +\endverbatim + +\section TestEm8_s4 PHYSICS + + The particle's type and the physics processes which will be available + in this example are set in PhysicsList class, which uses Geant4 + EM physics constructors provided in the physics_list library. + + The PhysicsListMessenger classes introduce interactive commands. In particular, + PAI ionisation model can be added using G4EmConfigurator helper class, + which is invoked by the UI command + +\verbatim +/testem/phys/addPhysics pai +\endverbatim + +\section TestEm8_s5- HOW TO START ? + + - Execute TestEm8 in 'batch' mode from macro files e.g. +\verbatim +% $(G4INSTALL)/bin/$(G4SYSTEM)/TestEm8 TestEm8.in N +\endverbatim + here N means number of threads in multi-threaded mode, by + default 2 threads are used + + - Execute TestEm8 in 'interactive' mode with visualization e.g. +\verbatim +% $(G4INSTALL)/bin/$(G4SYSTEM)/TestEm8 +.... +Idle> type your commands +.... +\endverbatim + +*/ diff --git a/examples/extended/electromagnetic/TestEm8/README b/examples/extended/electromagnetic/TestEm8/README new file mode 100644 index 0000000000..3288d2d0e8 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm8/README @@ -0,0 +1,87 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm8 + ------- + + Example for investigation of ionisation in thin absorbers and gaseous + detectors + + 1- GEOMETRY DEFINITION + + The target is a cylinder made of a given material placed inside + cylindrical container, which is placed inside the world volume. + + Following parameters define the geometry: + - the material of the target, + - the thickness of the target, + - the radius of the target, + - the material of the container, + - the thickness of the container, + - the material of the world. + + The list of materials used in gaseous detectors are built inside + the DetectorConstruction class, also NIST materials are available. + The default geometry is provided but all parameters can be changed via + UI commands defined in the DetectorMessenger class, for example, + + /testem/setGasMat XeCH4C3H8 + /testem/setWindowMat G4_MYLAR + /testem/setWorldMat G4_AIR + /testem/setGasThick 10 cm + /testem/setGasRad 20 cm + /testem/setWindowThick 50 um + + 2- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + absorber perpendicular to the input face. The type of the particle + and its energy can be set via the G4 build-in commands of G4ParticleGun. + A RUN is a set of events. + + 3- DETECTOR RESPONSE + + The TargetSD class sending information about each step inside the target + to the HistoManager class scoring of energy deposition in the detector. + Additionally at each step of a particle inside the target the number of + ionisation clusters is sampled using G4ElectronIonPair helper class. The + parameter of transformation of energy into ionisation clusters can be + set via UI command: + + /testem/setPairEnergy 19 eV + + 4- PHYSICS + + The particle's type and the physics processes which will be available + in this example are set in PhysicsList class, which uses Geant4 + EM physics constructors provided in the physics_list library. + + The messenger classes introduce interactive commands. In particular, + PAI ionisation model can be added using G4EmConfigurator helper class, + which is invoked by one following UI commands: + + /testem/phys/addPhysics pai + /testem/phys/addPhysics pai_photon + /process/em/AddPAIRegion all GasDetector pai + /process/em/AddPAIRegion all GasDetector pai_photon + + Cuts for all setup and/or for sensitive volume may changed via commands: + + /run/setCut 0.5 mm + /run/setCutForRegion GasDetector 1.8 mm + + 5- HOW TO START ? + + Execute TestEm8 in 'batch' mode from macro files e.g. + % $(G4INSTALL)/bin/$(G4SYSTEM)/TestEm8 TestEm8.in N + here N means number of threads in multi-threaded mode, by + default 2 threads are used + + - execute TestEm8 in 'interactive' mode with visualization e.g. + % $(G4INSTALL)/bin/$(G4SYSTEM)/TestEm8 + .... + Idle> type your commands + .... diff --git a/examples/extended/electromagnetic/TestEm9/.README.txt b/examples/extended/electromagnetic/TestEm9/.README.txt new file mode 100644 index 0000000000..7763bb3849 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm9/.README.txt @@ -0,0 +1,120 @@ + +///\file "electromagnetic/TestEm9/.README.txt" +///\brief Example TestEm9 README page + +/*! \page ExampleTestEm9 Example TestEm9 + + - Demonstrate electromagnetic physics in crystal calorimeters. + - How to define cut-per-region. + +\section TestEm9_s1 GEOMETRY DEFINITION + + The geometry consists of the vertex detector (VD), the electromagnetic + calorimeter (EM), and the muon identifier (MU). Detector layout along + the Z axis. + + VD consisted of 3 layers of Si with pads structured along the X axis. + Between VD and EM there are 2 active absorbers (scintillators). + EM is the matrix 5x5 of heavy crystals. MU consist of 2 active absorbers + (scintillators) and the iron plate between. + + 2 regions additional to the World are defined: VertexDetector and + MuonDetector. For testing purposes first absorber of MU is included in + the region of VD. + + Material of calorimeter and absorber can be choosen: \n + Air Water lAr Al Fe BGO PbWO4 Pb. \n + Eg: +\verbatim +/testem/det/CalMat PbWO4 +/testem/det/AbsMat Al +\endverbatim + + The size of the detector can be changed also.\n + Eg: +\verbatim +/testem/det/EcalLength 20 cm +/testem/det/EcalWidth 5 cm +/testem/det/update ---> rebuild the geometry +\endverbatim + +\section TestEm9_s2 PHYSICS LISTS + + Physics Lists are based on modular design. Several modules are instantiated: + -# Transportation + -# EM physics + -# Decays + -# StepMax - for step limitation + + The following options for EM physics using builders from physics_lists + sub-package are available: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emstandardGS" standard EM physics and Goudsmit-Saunderson multiple scatt. + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + A local builder, PhysListEmStandard "local" (similar to opt0) is also + available. + + + Optional components can be added: + - "elastic" elastic scattering of hadrons + - "binary" QBBC configuration of hadron/ion inelastic models + - "gamma_nuc" gamma- and electro-nuclear processes + - "stopping" stopping processes + +\section TestEm9_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + cylinder perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of G4ParticleGun class. + +\section TestEm9_s4 OUTPUT + + The batch regime of simulation can be started +\verbatim +$G4WORKDIR/bin/$G4SYSTEM/TestEm9 TestEm9.in +\endverbatim + where TestEm9.in is the example of macro file for batch job. + + As a result of simulation the number of secondaries produced + in different regions are averaged. The average energy depositions + in active absorbers and EM as well as RMS of these values are shown. + The number of hits in pads of VD is printed out. + +\section TestEm9_s5 VISUALISATION + + To use visualisation the environment variable G4_VIS_USE should be + defined. An interactive session starts if no macro file is specified + in the command line: +\verbatim +$G4WORKDIR/bin/$G4SYSTEM/TestEm9 +\endverbatim + + To start visualisation one can issur +\verbatim +>/control/execute vis.mac +>/run/beamOn 1 +\endverbatim + +\section TestEm9_s6 ANALYSIS + + Number of histograms are built inside the example using internal + analysis sub-package. Histograms are saved in a root file. + Histogram booking and saving is done only if any of histogram + +\verbatim +/testem/histo/fileName myname +/testem/histo/setHisto id nbins xmin xmax unit +\endverbatim + +*/ diff --git a/examples/extended/electromagnetic/TestEm9/README b/examples/extended/electromagnetic/TestEm9/README new file mode 100644 index 0000000000..7dc37d86cf --- /dev/null +++ b/examples/extended/electromagnetic/TestEm9/README @@ -0,0 +1,108 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestEm9 + ------- + Demonstrate electromagnetic physics in crystal calorimeters. + How to define cut-per-region. + + 1- GEOMETRY DEFINITION + + The geometry consists of the vertex detector (VD), the electromagnetic + calorimeter (EM), and the muon identifier (MU). Detector layout along + the Z axis. + + VD consisted of 3 layers of Si with pads structured along the X axis. + Between VD and EM there are 2 active absorbers (scintillators). + EM is the matrix 5x5 of heavy crystals. MU consist of 2 active absorbers + (scintillators) and the iron plate between. + + 2 regions additional to the World are defined: VertexDetector and + MuonDetector. For testing purposes first absorber of MU is included in + the region of VD. + + Material of calorimeter and absorber can be choosen: + Air Water lAr Al Fe BGO PbWO4 Pb. + eg: /testem/det/CalMat PbWO4 + /testem/det/AbsMat Al + + The size of the detector can be changed also. + + eg: /testem/det/EcalLength 20 cm + /testem/det/EcalWidth 5 cm + /testem/det/update ---> rebuild the geometry + + 2- PHYSICS LISTS + + Physics Lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + The following options for EM physics using builders from physics_lists + sub-package are available: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardSS" standard EM physics and single scattering model + - "emstandardGS" standard EM physics and Goudsmit-Saunderson multiple scatt. + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + A local builder, PhysListEmStandard "local" (similar to opt0) is also + available. + + Optional components can be added: + - "elastic" elastic scattering of hadrons + - "binary" QBBC configuration of hadron/ion inelastic models + - "gamma_nuc" gamma- and electro-nuclear processes + - "stopping" stopping processes + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + cylinder perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of G4ParticleGun class. + + 4- OUTPUT + + The batch regime of simulation can be started + $G4WORKDIR/bin/$G4SYSTEM/TestEm9 TestEm9.in + where TestEm9.in is the example of macro file for batch job. + + As a result of simulation the number of secondaries produced + in different regions are averaged. The average energy depositions + in active absorbers and EM as well as RMS of these values are shown. + The number of hits in pads of VD is printed out. + + 5- VISUALISATION + + To use visualisation the environment variable G4_VIS_USE should be + defined. An interactive session starts if no macro file is specified + in the command line: + $G4WORKDIR/bin/$G4SYSTEM/TestEm9 + + To start visualisation one can issur + >/control/execute vis.mac + >/run/beamOn 1 + + 6- ANALYSIS + + Number of histograms are built inside the example using internal + analysis sub-package. Histograms are saved in a root file. + Histogram booking and saving is done only if any of histogram + + /testem/histo/fileName myname + /testem/histo/setHisto id nbins xmin xmax unit + + diff --git a/examples/extended/errorpropagation/.README.txt b/examples/extended/errorpropagation/.README.txt new file mode 100644 index 0000000000..b2f4f19776 --- /dev/null +++ b/examples/extended/errorpropagation/.README.txt @@ -0,0 +1,37 @@ + +///\file "errorpropagation/.README.txt" +///\brief Exampleerrorpropagation README page + +/*! \page Exampleerrorpropagation Category/example "errorpropagation" + +This is an example illustrating the use of the error propagation utility. + +A G4ErrorFreeTrajState is created to simulate a muon track of 20 GeV along the X axis. Then the track is propagated until the target is reached. + +The geometry is a simplified typical HEP detector: + - An air beamline ( BEAM ) + - An air central detector ( CDET ) + - A copper calorimeter, divided in four ( ECAL ) + - An aluminium calorimeter, divided in ten ( HCAL ) + - An air muon detector ( MUON ) + +It is inmersed in a magnetic field along the Z axis with default value -1 kilogauss. This value can be changed with the command "/exerror/setField. + + +The type of target can be chosen with the enviromental variable G4ERROR_TARGET: + - PLANE_SURFACE : use a G4ErrorPlaneSurfaceTarget perpendicular to X at (2241. mm, 0, 0) + - CYL_SURFACE : use a G4ErrorCylSurfaceTarget parallel to Z of radius 2220 mm + - VOLUME : use a G4ErrorGeomVolumeTarget with volume name "MUON" + - TRKLEN : use a G4ErrorTrackLengthTarget with track length 2230 mm + + +The user may also choose if the propagation is done forwards (the natural way, loosing energy) or backwards (in opposite direction, gaining energy), with the enviromental variable G4ERROR_MODE: + - FORWARDS : propagate in the forward direction + - BACKWARDS : propagate in the backward direction + + +There are also two modes of propagation, that can be chosen with the enviromental variable G4ERROR_PROP + - UNTIL_TARGET : propagate until target, all steps in one go + - STEP_BY_STEP propagate until target, returning control to the user at each step + +*/ diff --git a/examples/extended/errorpropagation/README b/examples/extended/errorpropagation/README new file mode 100644 index 0000000000..d84b9b2844 --- /dev/null +++ b/examples/extended/errorpropagation/README @@ -0,0 +1,33 @@ +This is an example illustrating the use of the error propagation utility. + +A G4ErrorFreeTrajState is created to simulate a muon track of 20 GeV along the X axis. Then the track is propagated until the target is reached. + +The geometry is a simplified typical HEP detector: + An air beamline ( BEAM ) + An air central detector ( CDET ) + A copper calorimeter, divided in four ( ECAL ) + An aluminium calorimeter, divided in ten ( HCAL ) + An air muon detector ( MUON ) + +It is inmersed in a magnetic field along the Z axis with default value -1 kilogauss. This value can be changed with the command "/exerror/setField. + + +The type of target can be chosen with the enviromental variable G4ERROR_TARGET: + + PLANE_SURFACE : use a G4ErrorPlaneSurfaceTarget perpendicular to X at (2241. mm, 0, 0) + CYL_SURFACE : use a G4ErrorCylSurfaceTarget parallel to Z of radius 2220 mm + VOLUME : use a G4ErrorGeomVolumeTarget with volume name "MUON" + TRKLEN : use a G4ErrorTrackLengthTarget with track length 2230 mm + + +The user may also choose if the propagation is done forwards (the natural way, loosing energy) or backwards (in opposite direction, gaining energy), with the enviromental variable G4ERROR_MODE: + + FORWARDS : propagate in the forward direction + BACKWARDS : propagate in the backward direction + + +There are also two modes of propagation, that can be chosen with the enviromental variable G4ERROR_PROP + + UNTIL_TARGET : propagate until target, all steps in one go + STEP_BY_STEP propagate until target, returning control to the user at each step + diff --git a/examples/extended/eventgenerator/.README.txt b/examples/extended/eventgenerator/.README.txt new file mode 100644 index 0000000000..9a404f428a --- /dev/null +++ b/examples/extended/eventgenerator/.README.txt @@ -0,0 +1,49 @@ + +///\file "eventgenerator/.README.txt" +///\brief Examples eventgenerator README page + +/*! \page Examples_eventgenerator Category "eventgenerator" + + Examples in this directory demonstrate various ways of primary event + generation. + +\link ExampleparticleGun particleGun \endlink + +This example demonstrates 4 ways of the usage of G4ParticleGun shooting +primary particles in different cases. + +\link Exampleexgps exgps \endlink + +This example demonstrates the usage of G4GeneralParticleSource for generating +primary incident particle according to user defined distributions. + +\link ExampleuserPrimaryGenerator userPrimaryGenerator \endlink + +This example shows how to create a primary event including several vertices and +several primary particles per vertex. + +\link Examples_HepMC HepMC \endlink + +This directory contains examples for using HepMC as an interface with +various Monte Carlo event generators, such as PYTHIA. +It also include an example for demonstrating MC truth handling with HepMC. + +\link Examples_pythia pythia \endlink + +This directory contains the following examples: + +a) use of Pythia6 as Monte Carlo event generator, interfaced with Geant4, +and showing how to implement an external decayer based on Pythia6. +The feature is activated by setting environment variable PYTHIA6 to point +to the Pythia6 installation area. +For details, please see \link Exampledecayer6 Example decayer6 \endlink. + +b) use of Pythia8 as an external decayer to replace native Geant4 decay +tables for such resonances as tau+/- and B+/-, and to supplement Pythia8-based +decay tables to those resonances where Geant4 native decay features are not +implemented. +The feature is activated by setting environment variable PYTHIA8 to point +to the Pythia8 installation area. +For details, please see \link Examplepy8decayer Example py8decayer \endlink. + +*/ diff --git a/examples/extended/eventgenerator/HepMC/.README.txt b/examples/extended/eventgenerator/HepMC/.README.txt new file mode 100644 index 0000000000..45cd2e1876 --- /dev/null +++ b/examples/extended/eventgenerator/HepMC/.README.txt @@ -0,0 +1,120 @@ + +///\file "eventgenerator/HepMC/.README.txt" +///\brief Examples HepMC README page + +/*! \page Examples_HepMC Category "eventgenerator/HepMC" + +This directory contains examples for using HepMC as an interface with +various Monte Carlo event generators, such as PYTHIA. +It also include an example for demonstrating MC truth handling with HepMC. + +\section HepMC_s1 Requirements for external software packages + +\subsection HepMC_sub_s11 HepMC + - Tested version : 2.06.09 + - http://lcgapp.cern.ch/project/simu/HepMC/ + + Note: examples were tested only on Linux with gcc. + +\subsection HepMC_sub_s12 PYTHIA + - Tested version 6.4.26 + - URL: http://www.thep.lu.se/~torbjorn/Pythia.html + + +\section HepMC_s2 Examples HepMCEx01 and HepMCEx02 + +\subsection HepMC_sub_s21 class HepMCG4Interface + This class is derived from G4VPrimaryGenerator, and is a base class + for primary generation via HepMC object. + + protected members: + + - virtual HepMC::GenEvent* GenerateHepMCEvent() \n + Implement this method in his/her own concrete class. + An empty event will be created in default. + + - void HepMC2G4(const HepMC::GenEvent* hepmcevt, G4Event* g4event) \n + service method for conversion from HepMC::GenEvent to G4Event + + - virtual G4bool CheckVertexInsideWorld(const G4ThreeVector& pos) const \n + We have to take care for the position of primaries because + primary vertices outside the world volume give rise to G4Exception. + If the default implementation is not adequate, an alternative + can be implemented in your own class. + + public members: + - virtual void GeneratePrimaryVertex(G4Event* anEvent) \n + The default behavior is that a single HepMC event generated by + GenerateHepMCEvent() will be converted to G4Event through HepMC2G4(). + +\subsection HepMC_sub_s22 class HepMCG4AsciiReader / HepMCG4AsciiReaderMessenger (derived from HepMCG4Interface) + This derived class is for reading primary information from + an Ascii file generated by HepMC. + +\subsection HepMC_sub_s23 class HepMCG4PythiaInterface / HepMCG4AsciiReaderMessenger (derived from HepMCG4Interface) + This derived class is for directly calling PYTHIA functions. + Users can set parameters, initialize, generate, and terminate + by command line operation. + +\subsection HepMC_sub_s24 Macros in examples + + - hepmc_pygen.in \n + process PYTHIA events(H->4mu) generated at every event. + + - hepmc_ascii.in \n + read pregenerated events from HepMC Ascii file (data/example_MyPythia.dat). + +\subsection HepMC_sub_s25 Installation + +- 1. Download and install HepMC from: \n + http://lcgapp.cern.ch/project/simu/HepMC/ \n + and define the environment variable: +\verbatim +HEPMC_DIR the path to HepMC installation. +\endverbatim + +- 2. Download the PYTHIA6 source file from the PYTHIA6 download site:\n + http://www.hepforge.org/downloads/pythia6 + +- 2A. With CMake: Build pythia6 library + + For a convenience a CMake file for building Pythia6 library from + the source is provided in + examples/extended/eventgenerator/CMakeLists.txt.pythia6. + Build the pythia6 library following the instructions in this file + and then define the environment variables: +\verbatim +PYTHIA6 the path where pythia6 library is installed +PYTHIA6_VERSION the pythia version +\endverbatim + +- 2B. With GNUmake: Define the environment variables: \n +\verbatim +PYTHIA6 the path to pythia-versionX.f source code +PYTHIA6_VERSION the pythia version +\endverbatim + + e.g. If you download pythia-6.4.26.f.gz and unzip it in $HOME, + then you have to set: + export PYTHIA6=$HOME + export PYTHIA6_VERSION="6.4.26" + + pythia6 will be then compiled together with example code. + +- 3. Compilation:\n + Then the examples are compiled in a standard way, see \ref README_HowToRun. + +\subsection HepMC_sub_s26 Examples + + See more details in \ref ExampleHepMCEx01 and \ref ExampleHepMCEx02. + +\subsection HepMC_sub_s27 Notes + + We attached a sample HepMC Ascii data file, "data/example_MyPythia.dat", + which contains 10 PYTHIA events created by "data/example_MyPythia.cxx". + +\section HepMC_s3 Example MCTruth + +Application \link ExampleMCTruth MCTruth \endlink demonstrating handling of Monte-Carlo truth information through the HepMC package. + +*/ diff --git a/examples/extended/eventgenerator/HepMC/HepMCEx01/.README.txt b/examples/extended/eventgenerator/HepMC/HepMCEx01/.README.txt new file mode 100644 index 0000000000..be3663118f --- /dev/null +++ b/examples/extended/eventgenerator/HepMC/HepMCEx01/.README.txt @@ -0,0 +1,56 @@ + +///\file "eventgenerator/HepMC/HepMCEx01/.README.txt" +///\brief Example HepMCEx01 README page + +/*! \page ExampleHepMCEx01 Example HepMCEx01 + + HepMCEx01 is based on Example N04, which has a simplified collider detector +geometry. Only part of the primary generator action is replaced with new one. +This example demonstrates the following features. + +\section ExampleHepMCEx01_s1 HepMC interface + + ExN04PrimaryGeneratorAction has HepMCG4Interface as the generator. +There are two types of generators provided as samples. One generator reads +primary information from a HepMC Ascii file (data/example_MyPythia.dat). +The other one generates primaries directly invoking PYTHIA routines +in every event. + +\section ExampleHepMCEx01_s2 Readout geometry + + ExN04DetectorConstruction defines a simplified collider detecor +geometry, tracker made of cylindrical tubes, calorimeter made of +cylindrical tubes, and muon trackers made of planes. + Cylindrical calorimeter is made of tubes of lead and scintirator +without cut in phi nor z direction. Energy deposition in scintirator +is accumulated by ExN04CalorimeterSD sensitive detector, which has +a readout geometry to find the phi-z cell. + +\section ExampleHepMCEx01_s3 Full set of "ordinary" physics processes + +FTFP_BERT physics list defines almost all of leptons and hadrons which +Geant4 has dedicated classes for. Also almost all physics processes +Geant4 has are defined. + +\section ExampleHepMCEx01_s4 Event filtering by the stacking mechanism. + + Higgs events in "pythia_event.data" have two lepton pairs produced +by the Higgs decay via Z0. At the first stage of each event, only the +primary muons are tracked without tracking secondaries. then the number +of hits on the muon trackers are examined. At the next stage, only +the primary charged particles are tracked only inside the barrel +tracking area and the isolation of the primary muons are examined. +At the third stage, all particles in the RoI (Region of Interest) along +the isolated muons are tracked. All these examinations are applied in +ExN04StackingAction. + +\section ExampleHepMCEx01_s5 Installation + + See \ref Examples_HepMC how to build this example. + +\section ExampleHepMCEx01_s6 Execution +\verbatim +% HepMCEx01 hepmc_pygen.in +\endverbatim + +*/ diff --git a/examples/extended/eventgenerator/HepMC/HepMCEx01/README b/examples/extended/eventgenerator/HepMC/HepMCEx01/README new file mode 100644 index 0000000000..5abe771d35 --- /dev/null +++ b/examples/extended/eventgenerator/HepMC/HepMCEx01/README @@ -0,0 +1,57 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + HepMCEx01 + --------- + + HepMCEx01 is based on ExampleN04, which has a simplified collider detector +geometry. Only part of the primary generator action is replaced with new one. +This example demonstrates the following features. + +1. HepMC interface + + ExN04PrimaryGeneratorAction has HepMCG4Interface as the generator. +There are two types of generators provided as samples. One generator reads +primary information from a HepMC Ascii file (data/example_MyPythia.dat). +The other one generates primaries directly invoking PYTHIA routines +in every event. + +2. Readout geometry + + ExN04DetectorConstruction defines a simplified collider detecor +geometry, tracker made of cylindrical tubes, calorimeter made of +cylindrical tubes, and muon trackers made of planes. + Cylindrical calorimeter is made of tubes of lead and scintirator +without cut in phi nor z direction. Energy deposition in scintirator +is accumulated by ExN04CalorimeterSD sensitive detector, which has +a readout geometry to find the phi-z cell. + +3. Full set of "ordinary" physics processes + +FTFP_BERT physics list defines almost all of leptons and hadrons which +Geant4 has dedicated classes for. Also almost all physics processes +Geant4 has are defined. + +4. Event filtering by the stacking mechanism. + + Higgs events in "pythia_event.data" have two lepton pairs produced +by the Higgs decay via Z0. At the first stage of each event, only the +primary muons are tracked without tracking secondaries. then the number +of hits on the muon trackers are examined. At the next stage, only +the primary charged particles are tracked only inside the barrel +tracking area and the isolation of the primary muons are examined. +At the third stage, all particles in the RoI (Region of Interest) along +the isolated muons are tracked. All these examinations are applied in +ExN04StackingAction. + +5. Installation + + See HepMC/README how to build this example. + +6. Execution + + % HepMCEx01 hepmc_pygen.in + diff --git a/examples/extended/eventgenerator/HepMC/HepMCEx02/.README.txt b/examples/extended/eventgenerator/HepMC/HepMCEx02/.README.txt new file mode 100644 index 0000000000..b195307ae6 --- /dev/null +++ b/examples/extended/eventgenerator/HepMC/HepMCEx02/.README.txt @@ -0,0 +1,47 @@ + +///\file "eventgenerator/HepMC/HepMCEx02/.README.txt" +///\brief Example HepMCEx02 README page + +/*! \page ExampleHepMCEx02 Example HepMCEx02 + + This example demonstrates how to interface primary particles in Geant4 +with various event generators via the HepMC Monte Carlo event interface. +This is another example having the same generator action as HepMCEx01, +but much simpler user control. + +\section ExampleHepMCEx02_s1 Primary Generator + + H02PrimaryGeneratorAction has HepMCG4Interface as the generator. +There are two types of generators provided as samples. One generator reads +primary information from a HepMC Ascii file (data/example_MyPythia.dat). +The other one generates primaries directly invoking PYTHIA routines +in every event. + +\section ExampleHepMCEx02_s2 Geometry + + A simplified collider-type geometry, which consists of + - endcap calorimeter (a set of tubes filled with lead), + - barrel calorimeter (tube filled with lead), + - barrel muon detector (8 sets of plates filled with Ar), + - endcap muon detecror, (a set of tubes filled with Ar) and + - uniform magnetic field along the z axis of 3 Tesla at the + central region. + +\section ExampleHepMCEx02_s3 Physics List + + FTFP_BERT predefined physics list + +\section ExampleHepMCEx02_s4 User actions + + All particles except muons are killed in the calorimeter section. + +\section ExampleHepMCEx02_s5 Installation + + See \ref Examples_HepMC how to build this example. + +\section ExampleHepMCEx02_s6 Execution +\verbatim +% HepMCEx02 hepmc_pygen.in +\endverbatim + +*/ diff --git a/examples/extended/eventgenerator/HepMC/HepMCEx02/README b/examples/extended/eventgenerator/HepMC/HepMCEx02/README new file mode 100644 index 0000000000..193a203789 --- /dev/null +++ b/examples/extended/eventgenerator/HepMC/HepMCEx02/README @@ -0,0 +1,48 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + HepMCEx02 + --------- + + This example demonstrates how to interface primary particles in Geant4 +with various event generators via the HepMC Monte Carlo event interface. +This is another example having the same generator action as HepMCEx01, +but much simpler user control. + +1. Primary Generator + + H02PrimaryGeneratorAction has HepMCG4Interface as the generator. +There are two types of generators provided as samples. One generator reads +primary information from a HepMC Ascii file (data/example_MyPythia.dat). +The other one generates primaries directly invoking PYTHIA routines +in every event. + +2. Geometry + + A simplified collider-type geometry, which consists of + - endcap calorimeter (a set of tubes filled with lead), + - barrel calorimeter (tube filled with lead), + - barrel muon detector (8 sets of plates filled with Ar), + - endcap muon detecror, (a set of tubes filled with Ar) and + - uniform magnetic field along the z axis of 3 Tesla at the + central region. + +3. Physics List + + FTFP_BERT predefined physics list + +4. User actions + + All particles except muons are killed in the calorimeter section. + +5. Installation + + See HepMC/README how to build this example. + +6. Execution + + % HepMCEx02 hepmc_pygen.in + diff --git a/examples/extended/eventgenerator/HepMC/MCTruth/.README.txt b/examples/extended/eventgenerator/HepMC/MCTruth/.README.txt new file mode 100644 index 0000000000..a7fccd4a93 --- /dev/null +++ b/examples/extended/eventgenerator/HepMC/MCTruth/.README.txt @@ -0,0 +1,168 @@ + +///\file "eventgenerator/HepMC/MCTruth/.README.txt" +///\brief Example MCTruth README page + +/*! \page ExampleMCTruth Example MCTruth + +MCTRUTH using HepMC + +This example demonstrates a mechanism for Monte Carlo truth handling +using HepMC as the event record. The user does not interact directly +with the HepMC classes but with the MCTruthManager class which takes +care with storing all the necessary information about particles, +vertices and relations between them. A specialized tracking action is +used to test whether given particle is to be stored or not. The +decision criteria for storing particle are configurable via the +MCTruthConfig class. + +\section ExampleMCTruth_s1 HOW TO BUILD THE EXAMPLE ? + +- if you do not have it yet, install HepMC event record (tested with version 2.06.08) + +- set HEPMC_ROOT_DIR variable to point to the directory where HepMC is installed; + if the HepMC is installed in your system directory (/usr/local) you do not need to set anything + +- run the CMake configuration and build mctruthex target in your build directory + +- execute the application: +\verbatim +% your_binary_directory/mctruthex +\endverbatim + +\section ExampleMCTruth_s2 DESCRIPTION OF THE MCTRUTH HANDLING MECHANISM + +The main element of the MC truth handling machinery is the +MCTruthManager class. This class is responsible for all the +interaction with the HepMC event and does not depend on Geant4. It is +a singleton, therefore it is guaranteed to be instanciated only once +and the static 'GetInstance' method allows to access it from anywhere +in the code. It contains methods like MCTruthManager::NewEvent() to start a new event, +MCTruthManager::AddParticle() to add particle to the current event, as well as +MCTruthManager::PrintEvent() for the purpose of the debugging. The core of the +algorithm which deals with building up the MC truth event tree within +the HepMC event is implemented in MCTruthManager::AddParticle() method. + +The MCTruthManager::AddParticle() method is called with the following arguments: +four-momentum, production position and 'end' position of the particle, +PDG code of the particle, as well as the particle ID (unique identifier, +as we will see later, corresponding to Geant4 TrackID) and the ID of +the mother. Finally, there is a boolean flag specifying whether the +direct mother of the given particle has been stored, or not. + +The first step, which always takes place, is to instanciate a new +HepMC::GenParticle with the barcode corresponding to particle ID, as +well as to instanciate a new HepMC::GenVertex which will represent the +'end' vertex of the particle. The barcode of the 'end vertex' is equal +to minus the barcode of the particle. + +We can now distinguish several cases: + +- 1) the particle is a primary in the Geant4 language, i.e. its + mother ID is 0 + \n\n + This is the simplest case, we just instanciate a new 'primary' + (without any incoming particles) GenVertex, we add to it the + particle and we put it all in the event. Additionally we store the + ID of the particle in a special vector, where all the IDs of + primary particles will be stored, allowing quick access to each of + the main 'branches' of the event. We return from the method. + +- 2) the particle is not a primary + \n\n + We use the 'event->barcode_to_particle(motherID)' method to get the + pointer to its mother. + \n\n + We check if the 'end vertex' of the mother corresponds to the + 'production vertex' of the particle in question. + \n\n + - 2.1) If the two vertices do match, we attach the new particle to + the 'end vertex' of the mother. We return from the method. + \n\n + - 2.2) If the two vertices do not match, i.e. the new particle is not + a product of the 'end vertex' of the mother particle, we can + have two cases: + \n\n + - 2.2.1) The boolean flag says that the direct mother of the + particle has _not_ been stored. This means that the + particle has been 'adopted' by one of its ancestors, or + in other words, the mother ID of the particle does not + correspond to its direct mother (so clearly the + vertices cannot match). This for instance could happen + if we decided not to store gamma coming from pi0 decay + but did decide to store e+/- coming from the gamma + conversion (so the gamma between pi0 and e+/- was + missing). In such a case we instanciate (or use one of + the existing ones, if vertices match) a 'dummy' + particle (with pdg = -999999) which then acts as the + link between the 'adopted' particle and the + (non-direct) mother. In such a way, the navigability up + in the event is still possible, but in the same time, + we can clearly see that the link is not a direct + one. We return from the method. + \n\n + - 2.2.2) The boolean flag says that direct mother of the + particle _has_ been stored. Taking into account that + the vertices do not match, it can mean only one + thing. The new particle has been produced 'on the + flight', i.e. somewhere 'before' the 'end vertex' of + the mother. This can be the case, for instace, for + delta electrons, bremsstrahlung gammas, etc. In such a + situation, we 'split' the mother particle in two + particles and create a new vertex from which the + secondary will be going out. The complication, however, + arises when we have more than one generated 'on the + flight' particle attached to the same mother. In such a + case, for each secondary we need to locate the right + 'segment' of the mother particle (i.e. we need to find + between which two vertices we need to add a new + one). To keep track of those segmentations we introduce + a map where each particle ID we map into the number of + existing segments (in the normal case one). Each new + 'segment' gets barcode equal to the barcode of the + original particle + N*10000000, where N is the segment + number. In such a way, one can easily follow the + 'segmentation' (if any) of each particle. We return + from the method. + +This concludes the description of MCTruthManager. The MCTruthConfig +class is a collection of criteria (minimal energy, PDG, creator +process, etc) that we want to apply when deciding whether to store or +not given particle. These values are used by the +'MCTruthTrackingAction' which we describe below. This class can +certainly be extended with other members. + +The actual Geant4-dependent part of the MCTruth handling machinery +consists of a few 'G4 user actions' as well as an implementation of +G4VUserTrackInformation. The later one is, for the moment, used only +to store one boolean flag indicating whether the direct mother of the +given track has been stored or not. + +The first user action is MCTruthEventAction which is only reponsible +for calling MCTruthManager::NewEvent() at the beginning +of each event. It can also be used for printing out events for the +purpose of debugging. + +The actual 'decision making' concerning which particle to store is +done in MCTruthTrackingAction. At the end of each track the method +trackToBeStored(track) is called to check for various characteristics +of the particle. These, for instance can be energy, particle ID, +creator process, etc. + +If the particle satisfies the conditions the +MCTruthManager::AddParticle is called and all the +procedure described above is performed. The important element here is +that the Geant4 TrackID is used as the unique particle ID in +MCTruthManager and eventually as the barcode of the +HepMC::GenParticle. + +If the particle does not qualify to be stored, there are two actions +performed. First the 'ParentID' of the _daughters_ is set to the +'ParentID' of the currenly processed particle. In other words, the +'ParentID' of the daughters is set to the ID of the last stored +particle. Second, the 'directParent' flag from MCTruthTrackInformation +of the __daughters__ is set to FALSE. In such a way, one is still able +to navigate up in the event (to get the ancestors of the particle), +but in the same time, the particle is flagged as 'not having direct +parent'. + +*/ diff --git a/examples/extended/eventgenerator/HepMC/MCTruth/README b/examples/extended/eventgenerator/HepMC/MCTruth/README new file mode 100644 index 0000000000..74c8c69d97 --- /dev/null +++ b/examples/extended/eventgenerator/HepMC/MCTruth/README @@ -0,0 +1,165 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + MCTRUTH using HepMC + ------------------- + +This example demonstrates a mechanism for Monte Carlo truth handling +using HepMC as the event record. The user does not interact directly +with the HepMC classes but with the MCTruthManager class which takes +care with storing all the necessary information about particles, +vertices and relations between them. A specialized tracking action is +used to test whether given particle is to be stored or not. The +decision criteria for storing particle are configurable via the +MCTruthConfig class. + +HOW TO BUILD THE EXAMPLE ? + +- if you do not have it yet, install HepMC event record (tested with version 2.06.08) + +- set HEPMC_ROOT_DIR variable to point to the directory where HepMC is installed; + if the HepMC is installed in your system directory (/usr/local) you do not need to set anything + +- run the CMake configuration and build mctruthex target in your build directory + +- execute the application: + % your_binary_directory/mctruthex + +DESCRIPTION OF THE MCTRUTH HANDLING MECHANISM + +The main element of the MC truth handling machinery is the +MCTruthManager class. This class is responsible for all the +interaction with the HepMC event and does not depend on Geant4. It is +a singleton, therefore it is guaranteed to be instanciated only once +and the static 'GetInstance' method allows to access it from anywhere +in the code. It contains methods like 'NewEvent' to start a new event, +'AddParticle' to add particle to the current event, as well as +'PrintEvent' for the purpose of the debugging. The core of the +algorithm which deals with building up the MC truth event tree within +the HepMC event is implemented in AddParticle method. + +The AddParticle method is called with the following arguments: +four-momentum, production position and 'end' position of the particle, +PDG code of the particle, as well as the particle ID (unique identifier, +as we will see later, corresponding to Geant4 TrackID) and the ID of +the mother. Finally, there is a boolean flag specifying whether the +direct mother of the given particle has been stored, or not. + +The first step, which always takes place, is to instanciate a new +HepMC::GenParticle with the barcode corresponding to particle ID, as +well as to instanciate a new HepMC::GenVertex which will represent the +'end' vertex of the particle. The barcode of the 'end vertex' is equal +to minus the barcode of the particle. + +We can now distinguish several cases: + +1) the particle is a primary in the Geant4 language, i.e. its + mother ID is 0 + + This is the simplest case, we just instanciate a new 'primary' + (without any incoming particles) GenVertex, we add to it the + particle and we put it all in the event. Additionally we store the + ID of the particle in a special vector, where all the IDs of + primary particles will be stored, allowing quick access to each of + the main 'branches' of the event. We return from the method. + +2) the particle is not a primary + + We use the 'event->barcode_to_particle(motherID)' method to get the + pointer to its mother. + + We check if the 'end vertex' of the mother corresponds to the + 'production vertex' of the particle in question. + + 2.1) If the two vertices do match, we attach the new particle to + the 'end vertex' of the mother. We return from the method. + + 2.2) If the two vertices do not match, i.e. the new particle is not + a product of the 'end vertex' of the mother particle, we can + have two cases: + + 2.2.1) The boolean flag says that the direct mother of the + particle has _not_ been stored. This means that the + particle has been 'adopted' by one of its ancestors, or + in other words, the mother ID of the particle does not + correspond to its direct mother (so clearly the + vertices cannot match). This for instance could happen + if we decided not to store gamma coming from pi0 decay + but did decide to store e+/- coming from the gamma + conversion (so the gamma between pi0 and e+/- was + missing). In such a case we instanciate (or use one of + the existing ones, if vertices match) a 'dummy' + particle (with pdg = -999999) which then acts as the + link between the 'adopted' particle and the + (non-direct) mother. In such a way, the navigability up + in the event is still possible, but in the same time, + we can clearly see that the link is not a direct + one. We return from the method. + + 2.2.2) The boolean flag says that direct mother of the + particle _has_ been stored. Taking into account that + the vertices do not match, it can mean only one + thing. The new particle has been produced 'on the + flight', i.e. somewhere 'before' the 'end vertex' of + the mother. This can be the case, for instace, for + delta electrons, bremsstrahlung gammas, etc. In such a + situation, we 'split' the mother particle in two + particles and create a new vertex from which the + secondary will be going out. The complication, however, + arises when we have more than one generated 'on the + flight' particle attached to the same mother. In such a + case, for each secondary we need to locate the right + 'segment' of the mother particle (i.e. we need to find + between which two vertices we need to add a new + one). To keep track of those segmentations we introduce + a map where each particle ID we map into the number of + existing segments (in the normal case one). Each new + 'segment' gets barcode equal to the barcode of the + original particle + N*10000000, where N is the segment + number. In such a way, one can easily follow the + 'segmentation' (if any) of each particle. We return + from the method. + +This concludes the description of MCTruthManager. The MCTruthConfig +class is a collection of criteria (minimal energy, PDG, creator +process, etc) that we want to apply when deciding whether to store or +not given particle. These values are used by the +'MCTruthTrackingAction' which we describe below. This class can +certainly be extended with other members. + +The actual Geant4-dependent part of the MCTruth handling machinery +consists of a few 'G4 user actions' as well as an implementation of +G4VUserTrackInformation. The later one is, for the moment, used only +to store one boolean flag indicating whether the direct mother of the +given track has been stored or not. + +The first user action is MCTruthEventAction which is only reponsible +for calling MCTruthManager::GetInstance()->NewEvent() at the beginning +of each event. It can also be used for printing out events for the +purpose of debugging. + +The actual 'decision making' concerning which particle to store is +done in MCTruthTrackingAction. At the end of each track the method +trackToBeStored(track) is called to check for various characteristics +of the particle. These, for instance can be energy, particle ID, +creator process, etc. + +If the particle satisfies the conditions the +MCTruthManager::GetInstance()->AddParticle is called and all the +procedure described above is performed. The important element here is +that the Geant4 TrackID is used as the unique particle ID in +MCTruthManager and eventually as the barcode of the +HepMC::GenParticle. + +If the particle does not qualify to be stored, there are two actions +performed. First the 'ParentID' of the _daughters_ is set to the +'ParentID' of the currenly processed particle. In other words, the +'ParentID' of the daughters is set to the ID of the last stored +particle. Second, the 'directParent' flag from MCTruthTrackInformation +of the __daughters__ is set to FALSE. In such a way, one is still able +to navigate up in the event (to get the ancestors of the particle), +but in the same time, the particle is flagged as 'not having direct +parent'. diff --git a/examples/extended/eventgenerator/HepMC/README b/examples/extended/eventgenerator/HepMC/README new file mode 100644 index 0000000000..57600ea8dd --- /dev/null +++ b/examples/extended/eventgenerator/HepMC/README @@ -0,0 +1,118 @@ + + Examples for HepMC-Geant4 interface + ----------------------------------- + +This directory contains examples for using HepMC as an interface with +various Monte Carlo event generators, such as PYTHIA. +It also include an example for demonstrating MC truth handling with HepMC. + +Requirements for external software packages +------------------------------------------- +HepMC: + Tested version : 2.06.09 + http://lcgapp.cern.ch/project/simu/HepMC/ + + Note: examples were tested only on Linux with gcc. + +PYTHIA + Tested version 6.4.26 + URL: http://www.thep.lu.se/~torbjorn/Pythia.html + + +Examples HepMCEx01 and HepMCEx02 +================================ + +class HepMCG4Interface + This class is derived from G4VPrimaryGenerator, and is a base class + for primary generation via HepMC object. + + protected members + + virtual HepMC::GenEvent* GenerateHepMCEvent() + Implement this method in his/her own concrete class. + An empty event will be created in default. + + + void HepMC2G4(const HepMC::GenEvent* hepmcevt, G4Event* g4event) + service method for conversion from HepMC::GenEvent to G4Event + + + virtual G4bool CheckVertexInsideWorld(const G4ThreeVector& pos) const + We have to take care for the position of primaries because + primary vertices outside the world volume give rise to G4Exception. + If the default implementation is not adequate, an alternative + can be implemented in your own class. + + public members + + virtual void GeneratePrimaryVertex(G4Event* anEvent) + The default behavior is that a single HepMC event generated by + GenerateHepMCEvent() will be converted to G4Event through HepMC2G4(). + +class HepMCG4AsciiReader / HepMCG4AsciiReaderMessenger + (derived from HepMCG4Interface) + This derived class is for reading primary information from + an Ascii file generated by HepMC. + +class HepMCG4PythiaInterface / HepMCG4AsciiReaderMessenger + (derived from HepMCG4Interface) + This derived class is for directly calling PYTHIA functions. + Users can set parameters, initialize, generate, and terminate + by command line operation. + + Macros in examples + ----------------- + hepmc_pygen.in + process PYTHIA events(H->4mu) generated at every event. + + hepmc_ascii.in + read pregenerated events from HepMC Ascii file (data/example_MyPythia.dat). + + Installation + -------------- + 1. Download and install HepMC from: + http://lcgapp.cern.ch/project/simu/HepMC/ + (Last tested version : 2.06.09) + + and define the environment variable: + HEPMC_DIR the path to HepMC installation. + + 2. Download the PYTHIA6 source file from the PYTHIA6 download site: + http://www.hepforge.org/downloads/pythia6 + + A) With CMake: Build pythia6 library + + For a convenience a CMake file for building Pythia6 library from + the source is provided in + examples/extended/eventgenerator/CMakeLists.txt.pythia6. + Build the pythia6 library following the insytructions in this file + and then define the environment variables: + PYTHIA6 the path where pythia6 library is installed + PYTHIA6_VERSION the pythia version + + B) With GNUmake: Define the environment variables + + PYTHIA6 the path to pythia-versionX.f source code + PYTHIA6_VERSION the pythia version + + e.g. If you download pythia-6.4.26.f.gz and unzip it in $HOME, + then you have to set: + export PYTHIA6=$HOME + export PYTHIA6_VERSION="6.4.26" + + Pythia6 will be then compiled together with example code. + + 3. Compilation: + Then the examples are compiled in a standard way, + see examples/README_HowToRun. + + Examples + ---------- + See more details in HepMCEx01/README and HepMCEx02/README. + + Notes + ----- + We attached a sample HepMC Ascii data file, "data/example_MyPythia.dat", + which contains 10 PYTHIA events created by "data/example_MyPythia.cxx". + +Example MCTruth +=============== + +Application demonstrating handling of Monte-Carlo truth information through +the HepMC package. diff --git a/examples/extended/eventgenerator/README b/examples/extended/eventgenerator/README new file mode 100644 index 0000000000..b0a7bbcee5 --- /dev/null +++ b/examples/extended/eventgenerator/README @@ -0,0 +1,51 @@ + + Geant4 extended examples - event generator + ------------------------------------------- + + Examples in this directory demonstrate various ways of primary event + generation. + +particleGun +------------ + +This example demonstrate 4 ways of the usage of G4ParticleGun shooting +primary particles in different cases. + +exgps +----- + +This example demonstrates the usage of G4GeneralParticleSource for generating +primary incident particle according to user defined distributions. + +userPrimaryGenerator +-------------------- + +This example shows how to create a primary event including several vertices and +several primary particles per vertex. + +HepMC +------ + +This directory contains examples for using HepMC as an interface with +various Monte Carlo event generators, such as PYTHIA. +It also include an example for demonstrating MC truth handling with HepMC. + +pythia +------ + +This directory contains the following examples: + +a) use of Pythia6 as Monte Carlo event generator, interfaced with Geant4, +and showing how to implement an external decayer based on Pythia6. +The feature is activated by setting environment variable PYTHIA6 to point +to the Pythia6 installation area. +For details, please see pythia/decayer6/README. + +b) use of Pythia8 as an external decayer to replace native Geant4 decay +tables for such resonances as tau+/- and B+/-, and to supplement Pythia8-based +decay tables to those resonances where Geant4 native decay features are not +implemented. +The feature is activated by setting environment variable PYTHIA8 to point +to the Pythia8 installation area. +For details, please see pythia/py8decayer/README. + diff --git a/examples/extended/eventgenerator/exgps/.README.txt b/examples/extended/eventgenerator/exgps/.README.txt new file mode 100644 index 0000000000..d85cdfb94d --- /dev/null +++ b/examples/extended/eventgenerator/exgps/.README.txt @@ -0,0 +1,101 @@ + +///\file "eventgenerator/exgps/.README.txt" +///\brief Example exgps README page + +/*! \page Exampleexgps Example exgps + + exgps is created to demonstrate the usage of G4GeneralParticleSource + for generating primary particle according to user defined distributions. + These range from simple monocromatic point source to complicated mutiple + sources with various biasing schemes. + + http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides + /ForApplicationDeveloper/html/ch02s07.html + + + \section exgps_s1 GEOMETRY + + Simple geometry consists of a "Vacuum" world and, in it, two other components: + - An alunimium box : 20 x 20 x 20 cm in size, cerntered at the origin. + - A SiO2 sphere (radius 5 cm) is placed at the centre of the aluminium box. + + \section exgps_s2 PHYSICS + + Tranportation process only for all particles. + + \section exgps_s3 EVENT + + The event generator is the G4GeneralParticleSource (GPS). The instantiation of + G4GeneralParticleSource is same as that for G4ParticleGun. + See the exGPSPrimaryGeneratorAction.cc file for details. + + \section exgps_s4 VISUALIZATION + + Visualisation of the geometry and the tracks is possible with many of the + G4 visualisation packages. + An example of displaying the geometry and tracks using OGL is given in the + macro vis.mac. + + \section exgps_s5 HISTOGRAMS + + This example implements an histo manager which creates histograms and + ntuples using Geant4 analysis tools. + + The output file contains 6 histograms and one ntuple: + + histo1D 1: energy spectrum. + histo1D 2: vertex: radial distribution dN/dv. + histo1D 3: angular distribution: cos(theta). + histo1D 4: angular distribution: phi. + histo2D 1: vertex position in the X-Y plane. + histo2D 2: vertex position in the X-Z plane. + histo2D 3: vertex position in the Y-Z plane. + histo2D 4: angular distribution: phi-cos(theta). + histo2D 5: angular distribution: of phi-theta. + + In the ntuple the following data are recorded for each incident particle: + + Particle ID + Incident Position (x,y,z); + Incident Angle (theta,phi); + Particle weight; + + The histograms are managed by G4AnalysisManager class and its Messenger. + The histos can be individually activated with the command : +\verbatim + /analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim + /analysis/setFileName name (default exgps) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + + \section exgps_s6 GETTING STARTED + + - execute exgps in 'batch' mode from macro files +\verbatim + % exgps exgps.in +\endverbatim + + - execute exgps in 'interactive mode' with visualization +\verbatim + % exgps + .... + Idle> type your commands + .... + Idle> exit +\endverbatim + + \section exgps_s7 FURTHER EXAMPLES of MACRO FILES + + There are a number of mac files in the ./macros subdirectory, to show the + various features of GPS. + Please see macros/README file for further informations. + +*/ diff --git a/examples/extended/eventgenerator/exgps/README b/examples/extended/eventgenerator/exgps/README new file mode 100644 index 0000000000..40e27051ac --- /dev/null +++ b/examples/extended/eventgenerator/exgps/README @@ -0,0 +1,92 @@ + + Extended Example for G4GeneralParticleSource (GPS) + -------------------------------------------------- + + exgps is created to demonstrate the usage of G4GeneralParticleSource + for generating primary particle according to user defined distributions. + These range from simple monocromatic point source to complicated mutiple + sources with various biasing schemes. + + http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides + /ForApplicationDeveloper/html/ch02s07.html + + + 1 - GEOMETRY + + Simple geometry consists of a "Vacuum" world and, in it, two other components: + - An alunimium box : 20 x 20 x 20 cm in size, cerntered at the origin. + - A SiO2 sphere (radius 5 cm) is placed at the centre of the aluminium box. + + 2 - PHYSICS + + Tranportation process only for all particles. + + 3 - EVENT + + The event generator is the G4GeneralParticleSource (GPS). The instantiation of + G4GeneralParticleSource is same as that for G4ParticleGun. + See the exGPSPrimaryGeneratorAction.cc file for details. + + 4 - VISUALIZATION + + Visualisation of the geometry and the tracks is possible with many of the + G4 visualisation packages. + An example of displaying the geometry and tracks using OGL is given in the + macro vis.mac. + + 5 - HISTOGRAMS + + This example implements an histo manager which creates histograms and + ntuples using Geant4 analysis tools. + + The output file contains 6 histograms and one ntuple: + + histo1D 1: energy spectrum. + histo1D 2: vertex: radial distribution dN/dv. + histo1D 3: angular distribution: cos(theta). + histo1D 4: angular distribution: phi. + histo2D 1: vertex position in the X-Y plane. + histo2D 2: vertex position in the X-Z plane. + histo2D 3: vertex position in the Y-Z plane. + histo2D 4: angular distribution: phi-cos(theta). + histo2D 5: angular distribution: of phi-theta. + + In the ntuple the following data are recorded for each incident particle: + + Particle ID + Incident Position (x,y,z); + Incident Angle (theta,phi); + Particle weight; + + The histograms are managed by G4AnalysisManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default exgps) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + + 6 - GETTING STARTED + + - execute exgps in 'batch' mode from macro files + % exgps exgps.in + + - execute exgps in 'interactive mode' with visualization + % exgps + .... + Idle> type your commands + .... + Idle> exit + + 7 - FURTHER EXAMPLES of MACRO FILES + + There are a number of mac files in the ./macros subdirectory, to show the + various features of GPS. + Please see README file there for further informations. + + + diff --git a/examples/extended/eventgenerator/exgps/macros/README b/examples/extended/eventgenerator/exgps/macros/README new file mode 100644 index 0000000000..7ec7b5dff9 --- /dev/null +++ b/examples/extended/eventgenerator/exgps/macros/README @@ -0,0 +1,167 @@ +More info on http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides + /ForApplicationDeveloper/html/ch02s07.html +--------------------------------------------------------------------------- + +test01.mac +---------- +point source, isotropic radiation, monoenergetic + +test02.mac +---------- +square plane source, cosine-law radiation, linear energy + +test03.mac +---------- +rectangular plane source, isotropic radiation, power-law energy + +test04.mac +---------- +circular plane source, cosine-law radiation, exponential energy + +test05.mac +---------- +elliptical plane source, isotropic radiation, bremsstrahlung energy + +test06.mac +---------- +spherical surface source, isotropic radiation, black-body energy + +test07.mac +---------- +cylindrical surface source, cosine-law radiation, Cosmic diffuse energy + +test08.mac +---------- +elliptical surface source, isotropic radiation, linear energy + +test09.mac +---------- +parallepiped surface source, isotropic radiation, linear energy + +test10.mac +---------- +spherical volume source, isotropic radiation, linear energy + +test11.mac +---------- +cylindrical volume source, isotropic radiation, power-law energy + +test12.mac +---------- +elliptical volume source, isotropic radiation, power-law energy + +test13.mac +---------- +parallelepiped volume source, cosine-law radiation, exponential energy + +test14.mac +---------- +rotated circular plane source, isotropic radiation, exponential energy + +test15.mac +---------- +rotated surface cylinder source, isotropic radiation, bremsstrahlung energy + +test16.mac +---------- +rotated parallelepiped volume source, isotropic radiation, bremsstrahlung energy + +test17.mac +---------- +confined spherical volume source, isotropic radiation, exponential energy + +test18.mac +---------- +square plane source, cosine-law radiation, user-defined energy histogram + +test19.mac +---------- +square plane source, cosine-law radiation, arbitrary point-wise energy function +with linear interpolation. + +test20.mac +---------- +square plane source, cosine-law radiation, arbitrary point-wise energy function +with logarithmic interpolation. + +test21.mac +---------- +square plane source, cosine-law radiation, arbitrary point-wise energy function +with exponential interpolation. + +test22.mac +---------- +square plane source, cosine-law radiation, arbitrary point-wise energy function +with spline interpolation. + +test23.mac +---------- +square plane source with x and y biasing, user-defined theta and phi +distributions, user-defined EPN energy distribution. + +test24.mac +---------- +spherical volume source with z biasing, isotropic radiation with theta and phi +biasing, arbitrary point-wise energy function with linear interpolation. + +test25.mac +---------- +spherical volume source, isotropic radiation with theta and phi biasing, +user-defined energy histogram + +test26.mac +---------- +square plane source, cosine-law radiation with lower and upper theta and phi +limits, linear energy with biasing. + +test27.mac +---------- +square plane source, user-defined theta, arbitrary point-wise energy function +with linear interpolation. + +test28.mac +---------- +particle=ion, square plane source, isotropic radiation, monoenergetic energy. + +test29.mac +---------- +plane source of type annulus, cosine-law radiation, exponential energy + +test30.mac +---------- +rotated 1d beam source, Gaussian beam energy + +test31.mac +---------- +two-beam incidence, i.e. multiple sources with relative intensities. + +test32.mac +---------- +Sphere volume source, with biasing in theta and phi +Isotropic directional distribution with theta and phi biasing + +test33.mac +---------- +Focused angular distribution. + +test34.mac +---------- +Two simultaneous sources, both fired at the same time. + +test35.mac +---------- +automatic biasing of the energy distribution sampling, original in power-law + +test36.mac +---------- +automatic biasing of the energy distribution sampling, original in arbitrary +data points + +test37.mac +---------- +automatic biasing of the energy distribution sampling, original in exponetial +form + +test38.mac +---------- +arbitrary energy distribution, defined using the ascii input file: spectrum.dat diff --git a/examples/extended/eventgenerator/particleGun/.README.txt b/examples/extended/eventgenerator/particleGun/.README.txt new file mode 100644 index 0000000000..b3c139b59e --- /dev/null +++ b/examples/extended/eventgenerator/particleGun/.README.txt @@ -0,0 +1,158 @@ + +///\file "eventgenerator/particleGun/.README.txt" +///\brief Example ParticleGun README page + +/*! \page ExampleparticleGun Example particleGun + + History: + - 10-06-2010 : Makoto Asai - merge into one example + - 13-05-2010 : Michel Maire - create as three examples + + This example demonstrates 5 ways of the usage of G4ParticleGun shooting + primary particles in different cases. These are + -# uniform particle direction in a given solid angle + -# Generate several vertices and particles per event + -# Show how to sample a tabulated function (eg. energy spectrum) + -# Divergent beam in an arbitrary direction + -# Shooting primaries in spherical coordinates with rotation matrix. + + These usages can be chosen by a UI command +\verbatim +/gunExample/selectGunAction actionID +\endverbatim + where actionID corresponds to above cases. + +\section ParticleGun_s1 Geometry construction + + It is a simple box which represents an 'infinite' homogeneous medium. + +\section ParticleGun_s2 Physics list + +PhysicsList.cc defines only geantino and transportation process. + +\section ParticleGun_s3 Primary generator + + There are 5 concrete primary generator action classes + (PrimaryGeneratorActionN, N=0,1,2,3,4) which can be used as an independent sample + code. + PrimaryGeneratorAction is the class which uses and switches between these + 5 concrete action classes. Each concrete generator action shoots geantinoes + in a distribution decribed below. + +\subsection ParticleGun_sub_s30 0. Uniform particle direction in a given solid angle + + spherical angles (alpha,psi) respective to z axis + Histograms 5,6 show momentum direction in master frame. + +\subsection ParticleGun_sub_s31 1. Generate several vertices and particles per event + + - particle 1 : a geantino uniformly randomized on a cylinder surface. + - particle 2 and 3 : symetric to particle 1. + In addition, time_zero of each event is randomized. + +\subsection ParticleGun_sub_s32 2. Show how to sample a tabulated function (energy spectrum) + + Energy is sampled from a tabulated function defined in InitFunction(). + The function is assumed positive, linear per segment, continuous. + Two sampling methods are illustrated : RejectAccept() and InverseCumul() + (see Particle Data book, Monte Carlo techniques). + + Histogram 1 shows generated energy spectrum. + +\subsection ParticleGun_sub_s33 3. Divergent beam in an arbitrary direction with rotation matrix + + A geantino uniformly randomized around a given direction (theta, phi). + One wants to limit particle direction uniformly around this direction. + First, one generates momentum direction in the master frame (eg. World). + AlphaMax = opening angle around z axis. + Then one rotates momentum in local frame, using rotateUz() function. + RotateUz() transforms uz to newUz. It is composition of two simple rotations: + theta around oy, then phi around oz (non commutative). \n + See: + http://proj-clhep.web.cern.ch/proj-clhep/manual/UserGuide/VectorDefs/node49.html \n + Histograms 5,6 show momentum direction in local frame. + +\subsection ParticleGun_sub_s34 4. Shooting primaries in spherical coordinates with rotation matrix + + a geantino uniformly randomized within a spherical shell. + + a) Vertex position + One wishes to shoot uniformly within a spherical shell. + One works in spherical coordinates. One uses inverse cumulative method with + analytical formulae. \n + Histograms 2,3,4 demonstrate uniform distribution of vertex position. + + b) Momentum direction + One wants to limit particle direction uniformly within (alphaMin, alphaMax). + First, one generates momentum direction in the master frame (eg. World). + Then, one rotates momentum in vertex_position frame, using rotateUz() function. + RotateUz() transforms uz to ur. It is composition of two elementary rotations: + theta around oy, then phi around oz (non commutative). \n + See: + http://proj-clhep.web.cern.ch/proj-clhep/manual/UserGuide/VectorDefs/node49.html \n + + Histograms 5,6 show momentum direction in vertex_position frame. + +\section ParticleGun_s4 Visualisation + + Visualization Manager is set in the main () (see particleGun.cc). + Initialisation of the drawing is done via the commands + /vis/.. in the macro vis.mac. This macro is automatically read from the main + in case of interactive running mode. + +\section ParticleGun_s5 How to start ? + + - Execute particleGun in 'batch' mode from macro files +\verbatim +% ParticleGun run1.mac +\endverbatim + + - Execute particleGun2 in 'interactive mode' with visualization +\verbatim +% particleGun +.... +Idle> ---> type your commands. For instance: +Idle> /gunExample/selectGunAction 1 +Idle> /run/beamOn 10 +.... +Idle> exit +\endverbatim + +\section ParticleGun_s6 Histograms + + particleGun produces several 1D histograms which are saved as + particleGun.root by default. + + - 1 : energy spectrum dN/dE = f(E) + - 2 : vertex position: radial distr dN/dv = f(r) + - 3 : vertex position: cos(theta) + - 4 : vertex position: phi + - 5 : particle direction in local frame: cos(alpha) + - 6 : particle direction in local frame: psi + + Please note that histogram 1 will be filled only if you use + PrimaryGeneratorAction2, histos 5,6 with PrimaryGeneratorAction0 and 3 + and 2 through 6 will be filled with PrimaryGeneratorAction4. + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/h1/setFileName name (default particleGun) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default gunExample) + +*/ diff --git a/examples/extended/eventgenerator/particleGun/README b/examples/extended/eventgenerator/particleGun/README new file mode 100644 index 0000000000..edd044db30 --- /dev/null +++ b/examples/extended/eventgenerator/particleGun/README @@ -0,0 +1,152 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + ParticleGun + ----------- + + History: + 10-06-2010 : Makoto Asai - merge into one example + 13-05-2010 : Michel Maire - create as three examples + + This example demonstrates 5 ways of the usage of G4ParticleGun shooting + primary particles in different cases. These are + 0) uniform particle direction in a given solid angle + 1) Generate several vertices and particles per event + 2) Show how to sample a tabulated function (eg. energy spectrum) + 3) Divergent beam in an arbitrary direction + 4) Shooting primaries in spherical coordinates with rotation matrix. + These usages can be chosen by a UI command + /gunExample/selectGunAction + where corresponds to above cases. + + 1- Geometry construction + --------------------- + + It is a simple box which represents an 'infinite' homogeneous medium. + + 2- Physics list + ------------ + + PhysicsList.cc defines only geantino and transportation process. + + 3- Primary generator + ----------------- + + There are 5 concrete primary generator action classes + (PrimaryGeneratorActionN, N=0,1,2,3,4) which can be used as an independent sample + code. + PrimaryGeneratorAction is the class which uses and switches between these + 5 concrete action classes. Each concrete generator action shoots geantinoes + in a distribution decribed below. + + 3.0- uniform particle direction in a given solid angle + ------------------------------------------------- + spherical angles (alpha,psi) respective to z axis + Histograms 5,6 show momentum direction in master frame. + + 3.1- Generate several vertices and particles per event + ------------------------------------------------- + + particle 1 : a geantino uniformly randomized on a cylinder surface. + particle 2 and 3 : symetric to particle 1. + In addition, time_zero of each event is randomized. + + 3.2- Show how to sample a tabulated function (energy spectrum) + --------------------------------------------------------- + + Energy is sampled from a tabulated function defined in InitFunction(). + The function is assumed positive, linear per segment, continuous. + Two sampling methods are illustrated : RejectAccept() and InverseCumul() + (see Particle Data book, Monte Carlo techniques). + Histogram 1 shows generated energy spectrum. + + 3.3- Divergent beam in an arbitrary direction with rotation matrix + ------------------------------------------------------------- + + A geantino uniformly randomized around a given direction (theta, phi). + One wants to limit particle direction uniformly around this direction. + First, one generates momentum direction in the master frame (eg. World). + AlphaMax = opening angle around z axis. + Then one rotates momentum in local frame, using rotateUz() function. + RotateUz() transforms uz to newUz. It is composition of two simple rotations: + theta around oy, then phi around oz (non commutative). +http://proj-clhep.web.cern.ch/proj-clhep/manual/UserGuide/VectorDefs/node49.html + Histograms 5,6 show momentum direction in local frame. + + 3.4- Shooting primaries in spherical coordinates with rotation matrix + ---------------------------------------------------------------- + + a geantino uniformly randomized within a spherical shell. + + a) Vertex position + One wishes to shoot uniformly within a spherical shell. + One works in spherical coordinates. One uses inverse cumulative method with + analytical formulae. + Histograms 2,3,4 demonstrate uniform distribution of vertex position. + + b) Momentum direction + One wants to limit particle direction uniformly within (alphaMin, alphaMax). + First, one generates momentum direction in the master frame (eg. World). + Then, one rotates momentum in vertex_position frame, using rotateUz() function. + RotateUz() transforms uz to ur. It is composition of two elementary rotations: + theta around oy, then phi around oz (non commutative). +http://proj-clhep.web.cern.ch/proj-clhep/manual/UserGuide/VectorDefs/node49.html + Histograms 5,6 show momentum direction in vertex_position frame. + + 4- Visualisation + ------------- + + Visualization Manager is set in the main(). + Initialisation of the drawing is done via the commands + /vis/.. in the macro vis.mac. This macro is automatically read from the main + in case of interactive running mode. + + 5- How to start ? + -------------- + + - execute particleGun in 'batch' mode from macro files + % ParticleGun run1.mac + + - execute particleGun2 in 'interactive mode' with visualization + % particleGun + .... + Idle> ---> type your commands. For instance: + Idle> /gunExample/selectGunAction 1 + Idle> /run/beamOn 10 + .... + Idle> exit + + 6- Histograms + ---------- + + particleGun produces several 1D histograms which are saved as + particleGun.root by default. + + 1 : energy spectrum dN/dE = f(E) + 2 : vertex position: radial distr dN/dv = f(r) + 3 : vertex position: cos(theta) + 4 : vertex position: phi + 5 : particle direction in local frame: cos(alpha) + 6 : particle direction in local frame: psi + + Please note that histogram 1 will be filled only if you use + PrimaryGeneratorAction2, histos 5,6 with PrimaryGeneratorAction0 and 3 + and 2 through 6 will be filled with PrimaryGeneratorAction4. + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/h1/setFileName name (default particleGun) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default gunExample) diff --git a/examples/extended/eventgenerator/pythia/.README.txt b/examples/extended/eventgenerator/pythia/.README.txt new file mode 100644 index 0000000000..1022f4da12 --- /dev/null +++ b/examples/extended/eventgenerator/pythia/.README.txt @@ -0,0 +1,27 @@ + +///\file "eventgenerator/pythia/.README.txt" +///\brief Examples pythia README page + +/*! \page Examples_pythia Category "eventgenerator/pythia" + +Examples for Pythia-Geant4 interface. + +This directory contains examples for using Pythia as Monte Carlo event +generator, interfaced with Geant4, and showing how to implement an external +decayer. + +\section pythia_s1 Requirements for external software packages + +\subsection PYTHIA + - Tested versions 6.4.28 (decayer6) and 8.3.0.5 (py8decayer) + - URL: https://pythia.org/ + +\section pythia_s2 Example decayer6 + The \link Exampledecayer6 decayer6 \endlink example demonstrates the use + of Pythia6 as an external decayer. + +\section pythia_s3 Example py8decayer + The \link Examplepy8decayer py8decayer \endlink example demonstrates the use + of Pythia8 as an external decayer. + +*/ diff --git a/examples/extended/eventgenerator/pythia/README b/examples/extended/eventgenerator/pythia/README new file mode 100644 index 0000000000..7813e2b990 --- /dev/null +++ b/examples/extended/eventgenerator/pythia/README @@ -0,0 +1,16 @@ + + Examples for Pythia-Geant4 interface + ------------------------------------ + +This directory contains examples for using Pythia as Monte Carlo event +generator, interfaced with Geant4, and showing how to implement an external +decayer. + +Requirements for external software packages +------------------------------------------- +PYTHIA + Tested version 6.4.28 + URL: http://www.thep.lu.se/~torbjorn/Pythia.html + +Example decayer6 + This example demonstrates the use of Pythia6 as an external decayer. diff --git a/examples/extended/eventgenerator/pythia/decayer6/.README.txt b/examples/extended/eventgenerator/pythia/decayer6/.README.txt new file mode 100644 index 0000000000..1ce7021506 --- /dev/null +++ b/examples/extended/eventgenerator/pythia/decayer6/.README.txt @@ -0,0 +1,96 @@ + +///\file "eventgenerator/pythia/decayer6/.README.txt" +///\brief Example decayer6 page + +/*! \page Exampledecayer6 Example decayer6 + + This is an example of the external decayer implementation + with PYTHIA6. + + The complete PYTHIA6 documentation can be found at: + http://home.thep.lu.se/~torbjorn/pythiaaux/recent.html + + The PYTHIA6 external decayer was originally developed within + the AliRoot framework, by Andreas Morsch (CERN). \n + The dependence on the ALICE software was taken off + by Christian Holm Christensen. \n + The dependence on the Root framework and the integration in + the Geant4 framework was done by Ivana Hrivnacova (IPN Orsay). + +
+ + The use of the external decayer is demonstrated with using the + classes from common examples repository, see below their complete + list. + + The G4Pythia6Decayer class provides the implementation of the + G4VExternalDecayer interface with using PYTHIA6. In order + to be able to use PYTHIA6, which is written in FORTRAN, + a C++ interface class Pythia6 is provided. This class + interfaces only the PYTHIA6 functions relevant to decay. + + The G4Pythia6Decayer is instantiated in the + P6DExtDecayerPhysics::ConstructProcess() function where the external + decayer is set to G4Decay process for all particles. + To demonstrate the decay with external decayer, + the B- meson is defined in ExG4PrimaryGeneratorAction01, + as it has no own decay table defined within Geant4. + + With PYTHIA6, it is possible to force a selected decay + type. This selection can be chosen interactively via + the implemented Geant4 UI command: +\verbatim +/pythia6Decayer/forceDecayType decayType +\endverbatim + where the available decay types are listed in the EDecayType + enumaration. + + The classes Pythia6, G4Pythia6Decayer, G4Pythia6DecayerMessenger + are independent from the example classes and can be reused + in another user application. + + Installation: +- 1. Download the PYTHIA6 source file from the PYTHIA6 download site:\n + http://www.hepforge.org/downloads/pythia6 + +- 2A. With CMake: Build pythia6 library + + For a convenience a CMake file for building Pythia6 library from + the source is provided in + examples/extended/eventgenerator/CMakeLists.txt.pythia6. + Build the pythia6 library following the instructions in this file + and then define the environment variables: +\verbatim +PYTHIA6 the path where pythia6 library is installed +PYTHIA6_VERSION the pythia version +\endverbatim + +- 2B. With GNUmake: Define the environment variables: \n +\verbatim +PYTHIA6 the path to pythia-versionX.f source code +PYTHIA6_VERSION the pythia version +\endverbatim + + e.g. If you download pythia-6.4.26.f.gz and unzip it in $HOME, + then you have to set: + export PYTHIA6=$HOME + export PYTHIA6_VERSION="6.4.26" + + pythia6 will be then compiled together with example code. + +- 3. Compilation:\n + Then the example is compiled in a standard way, see \ref README_HowToRun. \n + Note that with GNUmake build, an additional step 'gmake setup' is + needed before 'gmake'. + +- 4. Execution: +\verbatim +% pythia6_decayer pythia6_decayer.in +\endverbatim + +This example uses the following user action classes from the extended examples common +repository available in common subdirectory: + - DetectorConstruction + - GunPrimaryGeneratorAction + +*/ diff --git a/examples/extended/eventgenerator/pythia/decayer6/README b/examples/extended/eventgenerator/pythia/decayer6/README new file mode 100644 index 0000000000..51454ca7cc --- /dev/null +++ b/examples/extended/eventgenerator/pythia/decayer6/README @@ -0,0 +1,85 @@ + ------------------------------------------------------------ + + Example of the external decayer implementation with PYTHIA6 + ----------------------------------------------------------- + + The complete PYTHIA6 documentation can be found at: + http://home.thep.lu.se/~torbjorn/pythiaaux/recent.html + + The PYTHIA6 external decayer was originally developed within + the AliRoot framework, by Andreas Morsch (CERN). + The dependence on the ALICE software was taken off + by Christian Holm Christensen, + The dependence on the Root framework and the integration in + the Geant4 framework was done by Ivana Hrivnacova (IPN Orsay). + + ------------------------------------------------------------ + + The use of the external decayer is demonstrated with using the + classes from common examples repository, see below their complete list. + + The G4Pythia6Decayer class provides the implementation of the + G4VExternalDecayer interface with using PYTHIA6. In order + to be able to use PYTHIA6, which is written in FORTRAN, + a C++ interface class Pythia6 is provided. This class + interfaces only the PYTHIA6 functions relevant to decay. + + The G4Pythia6Decayer is instantiated in the P6DExtDecayerPhysics builder, + in the ConstructProcess() function where the external decayer is set + to G4Decay process for all particles. + To demonstrate the decay with external decayer, + the B- meson is defined in ExG4PrimaryGeneratorAction01, + as it has no own decay table defined within Geant4. + + With PYTHIA6, it is possible to force a selected decay + type. This selection can be chosen interactively via + the implemented Geant4 UI command: + + /pythia6Decayer/forceDecayType decayType + + where the available decay types are listed in the EDecayType + enumaration. + + The classes Pythia6, G4Pythia6Decayer, G4Pythia6DecayerMessenger + are independent from the example classes and can be reused + in another user application. + + Installation: + + 1. Download the PYTHIA6 source file from the PYTHIA6 download site: + http://www.hepforge.org/downloads/pythia6 + + 2A.) With CMake: Build pythia6 library + + For a convenience a CMake file for building Pythia6 library from + the source is provided in + examples/extended/eventgenerator/CMakeLists.txt.pythia6. + Build the pythia6 library following the instructions in this file + and then define the environment variables: + PYTHIA6 the path where pythia6 library is installed + PYTHIA6_VERSION the pythia version + + 2B.) With GNUmake: Define the environment variables: + PYTHIA6 the path to pythia-versionX.f source code + PYTHIA6_VERSION the pythia version + + e.g. If you download pythia-6.4.26.f.gz and unzip it in $HOME, + then you have to set: + export PYTHIA6=$HOME + export PYTHIA6_VERSION="6.4.26" + + Pythia6 will be then compiled together with example code. + + 3. Compilation: + Then the example is compiled in a standard way, see examples/README_HowToRun. + Note that with GNUmake build, an additional step 'gmake setup' is + needed before 'gmake'. + + Execution: + + % pythia6_decayer pythia6_decayer.in + +This example uses the following user action classes from the extended examples common +repository available in common subdirectory: + DetectorConstruction + GunPrimaryGeneratorAction diff --git a/examples/extended/eventgenerator/pythia/decayer6/common/.README.txt b/examples/extended/eventgenerator/pythia/decayer6/common/.README.txt new file mode 100644 index 0000000000..a4fb856d0b --- /dev/null +++ b/examples/extended/eventgenerator/pythia/decayer6/common/.README.txt @@ -0,0 +1,24 @@ + +///\file "common/.README.txt" +///\brief Common classes README page + +/*! \page Examples_common Category "common" + + In order to reduce code duplication and to reduce the number of variants of + the code of same kind, we define a set of common classes which + can be reused in "feature" examples demonstrating just a particular feature. + This module may be enhanced in future. Currently it provides + the following sets of classes: + + - Detector construction classes + - two simple detector construction classes with a messenger + + - Physics list classes + - GeantinoPhysicsList - physics list with geantino and chargedgeantino only + + - Primary generator classes + - two simple primary generator classes (with G4ParticleGun and + G4ParticleGeneralSource) + +*/ + diff --git a/examples/extended/eventgenerator/pythia/decayer6/common/README b/examples/extended/eventgenerator/pythia/decayer6/common/README new file mode 100644 index 0000000000..3da6d98573 --- /dev/null +++ b/examples/extended/eventgenerator/pythia/decayer6/common/README @@ -0,0 +1,26 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Common Classes for Extended Examples + ------------------------------------- + + In order to reduce code duplication and to reduce the number of variants of + the code of same kind, we define a set of common classes which + can be reused in "feature" examples demonstrating just a particular feature. + This module may be enhanced in future. Currently it provides + the following sets of classes: + + - Detector construction classes + - two simple detector construction classes with a messenger + + - Physics list classes + - GeantinoPhysicsList - physics list with geantino and chargedgeantino only + + - Primary generator classes + - two simple primary generator classes (with G4ParticleGun and + G4ParticleGeneralSource) + + diff --git a/examples/extended/eventgenerator/pythia/py8decayer/.README.txt b/examples/extended/eventgenerator/pythia/py8decayer/.README.txt new file mode 100644 index 0000000000..2f87a7f833 --- /dev/null +++ b/examples/extended/eventgenerator/pythia/py8decayer/.README.txt @@ -0,0 +1,128 @@ + +///\file "eventgenerator/pythia/py8decayer/.README.txt" +///\brief Example py8decayer page + +/*! \page Examplepy8decayer Example py8decayer + + This example demonstrates how to outfit Pythia8-based decay features + to those resonances in Geant4 where decay tables are not implemented + by default. In addition, it showns how to replace existing + Geant4 decay tables to such resonances as tau+/- or B+/- with + the Pythia8-based ones. + + This example is activated by setting up PYTHIA8 environment variable + to point to the area where Pythia8 is installed. + + The complete Pythia8 information, including on download, and documentation + is available from the following site: + https://pythia.org + + The original version of this example has been implemented by Julia Yarba + (FNAL, USA) + +
+ + For the complete list of the classes that compose this example please + see later in this document. + + Location of example: + + examples/extended/eventgenerator/pythia/py8decayer + + + Installation of Pythia8: + + NOTE: As of June 2021, pythia8.3.0.5 is the most current version, + this it is used in this example. + In the future, please check updates at Pythia8 site: https://pythia.org + +- 1. cd path/to/your/pythia8/area + +- 2. Download desired version of Pythia8 and un-tar it, e.g. +\verbatim +wget http://home.thep.lu.se/~torbjorn/pythia8/pythia8305.tgz +tar xzf pythia8305.tgz +\endverbatim + +- 3. Build/install Pythia8 +\verbatim +cd pythia8305 +export CXX=\`which g++\` +./configure --prefix=$PWD --cxx=$CXX +make +\endverbatim + NOTE: By default, Pythia8 (as of 8.3.0.5) builds with C++11 standards. + If one wants to turn to e.g. C++17 standard, one needs to override flags + via --cxx-common argument to configure script. + + 4. Setup PYTHIA8 environment variable to point to the area where Pythia8 + is built/installed: +\verbatim +export PYTHIA8=$PWD +\endverbatim + + Building example: + + Upon setup of PYTHIA8 environment variable to point to the area where + Pythia8 package is installed, the pythia/py8decayer example will be + compiled together with several other features of the eventgenerator example. + + + Description of classes: + + Py8Decayer class provides implementation of the G4VExternalDecayer interface + with the use of PYTHIA8. + It is reasonably annotated, and demonstrates what features of Pythia8 need + to be activated and/or disactivated in order to make Pythia8 work only in + the decay mode. + It also illustrated how to control several other features of Pythia8, including + some reduction of Pythia8 verbosity (by default, Pythia8 produces quite a large + amount of printouts, thus reducing it could be useful in some cases). + Last but not least, it also shown how to deactivate decays of pi0's by Pythia8 + as the idea is to handle pi0's back to Geant4 for decays. + + Py8DecayerPhysics class implements a G4VPhysicsConstructor type of component + with the use of Py8Decayer; this component can later be used with a ddsired + physics list (see main program). + Specifically, in the Py8DecayerPhysics::ConstructProcess() the Py8Decayer is + instantiated and is used to + a) replace existing decay tables of such resonances as tau+/- and B+/- + b) supplement decay features to those resonances in Geant4 where the decay + tables are not implemnted by defaukt + + In principle, classes Py8Decayer and Py8DecayerPhysics can be directly reused with + another user application. + Alternatively, they can be used as an inspiration to implement similar, or perhaps + even more extensive Pythia8-based functionalities of user's choice. + + Class DetConstruction demostrates how to implement minimalistic detector geometry. + + Class SingleParticleGun demonstrates how to implement generaton of the primary + particle. + + + Main program: + + pythia8_decayer.cc + + + Executable: + + pythia8_decayer + + + Execution: + + At present, the pythia8_decayer executable does not take any input arguments. + Everything, including the choine of primary particle, is hardcoded in the main. + Although in the future some configurability may be added. + + By default it'll run 5 single tau events using Pythia8 to decays them. + + It should print some Pythia8 event information, including on decays. + Once again, please bear in mind that the decay of pi0's by Pythia8 is disabled + (see Py8Decayer constructor) since the idea is to hand the pi0's back to Geant4 + and make Geant4 decay them. + + +*/ diff --git a/examples/extended/eventgenerator/pythia/py8decayer/README b/examples/extended/eventgenerator/pythia/py8decayer/README new file mode 100644 index 0000000000..734f1773ff --- /dev/null +++ b/examples/extended/eventgenerator/pythia/py8decayer/README @@ -0,0 +1,120 @@ + + ------------------------------------------------------------ + + Example of the external decayer implementation with Pythia8 + ------------------------------------------------------------ + + This example demonstrates how to outfit Pythia8-based decay features + to those resonances in Geant4 where decay tables are not implemented + by default. In addition, it showns how to replace existing + Geant4 decay tables to such resonances as tau+/- or B+/- with + the Pythia8-based ones. + + This example is activated by setting up PYTHIA8 environment variable + to point to the area where Pythia8 is installed. + + The complete Pythia8 information, including on download, and documentation + is available from the following site: + https://pythia.org + + The original version of this example has been implemented by Julia Yarba + (FNAL, USA) + + For the complete list of the classes that compose this example please + see later in this document. + + Location of example: + + examples/extended/eventgenerator/pythia/py8decayer + + + Installation of Pythia8: + + NOTE: As of June 2021, pythia8.3.0.5 is the most current version, + this it is used in this example. + In the future, please check updates at Pythi8 site: https://pythia.org + + 1. cd path/to/your/pythia8/area + + 2. Download desired version of Pythia8 and un-tar it, e.g. + wget http://home.thep.lu.se/~torbjorn/pythia8/pythia8305.tgz + tar xzf pythia8305.tgz + + 3. Build/install Pythia8 + cd pythia8305 + export CXX=\`which g++\` + ./configure --prefix=$PWD --cxx=$CXX + make + NOTE: By default, Pythia8 (as of 8.3.0.5) builds with C++11 standards. + If one wants to turn to e.g. C++17 standard, one needs to override flags + via --cxx-common argument to configure script. + + 4. Setup PYTHIA8 environment variable to point to the area where Pythia8 + is built/installed: + export PYTHIA8=$PWD + + + Building example: + + Upon setup of PYTHIA8 environment variable to point to the area where + Pythia8 package is installed, the pythia/py8decayer example will be + compiled together with several other features of the eventgenerator example. + + + Description of classes: + + Py8Decayer class provides implementation of the G4VExternalDecayer interface + with the use of PYTHIA8. + It is reasonably annotated, and demonstrates what features of Pythia8 need + to be activated and/or disactivated in order to make Pythia8 work only in + the decay mode. + It also illustrated how to control several other features of Pythia8, including + some reduction of Pythia8 verbosity (by default, Pythia8 produces quite a large + amount of printouts, thus reducing it could be useful in some cases). + Last but not least, it also shown how to deactivate decays of pi0's by Pythia8 + as the idea is to handle pi0's back to Geant4 for decays. + + Py8DecayerPhysics class implements a G4VPhysicsConstructor type of component + with the use of Py8Decayer; this component can later be used with a ddsired + physics list (see main program). + Specifically, in the Py8DecayerPhysics::ConstructProcess() the Py8Decayer is + instantiated and is used to + a) replace existing decay tables of such resonances as tau+/- and B+/- + b) supplement decay features to those resonances in Geant4 where the decay + tables are not implemnted by defaukt + + In principle, classes Py8Decayer and Py8DecayerPhysics can be directly reused with + another user application. + Alternatively, they can be used as an inspiration to implement similar, or perhaps + even more extensive Pythia8-based functionalities of user's choice. + + Class DetConstruction demostrates how to implement minimalistic detector geometry. + + Class SingleParticleGun demonstrates how to implement generaton of the primary + particle. + + + Main program: + + pythia8_decayer.cc + + + Executable: + + pythia8_decayer + + + Execution: + + At present, the pythia8_decayer executable does not take any input arguments. + Everything, including the choine of primary particle, is hardcoded in the main. + Although in the future some configurability may be added. + + By default it'll run 5 single tau events using Pythia8 to decays them. + + It should print some Pythia8 event information, including on decays. + Once again, please bear in mind that the decay of pi0's by Pythia8 is disabled + (see Py8Decayer constructor) since the idea is to hand the pi0's back to Geant4 + and make Geant4 decay them. + + diff --git a/examples/extended/eventgenerator/userPrimaryGenerator/.README.txt b/examples/extended/eventgenerator/userPrimaryGenerator/.README.txt new file mode 100644 index 0000000000..14d993f027 --- /dev/null +++ b/examples/extended/eventgenerator/userPrimaryGenerator/.README.txt @@ -0,0 +1,47 @@ + +///\file "eventgenerator/userPrimaryGenerator/.README.txt" +///\brief Example basic README page + +/*! \page ExampleuserPrimaryGenerator Example userPrimaryGenerator + + The example shows how to create a primary event including several vertices and + several primary particles per vertex + + \section userPrimaryGenerator_s1 Geometry construction + + It is a simple box which represents an 'infinite' homogeneous medium. + + \section userPrimaryGenerator_s2 Physics list + + PhysicsList.cc defines only geantino and transportation process. + + \section userPrimaryGenerator_s3 Primary generator : several vertices and particles per event + + vertex A and particle 1 : a geantino uniformly randomized on a cylinder surface. + vertex B and particles 2 and 3 : symetric to vertex A. + + \section userPrimaryGenerator_s4 Visualisation + + Visualization Manager is set in the main(). + Initialisation of the drawing is done via the commands + /vis/.. in the macro vis.mac. This macro is automatically read from the main + in case of interactive running mode. + + \section userPrimaryGenerator_s5 How to start ? + + - execute userPrimaryGenerator in 'batch' mode from macro files +\verbatim + % userPrimaryGenerator run1.mac +\endverbatim + + - execute userPrimaryGenerator in 'interactive mode' with visualization +\verbatim + % userPrimaryGenerator + .... + Idle> ---> type your commands. For instance: + Idle> /run/beamOn 1 + .... + Idle> exit +\endverbatim + +*/ diff --git a/examples/extended/eventgenerator/userPrimaryGenerator/README b/examples/extended/eventgenerator/userPrimaryGenerator/README new file mode 100644 index 0000000000..eaddaed808 --- /dev/null +++ b/examples/extended/eventgenerator/userPrimaryGenerator/README @@ -0,0 +1,49 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + userPrimaryGenerator + -------------------- + + The example shows how to create a primary event including several vertices and + several primary particles per vertex + + 1- Geometry construction + --------------------- + + It is a simple box which represents an 'infinite' homogeneous medium. + + 2- Physics list + ------------ + + PhysicsList.cc defines only geantino and transportation process. + + 3- Primary generator : several vertices and particles per event + ------------------------------------------------------------ + + vertex A and particle 1 : a geantino uniformly randomized on a cylinder surface. + vertex B and particles 2 and 3 : symetric to vertex A. + + 4- Visualisation + ------------- + + Visualization Manager is set in the main(). + Initialisation of the drawing is done via the commands + /vis/.. in the macro vis.mac. This macro is automatically read from the main + in case of interactive running mode. + + 5- How to start ? + -------------- + + - execute basic in 'batch' mode from macro files + % basic run1.mac + + - execute basic in 'interactive mode' with visualization + % basic + .... + Idle> ---> type your commands. For instance: + Idle> /run/beamOn 1 + .... + Idle> exit diff --git a/examples/extended/exoticphysics/.README.txt b/examples/extended/exoticphysics/.README.txt new file mode 100644 index 0000000000..16f61325bf --- /dev/null +++ b/examples/extended/exoticphysics/.README.txt @@ -0,0 +1,38 @@ + +///\file "exoticphysics/.README.txt" +///\brief Examples exoticphysics README page + +/*! \page Examples_exoticphysics Category "exoticphysics" + + Examples in this directory demonstrate exotic physics applications. + Currently, four examples are provided: + +\link Examplechanneling channeling \endlink + +This example simulates channeling of 400 GeV/c protons in a bent crystal. + +\link Exampledmparticle dmparticle \endlink + +This is very preliminary and simplified Geant4 example for light dark matter +(LDM) particles. + +\link Examplemonopole monopole \endlink + +This example is devoted to the energy deposited by classical magnetic +monopole. + +\link Examplephonon phonon \endlink + +This example simulates phonons in sub-Kelvin temperature Germanium crystal. + +\link Examplesaxs saxs \endlink + +The example saxs implements the typical setup of a Small Angle X-ray +Scattering (SAXS) experiment. + +\link Exampleucn ucn \endlink + +This example simulates the passage of ultra-cold neutrons (UCN) in a +hollow pipe. + +*/ diff --git a/examples/extended/exoticphysics/README b/examples/extended/exoticphysics/README new file mode 100644 index 0000000000..d49fd41f87 --- /dev/null +++ b/examples/extended/exoticphysics/README @@ -0,0 +1,39 @@ + + Geant4 extended examples - exotic physics + ---------------------------------------------- + + Examples in this directory demonstrate exotic physics applications. + Currently, four examples are provided: + +channeling +---------- + +This example simulates channeling of 400 GeV/c protons in a bent crystal. + +dmparticle +--------- +This is very preliminary and simplified Geant4 example for light dark matter +(LDM) particles. + +monopole +--------- + +This example is devoted to the energy deposited by classical magnetic +monopole. + +phonon +------ + +This example simulates phonons in sub-Kelvin temperature Germanium crystal. + +saxs +---- + +The example saxs implements the typical setup of a Small Angle X-ray +Scattering (SAXS) experiment. + +ucn +--- + +This example simulates the passage of ultra-cold neutrons (UCN) in a +hollow pipe. diff --git a/examples/extended/exoticphysics/channeling/.README.txt b/examples/extended/exoticphysics/channeling/.README.txt new file mode 100644 index 0000000000..4cb4c20f10 --- /dev/null +++ b/examples/extended/exoticphysics/channeling/.README.txt @@ -0,0 +1,92 @@ + +///\file "exoticphysics/channeling/.README.txt" +///\brief Example channeling README page + +/*! \page Examplechanneling Example channeling + +\author Enrico Bagli - INFN and University Ferrara (Italy) \n + bagli@fe.infn.it + +This example shows how channeling in bent crystal can be simulated +in Geant4 + +\section channeling_s1 INTRODUCTION + +The example simulates the channeling of 400 GeV/c protons in bent +Si crystal. Channeling occurs when particles enter a crystal aligned +with atomic planes or axes. In bent crystals, the particles are +trapped between atomic planes and follow the crystal curvature +being deflected. If the particle direction is tangent to a bent +crystal plane is reflected to the opposite direction with respect +to channeling, i.e., it suffer ‘volume reflection’. The example +provides the physical model for planar channeling and volume +reflection in bent crystals. + +\section channeling_s2 GEOMETRY + +The geometry is a bent Si crystal with three Si detectors placed at +-9.998 m, -0.320 m and 10.756 m with respect to bent crystal position. +The Si detectors allows to measure incoming and outgoing angle + after the interaction with the Si bent crystal. The +geometry is all under vacuum. + +\section channeling_s3 PRIMARY EVENT + +The primary events are 400 GeV/c protons at -1.05 m from the +crystal with 13.36 microrad x 11.25 microrad divergence. + +\section channeling_s4 PHYSICS + +In the example the physics of channeling and volume reflection +has been added to the standard Geant4 physics. The description +of the used model can be found in the paper ‘A model for the +interaction of high-energy particles in straight and bent +crystals implemented in Geant4’ by E. Bagli et al., available +online at http://arxiv.org/abs/1403.5819 + +\section channeling_s5 EXECUTION & OUTPUT + +The executable must be run from within the source directory of the example +to ensure that it can find the path for crystal data files. + +Data files for Si crystal interplanar potential, nuclei and electron density + are stored in a named subdirectory’data’ + +Upon execution, the macro +\verbatim +2009_PLB680_129.mac +\endverbatim +will automatically run the +example with 1000 protons. + +Use +\verbatim +/xtal/setBR XXX 0. 0. m +\endverbatim +To change crystal bending to XXX meters + +Use +\verbatim +/xtal/setSize 1.0 70. XXX mm +\endverbatim +To change crystal length to XXX millimeter + +Use +\verbatim +/xtal/setEC data/Si220 +\endverbatim +To select the (110) Si crystal plane of channeling + +GPS commands are used for the primary generator. + +\subsection channeling_s5_sub1 ExExhCh.root + +The output is the ExExhCh.root file with the TTree ExExChTree +has the leaves: +- angXin : incoming particle X angle at the crystal +- angYin : incoming particle Y angle at the crystal +- posXin : hitting X position of the particle at the crystal +- posYin : hitting Y position of the particle at the crystal +- angXout: outgoing particle X angle out of the the crystal +- angYout: outgoing particle Y angle out of the the crystal +*/ diff --git a/examples/extended/exoticphysics/channeling/README b/examples/extended/exoticphysics/channeling/README new file mode 100644 index 0000000000..1c3fccfc9e --- /dev/null +++ b/examples/extended/exoticphysics/channeling/README @@ -0,0 +1,71 @@ +================================================================= + Channeling effect in Geant4 +================================================================= + Enrico Bagli - INFN and University Ferrara (Italy) + bagli@fe.infn.it + +This example shows how channeling in bent crystal can be simulated +in Geant4 + +1.INTRODUCTION +The example simulates the channeling of 400 GeV/c protons in bent +Si crystal. Channeling occurs when particles enter a crystal aligned +with atomic planes or axes. In bent crystals, the particles are +trapped between atomic planes and follow the crystal curvature +being deflected. If the particle direction is tangent to a bent +crystal plane is reflected to the opposite direction with respect +to channeling, i.e., it suffer ‘volume reflection’. The example +provides the physical model for planar channeling and volume +reflection in bent crystals. + +2.GEOMETRY +The geometry is a bent Si crystal with three Si detectors placed at +-9.998 m, -0.320 m and 10.756 m with respect to the position of +the bent crystal itself. The Si detectors allows to measure +incoming and outgoing angle after the interaction with the Si bent crystal. +The geometry is all under vacuum. + +3.PRIMARY EVENT +The primary events are 400 GeV/c protons launched at -10.5 m from the +crystal with 13.36 microrad x 11.25 microrad divergence. + +4.PHYSICS +In the example the physics of channeling and volume reflection +has been added to the standard Geant4 physics. The description +of the used model can be found in the paper ‘A model for the +interaction of high-energy particles in straight and bent +crystals implemented in Geant4’ by E. Bagli et al., available +online at http://arxiv.org/abs/1403.5819 + +5.EXECUTION & OUTPUT +The executable must be run from within the source directory of the example +to ensure that it can find the path for crystal data files. + +Data files for Si crystal interplanar potential, nuclei and electron density + are stored in a subdirectory named ’data’ + +Upon execution, the 2009_PLB680_129.mac macro will automatically run the +example with 1000 protons. + +Use +/xtal/setBR XXX 0. 0. m +To change crystal bending to XXX meters + +Use +/xtal/setSize 1.0 70. XXX mm +To change crystal length to XXX millimeter + +Use +/xtal/potfilename data/Si220pl +To select the (110) Si crystal plane of channeling + +GPS commands are used for the primary generator. + +The output is the ExExhCh.root file with the TTree ExExChTree +has the leaves: +- angXin : incoming particle X angle at the crystal +- angYin : incoming particle Y angle at the crystal +- posXin : hitting X position of the particle at the crystal +- posYin : hitting Y position of the particle at the crystal +- angXout: outgoing particle X angle out of the the crystal +- angYout: outgoing particle Y angle out of the the crystal diff --git a/examples/extended/exoticphysics/dmparticle/.README.txt b/examples/extended/exoticphysics/dmparticle/.README.txt new file mode 100644 index 0000000000..3870b30141 --- /dev/null +++ b/examples/extended/exoticphysics/dmparticle/.README.txt @@ -0,0 +1,70 @@ + +///\file "exoticphysics/dmparticle/.README.txt" +///\brief Example dmparticle README page + +/*! \page Exampledmparticle Example dmparticle + +This is very preliminary and simplified Geant4 example for light dark matter (LDM) particles. +It consists of LDM bremsstrahlung process (in G4LDMPhysics constructor) +for protons creating G4LDMPhotons. +The latter decays creating G4LDMHi and G4LDMHiBar LDM scalar particles. They +can scatter on nucleons and electrons. + +The first version has electromagnetic processes only. Hadron constructors can be added similarly +to HadrN examples. + +More LDM processes will be added according to experiment requirements + + +\section dmparticle_s1 GEOMETRY DEFINITION + + The geometry consists of a single block of a homogenous material, + placed in a world. + + Parameters define the geometry : + - the material of the box + - the thickness of the box + - the tranverse dimension of the box + + The default is 130 cm of tungsten. + Equivalent UI commands are following: +\verbatim +/testex/det/setMat G4_W +/testex/det/sizeX 130 cm +/testex/det/sizeYZ 30 cm +\endverbatim + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + +\section dmparticle_s2 PHYSICS LIST + + + Physics Lists include EM standard physics and decay physics, additional + dark matter particle physics imlemented inside PhysicsList method. By + default DMLPhoton is defined with the mass 0.5 GeV. + To define different mass of this photon or enable DMLHi, DMLHiBar + command line commands should be applied. + +\section dmparticle_s3 THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + block perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of ParticleGun class (see + the macros provided with this example). + The default is proton 100 GeV + +\section dmparticle_s5- HOW TO START ? + + + Execute Test in 'batch' mode from macro files + +\verbatim +% dmparticle dmparticle.in +% dmparticle dmparticle.in 0.2 0.4 +\endverbatim + + two extra numbers are masses in GeV of DMLPhoton and DMLHi +*/ diff --git a/examples/extended/exoticphysics/dmparticle/README b/examples/extended/exoticphysics/dmparticle/README new file mode 100644 index 0000000000..abae4f50c5 --- /dev/null +++ b/examples/extended/exoticphysics/dmparticle/README @@ -0,0 +1,79 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + dmparticle + ---------- + + V. Grichine (25.03.2017) + + Geant4 application for testing of dark matter particles and processes + (based on TestEm8 and monopole examples) + +This is very preliminary and simplified Geant4 example for light dark matter (LDM) particles. +It consists of LDM bremsstrahlung process (in G4LDMPhysics constructor) +for protons creating G4LDMPhotons. +The latter decays creating G4LDMHi and G4LDMHiBar LDM scalar particles. They +can scatter on nucleons and electrons. + +The first version has electromagnetic processes only. Hadron constructors can be added similarly +to HadrN examples. + +More LDM processes will be added according to experiment requirements + + + + 1- GEOMETRY DEFINITION + + The geometry consists of a single block of a homogenous material, + placed in a world. + + Parameters define the geometry : + - the material of the box + - the thickness of the box + - the tranverse dimension of the box + + The default is 130 cm of tungsten. + Equivalent UI commands are following: + /testex/det/setMat G4_W + /testex/det/sizeX 130 cm + /testex/det/sizeYZ 30 cm + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + + 2- PHYSICS LIST + + Physics Lists include EM standard physics and decay physics, additional + dark matter particle physics imlemented inside PhysicsList method. By + default DMLPhoton is defined with the mass 0.5 GeV. + To define different mass of this photon or enable DMLHi, DMLHiBar + command line commands should be applied. + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + block perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of ParticleGun class (see + the macros provided with this example). + The default is proton 100 GeV + + 4- HOW TO START ? + + - execute Test in 'batch' mode from macro files + % dmparticle dmparticle.in + % dmparticle dmparticle.in 0.2 0.4 + + two extra numbers are masses in GeV of DMLPhoton and DMLHi + + 5- HISTOGRAMS + + The result is five histograms: + - energy deposition along the target + + The histogram is saved in Root file. + diff --git a/examples/extended/exoticphysics/monopole/.README.txt b/examples/extended/exoticphysics/monopole/.README.txt new file mode 100644 index 0000000000..33748f7f37 --- /dev/null +++ b/examples/extended/exoticphysics/monopole/.README.txt @@ -0,0 +1,118 @@ + +///\file "exoticphysics/monopole/.README.txt" +///\brief Example monopole README page + +/*! \page Examplemonopole Example monopole + + \author V.Ivanchenko, M.Vladymyrov \n + CERN, Geneva, Switzerland \n + Lebedev Physical Institute, Moscow, Russia \n + + +This example is devoted to the energy deposited by classical magnetic +monopole. + +\section monopole_s1 GEOMETRY DEFINITION + + The geometry consists of a single block of a homogenous material, + placed in a world. + + Four parameters define the geometry : + - the material of the box + - the thickness of the box + - the tranverse dimension of the box + - the maximal step size in target + + The default is 10 cm of alumunium, step is limited by 5mm. + Equivalent UI commands are following: +\verbatim +/testex/det/setMat G4_Al +/testex/det/sizeX 10 cm +/testex/det/sizeYZ 5 cm +/testex/det/setStepSize 5 mm +\endverbatim + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + + In addition, a global, uniform, and transverse magnetic field can be applied + via G4MonopoleFieldSetup class, with the default z-value 0.2 tesla. + This value can be changed via UI command: +\verbatim +/testex/fld/setField 0.2 tesla +\endverbatim + +\section monopole_s2 PHYSICS LIST + + The physics list includes standard FTFP_BERT physics and the additional builder + for monopole physics. + To define monopole parameters an extra string should be provided via + the program arguments: +\verbatim +./monopole -s '2 0 200 GeV' # in the interactive mode +./monopole -m file.mac -s '2 0 200 GeV' # in the batch mode +\endverbatim + +\section monopole_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + block perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + The default is monopole 100 GeV + +\section monopole_s4 VISUALIZATION + + The Visualization Manager is set in the main() for interactive session, + the initial parameters of the program are defined in the init_vis.mac macro + which then executes the visualisation macro, vis.mac. + + The detector has a default view which is a longitudinal view of the box. + + The tracks are drawn at the end of event, and erased at the end of run. + +\section monopole_s5 HOW TO RUN ? + + This example handles the program arguments in a similar way as the basic + B4 example. + It can be run with the following optional arguments: +\verbatim + % ./monopole [-m macro ] [-s setupMonopole] [-t nThreads] +\endverbatim + + The -s option was already explained in the Physics list section. + The -t option is available only in multi-threading mode + and it allows the user to override the Geant4 default number of + threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS + environment variable which has the top priority. + + - Execute program in the 'batch' mode from macro files +\verbatim +% ./monopole -m monopole.in [-s setupMonopole] +\endverbatim + + - Execute program in the 'interactive mode' with visualization +\verbatim +% ./monopole [-s setupMonopole] + .... +Idle> type your commands + .... +Idle> exit +\endverbatim + +\section monopole_s6 HISTOGRAMS + + The result is five histograms: + - Monopole eneregy deposition in current material + - dedx for proton + - dedx for monopole + - range for proton in current material + - range for monopole in current material + + The histogram is saved in Root file. + Limit of bin size can be set with testex/run/binSize (default 5mm). Real size + is chosen as a minimal between this and step limit (see Geometry section) + +*/ diff --git a/examples/extended/exoticphysics/monopole/README b/examples/extended/exoticphysics/monopole/README new file mode 100644 index 0000000000..007837e170 --- /dev/null +++ b/examples/extended/exoticphysics/monopole/README @@ -0,0 +1,111 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + monopole + -------- + V.Ivanchenko, M.Vladymyrov + CERN, Geneva, Switzerland + Lebedev Physical Institute, Moscow, Russia + + +This example is devoted to the energy deposited by classical magnetic +monopole. + + + + 1- GEOMETRY DEFINITION + + The geometry consists of a single block of a homogenous material, + placed in a world. + + Four parameters define the geometry : + - the material of the box + - the thickness of the box + - the tranverse dimension of the box + - the maximal step size in target + + The default is 10 cm of alumunium, step is limited by 5mm. + Equivalent UI commands are following: + /testex/det/setMat G4_Al + /testex/det/sizeX 10 cm + /testex/det/sizeYZ 5 cm + /testex/det/setStepSize 5 mm + + The default geometry is constructed in DetectorConstruction class, + but all of the above parameters can be changed interactively via + the commands defined in the DetectorMessenger class. + + In addition, a global, uniform, and transverse magnetic field can be applied + via G4MonopoleFieldSetup class, with the default z-value 0.2 tesla. + This value can be changed via UI command: + /testex/fld/setField 0.2 tesla + + 2- PHYSICS LIST + + The physics list includes standard FTFP_BERT physics and the additional builder + or monopole physics. + To define monopole parameters an extra string should be provided via + the program arguments: + ./monopole -s '2 0 200 GeV' # in the interactive mode + ./monopole -m file.mac -s '2 0 200 GeV' # in the batch mode + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + block perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + changed via the G4 build-in commands of ParticleGun class (see + the macros provided with this example). + The default is monopole 100 GeV. + + 4- VISUALIZATION + + The Visualization Manager is set in the main() for interactive session, + the initial parameters of the program are defined in the init_vis.mac macro + which then executes the visualisation macro, vis.mac. + + The detector has a default view which is a longitudinal view of the box. + + The tracks are drawn at the end of event, and erased at the end of run. + + + 5- HOW TO RUN ? + + This example handles the program arguments in a similar way as the basic + B4 example. + It can be run with the following optional arguments: + % ./monopole [-m macro ] [-s setupMonopole] [-t nThreads] + + The -s option was already explained in the Physics list section. + The -t option is available only in multi-threading mode + and it allows the user to override the Geant4 default number of + threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS + environment variable which has the top priority. + + - Execute program in the 'batch' mode from macro files + % ./monopole -m monopole.in [-s setupMonopole] + + - Execute program in the 'interactive mode' with visualization + % ./monopole [-s setupMonopole] + .... + Idle> type your commands + .... + Idle> exit + + + 6- HISTOGRAMS + + The result is five histograms: + - Monopole eneregy deposition in current material + - dedx for proton + - dedx for monopole + - range for proton in current material + - range for monopole in current material + + The histogram is saved in Root file. + Limit of bin size can be set with testex/run/binSize (default 5mm). Real size + is chosen as a minimal between this and step limit (see Geometry section) + diff --git a/examples/extended/exoticphysics/phonon/.README.txt b/examples/extended/exoticphysics/phonon/.README.txt new file mode 100644 index 0000000000..8afba427c0 --- /dev/null +++ b/examples/extended/exoticphysics/phonon/.README.txt @@ -0,0 +1,105 @@ + +///\file "exoticphysics/phonon/.README.txt" +///\brief Example phonon README page + +/*! \page Examplephonon Example phonon + +\author Daniel Brandt - SLAC \n + dbrandt@slac.stanford.edu + +This example demonstrates how phonon propagation in cryogenic crystals +can be simulated in Geant4. + +\section phonon_s1 INTRODUCTION + +Phonon propagation is different from most other Geant4 propagation +simulations in a number of respects: + +- Phonons are massless particles moving slower than the speed of light + +- Phonon propagation and momentum vectors are not parallel + +- Events isotropic in phonon-momentum space are not isotropic in real + space. + +This example will simulate the propagation of acoustic phonons through +a Germanium crystal, providing processes to simulate phonon scattering +of isotopic impurities, mode mixing between polarization states and +anharmonic downconversion (phonon splitting). As such it provides all +the physics required to realistically simulate phonon propagation in +cryogenically cold semiconductor crystals. + +\section phonon_s2 GEOMETRY + +In this example the geometry is a cylindrical Germanium crystal +centered at (0,0,0) with Almuninium end caps. Phonons absorbed in the +Al end caps are counted by the sensitive detector. + +\section phonon_s3 PRIMARY EVENT + +The primary event is a single phonon of energy 7.5 meV at the center of +the Ge crystal. The polarization type (fast transvere, slow transverse or +longitudinal) is determined randomly according to the density of states +in Germanium. The direction of propagation is than determined by by the +User Stacking Action class XPhononStackingAction. + +\section phonon_s4 EXECUTION & OUTPUT + +The executable must be run from within the source directory of the example +to ensure that it can find the path for crystal data files. +Alternatively the search path for the crystal maps can be set in the +setting the G4LATTICEDATA environment variable. If this variable does not +exist, it defaults to ./CrystalMaps. + +Data files for each crystal material are stored in a named subdirectory +under $G4LATTICEDATA/, along with a config.txt file which specifies the +numerical constants for the lattice. This example includes germanium [111] +in CrystalMaps/Ge/. + +Upon execution, the vis.mac visualization macro will automatically be +executed. For the visualization to work, OpenGL support must be installed. +The macro will automatically generate a single Primary Event (7.5 meV phonon) +at the center of the crystal. + +The trajectory colour will indicate the polarization state of the phonon: +- Longitudinal: blue +- Fast Transverse: green +- Slow Transverse: red + +A small circle will be drawn wherever a phonon is absorbed into the +Aluminium. All events within the Aluminium are written into plain-text +space-sparated-value (ssv) files: + +\subsection phonon_s4_sub1 timing.ssv + +- COLUMN 1: Time phonon was absorbed in ns since start of run +- COLUMN 2: Energy of phonon absorbed + +\subsection phonon_s4_sub2 tcaustic.ssv + +- COLUMN 1: x-position of absobrtion in mm +- COLUMN 2: y-position of absobrtion in mm +- COLUMN 3: z-position of absobrtion in mm + +Every time a phonon is simulated, the information is appended to timing.ssv +and caustic.ssv. If the files do not exist they will be created. + +\section phonon_s5 TESTING + +In order to test the example, it can be run as +\verbatim +./XGeBox run.in > test.out +\endverbatim + +This will create a single primary event and then cause the example to +terminate automatically, with all screen output redirected to test.out. + +If all went well, test.out should be identical to run.out provided with +this example. Also, the files caustic.ssv and timing.ssv should have been +created and be identical to caustic.out and timing.out respectively. + +After the first time the example runs, it will append to caustic.ssv and +timing.ssv. If the testing should be re-run, then caustic.ssv and timing.ssv +will have to be deleted. + +*/ diff --git a/examples/extended/exoticphysics/phonon/README b/examples/extended/exoticphysics/phonon/README new file mode 100644 index 0000000000..15e5fc2165 --- /dev/null +++ b/examples/extended/exoticphysics/phonon/README @@ -0,0 +1,99 @@ + + ================================================================= + Phonon propagation in Geant4 + ================================================================= + Daniel Brandt - SLAC + dbrandt@slac.stanford.edu + +This example demonstrates how phonon propagation in cryogenic crystals +can be simulated in Geant4. + +1.INTRODUCTION + +Phonon propagation is different from most other Geant4 propagation +simulations in a number of respects: + +-Phonons are massless particles moving slower than the speed of light + +-Phonon propagation and momentum vectors are not parallel + +-Events isotropic in phonon-momentum space are not isotropic in real + space. + +This example will simulate the propagation of acoustic phonons through +a Germanium crystal, providing processes to simulate phonon scattering +off isotopic impurities, mode mixing between polarization states and +anharmonic downconversion (phonon splitting). As such it provides all +the physics required to realistically simulate phonon propagation in +cryogenically cold semiconductor crystals. + +2. GEOMETRY + +In this example the geometry is a cylindrical Germanium crystal +centered at (0,0,0) with Almuninium end caps. Phonons absorbed in the +Al end caps are counted by the sensitive detector. + +3. PRIMARY EVENT + +The primary event is a single phonon of energy 7.5 meV at the center of +the Ge crystal. The polarization type (fast transvere, slow transverse or +longitudinal) is determined randomly according to the density of states +in Germanium. The direction of propagation is than determined by by the +User Stacking Action class XPhononStackingAction. + +4. EXECUTION & OUTPUT + +The executable must be run from within the source directory of the example +to ensure that it can find the path for crystal data files. Alternatively +the search path for the crystal maps can be set in the setting the +G4LATTICEDATA environment variable. If this variable does not exist, it +defaults to ./CrystalMaps. + +Data files for each crystal material are stored in a named subdirectory +under $G4LATTICEDATA/, along with a config.txt file which specifies the +numerical constants for the lattice. This example includes germanium [111] +in CrystalMaps/Ge/. + +Upon execution, the vis.mac visualization macro will automatically be +executed. For the visualization to work, OpenGL support must be installed. +The macro will automatically generate a single Primary Event (7.5 meV phonon) +at the center of the crystal. + +The trajectory colour will indicate the polarization state of the phonon: +Longitudinal: blue +Fast Transverse: green +Slow Transverse: red + +A small circle will be drawn wherever a phonon is absorbed into the +Aluminium. All events within the Aluminium are written into plain-text +space-sparated-value (ssv) files. + +timing.ssv +------------ +COLUMN 1: Time phonon was absorbed in ns since start of run +COLUMN 2: Energy of phonon absorbed + +caustic.ssv +------------ +COLUMN 1: x-position of absobrtion in mm +COLUMN 2: y-position of absobrtion in mm +COLUMN 3: z-position of absobrtion in mm + +Every time a phonon is simulated, the information is appended to timing.ssv +and caustic.ssv. If the files do not exist they will be created. + +5. TESTING + +In order to test the example, it can be run as + ./XGeBox run.in > test.out + +This will create a single primary event and then cause the example to +terminate automatically, with all screen output redirected to test.out. + +If all went well, test.out should be identical to run.out provided with +this example. Also, the files caustic.ssv and timing.ssv should have been +created and be identical to caustic.out and timing.out respectively. + +After the first time the example runs, it will append to caustic.ssv and +timing.ssv. If the testing should be re-run, then caustic.ssv and timing.ssv +will have to be deleted. diff --git a/examples/extended/exoticphysics/saxs/.README.txt b/examples/extended/exoticphysics/saxs/.README.txt new file mode 100644 index 0000000000..03279340b9 --- /dev/null +++ b/examples/extended/exoticphysics/saxs/.README.txt @@ -0,0 +1,253 @@ + +///\file "exoticphysics/saxs/.README.txt" +///\brief Example SAXS README page + +/*! \page Examplesaxs Example saxs + +\author Gianfranco Paternò - INFN and University Ferrara (Italy) \n + paterno@fe.infn.it + +The example saxs implements the typical setup of a Small Angle X-ray +Scattering (SAXS) experiment. It is meant to illustrate the +usage of molecular interference (MI) of Rayleigh (coherent) scattering +of photons inside the matter, which is implemented in the +G4PenelopeRayleighModelMI model. + + +\section saxs_s1 Geometry + +The setup consists of a phantom/sample under investigation, slits +to collimate the photon beam and a shielded detector to collect +the photons scattered by the phantom (see SAXSDetectorConstruction). + +The geometry is scalable through the interactive commands defined +in the SAXSDetectorConstructionMessenger class. All the significant +quantities, such as the setup (scattering) rotation angle, the position +and size of all the volumes, as well as the phantom material can be +set via macro commands. + +Two macro files come with this example: saxs.in and saxs_slits.in. + +-# In the saxs.in macro, the phantom is a cylinder with a diameter and +a height of 10 mm made of a mixture of 80% fat and 20% water. +In general, if the argument of /det/setPhantomMaterial command is 2, +as in this case, the material is a biological tissue ("MedMat") +defined as a mixture of fat, water, collagen and hydroxyapatite. +The weight fraction of the mixture components can be set through commands +\verbatim + /det/setComp0 + /det/setComp1 + /det/setComp2 + /det/setComp3 +\endverbatim +respectively. +The tissue form factor (including MI) is automatically calculated as a +weighed sum of the form factors of the basis components. +In this case, no slits are foreseen and the sensitive detector +positioned 400 mm downstream of the phantom collects all the photons +transmitted and scattered by the phantom, which is irradiated +by a pencil beam with an energy of 20 keV. + +-# In the saxs_slits.in macro, the phantom is again a cylinder with a +diameter and a height of 10 mm. The phantom is made of a custom +material ("CustomMat") whose density and composition is set through +\verbatim + /det/setCustomMatDensity + /det/setCustomMatHmassfract, + /det/setCustomMatNmassfract + /det/setCustomMatOmassfract +\endverbatim +commands. In general, a custom material can be defined by +specifying the mass fraction of H, C, N, O, Na, P, S, Cl, K, and Ca via +commands analogous to those mentioned above. In this case, the material +composition corresponds to that of ammonium nitrate +(NH4NO3). +For a custom material, the user can provide the path of the file with +the material form factor (with MI) through the +\verbatim + /det/SetCustomMatFF +\endverbatim +command. As an example, the file myFF.dat contains the form factor of +NH4NO3 measured by Harding in 1999. +In this case the slits upstream and downstream the phantom +are present. This setup is suitable for both monochromatic and +polychromatic beams. To speed-up the simulation, a monochromatic +photon beam was chosen, but a polychromatic beam can be easily defined. + +\section saxs_s2 Physics + +In this example, only electromagnetic processes and decays are considered. + +They are defined in a custom physics list that allows the user to +choose among various EM PhysicsList constructors. In particular, +by choosing G4EmPenelopePhysicsMI and setting fUseMIFlag as true, +it is possible to enable the molecular interference effects. This +is the default configuration. + +\section saxs_s3 Action Initialization + +SAXSActionInitialization class instantiates and registers to +Geant4 kernel all user action classes. While in sequential mode +the action classes are instatiated just once, by invoking the +method: SAXSActionInitialization::Build(), +in multi-threading mode the same method is invoked for each thread +worker and so all user action classes are defined thread-local. + +A run action class is instantiated both thread-local and global. +That's why its instance is created also in the method +SAXSActionInitialization::BuildForMaster(), which is +invoked only in multi-threading mode. + +\section saxs_s4 Primary generator + +The primary generator action class employs the G4GeneralParticleSource (GPS) +generator. The primary beam has to be defined via the G4 built-in +commands of the G4GeneralParticleSource in a input macro file. +In particular, a photon beam directed toward the phantom must be defined +to test the MI effects. The X-ray beam can be monochromatic or +polychromatic, parallel or divergent. + + +\section saxs_s5 Event and Detector Response + +An event consists of the generation of a single particle which is +transported through the phantom and then to the sensitive detector. + +The interactions of the photons inside the phantom, and in particular, +the scattering events, are scored in a dedicated ntuple through the +SAXSSteppingAction class. + +The hits of the particles on the sensitive detector positioned +downstream of the phantom (SAXSSensitiveDetectorHit) are recorded +in a dedicated ntuple through the SAXSSensitiveDetector class. + +\section saxs_s6 Analysis + +The analysis tools are used to accumulate statistics. +ntuple are created in SAXSRunAction::SAXSRunAction() +constructor for the following quantities: + +Ntuple1 (part) - Particles impinging on the Sensitive Detector (SD): + +- energy of the particles +- position of the hits +- momentum of the particles +- time of the hits +- type of impinging particles +- ID number of the impinging particles +- number of scattering events a primary had before hitting the SD +- event number of the hits + +Ntuple2 (scatt) - Interactions of photons inside the phantom: + +- ID of the process occurred + (0-> transportation, 1->Rayleigh, 2->Compton, 3->Photoelectic) +- initial energy of the particles +- scattering angle + +The ntuples are saved in the output file in the Root format. +When running in multi-threading mode, the ntuples accumulated +on threads are automatically merged in a single output file. + +The default output format is root. Two root scripts come with +this example to analyze the output file: scattAnalysis.C and +ADXRD.C. The first can be used to analyze the scatt ntuple, while +the second can be used for part ntuple. + +\section saxs_s7 How to run + +Execute saxs in the 'interactive mode' with visualization: +\verbatim + % ./saxs +\endverbatim +and type in the commands line by line: +\verbatim + Idle> /control/verbose 2 + Idle> /tracking/verbose 1 + Idle> ... + Idle> /run/beamOn 10 + Idle> ... + Idle> exit +\endverbatim +or it is possible to run a macro file (test.in is a simple macro where the +primary beam is defined through the usual GPS commands): +\verbatim + Idle> /control/execute test.in + Idle> /run/beamOn 10 + .... + Idle> exit +\endverbatim + +Execute saxs in the 'batch' mode from macro files (without visualization) +\verbatim + % ./saxs saxs.in [Ncores] + % ./saxs saxs_slits.in [Ncores] +\endverbatim + Ncores (optional argument) is the number of threads the user wants + to use in MT mode. + +\section saxs_s8 Appendix + +The following paragraphs are common to all basic examples + +\subsection saxs_s8a Visualization + +The visualization manager is set via the G4VisExecutive class +in the main() function in saxs.cc. +The initialisation of the drawing is done via a set of /vis/ commands +in the macro vis.mac. This macro is automatically read from +the main function when the example is used in interactive running mode. + +By default, vis.mac opens an OpenGL viewer (/vis/open OGL). +The user can change the initial viewer by commenting out this line +and instead uncommenting one of the other /vis/open +statements, such as +HepRepFile or DAWNFILE (which produce files that can be viewed with the +HepRApp and DAWN viewers, respectively). Note that one can always +open new viewers at any time from the command line. For example, if +you already have a view in, say, an OpenGL window with a name +"viewer-0", then +\verbatim + /vis/open DAWNFILE +\endverbatim +then to get the same view +\verbatim + /vis/viewer/copyView viewer-0 +\endverbatim +or to get the same view *plus* scene-modifications +\verbatim + /vis/viewer/set/all viewer-0 +\endverbatim +then to see the result +\verbatim + /vis/viewer/flush +\endverbatim + +The DAWNFILE, HepRepFile drivers are always available +(since they require no external libraries), but the OGL driver requires +that the Geant4 libraries have been built with the OpenGL option. + +vis.mac has additional commands that demonstrate additional functionality +of the vis system, such as displaying text, axes, scales, date, logo and +shows how to change viewpoint and style. +To see even more commands use help or ls or +browse the available UI commands in the Application Developers Guide. + +For more information on visualization, including information on how to +install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, +for example, + http://geant4.slac.stanford.edu/Presentations/vis/G4[VIS]Tutorial/G4[VIS]Tutorial.html +(where [VIS] can be replaced by DAWN, OpenGL and HepRApp) + +The tracks are automatically drawn at the end of each event, accumulated +for all events and erased at the beginning of the next run. + +\subsection saxs_s8b User Interfaces + +The user command interface is set via the G4UIExecutive class +in the main() function in saxs.cc +The selection of the user command interface is then done automatically +according to the Geant4 configuration or it can be done explicitly via +the third argument of the G4UIExecutive constructor (see exampleB4a.cc). + +*/ diff --git a/examples/extended/exoticphysics/saxs/README b/examples/extended/exoticphysics/saxs/README new file mode 100644 index 0000000000..07b38bcf9a --- /dev/null +++ b/examples/extended/exoticphysics/saxs/README @@ -0,0 +1,217 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Extended Example saxs + -------------------- + + The example saxs implements the typical setup of a Small Angle X-ray + Scattering (SAXS) experiment. It is meant to illustrate the + usage of molecular interference (MI) of Rayleigh (coherent) scattering + of photons inside the matter, which is implemented in the + G4PenelopeRayleighModelMI model. + + 1- GEOMETRY + + The setup consists of a phantom/sample under investigation, slits + to collimate the photon beam and a shielded detector to collect + the photons scattered by the phantom (see SAXSDetectorConstruction). + + The geometry is scalable through the interactive commands defined + in the SAXSDetectorConstructionMessenger class. All the significant + quantities, such as the setup (scattering) rotation angle, the position + and size of all the volumes, as well as the phantom material can be + set via macro commands. + + Two macro files come with this example: saxs.in and saxs_slits.in. + + In the saxs.in macro, the phantom is a cylinder with a diameter and + a height of 10 mm made of a mixture of 80% fat and 20% water. + In general, if the argument of /det/setPhantomMaterial command is 2, + as in this case, the material is a biological tissue ("MedMat") + defined as a mixture of fat, water, collagen and hydroxyapatite. + The weight fraction of the mixture components can be set through commands + /det/setComp0, /det/setComp1, /det/setComp2, /det/setComp3, respectively. + The tissue form factor (including MI) is automatically calculated as a + weighed sum of the form factors of the basis components. + In this case, no slits are foreseen and the sensitive detector + positioned 400 mm downstream of the phantom collects all the photons + transmitted and scattered by the phantom, which is irradiated + by a pencil beam with an energy of 20 keV. + + In the saxs_slits.in macro, the phantom is again a cylinder with a + diameter and a height of 10 mm. The phantom is made of a custom + material ("CustomMat") whose density and composition is set through + /det/setCustomMatDensity and /det/setCustomMatHmassfract, + /det/setCustomMatNmassfract, /det/setCustomMatOmassfract commands, + respectively. In general, a custom material can be defined by + specifying the mass fraction of H, C, N, O, Na, P, S, Cl, K, and Ca via + commands analogous to those mentioned above. In this case, the material + composition corresponds to that of ammonium nitrate (NH4NO3). + For a custom material, the user can provide the path of the file with + the material form factor (with MI) through the /det/SetCustomMatFF + command. As an example, the file myFF.dat contains the form factor of + NH4NO3 measured by Harding in 1999. + In this case the slits upstream and downstream the phantom + are present. This setup is suitable for both monochromatic and + polychromatic beams. To speed-up the simulation, a monochromatic + photon beam was chosen, but a polychromatic beam can be easily defined. + + 2- PHYSICS + + In this example, only electromagnetic processes and decays are considered. + They are defined in a custom physics list that allows the user to + choose among various EM PhysicsList constructors. In particular, + by choosing G4EmPenelopePhysicsMI and setting fUseMIFlag as true, + it is possible to enable the molecular interference effects. This + is the default configuration. + + 3- ACTION INITALIZATION + + SAXSActionInitialization class instantiates and registers to + Geant4 kernel all user action classes. While in sequential mode + the action classes are instatiated just once, by invoking the + method: SAXSActionInitialization::Build(), + in multi-threading mode the same method is invoked for each thread + worker and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local and global. + That's why its instance is created also in the method + SAXSActionInitialization::BuildForMaster(), which is + invoked only in multi-threading mode. + + 4- PRIMARY GENERATOR + + The primary generator action class employs the G4GeneralParticleSource (GPS) + generator. The primary beam has to be defined via the G4 built-in + commands of the G4GeneralParticleSource in a input macro file. + In particular, a photon beam directed toward the phantom must be defined + to test the MI effects. The X-ray beam can be monochromatic or + polychromatic, parallel or divergent. + + 5- EVENT AND DETECTOR RESPONSE + + An event consists of the generation of a single particle which is + transported through the phantom and then to the sensitive detector. + + The interactions of the photons inside the phantom, and in particular, + the scattering events, are scored in a dedicated ntuple through the + SAXSSteppingAction class. + + The hits of the particles on the sensitive detector positioned + downstream of the phantom (SAXSSensitiveDetectorHit) are recorded + in a dedicated ntuple through the SAXSSensitiveDetector class. + + 6- ANALYSIS: + + The analysis tools are used to accumulate statistics. + ntuple are created in SAXSRunAction::SAXSRunAction() + constructor for the following quantities: + + Ntuple1 (part) - Particles impinging on the Sensitive Detector (SD): + - energy of the particles + - position of the hits + - momentum of the particles + - time of the hits + - type of impinging particles + - ID number of the impinging particles + - number of scattering events a primary had before hitting the SD + - event number of the hits + + Ntuple2 (scatt) - Interactions of photons inside the phantom: + - ID of the process occurred + (0-> transportation, 1->Rayleigh, 2->Compton, 3->Photoelectic) + - initial energy of the particles + - scattering angle + + The ntuples are saved in the output file in the Root format. + + When running in multi-threading mode, the ntuples accumulated + on threads are automatically merged in a single output file. + + The default output format is root. Two root scripts come with + this example to analyze the output file: scattAnalysis.C and + ADXRD.C. The first can be used to analyze the scatt ntuple, while + the second can be used for part ntuple. + + 7- HOW TO RUN + + - Execute saxs in the 'interactive mode' with visualization: + % ./saxs + and type in the commands line by line: + Idle> /control/verbose 2 + Idle> /tracking/verbose 1 + Idle> ... + Idle> /run/beamOn 10 + Idle> ... + Idle> exit + or it is possible to run a macro file (test.in is a simple macro where the + primary beam is defined through the usual GPS commands): + Idle> /control/execute test.in + Idle> /run/beamOn 10 + .... + Idle> exit + + - Execute saxs in the 'batch' mode from macro files + (without visualization) + % ./saxs saxs.in [Ncores] + % ./saxs saxs_slits.in [Ncores] + Ncores (optional argument) is the number of threads the user wants to use in + MT mode. + + + The following paragraphs are common to all basic examples + + A- VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in saxs.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main function when the example is used in interactive running mode. + + By default, vis.mac opens an OpenGL viewer (/vis/open OGL). + The user can change the initial viewer by commenting out this line + and instead uncommenting one of the other /vis/open statements, such as + HepRepFile or DAWNFILE (which produce files that can be viewed with the + HepRApp and DAWN viewers, respectively). Note that one can always + open new viewers at any time from the command line. For example, if + you already have a view in, say, an OpenGL window with a name + "viewer-0", then + /vis/open DAWNFILE + then to get the same view + /vis/viewer/copyView viewer-0 + or to get the same view *plus* scene-modifications + /vis/viewer/set/all viewer-0 + then to see the result + /vis/viewer/flush + + The DAWNFILE, HepRepFile drivers are always available + (since they require no external libraries), but the OGL driver requires + that the Geant4 libraries have been built with the OpenGL option. + + vis.mac has additional commands that demonstrate additional functionality + of the vis system, such as displaying text, axes, scales, date, logo and + shows how to change viewpoint and style. + To see even more commands use help or ls or browse the available UI commands + in the Application Developers Guide. + + For more information on visualization, including information on how to + install and run DAWN, OpenGL and HepRApp, see the visualization tutorials, + for example, + http://geant4.slac.stanford.edu/Presentations/vis/G4[VIS]Tutorial/G4[VIS]Tutorial.html + (where [VIS] can be replaced by DAWN, OpenGL and HepRApp) + + The tracks are automatically drawn at the end of each event, accumulated + for all events and erased at the beginning of the next run. + + B- USER INTERFACES + + The user command interface is set via the G4UIExecutive class + in the main() function in saxs.cc + The selection of the user command interface is then done automatically + according to the Geant4 configuration or it can be done explicitly via + the third argument of the G4UIExecutive constructor (see exampleB4a.cc). + + diff --git a/examples/extended/exoticphysics/ucn/.README.txt b/examples/extended/exoticphysics/ucn/.README.txt new file mode 100644 index 0000000000..4a6a2a3b97 --- /dev/null +++ b/examples/extended/exoticphysics/ucn/.README.txt @@ -0,0 +1,122 @@ + +///\file "exoticphysics/ucn/.README.txt" +///\brief Example ucn README page + +/*! \page Exampleucn Example ucn + +\author Peter Gumplinger - TRIUMF, Vancouver, Canada \n + gum@triumf.ca + +This example demonstrates how ultra-cold neutrons (UCN) propagate +in a guide pipe and how this can be simulated in Geant4. + +\section ucn_s1 INTRODUCTION + +This example exhibits the functionality of UCN physics + + +\section ucn_s2 GEOMETRY + + The geometry consists of a single hollow pipe (cylinder) + placed in a world. + + Default World Size: G4Box - 1m x 1m x 100m + + The pipe wall is made of G4_Ni while the world and, hence, + the inside of the pipe is made from G4_Galactic + + The G4UCNMaterialPropertiesTable properties are: +\verbatim + "REFLECTIVITY" = 1 + "DIFFUSION" = 0.1 + "FERMIPOT" = 252.0 neV + "SPINFLIP"= 0. + "LOSS" = 12.5e-5 + "LOSSCS" = 0. + "ABSCS"= 4.49 // 1/v loss cross-section at room temp. + "SCATCS" = 18.5 // (incoherent) "elastic" scattering cross-section +\endverbatim + + The MicroRoughnessParameters are: +\verbatim + Roughness correlation length w = 30nm + Surface roughness b = 1nm + # of angles theta_i in the look-up tables: 180 + # of energie bins in the look-up tables: 1000 + min. and max. values of theta_i: 0*degree and 90*degree + min. and max values of Energy: 1neV and 1000neV + # of angles theta_o in the look-up table calculation: 15 + # of angels phi_o in the look-up table calculation: 15 + angular cut: 0.01*degree +\endverbatim + + The default step limits in the vacuum is 1mm and maxTime is 100s + + The simulation is in a G4UniformGravityField + +\section ucn_s3 PHYSICS LIST + + The ExUCNPhysicsList defines only + - G4Neutron, G4Proton, G4Electron, G4AntiNeutrinoE, G4MuonPlus, G4MuonMinus and + G4GenericIon + + Through ExUCNExtraPhysics the following processes are instantiated: + - G4StepLimiter + - G4UserSpecialCuts + + and in ConstructUCN() + - G4UCNLoss + - G4UCNAbsorption + - G4UCNMultiScattering + +\section ucn_s4 THE PRIMARY GENERATOR + + The primary kinematic consists of a single ultra-colde neutron + (uniform between 1neV and 100neV from the origin uniform into 4pi + + A RUN is a set of events. + + +\section ucn_s5 VISUALIZATION + + The Visualization Manager is set in the main () (see ExUCN.cc) + for interactive session. + The initialisation of the drawing is done via the command + +\verbatim +/control/execute vis.mac +\endverbatim + +\section ucn_s6 TESTING + + This example handles the program arguments in a new way. + It can be run with the following optional arguments: + +\verbatim +% ExUCN [-m macro ] [-u UIsession] [-t nThreads] +\endverbatim + + The -t option is available only in multi-threading mode + and it allows the user to override the Geant4 default number of + threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS + environment variable which has the top priority. + + Execute ExUCN in 'batch' mode from macro files e.g. + +\verbatim +% ExUCN -m ExUCN.in > ExUCN.out & +\endverbatim + + Execute ExUCN in 'interactive' mode with visualization e.g. + +\verbatim +% ExUCN +Idle> type your commands, for example: +Idle> run/beamOn 1 +... +\endverbatim + +\section ucn_s7 HISTOGRAMS + + - no histograms for now +*/ diff --git a/examples/extended/exoticphysics/ucn/README b/examples/extended/exoticphysics/ucn/README new file mode 100644 index 0000000000..7087b7e296 --- /dev/null +++ b/examples/extended/exoticphysics/ucn/README @@ -0,0 +1,106 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + ExUCN + ----- + Peter Gumplinger + TRIUMF, Vancouver, Canada + +This example exhibits the functionality of UCN physics + + + 1- GEOMETRY DEFINITION + + The geometry consists of a single hollow pipe (cylinder) + placed in a world. + + Default World Size: G4Box - 1m x 1m x 100m + + The pipe wall is made of G4_Ni while the world and, hence, + the inside of the pipe is made from G4_Galactic + + The G4UCNMaterialPropertiesTable properties are: + + "REFLECTIVITY" = 1 + "DIFFUSION" = 0.1 + "FERMIPOT" = 252.0 neV + "SPINFLIP"= 0. + "LOSS" = 12.5e-5 + "LOSSCS" = 0. + "ABSCS"= 4.49 // 1/v loss cross-section at room temp. + "SCATCS" = 18.5 // (incoherent) "elastic" scattering cross-section + + The MicroRoughnessParameters are: + + Roughness correlation length w = 30nm + Surface roughness b = 1nm + # of angles theta_i in the look-up tables: 180 + # of energie bins in the look-up tables: 1000 + min. and max. values of theta_i: 0*degree and 90*degree + min. and max values of Energy: 1neV and 1000neV + # of angles theta_o in the look-up table calculation: 15 + # of angels phi_o in the look-up table calculation: 15 + angular cut: 0.01*degree + + The default step limits in the vacuum is 1mm and maxTime is 100s + + The simulation is in a G4UniformGravityField + + 2- PHYSICS LIST + + The ExUCNPhysicsList defines only G4Neutron, G4Proton, G4Electron, + G4AntiNeutrinoE, G4MuonPlus, G4MuonMinus and G4GenericIon + + Through ExUCNExtraPhysics the following processes are instantiated: + + G4StepLimiter + G4UserSpecialCuts + + and in ConstructUCN() + + G4UCNLoss + G4UCNAbsorption + G4UCNMultiScattering + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single ultra-cold neutron, + uniform between 1neV and 100neV, from the origin and uniform + into 4pi solid angle. + + A RUN is a set of events. + + + 4- VISUALIZATION + + The Visualization Manager is set in the main() for interactive session. + The initialisation of the drawing is done via the command + /control/execute vis.mac + + 5- HOW TO START ? + + This example handles the program arguments in a new way. + It can be run with the following optional arguments: + % ExUCN [-m macro ] [-u UIsession] [-t nThreads] + + The -t option is available only in multi-threading mode + and it allows the user to override the Geant4 default number of + threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS + environment variable which has the top priority. + + - execute ExUCN in 'batch' mode from macro files e.g. + % ExUCN -m ExUCN.in > ExUCN.out & + + - execute ExUCN in 'interactive' mode with visualization e.g. + % ExUCN + .... + Idle> type your commands, for example: + Idle> run/beamOn 1 + .... + + 6- HISTOGRAMS + + - no histograms for now diff --git a/examples/extended/field/.README.txt b/examples/extended/field/.README.txt new file mode 100644 index 0000000000..d38428418e --- /dev/null +++ b/examples/extended/field/.README.txt @@ -0,0 +1,46 @@ + +///\file "field/.README.txt" +///\brief Examples field README page + +/*! \page Examples_field Category "field" + + Examples in this directory demonstrate specific simulation setups + in magnetic field. + +\link Examplefield01 field01 \endlink + +Example enabling investigation of tracking in a magnetic field. + +\link Examplefield02 field02 \endlink + +Test for investigation of tracking in electric field and field dependent +electromagnetic processes. + +\link Examplefield03 field03 \endlink + +Example of tracking in magnetic field where field associated +to selected logical volumes varies. + +\link Examplefield04 field04 \endlink + +This example shows how to define/use OVERLAPPING field elements +in Geant4. Fields might be either magnetic, electric or both. + +\link Examplefield05 field05 \endlink + +This example demonstrates so-called "spin-frozen" condition. + +\link Examplefield06 field06 \endlink + +This example exercises the capability of tracking massive +particles in a gravity field. + +\link ExampleBlineTracer BlineTracer \endlink + +The BlineTracer module allows to trace and visualise magnetic field +lines in a Geant4 application where particle are tracked through the +magnetic field (in future, these functionalities may be integrated in +the Geant4 kernel). + +*/ + diff --git a/examples/extended/field/BlineTracer/.README.txt b/examples/extended/field/BlineTracer/.README.txt new file mode 100644 index 0000000000..a1679cdb43 --- /dev/null +++ b/examples/extended/field/BlineTracer/.README.txt @@ -0,0 +1,184 @@ + +///\file "field/BlineTracer/.README.txt" +///\brief Example BlineTracer README page + +/*! \page ExampleBlineTracer Example BlineTracer + +\author Laurent Desorgher (desorgher@phim.unibe.ch) - 04/10/2003 + +The BlineTracer module allows to trace and visualise magnetic field +lines in a Geant4 application where particle are tracked through the +magnetic field (in future, these functionalities may be integrated in +the Geant4 kernel). + +To use the tracer, the user should copy the classes provided here in +his/her own application/example and create somewhere in his/her code +an instance of a G4BlineTracer object. +It can be anywhere (for example in the main code or in the user class +defining the magnetic field): + +\verbatim +#include "G4BlineTracer.hh" +G4BlineTracer* theBlineTool = new G4BlineTracer(); +\endverbatim + +\section ExampleBlineTracer_s1 Design principles + +The core of the tool is the method G4BlineTracer::ComputeBlines() of G4BlineTracer class. +In this method a bline is computed by tracking a ChargedGeantino in the user +defined magnetic field and by using a Bline equation of motion (class +G4BlineEquation, motion along the field) instead of a Lorentz equation. + +During the execution of this method : + + - The user defined equations of motion associated to the different + global and local fields are replaced by instances of G4BlineEquation + associated to the same fields. + The G4BlineEquation class defines the differential equation of a + magnetic field line. + + - User defined ChordFinders are replaced by new ChordFinders + associated to the G4BlineEquation object. + + - The user primary generator action, run action, event action and + stepping action are replaced by instances of the classes + G4BlinePrimaryGeneratorAction, G4BlineTracer, G4BlineEventAction + and G4BlineSteppingAction respectively. Other actions are set to + a NULL pointer. + +After the execution of the method, the original user defined actions, equation +of motions and chord-finders are restored. + +In other words, the deafult run-action is temporarly replaced by a +G4BlineTracer run-action using the same Geometry, physics and magnetic fields +but with a different equation of motion and user actions. + +The G4BlinePrimaryGeneratorAction::GeneratePrimaries() method of the G4BlinePrimaryGeneratorAction class +call the GeneratePrimaries() method of the user defined PrimaryGeneratorAction +for defining the start position and start time of tracking. +Start position for user application and for Bline tracking are therefore +controlled by the same UI commands. +The type of particles to be tracked when tracing Blines is always set +to Charged-Geantino. This allows to switch off the effect of electromagnetic +and hadronics physics when tracing field lines. + + +The G4BlineEventAction class is responsible to store computed magnetic field +lines as a vector of Polylines and Polymarkers for later visualisation. +These vectors can be drawn and reset at any time. + +The stepping action does nothing in this implementation but it can be used +in future versions to limit field line tracing to physical volumes defined +by the user. For this purpose a G4BlineStackingAction could also be +implemented. + +\section ExampleBlineTracer_s2 User Manual + +\subsection ExampleBlineTracer_subs21 General description + +The BlineTracer is controlled by the UI commands contained in the directory +/vis/blineTracer. By calling the command 'computeBline', several magnetic field +lines passing through user defined start positions are computed. +Start positions are generated by the user primary generator action. +By doing so, the definition of start positions is the same for usual particles +tracking and magnetic field line tracking. + +A magnetic field line is computed as a track of a charged geantino that moves +along the field line. The user can define the maximum length of a tracking step +(only valid for Bline tracing purposes) by the use of the 'setMaxStepLength' +command. + +By using small enough maximum step length, smooth magnetic field lines are +obtained. By using the command 'stockLines' and 'stockPoints' the user +can decide to store the series of tracking step positions defining +a magnetic field line as a Polyline object and/or a PolyMarker object +(circles) respectively. + +These objects are stored in vectors of PolyLines and PolyMarkers. +By using the command 'draw', these vectors are added to the scene +of the visualisation manager, provided that a scene handler and +visualisation driver have been properly created. + +The scene is visualised by invoking the vis command '/vis/show'. +Polyline objects are visualised as line segments joining the different +step positions defining a line, while for a Polymarker object markers +(here circles), are drawn at each step positions. + +By using the 'setColour' the user defines the visualisation colour +that will be associated to the next computed magnetic field lines. +By calling 'setPointSize' the user defines the size of visualisation markers +that will be associated to the next computed magnetic field lines. +The user can remove the vector of Polymarker and Polyline from the memory +by invoking 'resetMaterialToBeDrawn'. + +When using small max step size and polymarkers for visualisation purposes, the +thickness of a smooth magnetic field line is obtained. It is controlled by the +Marker size parameter ('setPointSize') + +\subsection ExampleBlineTracer_subs22 Command description + +\verbatim +/vis/blineTracer/computeBline nb_of_lines +\endverbatim + - Parameters: integer nb_of_lines + - Description: Compute nb_of_lines different magnetic field lines + +\verbatim +/vis/blineTracer/setMaxStepLength max_step_length +\endverbatim + - Parameters: double max_step_length + - Description: Set the maximum tracking step length for computing + magnetic field lines + +\verbatim +/vis/blineTracer/setColour red green blue +\endverbatim + - Parameters: double red, green, blue + - Description: Define the colour for visualisation of the + next computed magnetic field lines. The color is + defined by a RGB code (red,green,blue) with all + parameters smaller than 1. + +\verbatim + /vis/blineTracer/stockLines aBool +\endverbatim + - Parameters: boolean aBool + - Description: If true the next computed field lines are stored + as Polylines for further visualisation + +\verbatim +/vis/blineTracer/stockLines aBool +\endverbatim + - Parameters: boolean aBool + - Description: If true the next computed field lines are stored + as Polymarkers for further visualisation + +\verbatim +/vis/blineTracer/setPointSize point_size +\endverbatim + - Parameters: double point_size + - Description: set the size of the visualisation markers + that will be associated with the next computed + magnetic field lines + +\verbatim +/vis/blineTracer/resetMaterialToBeDrawn +\endverbatim + - Parameters: none + - Description: The vector of Polyline and Polymarker representing + magnetic field lines to be visualised are removed + from memory + +\verbatim +/tracking/storeTrajectory 1 +\endverbatim + - If the storeTrajectory parameter is not set no field lines are + stored. + +\section ExampleBlineTracer_s3 Current limitations & known problems + + The tool is working properly only for detectors parts where magnetic + field are defined. It is planned in the future to stop the tracking of + field lines in regions where no fields are existing. + +*/ diff --git a/examples/extended/field/BlineTracer/README b/examples/extended/field/BlineTracer/README new file mode 100644 index 0000000000..a2b6d2daff --- /dev/null +++ b/examples/extended/field/BlineTracer/README @@ -0,0 +1,155 @@ +README file for the Geant4 BlineTracer module + +Author : Laurent Desorgher (desorgher@phim.unibe.ch) - 04/10/2003 + + ------------------------------------------------- + +The BlineTracer module allows to trace and visualise magnetic field +lines in a Geant4 application where particle are tracked through the +magnetic field (in future, these functionalities may be integrated in +the Geant4 kernel). +To use the tracer, the user should copy the classes provided here in +his/her own application/example and create somewhere in his/her code +an instance of a G4BlineTracer object. +It can be anywhere (for example in the main code or in the user class +defining the magnetic field): + + #include "G4BlineTracer.hh" + G4BlineTracer* theBlineTool = new G4BlineTracer(); + + +Design principles: + +The core of the tool is the method ComputeBlines() of G4BlineTracer class. +In this method a bline is computed by tracking a ChargedGeantino in the user +defined magnetic field and by using a Bline equation of motion (class +G4BlineEquation, motion along the field) instead of a Lorentz equation. + +During the execution of this method : + + -The user defined equations of motion associated to the different + global and local fields are replaced by instances of G4BlineEquation + associated to the same fields. + The G4BlineEquation class defines the differential equation of a + magnetic field line. + + -User defined ChordFinders are replaced by new ChordFinders + associated to the G4BlineEquation object. + + -The user primary generator action, run action, event action and + stepping action are replaced by instances of the classes + G4BlinePrimaryGeneratorAction, G4BlineTracer, G4BlineEventAction + and G4BlineSteppingAction respectively. Other actions are set to + a NULL pointer. + +After the execution of the method, the original user defined actions, equation +of motions and chord-finders are restored. + +In other words, the deafult run-action is temporarly replaced by a +G4BlineTracer run-action using the same Geometry, physics and magnetic fields +but with a different equation of motion and user actions. + +The GeneratePrimaries() method of the G4BlinePrimaryGeneratorAction class +call the GeneratePrimaries() method of the user defined PrimaryGeneratorAction +for defining the start position and start time of tracking. +Start position for user application and for Bline tracking are therefore +controlled by the same UI commands. +The type of particles to be tracked when tracing Blines is always set +to Charged-Geantino. This allows to switch off the effect of electromagnetic +and hadronics physics when tracing field lines. + + +The G4BlineEventAction class is responsible to store computed magnetic field +lines as a vector of Polylines and Polymarkers for later visualisation. +These vectors can be drawn and reset at any time. + +The stepping action does nothing in this implementation but it can be used +in future versions to limit field line tracing to physical volumes defined +by the user. For this purpose a G4BlineStackingAction could also be +implemented. + +User Manual: + + General description: + +The BlineTracer is controlled by the UI commands contained in the directory +/vis/blineTracer. By calling the command 'computeBline', several magnetic field +lines passing through user defined start positions are computed. +Start positions are generated by the user primary generator action. +By doing so, the definition of start positions is the same for usual particles +tracking and magnetic field line tracking. + +A magnetic field line is computed as a track of a charged geantino that moves +along the field line. The user can define the maximum length of a tracking step +(only valid for Bline tracing purposes) by the use of the 'setMaxStepLength' +command. +By using small enough maximum step length, smooth magnetic field lines are +obtained. By using the command 'stockLines' and 'stockPoints' the user +can decide to store the series of tracking step positions defining +a magnetic field line as a Polyline object and/or a PolyMarker object +(circles) respectively. +These objects are stored in vectors of PolyLines and PolyMarkers. +By using the command 'draw', these vectors are added to the scene +of the visualisation manager, provided that a scene handler and +visualisation driver have been properly created. +The scene is visualised by invoking the vis command '/vis/show'. +Polyline objects are visualised as line segments joining the different +step positions defining a line, while for a Polymarker object markers +(here circles), are drawn at each step positions. +By using the 'setColour' the user defines the visualisation colour +that will be associated to the next computed magnetic field lines. +By calling 'setPointSize' the user defines the size of visualisation markers +that will be associated to the next computed magnetic field lines. +The user can remove the vector of Polymarker and Polyline from the memory +by invoking 'resetMaterialToBeDrawn'. +When using small max step size and polymarkers for visualisation purposes, the +thickness of a smooth magnetic field line is obtained. It is controlled by the +Marker size parameter ('setPointSize') + + Command description: + /vis/blineTracer/computeBline nb_of_lines : + Parameters: integer nb_of_lines + Description: Compute nb_of_lines different magnetic field lines + + /vis/blineTracer/setMaxStepLength max_step_length : + Parameters: double max_step_length + Description: Set the maximum tracking step length for computing + magnetic field lines + + /vis/blineTracer/setColour red green blue + Parameters: double red, green, blue + Description: Define the colour for visualisation of the + next computed magnetic field lines. The color is + defined by a RGB code (red,green,blue) with all + parameters smaller than 1. + + /vis/blineTracer/stockLines aBool + Parameters: boolean aBool + Description: If true the next computed field lines are stored + as Polylines for further visualisation + /vis/blineTracer/stockLines aBool + Parameters: boolean aBool + Description: If true the next computed field lines are stored + as Polymarkers for further visualisation + + /vis/blineTracer/setPointSize point_size + Parameters: double point_size + DEscription: set the size of the visualisation markers + that will be associated with the next computed + magnetic field lines + + /vis/blineTracer/resetMaterialToBeDrawn + Parameters: none + Description: The vector of Polyline and Polymarker representing + magnetic field lines to be visualised are removed + from memory + + /tracking/storeTrajectory 1 : + If the storeTrajectory parameter is not set no field lines are + stored. + +Current limitations & known problems: + + The tool is working properly only for detectors parts where magnetic + field are defined. It is planned in the future to stop the tracking of + field lines in regions where no fields are existing. diff --git a/examples/extended/field/README b/examples/extended/field/README new file mode 100644 index 0000000000..421da59f16 --- /dev/null +++ b/examples/extended/field/README @@ -0,0 +1,41 @@ + + Geant4 extended examples - field + ---------------------------------- + + Examples in this directory demonstrate specific simulation setups + in magnetic field. + +field01 +-------- +Example enabling investigation of tracking in a magnetic field. + +field02 +-------- +Test for investigation of tracking in electric field and field dependent +electromagnetic processes. + +field03 +-------- +Example of tracking in magnetic field where field associated +to selected logical volumes varies. + +field04 +-------- +This example shows how to define/use OVERLAPPING field elements +in Geant4. Fields might be either magnetic, electric or both. + +field05 +-------- +This example demonstrates so-called "spin-frozen" condition. + +field06 +-------- +This example exercises the new (in 9.5) capability of tracking massive +particles in a gravity field. + +BlineTracer +------------ +The BlineTracer module allows to trace and visualise magnetic field +lines in a Geant4 application where particle are tracked through the +magnetic field (in future, these functionalities may be integrated in +the Geant4 kernel). diff --git a/examples/extended/field/field01/.README.txt b/examples/extended/field/field01/.README.txt new file mode 100644 index 0000000000..b7f6964971 --- /dev/null +++ b/examples/extended/field/field01/.README.txt @@ -0,0 +1,275 @@ + +///\file "field/field01/.README.txt" +///\brief Example field01 README page + +/*! \page Examplefield01 Example field01 + + Example that enables investigation of the accuracy and performance of the + tracking in a magnetic field. + + The key Geant4 capabilities demonstrated in this example are: + - creating a uniform magnetic field interactively using the field + messenger, + - choosing the type of Runge Kutta stepper used for integration of the + motion of charged particles in the magnetic field, + - controlling the thresholds that determine which looping particles are + killed by G4Transporation. + + Some of these capabilities are available via interactive commands, + implemented in F01FieldMessenger. + + The magnetic field is defined in the F01FieldSetup class which object + is created in the ConstructSDandField() function in the F01DetectorConstruction + class. The interactive commands are implemented in F01FieldMessenger. + + The magnetic field is defined in F01FieldSetup, which is created in + the ConstructSDandField() method in the F01DetectorConstruction class. + + \section field01_s01 Choosing the type of stepper + + The basic capabilities of choosing the stepper type are demonstrated in the + field.in macro file: + +\verbatim +/field/setStepperType 145 ## Choose a stepper type ( Tsito +/field/setStepperType 101 ## Choose an FSAL stepper ( FE +/field/setMinStep 0.1 mm ## Smaller steps always s +/field/update ## Initialise using parameters above +\endverbatim + + In addition it is possible to choose to use a new type of stepper, known + as 'First Same as Last' or FSAL, which in each step obtains the field value + at the step endpoint and evaluates the 'right hand size' of the equation + for the next integration step. This reduces the number of calls to the field + evaluation, which can be one the most computationally expensive methods, + while providing similar accuracy. + + There are several potential choices of the stepper type. Here are some suggestions: +\verbatim + =========================================================================== + Number Name of Stepper Comments + =========================================================================== + Recommended - default since Geant4 10.4: + + 15 - 'DoPri5' or + Dormand Prince 745 : Uses a pair 4th & 5th order formulae (like other 4/5 + well-known and very efficient embedded method + methods); their difference is the error estimate. + Highly recommended in literature, including + Hairer & Wanner, & Numerical Recipes + Used in several established RK code (e.g. DOPRI5) + =========================================================================== + Good choices for reasonably smooth fields: + + 45 - BogackiShampine45 : more efficient embedded 4/5 pair + Used in many applications, including + RKSUITE suite. + + 145 - Tsitouras45 : potentially the most efficient embedded 4/5 + pair - found in expanded search of parameter + space. + + 56 - Dormand Prince RK56 : higher order embedded method from authors of DoPri5. + Uses a pair 5th & 6th order formulae. + + 78 - Dormand Prince RK78 : higher order embedded method from authors of DoPri5. + Uses a pair 7th & 8th order formulae. + + 9 - NystromRK4 : a specialised Nystrom method for magnetic fields. + Reuses the field value at the mid-point of the step, + and also provides an analytical estimation of the + integration error based on numerical evaluation of + fourth order variation in the equation for + magnetic field. + =========================================================================== + The new 'First Same as Last' (FSAL) steppers can be chosen in addition: + 1 - RKFEq1 : FSAL stepper with improved equilibrium properties. + When kinks or other anomalies are encountered, + and at the start of integration when the best + step size is not known, this type of stepper + converges faster and more smoothly to good + step sizes. + =========================================================================== + The old default and old first alternative - + + 4 - ClassicalRK4 : original Runge-Kutta method, very robust but slower ) + ( obtains error estimate by doing 2 half steps ) + Good baseline for comparison - long experience of use. + May be good alternative for less smooth fields. + + 8 - Cash Karp RKF 45 : The oldest 'embedded' RK method in Geant4 - + also fairly robust. + Faster than ClassicalRK4 for smoother fields, + as it does not need two half steps to estimate error. + Available since Geant4 1.0 + + =========================================================================== + Other potential choices for non-smooth fields (with kinks, abrupt changes): + + 3 - SimpleHeum : low order, with error obtained from half-steps + 23 - BogackiShampine23 : lower order embedded method (new in 10.3-beta) + =========================================================================== +\endverbatim + +\section field01_s02 Controlling the killing of looping particles + +Occasionally tracks 'looping' in a strong magnetic field, making little +progress even over hundreds of integration steps. This is due to a +combination of a strong magnetic field and a thin material (gas or vacuum) +in which the size of a physics step is substantially larger than the radius +of curvature of the track. + +Since the amount of CPU time which can be consumed by one or few such tracks +is very large, it is important to limit the number of integration steps +spent on these tracks. The module for propagation in field in Geant4 +flags tracks which take more than a certain number (default 1,000) integration +steps without reaching the requested end of the step size, which was +determined by the physics and geometry. + +The Geant4 G4Transportation and G4CoupledTransportation processes are tasked +to select which of the looping tracks are killed and which survive. To +balance the potential significant cost of integrating looping particles, +three thresholds exist + +- **The 'Warning' Energy**: a track with energy below this value that is found to +loop is killed silently (no warning.) +Above the 'Warning Energy', if a track is selected for killing a warning is +generated. + +- **The 'Important' Energy**: the threshold energy above which a track will survive +for multiple steps if found looping. + +- Number of 'tracking' steps. They will be only be killed only if they still +loop after than. +**The number of 'trials'**: the number of steps that 'important' tracks survive. + +Note that currently only stable particles are killed. ( Refinements to enable +toggling whether unstable particles can be killed are in development. ) + +This example demonstrate choosing different values for these parametes +in the main () method of field01.cc using one of two techniques. + +\subsection field01_s02_sub1 i) Using G4PhysicsListHelper + +The first method is new in Geant4 release 10.5, and uses the G4PhysicsListHelper +which has methods to choose a pre-selected set of parameter values. The choices +are between a set each of low and high thresholds. Either one can be enabled +by calling correspondingly + - G4PhysicsListHelper::GetPhysicsListHelper()->UseLowLooperThresholds(); + or + - G4PhysicsListHelper::GetPhysicsListHelper()->UseHighLooperThresholds(); + +These methods must be called before the physics is constructed - i.e. typically +before RunManager's Initialise() method is called. +This works only if either + - a modular physics lists is used, or if + - the G4ModularPhysicsList and its AddTransporation method are used to create and register a common transportation process for all particles (one for each thread). + +\subsection field01_s02_sub2 ii) Fine grained control (available in Geant4 versions since 7.0) + +Fine grained control of the Transportation's parameters for looping particles +is also possible. + +This is demonstrated in the F01RunAction::ChangeLooperParameters() method, +which is called by the BeginOfRunAction. There the appropriate +Transportation object for the electron is obtained, and its parameters +(if valid) are used to overwrite the thresholds in the G4Transportation class. + +For example, to ensure that only looping particles with energy 10 keV are +killed silently we change the value of the 'Warning' Energy: +\code{.cpp} + runAction->SetWarningEnergy( 10.0 * CLHEP::keV ); +\endcode +[ This is passed along to the registered G4Transportation or +G4CoupledTransportation object by the F01RunAction's ChangeLooperParameters.] + +As a result the killing of any (stable) looping track with energy over 10 keV +will generate a warning. + +A second configurable energy threshold enables tracks above it to survive a +chosen number of 'tracking' steps. They will be only be killed only if they +still loop after than number of tracking steps. F01RunAction's methods are +used to configure these parameters: +\code{.cpp} + runAction->SetImportantEnergy( 0.1 * CLHEP::MeV ); + runAction->SetNumberOfTrials( 30 ); +\endcode +which the run action passes to the G4Transportation or +G4CoupledTransportation object registered for the electron. + +Note that for all pre-configured and modular physics lists share a single +Transportation process for all types of particles. So the parameters for +killing loopers will be shared by all particle types in this case. + +\section field01_s1 Background Information + +\subsection field01_s1_sub1 GEOMETRY DEFINITION + + The "Absorber" is a solid made of a given material. + + Three parameters define the absorber : + - the material of the absorber, + - the thickness of an absorber, + - the transverse size of the absorber (the input face is a square). + + The volume "World" contains the "Absorber". + In this test the parameters of the "World" can be changed , too. + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in F01DetectorConstruction class, + but all the parameters can be changed via + the commands defined in the F01DetectorMessenger class. + +\subsection field01_s1_sub2 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle (electron, Ekin = 0.5 GeV) + which hits the + absorber perpendicular to the input face. The type of the particle + and its energy are set in the F01PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + + It is also possible to change the position of the primary particle vertex + or activate its randomization via the commands defined in the + F01PrimaryGeneratorMessenger class. + + A RUN is a set of events. + +\subsection field01_s1_sub3 DETECTOR RESPONSE + + The spatial distribution of charged particles transported in magnetic + field is envistigated. + A HIT is a record, event per event , of all the + informations needed to simulate and analyse the detector response. + + In this example a F01CalorHit is defined as a set of 2 informations: + - the total energy deposit in the absorber, + - the total tracklength of all charged particles in the absorber, + + Therefore the absorber is declared + 'sensitive detector' (SD), see F01CalorimeterSD, which means they can contribute to the hit. + +\subsection field01_s1_sub4 PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in Geant4 Installation Guide, + +\subsection field01_s1_sub5 HOW TO START ? + + - Execute field01 in 'batch' mode from macro file e.g. +\verbatim +% ./field01 field01.in +\endverbatim + + - Execute field01 in 'interactive' mode with visualization e.g. +\verbatim +% ./field01 +.... +Idle> /run/beamOn 1 +.... +\endverbatim + +*/ diff --git a/examples/extended/field/field01/README b/examples/extended/field/field01/README new file mode 100644 index 0000000000..d29892ef40 --- /dev/null +++ b/examples/extended/field/field01/README @@ -0,0 +1,276 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + field01 + ------- + + Example that enables investigation of the accuracy and performance of the + tracking in a magnetic field. + + The key Geant4 capabilities demonstrated in this example are: + - creating a uniform magnetic field interactively using the field + messenger, + - choosing the type of Runge Kutta stepper used for integration of the + motion of charged particles in the magnetic field, + - controlling the thresholds that determine which looping particles are + killed by G4Transporation. + + Some of these capabilities are available via interactive commands, + implemented in F01FieldMessenger. + + A. The magnetic field is defined in F01FieldSetup, which is created in + the ConstructSDandField() method in the F01DetectorConstruction + class. + + B. Choosing the type of stepper - + + The basic capabilities of choosing the stepper type are demonstrated in the + field.in macro file: + + /field/setStepperType 145 ## Choose a stepper type ( Tsitouras ) + + /field/setStepperType 101 ## Choose an FSAL stepper ( FEqRK1 ) + + /field/setMinStep 0.1 mm ## Smaller steps always succeed + + /field/update ## Initialise using parameters above + + In addition it is possible to choose to use a new type of stepper, known + as 'First Same as Last' or FSAL, which in each step obtains the field value + at the step endpoint and evaluates the 'right hand size' of the equation + for the next integration step. This reduces the number of calls to the field + evaluation, which can be one the most computationally expensive methods, + while providing similar accuracy. + + There are several potential choices of the stepper type. Here are some + suggestions: + =========================================================================== + Number Name of Stepper Comments + =========================================================================== + Recommended - default since Geant4 10.4: + + 15 - 'DoPri5' or + Dormand Prince 745 : Uses a pair 4th & 5th order formulae (like other 4/5 + well-known and very efficient embedded method + methods); their difference is the error estimate. + Highly recommended in literature, including + Hairer & Wanner, & Numerical Recipes + Used in several established RK code (e.g. DOPRI5) + =========================================================================== + Good choices for reasonably smooth fields: + + 45 - BogackiShampine45 : more efficient embedded 4/5 pair + Used in many applications, including + RKSUITE suite. + + 145 - Tsitouras45 : potentially the most efficient embedded 4/5 + pair - found in expanded search of parameter + space. + + 56 - Dormand Prince RK56 : higher order embedded method from authors of DoPri5. + Uses a pair 5th & 6th order formulae. + + 78 - Dormand Prince RK78 : higher order embedded method from authors of DoPri5. + Uses a pair 7th & 8th order formulae. + + 9 - NystromRK4 : a specialised Nystrom method for magnetic fields. + Reuses the field value at the mid-point of the step, + and also provides an analytical estimation of the + integration error based on numerical evaluation of + fourth order variation in the equation for + magnetic field. + =========================================================================== + The new 'First Same as Last' (FSAL) steppers can be chosen in addition: + 1 - RKFEq1 : FSAL stepper with improved equilibrium properties. + When kinks or other anomalies are encountered, + and at the start of integration when the best + step size is not known, this type of stepper + converges faster and more smoothly to good + step sizes. + =========================================================================== + The old default and old first alternative - + + 4 - ClassicalRK4 : original Runge-Kutta method, very robust but slower ) + ( obtains error estimate by doing 2 half steps ) + Good baseline for comparison - long experience of use. + May be good alternative for less smooth fields. + + 8 - Cash Karp RKF 45 : The oldest 'embedded' RK method in Geant4 - + also fairly robust. + Faster than ClassicalRK4 for smoother fields, + as it does not need two half steps to estimate error. + Available since Geant4 1.0 + + =========================================================================== + Other potential choices for non-smooth fields (with kinks, abrupt changes): + + 3 - SimpleHeum : low order, with error obtained from half-steps + 23 - BogackiShampine23 : lower order embedded method (new in 10.3-beta) + =========================================================================== + + + + C. Controlling the killing of looping particles + + + Occasionally tracks 'looping' in a strong magnetic field, making little + progress even over hundreds of integration steps. This is due to a + combination of a strong magnetic field and a thin material (gas or vacuum) + in which the size of a physics step is substantially larger than the radius + of curvature of the track. + + Since the amount of CPU time which can be consumed by one or few such tracks + is very large, it is important to limit the number of integration steps + spent on these tracks. The module for propagation in field in Geant4 + flags tracks which take more than a certain number (default 1,000) integration + steps without reaching the requested end of the step size, which was + determined by the physics and geometry. + + The Geant4 G4Transportation and G4CoupledTransportation processes are tasked + to select which of the looping tracks are killed and which survive. To + balance the potential significant cost of integrating looping particles, + three thresholds exist + + The 'Warning' Energy: a track with energy below this value that is found to + loop is killed silently (no warning.) + + Above the 'Warning Energy', if a track is selected for killing a warning is + generated. + + The 'Important' Energy: the threshold energy above which a track will survive + for multiple steps if found looping. + + number of 'tracking' steps. They will be only be killed only if they still + loop after than + The number of 'trials': the number of steps that 'important' tracks survive. + + Note that currently only stable particles are killed. ( Refinements to enable + toggling whether unstable particles can be killed are in development. ) + + This example demonstrate choosing different values for these parametes + in the main() method of field01.cc using one of two techniques. + + The first method is new in Geant4 release 10.5, and uses the G4PhysicsListHelper + which has methods to choose a pre-selected set of parameter values. The choices + are between a set each of low and high thresholds. Either one can be enabled + by calling correspondingly + - G4PhysicsListHelper::GetPhysicsListHelper()->UseLowLooperThresholds(); + or + - G4PhysicsListHelper::GetPhysicsListHelper()->UseHighLooperThresholds(); + These methods must be called before the physics is constructed - i.e. typically + before RunManager's Initialise() method is called. + This works only if either + - a modular physics lists is used, or if + - the G4ModularPhysicsList and its AddTransporation method are used + to create and register a common transportation process for all particles + (one for each thread). + + ii) Fine grained control (available in Geant4 versions since 7.0) + + Fine grained control of the Transportation's parameters for looping particles + is also possible. + + This is demonstrated in the F01RunAction's ChangeLooperParameters method, + which is called by the BeginOfRunAction. There the appropriate + Transportation object for the electron is obtained, and its parameters + (if valid) are used to overwrite the thresholds in the G4Transportation class. + + For example, to ensure that only looping particles with energy 10 keV are + killed silently we change the value of the 'Warning' Energy: + + runAction->SetWarningEnergy( 10.0 * CLHEP::keV ); + + [ This is passed along to the registered G4Transportation or + G4CoupledTransportation object by the F01RunAction's ChangeLooperParameters.] + + As a result the killing of any (stable) looping track with energy over 10 keV + will generate a warning. + + A second configurable energy threshold enables tracks above it to survive a + chosen number of 'tracking' steps. They will be only be killed only if they + still loop after than number of tracking steps. F01RunAction's methods are + used to configure these parameters: + + runAction->SetImportantEnergy( 0.1 * CLHEP::MeV ); + runAction->SetNumberOfTrials( 30 ); + + which the run action passes to the G4Transportation or + G4CoupledTransportation object registered for the electron. + + Note that for all pre-configured and modular physics lists share a single + Transportation process for all types of particles. So the parameters for + killing loopers will be shared by all particle types in this case. + + +Background Information + + 1- GEOMETRY DEFINITION + + The "Absorber" is a solid made of a given material. + + Three parameters define the absorber : + - the material of the absorber, + - the thickness of an absorber, + - the transverse size of the absorber (the input face is a square). + + The volume "World" contains the "Absorber". + In this test the parameters of the "World" can be changed , too. + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in F01DetectorConstruction class, + but all the parameters can be changed via + the commands defined in the F01DetectorMessenger class. + + 2- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle (electron, Ekin = 0.5 GeV) + which hits the + absorber perpendicular to the input face. The type of the particle + and its energy are set in the F01PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + + It is also possible to change the position of the primary particle vertex + or activate its randomization via the commands defined in the + F01PrimaryGeneratorMessenger class. + + A RUN is a set of events. + + 3- DETECTOR RESPONSE + + The spatial distribution of charged particles transported in magnetic + field is envistigated. + A HIT is a record, event per event , of all the + informations needed to simulate and analyse the detector response. + + In this example a F01CalorHit is defined as a set of 2 informations: + - the total energy deposit in the absorber, + - the total tracklength of all charged particles in the absorber, + + Therefore the absorber is declared + 'sensitive detector' (SD), see F01CalorimeterSD, which means they can contribute to the hit. + + 4- PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in Geant4 Installation Guide, + + 5- HOW TO START ? + + - Execute field01 in 'batch' mode from macro file e.g. + % ./field01 field01.in + + - Execute field01 in 'interactive' mode with visualization e.g. + % ./field01 + .... + Idle> /run/beamOn 1 + .... + + + diff --git a/examples/extended/field/field02/.README.txt b/examples/extended/field/field02/.README.txt new file mode 100644 index 0000000000..0e04655fdc --- /dev/null +++ b/examples/extended/field/field02/.README.txt @@ -0,0 +1,88 @@ + +///\file "field/field02/.README.txt" +///\brief Example field02 README page + +/*! \page Examplefield02 Example field02 + + Test for investigation of tracking in electric field + and field dependent electromagnetic processes. + +\section field02_s0 FIELD DEFINITION + The field is a constant electric field. + + Technical note: in order to use any electric field, it is + necessary to create the objects for its equation of motion, + the stepper and driver for the integration, and the + chord finder. + + The class that does these is F02ElectricFieldSetup. Its object + is created in the ConstructSDandField() function in the F02DetectorConstruction + class. The interactive commands are implemented in F02FieldMessenger. + +\section field02_s1 GEOMETRY DEFINITION + + The "Absorber" is a solid made of a given material. + + Three parameters define the absorber : + - the material of the absorber, + - the thickness of an absorber, + - the transverse size of the absorber (the input face is a square). + + The volume "World" contains the "Absorber". + In this test the parameters of the "World" can be changed , too. + + In addition a transverse uniform electric field can be applied. + + The default geometry is constructed in F02DetectorConstruction class, + but all the parameters can be changed via + the commands defined in the F02DetectorMessenger class. + +\section field02_s2 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + absorber perpendicular to the input face. The type of the particle + and its energy are set in the F02PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + + It is also possible to change the position of the primary particle vertex + or activate its randomization via the commands defined in the + F01PrimaryGeneratorMessenger class. + + A RUN is a set of events. + +\section field02_s3 DETECTOR RESPONSE + + + A HIT is a record, event per event , of all the + informations needed to simulate and analyse the detector response. + + In this example a F02CalorHit is defined as a set of 2 informations: + - the total energy deposit in the absorber, + - the total tracklength of all charged particles in the absorber, + + Therefore the absorber is declared + 'sensitive detector' (SD), see F02CalorimeterSD, which means they can contribute to the hit. + +\section field02_s4 PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in Geant4 Installation Guide, + +\section field02_s5 HOW TO START ? + + - Execute field02 in 'batch' mode from macro file e.g. +\verbatim +% ./field02 field02.in +\endverbatim + + - Execute field02 in 'interactive' mode with visualization e.g. +\verbatim +% ./field02 +.... +Idle> /run/beamOn 1 +.... +\endverbatim +*/ diff --git a/examples/extended/field/field02/README b/examples/extended/field/field02/README new file mode 100644 index 0000000000..2e955ec311 --- /dev/null +++ b/examples/extended/field/field02/README @@ -0,0 +1,86 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + field02 + ------- + + Test for investigation of tracking in electric field + and field dependent electromagnetic processes. + + 1- FIELD DEFINITION + The field is a constant electric field. + + Technical note: in order to use any electric field, it is + necessary to create the objects for its equation of motion, + the stepper and driver for the integration, and the + chord finder. + + The class that does these is F02ElectricFieldSetup. Its object + is created in the ConstructSDandField() function in the F02DetectorConstruction + class. The interactive commands are implemented in F02FieldMessenger. + + 1- GEOMETRY DEFINITION + + The "Absorber" is a solid made of a given material. + + Three parameters define the absorber : + - the material of the absorber, + - the thickness of an absorber, + - the transverse size of the absorber (the input face is a square). + + The volume "World" contains the "Absorber". + In this test the parameters of the "World" can be changed , too. + + In addition a transverse uniform electric field can be applied. + + The default geometry is constructed in F02DetectorConstruction class, + but all the parameters can be changed via + the commands defined in the F02DetectorMessenger class. + + 2- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + absorber perpendicular to the input face. The type of the particle + and its energy are set in the F02PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + + It is also possible to change the position of the primary particle vertex + or activate its randomization via the commands defined in the + F01PrimaryGeneratorMessenger class. + + A RUN is a set of events. + + 3- DETECTOR RESPONSE + + + A HIT is a record, event per event , of all the + informations needed to simulate and analyse the detector response. + + In this example a F02CalorHit is defined as a set of 2 informations: + - the total energy deposit in the absorber, + - the total tracklength of all charged particles in the absorber, + + Therefore the absorber is declared + 'sensitive detector' (SD), see F02CalorimeterSD, which means they can contribute to the hit. + + 4- PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in Geant4 Installation Guide, + + 5- HOW TO START ? + + - Execute field02 in 'batch' mode from macro file e.g. + % ./field02 field02.in + + - Execute field02 in 'interactive' mode with visualization e.g. + % ./field02 + .... + Idle> /run/beamOn 1 + .... diff --git a/examples/extended/field/field03/.README.txt b/examples/extended/field/field03/.README.txt new file mode 100644 index 0000000000..da5b52144d --- /dev/null +++ b/examples/extended/field/field03/.README.txt @@ -0,0 +1,85 @@ + +///\file "field/field03/.README.txt" +///\brief Example field03 README page + +/*! \page Examplefield03 Example field03 + + Example of tracking in magnetic field where field associated + to selected logical volumes varies. + + A global and a local magnetic field are defined in the F03FieldSetup class, which object + is created in the ConstructSDandField() function in the F03DetectorConstruction + class. The local magnetic field is set to the "Radiator" volume. + The interactive commands are implemented in F03FieldMessenger. + +\section field03_s1 GEOMETRY DEFINITION + + The "Absorber" is a solid made of a given material. + + Three parameters define the absorber : + - the material of the absorber, + - the thickness of an absorber, + - the transverse size of the absorber (the input face is a square). + + The volume "World" contains the "Absorber". + In this test the parameters of the "World" can be changed , too. + + A transverse global uniform magnetic field can be applied. + In addition, the "Radiator" volume, which is placed in geometry next + to the absorber, has a local magnetic field. + + The default geometry is constructed in F03DetectorConstruction class, + but all the parameters can be changed via + the commands defined in the F03DetectorMessenger class. + +\section field03_s2 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + absorber perpendicular to the input face. The type of the particle + and its energy are set in the F03PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + + It is also possible to change the position of the primary particle vertex + or activate its randomization via the commands defined in the + F01PrimaryGeneratorMessenger class. + + A RUN is a set of events. + +\section field03_s3 DETECTOR RESPONSE + + + A HIT is a record, event per event , of all the + informations needed to simulate and analyse the detector response. + + In this example a F03CalorHit is defined as a set of 2 informations: + - the total energy deposit in the absorber, + - the total tracklength of all charged particles in the absorber, + + Therefore the absorber is declared + 'sensitive detector' (SD), see F03CalorimeterSD, which means they can contribute to the hit. + + +\subsection field01_s4 PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in Geant4 Installation Guide, + +\section field03_s5 HOW TO START ? + + - Execute field03 in 'batch' mode from macro files e.g. +\verbatim +% ./field03 field03.in +\endverbatim + + - Execute field03 in 'interactive' mode with visualization e.g. +\verbatim +% ./field03 +.... +Idle> /run/beamOn 1 +.... +\endverbatim + +*/ diff --git a/examples/extended/field/field03/README b/examples/extended/field/field03/README new file mode 100644 index 0000000000..a29e038120 --- /dev/null +++ b/examples/extended/field/field03/README @@ -0,0 +1,81 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + field03 + ------- + + Example of tracking in magnetic field where field associated + to selected logical volumes varies. + + A global and a local magnetic field are defined in the F03FieldSetup class, which object + is created in the ConstructSDandField() function in the F03DetectorConstruction + class. The local magnetic field is set to the "Radiator" volume. + The interactive commands are implemented in F03FieldMessenger. + + + 1- GEOMETRY DEFINITION + + The "Absorber" is a solid made of a given material. + + Three parameters define the absorber : + - the material of the absorber, + - the thickness of an absorber, + - the transverse size of the absorber (the input face is a square). + + The volume "World" contains the "Absorber". + In this test the parameters of the "World" can be changed , too. + + A transverse global uniform magnetic field can be applied. + In addition, the "Radiator" volume, which is placed in geometry next + to the absorber, has a local magnetic field. + + The default geometry is constructed in F03DetectorConstruction class, + but all the parameters can be changed via + the commands defined in the F03DetectorMessenger class. + + 2- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + absorber perpendicular to the input face. The type of the particle + and its energy are set in the F03PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of G4ParticleGun class (see + the macros provided with this example). + + It is also possible to change the position of the primary particle vertex + or activate its randomization via the commands defined in the + F01PrimaryGeneratorMessenger class. + + A RUN is a set of events. + + 3- DETECTOR RESPONSE + + A HIT is a record, event per event , of all the + informations needed to simulate and analyse the detector response. + + In this example a F03CalorHit is defined as a set of 2 informations: + - the total energy deposit in the absorber, + - the total tracklength of all charged particles in the absorber, + + Therefore the absorber is declared + 'sensitive detector' (SD), see F03CalorimeterSD, which means they can contribute to the hit. + + 4- PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the FTFP_BERT physics list. This physics list + requires data files for electromagnetic and hadronic processes. + See more on installation of the datasets in Geant4 Installation Guide, + + 5- HOW TO START ? + + - Execute field03 in 'batch' mode from macro files e.g. + % ./field03 field03.in + + - Execute field03 in 'interactive' mode with visualization e.g. + % ./field03 + .... + Idle> /run/beamOn 1 + .... diff --git a/examples/extended/field/field04/.README.txt b/examples/extended/field/field04/.README.txt new file mode 100644 index 0000000000..f2daa5234d --- /dev/null +++ b/examples/extended/field/field04/.README.txt @@ -0,0 +1,397 @@ + +///\file "field/field04/.README.txt" +///\brief Example field04 README page + +/*! \page Examplefield04 Example field04 + + + This example shows how to define/use OVERLAPPING field elements + in Geant4. Fields might be either magnetic, electric or both. + + Credit goes to Tom Roberts and Muons Inc. since much of the code + and ideas were taken at liberty from the (GNU GPL) source of + G4BEAMLINE release 1.12. + + http://g4beamline.muonsinc.com + +\section field04_s1 Classes + +\subsection field04_sub_s11 main () + +See field04.cc. + +The example can be run with the following optional arguments: + +\verbatim +% field04 [-m macro ] [-p physicsList] [-r randomSeed] [-s preinit|idle] +\endverbatim + +If a macro is provided with the option "-m", the program runs in a batch mode, +otherwise the program open the interactive session after executing the +default initialization macro init_vis.mac. The option "-s preinit" can be used +to start the program without initialization in PreInit phase. + +For example: +to assign the F04PhysicsList: +\verbatim +% field04 -p QGSP_BERT +\endverbatim + +an initial random number seed with: +\verbatim +% field04 field04.in -r 12345 +\endverbatim + +to start with a macro file and an initial seed: +\verbatim +% field04 -m field04.in -r 12345 +\endverbatim + +\subsection field04_sub_s12 F04DetectorConstruction + + The geometry consists of two solenoidal magnets: a "CaptureMgnt" + followed by a (blue-colored "TransferMgnt". By definition, the + axis and center of the "CaptureMgnt" coincide with the "World". The + position of the "TransferMgnt" relative to the downstream end of the + "CaptureMgnt", as well as its axis angle, both may vary. A cylindrical + "Target" is positioned inside the "CaptureMgnt". Its axis can vary + from 0 to 180 deg, and hence also the direction of the incoming + proton beam wrt the "CaptureMgnt"'s axis. A "Degrader" is located + inside the "TransferMgnt", its default position being at the + upstream end of the "TransferMgnt". Finally, also a "TestPlane" is + located inside the "TransferMgnt", by default at its downstream end. + + The "World" consists of a solid cylinder made of a given material. + (It is the responsibility of the user to make the world + large enough to contain the rest of the geometry!) + + Three parameters define the world : + - the material of the world, + - the world radius, + - the world length. + + Example (default values): +\verbatim +/field04/SetWorldMat G4_AIR +/field04/SetWorldR 5.0 m +/field04/SetWorldZ 50.0 m +\endverbatim + + The "Target" is a solid cylinder made of a given material. + Five parameters define the target: + - the material of the target, + - the target radius, + - the target thickness, + - the target position inside the "CaptureMgnt", + - the target axis angle relative to that of the "CaptureMgnt". + + Example (default values): +\verbatim +/field04/SetTgtMat G4_W +/field04/SetTgtRad 0.4 cm +/field04/SetTgtThick 16.0 cm +/field04/SetTgtPos 0.0 cm +/field04/SetTgtAng 170 +\endverbatim + + The "Degrader" is a solid cylinder made of a given material. + + Four parameters define the degrader: + - the material of the degrader, + - the degrader radius, + - the degrader thickness, + - the degrader position relative to the "TransferMgnt" center. + + Example (default values): +\verbatim +/field04/SetDgrMat G4_Pb +/field04/SetDgrRad 30.0 cm +/field04/SetDgrThick 0.1 cm +#/field04/SetDgrPos -7.4 m +\endverbatim + + The "CaptureMgnt" is a solenoid (vacuum cylinder). It is either + a two-sided or a one-sided magnetic bottle with the B field + varying linearly from the center value B1 to the edge value B2. + The one-sided F04FocusSolenoid has the open end at +z and focuses + on the z < 0 side. + + Four parameters define the "CaptureMgnt": + - the magnet radius, + - the magnet length, + - the weaker magnetic field at the center B1 + - the stronger magnetic field at the edge B2 + + Example (default values): +\verbatim +/field04/SetCaptureR 0.6 m +/field04/SetCaptureZ 4.0 m +/field/SetCaptureB1 2.5 tesla +/field/SetCaptureB2 5.0 tesla +\endverbatim + + The "TransferMgnt" is a solenoid (vacuum cylinder) with a + constant B-field. When the "TransferMgnt" follows immediately + the "CaptureMgnt", its relative position is at 0 cm. + + Four parameters define the "TransferMgnt": + - the magnet radius, + - the magnet length, + - the magnet field, + - the magnet relative position + (its upstream face wrt the downstream face of the "CaptureMgnt".) + + Example (default values): +\verbatim +/field04/SetTransferR 0.3 m +/field04/SetTransferZ 15.0 m +/field/SetTransferB 5.0 tesla +/field04/SetTransferP 0.0 m +\endverbatim + The default geometry is constructed in F04DetectorConstruction class, + but all the parameters can be changed via the commands defined in + the F04DetectorMessenger class. + +\subsection field04_sub_s13 F04Materials + + Material definitions are done through the singleton class F04Materials + which keeps a pointer to the G4NistManager. It has a method + GetMaterial by name (G4String) which in turn invokes the + G4NistManager::FindOrBuildMaterial, and/or G4Material::GetMaterial + methods. It has also a method CreateMaterials which, for materials + absent from the NIST data base, shows how to create them using the + G4NistManager::ConstructNewMaterial method. + + +\subsection field04_sub_s14 F04PrimaryGeneratorAction + + The primary kinematic consists of a single particle which hits the + target perpendicular to its upstream face. The type of the particle + and its energy are set in the F04PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of the G4ParticleGun class. + In addition, there is a fRndmFlag, which once set allows the beam to + explore randomly the whole cross section of the target. The default + beam consists of 500 MeV protons, starting at the upstream face of + the target, directed along dx = dy = 0, dz = 1 wrt the target frame. + The default direction should NOT be changed! The arguments of the + x/y/zvertex commands are relative to the target center. + + Example: +\verbatim +/gun/random on +#/gun/xvertex 0 mm +#/gun/yvertex 0 mm +#/gun/zvertex -100 mm +\endverbatim + +\subsection field04_sub_s15 DETECTOR RESPONSE in F04SteppingAction + + Information is extracted from the program via F04SteppingAction + at the TestPlane. + +\subsection field04_sub_s16 F04PhysicsList + + The F04PhysicsList extends a selected Geant4 physics list. + The base physics list name is provided by its name in the F04PhysicsList + constructor. + + In addition to processes defined in the base Geant4 physics list, + there is added the F04StepMax process and the decay of pions can be assigned + via dedicated commands in F04PhysicsListMessenger. + + The command to define maximum step: +\verbatim +/exp/phys/stepMax value unit +\endverbatim + + The decay of pions can be assigned via (pi -> e nu, pi -> mu nu): +\verbatim +/decay/pienu +/decay/pimunu +\endverbatim + + The pienu assignment includes a small fraction of radiative decay: + e nu gamma (G4PionRadiativeDecayChannel). + + The standard/default muon decay chain is modified to be 98.6% + G4MuonDecayChannelWithSpin and 1.4% G4MuonRadiativeDecayChannelWithSpin + in ConstructParticle(). + + The pion decay process G4PolDecay inherits from G4Decay and implements + the virtual method - empty in the base class - DaughterPolarization + + The muon decay process is G4DecayWithSpin + + Furthermore, the following commands are also available, but + may only be used AFTER /run/initialize + +\verbatim +/process/inactivate msc +/process/activate msc +\endverbatim + + \subsection field04_sub_s17 Overlapping Fields + + The F04GlobalField (a singleton) is instantiated in + F04DetectorConstruction() and assigned to the global field manager + in UpdateField(): +\verbatim +fFieldManager = GetGlobalFieldManager(); +fFieldManager->SetDetectorField(this); +\endverbatim + The F04GlobalField has a std::vector FieldList + + The field from each individual beamline element is given by a + F04ElementField object. Any number of overlapping F04ElementField + objects can be added to the F04GlobalField. Any element that + represents an element with an EM field must add the appropriate + F04ElementField to the global F04GlobalField object. + + Of course, the F04GlobalField has the method GetFieldValue implemented. + + Before /run/initialize in the macro file or command, the update + field command must have been issued if any of the other following + field commands was employed: +\verbatim +/field/update +\endverbatim + + Other options are: +\verbatim +/field/setStepperType 4 +/field/setMinStep 10 mm +/field/setDeltaChord 3.0 mm +/field/setDeltaOneStep 0.01 mm +/field/setDeltaIntersection 0.1 mm +/field/setEpsMin 2.5e-7 mm +/field/setEpsMax 0.05 mm +\endverbatim + Each field element has a rectilinear bounding box in global + coordinate space which is checked before a point is verified to + actually be inside the F04ElementField (IsWithin and IsOutside). + SetGlobalPoint is called 8 times for the corners of the local + bounding box, after a local->global coordinate transform. + + The F04ElementField is the interface class used by F04GlobalField to + compute the field value at a given point[]. + + A beamline element, for example the F04SimpleSolenoid, will derive + from F04ElementField and implement the computation for the element. +\verbatim +simpleSolenoid + = new F04SimpleSolenoid(B, l, logicTransferMgnt,TransferMgntCenter); +\endverbatim + Besides the magnetic field and the length of the simple solenoid, + the constructor needs the knowledge of the G4LogicalVolume for + the beamline element and where its center is located in the + 'World'. + + The F04ElementField has a G4AffineTransform "fGlobal2local" which + allows the quick computation of coordinate transformations. It can + only be determined by knowing the element's coordinate origin in + the global frame and after all of the geometry has been defined. + For this reason, the object is prepared in two stages, through the + constructor providing it with the coordinate center and a pointer + to the G4LogicalVolume. Later the Construct() method is called to + calculate the fGlobal2local and the bounding box. This can be done + from the F04RunAction::BeginOfRunAction method, for only then are we + certain that the geometry has been completely built: +\verbatim +FieldList* fields = F04GlobalField::GetObject()->GetFields(); + +if (fields) { + if (fields->size()>0) { + FieldList::iterator i; + for (i=fields->begin(); i!=fields->end(); ++i)(*i)->Construct(); + } +} +\endverbatim + The F04ElementField constructor will also add the derived object into + F04GlobalField. Finally, its AddFieldValue() will add the field value + for this element to field[]. + +\subsection field04_sub_s18 User Action Classes + + - F04RunActionMessenger: +\verbatim +/rndm/save freq - to save rndm status in external files + 0 not saved + >0 saved on: beginOfRun.rndm + 1 saved on: endOfRun.rndm + 2 saved on: endOfEvent.rndm +/rndm/read random/run0evt8268.rndm +\endverbatim + + - F04RunAction: \n + BeginOfRunAction: Deal with random number storage, + initialization etc. Call the Construct() method of + F04ElementFields in the FieldList of F04GlobalField object. + EndOfRunAction: random number storage/status printing. + + - F04EventActionMessenger: \n +\verbatim +/event/setverbose +\endverbatim + + - F04EventAction(F04RunAction* RA): \n + Customized BeginOfEvent printing + EndofEvent: + saveEngingStatus and showEngineStatus according to flag + in F04RunAction + + - F04TrackingAction: \n + PreUserTrackingAction: Instantiate F04UserTrackInformation + and set the application TrackStatus. + PostUserTrackingAction: Retreive F04UserTrackInformation + and decide to save random number status accordingly. + + - F04SteppingActionMessenger: \n + + - F04SteppingAction: \n + UserSteppingAction: Kill primary if/when outside Target + volume. Diagnostic/histogram filling for particles at a + TestPlane. Find decay position and when particle + FIRST reverses z-momentum component via using a + F04UserTrackInformation object. + + - F04StackingAction: \n + Track only primaries, pi+ or mu+ + + - F04UserTrackInformation: \n + Keep an application F04TrackStatus for the track: \n + undefined, left, right, reverse + + - F04SteppingVerbose: \n + Only print track header and step information for + pi+ and mu+. + Note: the information for primary protons is not printed. + + - F04Trajectory, F04TrajectoryPoint: \n + Example of application specific implementations + +\section field04_s2 HOW TO START ? + + - Execute field04 in 'batch' mode from macro files e.g. +\verbatim +% field04 -m field04.in +\endverbatim + + - Execute field04 in 'interactive' mode with visualization +\verbatim +% field04 +.... +Idle> type your commands +.... +\endverbatim + + - Execute field04 in 'interactive' mode without initialization +\verbatim +% field04 -s preinit +.... +Idle> type your commands, then +Idle> /run/initialize +Idle> /control/execute vis.mac +.... +\endverbatim + +*/ diff --git a/examples/extended/field/field04/README b/examples/extended/field/field04/README new file mode 100644 index 0000000000..7962b971ec --- /dev/null +++ b/examples/extended/field/field04/README @@ -0,0 +1,377 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + + + field04 Example + --------------- + + This example shows how to define/use OVERLAPPING field elements + in Geant4. Fields might be either magnetic, electric or both. + + Credit goes to Tom Roberts and Muons Inc. since much of the code + and ideas were taken at liberty from the (GNU GPL) source of + G4BEAMLINE release 1.12. + + http://g4beamline.muonsinc.com + +************** +*Classes Used* +************** + + 1 - main() + + See field04.cc. + + The example can be run with the following optional arguments: + + % field04 [-m macro ] [-p physicsList] [-r randomSeed] [-s preinit|idle] + + If a macro is provided with the option "-m", the program runs in a batch mode, + otherwise the program open the interactive session after executing the + default initialization macro init_vis.mac. The option "-s preinit" can be used + to start the program without initialization in PreInit phase. + + For example: + to assign the F04PhysicsList: + % field04 -p QGSP_BERT + + an initial random number seed with: + % field04 field04.in -r 12345 + + to start with a macro file and an initial seed: + % field04 -m field04.in -r 12345 + + + 2- GEOMETRY DEFINITION + + The geometry consists of two solenoidal magnets: a "CaptureMgnt" + followed by a (blue-colored "TransferMgnt". By definition, the + axis and center of the "CaptureMgnt" coincide with the "World". The + position of the "TransferMgnt" relative to the downstream end of the + "CaptureMgnt", as well as its axis angle, both may vary. A cylindrical + "Target" is positioned inside the "CaptureMgnt". Its axis can vary + from 0 to 180 deg, and hence also the direction of the incoming + proton beam wrt the "CaptureMgnt"'s axis. A "Degrader" is located + inside the "TransferMgnt", its default position being at the + upstream end of the "TransferMgnt". Finally, also a "TestPlane" is + located inside the "TransferMgnt", by default at its downstream end. + + + The "World" consists of a solid cylinder made of a given material. + (It is the responsibility of the user to make the world + large enough to contain the rest of the geometry!) + + Three parameters define the world : + - the material of the world, + - the world radius, + - the world length. + + Example (default values): + /field04/SetWorldMat G4_AIR + /field04/SetWorldR 5.0 m + /field04/SetWorldZ 50.0 m + + + The "Target" is a solid cylinder made of a given material. + + Five parameters define the target: + - the material of the target, + - the target radius, + - the target thickness, + - the target position inside the "CaptureMgnt", + - the target axis angle relative to that of the "CaptureMgnt". + + Example (default values): + /field04/SetTgtMat G4_W + /field04/SetTgtRad 0.4 cm + /field04/SetTgtThick 16.0 cm + /field04/SetTgtPos 0.0 cm + /field04/SetTgtAng 170 + + + The "Degrader" is a solid cylinder made of a given material. + + Four parameters define the degrader: + - the material of the degrader, + - the degrader radius, + - the degrader thickness, + - the degrader position relative to the "TransferMgnt" center. + + Example (default values): + /field04/SetDgrMat G4_Pb + /field04/SetDgrRad 30.0 cm + /field04/SetDgrThick 0.1 cm + #/field04/SetDgrPos -7.4 m + + + The "CaptureMgnt" is a solenoid (vacuum cylinder). It is either + a two-sided or a one-sided magnetic bottle with the B field + varying linearly from the center value B1 to the edge value B2. + The one-sided F04FocusSolenoid has the open end at +z and focuses + on the z < 0 side. + + Four parameters define the "CaptureMgnt": + - the magnet radius, + - the magnet length, + - the weaker magnetic field at the center B1 + - the stronger magnetic field at the edge B2 + + Example (default values): + /field04/SetCaptureR 0.6 m + /field04/SetCaptureZ 4.0 m + /field/SetCaptureB1 2.5 tesla + /field/SetCaptureB2 5.0 tesla + + + The "TransferMgnt" is a solenoid (vacuum cylinder) with a + constant B-field. When the "TransferMgnt" follows immediately + the "CaptureMgnt", its relative position is at 0 cm. + + Four parameters define the "TransferMgnt": + - the magnet radius, + - the magnet length, + - the magnet field, + - the magnet relative position + (its upstream face wrt the downstream face of the "CaptureMgnt".) + + Example (default values): + /field04/SetTransferR 0.3 m + /field04/SetTransferZ 15.0 m + /field/SetTransferB 5.0 tesla + /field04/SetTransferP 0.0 m + + The default geometry is constructed in F04DetectorConstruction class, + but all the parameters can be changed via the commands defined in + the F04DetectorMessenger class. + + + 3- MATERIAL DEFINITION + + Material definitions are done through the singleton class F04Materials + which keeps a pointer to the G4NistManager. It has a method + GetMaterial by name (G4String) which in turn invokes the + G4NistManager::FindOrBuildMaterial, and/or G4Material::GetMaterial + methods. It has also a method CreateMaterials which, for materials + absent from the NIST data base, shows how to create them using the + G4NistManager::ConstructNewMaterial method. + + + 4- AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the + target perpendicular to its upstream face. The type of the particle + and its energy are set in the F04PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of the G4ParticleGun class. + In addition, there is a fRndmFlag, which once set allows the beam to + explore randomly the whole cross section of the target. The default + beam consists of 500 MeV protons, starting at the upstream face of + the target, directed along dx = dy = 0, dz = 1 wrt the target frame. + The default direction should NOT be changed! The arguments of the + x/y/zvertex commands are relative to the target center. + + Example: + /gun/random on + #/gun/xvertex 0 mm + #/gun/yvertex 0 mm + #/gun/zvertex -100 mm + + + 5- DETECTOR RESPONSE + + Information is extracted from the program via F04SteppingAction + at the TestPlane. + + + 6- PHYSICS + + The F04PhysicsList extends a selected Geant4 physics list. + The base physics list name is provided by its name in the F04PhysicsList + constructor. + + In addition to processes defined in the base Geant4 physics list, + there is added the F04StepMax process and the decay of pions can be assigned + via dedicated commands in F04PhysicsListMessenger. + + The command to define maximum step: + /exp/phys/stepMax value unit + + The decay of pions can be assigned via (pi -> e nu, pi -> mu nu): + + /decay/pienu + /decay/pimunu + + The pienu assignment includes a small fraction of radiative decay: + e nu gamma (G4PionRadiativeDecayChannel). + + The standard/default muon decay chain is modified to be 98.6% + G4MuonDecayChannelWithSpin and 1.4% G4MuonRadiativeDecayChannelWithSpin + in ConstructParticle(). + + The pion decay process G4PolDecay inherits from G4Decay and implements + the virtual method - empty in the base class - DaughterPolarization + + The muon decay process is G4DecayWithSpin + + Furthermore, the following commands are also available, but + may only be used AFTER /run/initialize + + /process/inactivate msc + /process/activate msc + + 7- Overlapping Fields + + The F04GlobalField (a singleton) is instantiated in + F04DetectorConstruction() and assigned to the global field manager + in UpdateField(): + + fFieldManager = GetGlobalFieldManager(); + fFieldManager->SetDetectorField(this); + + The F04GlobalField has a std::vector FieldList + + The field from each individual beamline element is given by a + F04ElementField object. Any number of overlapping F04ElementField + objects can be added to the F04GlobalField. Any element that + represents an element with an EM field must add the appropriate + F04ElementField to the global F04GlobalField object. + + Of course, the F04GlobalField has the method GetFieldValue implemented. + + Before /run/initialize in the macro file or command, the update + field command must have been issued if any of the other following + field commands was employed: + + /field/update + + Other options are: + + /field/setStepperType 4 + /field/setMinStep 10 mm + /field/setDeltaChord 3.0 mm + /field/setDeltaOneStep 0.01 mm + /field/setDeltaIntersection 0.1 mm + /field/setEpsMin 2.5e-7 mm + /field/setEpsMax 0.05 mm + + Each field element has a rectilinear bounding box in global + coordinate space which is checked before a point is verified to + actually be inside the F04ElementField (IsWithin and IsOutside). + SetGlobalPoint is called 8 times for the corners of the local + bounding box, after a local->global coordinate transform. + + The F04ElementField is the interface class used by F04GlobalField to + compute the field value at a given point[]. + + A beamline element, for example the F04SimpleSolenoid, will derive + from F04ElementField and implement the computation for the element. + + simpleSolenoid + = new F04SimpleSolenoid(B, l, logicTransferMgnt,TransferMgntCenter); + + Besides the magnetic field and the length of the simple solenoid, + the constructor needs the knowledge of the G4LogicalVolume for + the beamline element and where its center is located in the + 'World'. + + The F04ElementField has a G4AffineTransform "fGlobal2local" which + allows the quick computation of coordinate transformations. It can + only be determined by knowing the element's coordinate origin in + the global frame and after all of the geometry has been defined. + For this reason, the object is prepared in two stages, through the + constructor providing it with the coordinate center and a pointer + to the G4LogicalVolume. Later the Construct() method is called to + calculate the fGlobal2local and the bounding box. This can be done + from the F04RunAction::BeginOfRunAction method, for only then are we + certain that the geometry has been completely built: + + FieldList* fields = F04GlobalField::GetObject()->GetFields(); + + if (fields) { + if (fields->size()>0) { + FieldList::iterator i; + for (i=fields->begin(); i!=fields->end(); ++i)(*i)->Construct(); + } + } + + The F04ElementField constructor will also add the derived object into + F04GlobalField. Finally, its AddFieldValue() will add the field value + for this element to field[]. + + + 8- User Action Classes + + F04RunActionMessenger: + + /rndm/save freq - to save rndm status in external files + 0 not saved + >0 saved on: beginOfRun.rndm + 1 saved on: endOfRun.rndm + 2 saved on: endOfEvent.rndm + /rndm/read random/run0evt8268.rndm + + F04RunAction: + BeginOfRunAction: Deal with random number storage, + initialization etc. Call the Construct() method of + F04ElementFields in the FieldList of F04GlobalField object. + EndOfRunAction: random number storage/status printing. + + F04EventActionMessenger: + /event/setverbose + + F04EventAction(RunAction* RA): + Customized BeginOfEvent printing + EndofEvent: + saveEngingStatus and showEngineStatus according to flag + in F04RunAction + + F04TrackingAction: + PreUserTrackingAction: Instantiate F04UserTrackInformation + and set the application TrackStatus. + PostUserTrackingAction: Retreive F04UserTrackInformation + and decide to save random number status accordingly. + + F04SteppingActionMessenger: + + F04SteppingAction: + UserSteppingAction: Kill primary if/when outside Target + volume. Diagnostic/histogram filling for particles at a + TestPlane. Find decay position and when particle + FIRST reverses z-momentum component via using a + F04UserTrackInformation object. + + F04StackingAction: + Track only primaries, pi+ or mu+ + + F04UserTrackInformation: + Keep an application F04TrackStatus for the track: + undefined, left, right, reverse + + F04SteppingVerbose: + Only print track header and step information for + pi+ and mu+. + Note: the information for primary protons is not printed. + + F04Trajectory, TrajectoryPoint: + Example of application specific implementations + + 9- HOW TO START ? + + - Execute field04 in 'batch' mode from macro files e.g. + % field04 -m field04.in + + - Execute field04 in 'interactive' mode with visualization + % field04 + .... + Idle> type your commands + .... + + - Execute field04 in 'interactive' mode without initialization + % field04 -s preinit + .... + Idle> type your commands, then + Idle> /run/initialize + Idle> /control/execute vis.mac + .... diff --git a/examples/extended/field/field04/random/README b/examples/extended/field/field04/random/README new file mode 100644 index 0000000000..ad42c6b01b --- /dev/null +++ b/examples/extended/field/field04/random/README @@ -0,0 +1,2 @@ +Directory including files generated during run for +storing seeds. diff --git a/examples/extended/field/field05/.README.txt b/examples/extended/field/field05/.README.txt new file mode 100644 index 0000000000..8e87431be1 --- /dev/null +++ b/examples/extended/field/field05/.README.txt @@ -0,0 +1,84 @@ + +///\file "field/field05/.README.txt" +///\brief Example field05 README page + +/*! \page Examplefield05 Example field05 + + This example checks so-called "spin-frozen" condition + There is a good example article hep-ph/0012087v1. + This article discusses about how to cancel the muon g-2 precession by + applying an electric field. + + - 1) beta is muon velocity, + - 2) B is an uniform magnetic field and vec{beta}.vec{B}=0, + "." means scalar product, + - 3) Radial electric field (E) in the lab frame and vec{beta}.vec{E}=0, + - 4) a=(g-2)/2 is muon anomalous magnetic moment. + + The required electric field to cancel the g-2 precession is, +\verbatim +E=a*B*light_c*gamma**2*beta. +\endverbatim + + In case of gamma=5 and B=0.24 Tesla, the required electric field is +\verbatim +E=2 MV/m. +\endverbatim + + "Spin-frozen" happens when spin rotation cycle and muon rotation cycle + are same. In this case, both cycles should be 149.5 nsec. + + See also: + http://research.kek.jp/people/hiromi/MyHomePage/G-2_work_files/SpinStudyinEMfieldByGeant4.pdf + + Credit goes to Hiromi Iinuma from KEK. + +Classes Used + +\section field05_s1 main () + + See field05.cc. + +\section field05_s2 GEOMETRY DEFINITION + + as simple world G4Box with a G4ElectroMagneticField \n + propagating both spin and momentum (G4EqEMFieldWithSpin) \n + with G4ClassicalRK4(fEquation,12) and \n + Bz = 0.24*tesla; \n + Er = 2.113987E+6*volt/m; + +\section field05_s3 AN EVENT: THE PRIMARY GENERATOR + + use mu+ G4ParticleGun with Pmu = 517.6*MeV/c \n + and aligned spin and momentum direction + +\section field05_s4 PHYSICS +\verbatim +RegisterPhysics(new G4SpinDecayPhysics()); +RegisterPhysics(new G4StepLimiterPhysics()); + + G4SpinDecayPhysics defines muon decay modes with spin, + G4StepLimiterPhysics defines G4StepLimiter and G4UserSpecialCuts. + +\section field05_s5 User Action Classes + + SteppingAction: \n + G4Exception when the cosine of the angle between + the spin and the momentum is < (1.-1.E-7) + +\section field05_s6 HOW TO START ? + + - Execute field05 in 'batch' mode from macro files e.g. +\verbatim +% field05 field05.in > field.out & +\endverbatim + + - Execute field05 in 'interactive' mode with visualization e.g. +\verbatim +% field05 +.... +Idle> type your commands, for example: +Idle> run/beamOn 1 +.... +\endverbatim +*/ diff --git a/examples/extended/field/field05/README b/examples/extended/field/field05/README new file mode 100644 index 0000000000..8c3eedd12a --- /dev/null +++ b/examples/extended/field/field05/README @@ -0,0 +1,82 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + + + field05 Example + --------------- + + This example checks so-called "spin-frozen" condition + There is a good example article hep-ph/0012087v1. + This article discusses about how to cancel the muon g-2 precession by + applying an electric field. + + 1) beta is muon velocity, + 2) B is an uniform magnetic field and \vec{beta}.\vec{B}=0, + "." means scalar product, + 3) Radial electric field (E) in the lab frame and \vec{beta}.\vec{E}=0, + 4) a=(g-2)/2 is muon anomalous magnetic moment. + + The required electric field to cancel the g-2 precession is, + E=a*B*light_c*gamma**2*beta. + + In case of gamma=5 and B=0.24 Tesla, the required electric field is + E=2 MV/m. + + "Spin-frozen" happens when spin rotation cycle and muon rotation cycle + are same. In this case, both cycles should be 149.5 nsec. + + See also: + http://research.kek.jp/people/hiromi/MyHomePage/G-2_work_files/SpinStudyinEMfieldByGeant4.pdf + + + Credit goes to Hiromi Iinuma from KEK. + +************** +*Classes Used* +************** + + 1 - main() + + See field05.cc. + + 2- GEOMETRY DEFINITION + + as simple world G4Box with a G4ElectroMagneticField + propagating both spin and momentum (G4EqEMFieldWithSpin) + with G4ClassicalRK4(fEquation,12) and + Bz = 0.24*tesla; + Er = 2.113987E+6*volt/m; + + 3- AN EVENT: THE PRIMARY GENERATOR + + use mu+ G4ParticleGun with Pmu = 517.6*MeV/c + and aligned spin and momentum direction + + 4- PHYSICS + + RegisterPhysics(new G4SpinDecayPhysics()); + RegisterPhysics(new G4StepLimiterPhysics()); + + G4SpinDecayPhysics defines muon decay modes with spin, + G4StepLimiterPhysics defines G4StepLimiter and G4UserSpecialCuts. + + 5- User Action Classes + + SteppingAction: + G4Exception when the cosine of the angle between + the spin and the momentum is < (1.-1.E-7) + + 6- HOW TO START ? + + - Execute field05 in 'batch' mode from macro files e.g. + % field05 field05.in > field.out & + + - Execute field05 in 'interactive' mode with visualization e.g. + % field05 + .... + Idle> type your commands, for example: + Idle> run/beamOn 1 + .... diff --git a/examples/extended/field/field06/.README.txt b/examples/extended/field/field06/.README.txt new file mode 100644 index 0000000000..c073e47754 --- /dev/null +++ b/examples/extended/field/field06/.README.txt @@ -0,0 +1,68 @@ + +///\file "field/field06/.README.txt" +///\brief Example field06 README page + +/*! \page Examplefield06 Example field06 + + This example exercises the capability of tracking massive + particles in a gravity field. + + Credit goes to Erik Miller (Univ. of Northern British Columbia) and + Garry Yan (Univ. of Toronto) + +Classes Used + +\section field06_s1 main() + + See field06.cc. + +\section field06_s2 GEOMETRY DEFINITION + + As simple world G4Box with a G4UniformGravityField propagating momentum + (G4EqGravityField) with G4ClassicalRK4(fEquation,8). The example uses the + default gravity field on the earth's surface: gy = -9.81*m/s/s/c_light. + +\section field06_s3 AN EVENT: THE PRIMARY GENERATOR + + Uses an Ultra Cold Neutron (UCN) and G4ParticleGun with: \n + particleEnergy = G4UniformRand()*1e-7*eV + + UCN are launched from (0,0,0) uniform into 4pi + +\section field06_s4 PHYSICS + + The simulation knows of only six particles: G4Neutron, G4Proton, + G4Electron, G4AntiNeutrinoE, G4MuonPlus and G4MuonMinus +\verbatim + RegisterPhysics(new G4StepLimiterPhysics()); +\endverbatim + G4StepLimiterPhysics defines G4StepLimiter and G4UserSpecialCuts + +\section field06_s5 HOW TO START ? + + This example handles the program arguments in a new way. + It can be run with the following optional arguments: +\verbatim +% field06 [-m macro ] [-u UIsession] [-t nThreads] [-r randomSeed] +\endverbatim + + The -t option is available only in multi-threading mode + and it allows the user to override the Geant4 default number of + threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS + environment variable which has the top priority. + + - Execute field06 in 'batch' mode from macro files e.g. +\verbatim +% field06 -m field06.in > field06.out & +\endverbatim + + - Execute field06 in 'interactive' mode with visualization e.g. +\verbatim +% field06 +.... +Idle> type your commands, for example: +Idle> run/beamOn 1 +.... +\endverbatim + +*/ diff --git a/examples/extended/field/field06/README b/examples/extended/field/field06/README new file mode 100644 index 0000000000..3198718971 --- /dev/null +++ b/examples/extended/field/field06/README @@ -0,0 +1,67 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + + + field06 Example + --------------- + + This example exercises the capability of tracking massive + particles in a gravity field. + + Credit goes to Erik Miller (Univ. of Northern British Columbia) and + Garry Yan (Univ. of Toronto) + +************** +*Classes Used* +************** + + 1 - main() + + See field06.cc. + + + 2- GEOMETRY DEFINITION + + As simple world G4Box with a G4UniformGravityField propagating momentum + (G4EqGravityField) with G4ClassicalRK4(fEquation,8). The example uses the + default gravity field on the earth's surface: gy = -9.81*m/s/s/c_light. + + 3- AN EVENT: THE PRIMARY GENERATOR + + Uses an Ultra Cold Neutron (UCN) and G4ParticleGun with: + particleEnergy = G4UniformRand()*1e-7*eV + + UCN are launched from (0,0,0) uniform into 4pi + + 4- PHYSICS + + The simulation knows of only six particles: G4Neutron, G4Proton, + G4Electron, G4AntiNeutrinoE, G4MuonPlus and G4MuonMinus + + RegisterPhysics(new G4StepLimiterPhysics()); + + G4StepLimiterPhysics defines G4StepLimiter and G4UserSpecialCuts + + 5- HOW TO START ? + + This example handles the program arguments in a new way. + It can be run with the following optional arguments: + % field06 [-m macro ] [-u UIsession] [-t nThreads] [-r randomSeed] + + The -t option is available only in multi-threading mode + and it allows the user to override the Geant4 default number of + threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS + environment variable which has the top priority. + + - Execute field06 in 'batch' mode from macro files e.g. + % field06 -m field06.in > field06.out & + + - Execute field06 in 'interactive' mode with visualization e.g. + % field06 + .... + Idle> type your commands, for example: + Idle> run/beamOn 1 + .... diff --git a/examples/extended/g3tog4/.README.txt b/examples/extended/g3tog4/.README.txt new file mode 100644 index 0000000000..44a8dcf994 --- /dev/null +++ b/examples/extended/g3tog4/.README.txt @@ -0,0 +1,16 @@ + +///\file "g3tog4/.README.txt" +///\brief Examples g3tog4 README page + +/*! \page Examples_g3tog4 Category "g3tog4" + +This directory g3tog4 includes applications to demonstrate the usage of the +g3tog4 tool for converting Geant 3.21 simple geometries to Geant4 ones. +Currently, only one example is provided: + +\link ExampleclGeometry clGeometry \endlink + +It demonstrates building a detector geometry using the call list +mechanism. + +*/ diff --git a/examples/extended/g3tog4/README b/examples/extended/g3tog4/README new file mode 100644 index 0000000000..54503f40d4 --- /dev/null +++ b/examples/extended/g3tog4/README @@ -0,0 +1,13 @@ + + G3toG4 tool's examples + ------------------------ + +This directory g3tog4 includes applications to demonstrate the usage of the +g3tog4 tool for converting Geant 3.21 simple geometries to Geant4 ones. +Currently, only one example is provided: + +clGeometry +---------- + +It demonstrates building a detector geometry using the call list +mechanism. diff --git a/examples/extended/g3tog4/clGeometry/.README.txt b/examples/extended/g3tog4/clGeometry/.README.txt new file mode 100644 index 0000000000..2fdc595b25 --- /dev/null +++ b/examples/extended/g3tog4/clGeometry/.README.txt @@ -0,0 +1,40 @@ + +///\file "g3tog4/clGeometry/.README.txt" +///\brief Example clGeometry README page + +/*! \page ExampleclGeometry Example clGeometry + +

Use of G3toG4 tool

+ +This examples demonstrates the usage of the g3tog4 tool for converting +Geant 3.21 simple geometries to Geant4 ones. + +It requires Geant4 installation with G3toG4 library ( +handled with GEANT4_USE_G3TOG4 option in CMake build or the G4LIB_USE_G3TOG4 +environment variable in GNUmake build). + +It demonstrates building a detector geometry using the call list +mechanism and also provides visualization, see the G3toG4DetectorConstruction +class. The executable is provided in clGeometry.cc. + +The example uses the GunPrimaryGeneratorAction class from the extended examples common +repository available in common subdirectory. This class is instatiated in G3toG4ActionInitialization class as it is required for processing with both sequential and multi-threaded Geant4 modes. + +To run the application, one must provide as input argument a call list file +(few test samples are placed in data directory), generated by the rztog4 application +which can be built typing "make bin" from $G4INSTALL/source/g3tog4. +Then several optional arguments can be specified to define a macro, UI session +or number of threads (applicable only with multi-threading mode): +\verbatim +clGeometry callListFile [-m macro ] [-u UIsession] [-t nThreads] +\endverbatim + +There is provided clGeometry.in macro which can be executed either interactively +or in batch. + +For example: +\verbatim +> clGeometry data/testmodel.dat -m clGeometry.in +\endverbatim + +*/ diff --git a/examples/extended/g3tog4/clGeometry/README b/examples/extended/g3tog4/clGeometry/README new file mode 100644 index 0000000000..381dbd74e0 --- /dev/null +++ b/examples/extended/g3tog4/clGeometry/README @@ -0,0 +1,31 @@ + + Example clGeometry + -------------------- + +This examples demonstrates the usage of the g3tog4 tool for converting +Geant 3.21 simple geometries to Geant4 ones. + +It requires Geant4 installation with G3toG4 library ( +handled with GEANT4_USE_G3TOG4 option in CMake build or the G4LIB_USE_G3TOG4 +environment variable in GNUmake build). + +It demonstrates building a detector geometry using the call list +mechanism and also provides visualization, see the G3toG4DetectorConstruction +class. The executable is provided in clGeometry.cc. + +The example uses the GunPrimaryGeneratorAction class from the extended examples common +repository available in common subdirectory. This class is instatiated in G3toG4ActionInitialization class as it is required for processing with both sequential and multi-threaded Geant4 modes. + +To run the application, one must provide as input argument a call list file +(few test samples are placed in data directory), generated by the rztog4 application +which can be built typing "make bin" from $G4INSTALL/source/g3tog4. +Then several optional arguments can be specified to define a macro, UI session +or number of threads (applicable only with multi-threading mode): + +clGeometry callListFile [-m macro ] [-u UIsession] [-t nThreads] + +There is provided clGeometry.in macro which can be executed either interactively +or in batch. + +For example: +> clGeometry data/testmodel.dat -m clGeometry.in diff --git a/examples/extended/g3tog4/clGeometry/common/.README.txt b/examples/extended/g3tog4/clGeometry/common/.README.txt new file mode 100644 index 0000000000..a4fb856d0b --- /dev/null +++ b/examples/extended/g3tog4/clGeometry/common/.README.txt @@ -0,0 +1,24 @@ + +///\file "common/.README.txt" +///\brief Common classes README page + +/*! \page Examples_common Category "common" + + In order to reduce code duplication and to reduce the number of variants of + the code of same kind, we define a set of common classes which + can be reused in "feature" examples demonstrating just a particular feature. + This module may be enhanced in future. Currently it provides + the following sets of classes: + + - Detector construction classes + - two simple detector construction classes with a messenger + + - Physics list classes + - GeantinoPhysicsList - physics list with geantino and chargedgeantino only + + - Primary generator classes + - two simple primary generator classes (with G4ParticleGun and + G4ParticleGeneralSource) + +*/ + diff --git a/examples/extended/g3tog4/clGeometry/common/README b/examples/extended/g3tog4/clGeometry/common/README new file mode 100644 index 0000000000..3da6d98573 --- /dev/null +++ b/examples/extended/g3tog4/clGeometry/common/README @@ -0,0 +1,26 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Common Classes for Extended Examples + ------------------------------------- + + In order to reduce code duplication and to reduce the number of variants of + the code of same kind, we define a set of common classes which + can be reused in "feature" examples demonstrating just a particular feature. + This module may be enhanced in future. Currently it provides + the following sets of classes: + + - Detector construction classes + - two simple detector construction classes with a messenger + + - Physics list classes + - GeantinoPhysicsList - physics list with geantino and chargedgeantino only + + - Primary generator classes + - two simple primary generator classes (with G4ParticleGun and + G4ParticleGeneralSource) + + diff --git a/examples/extended/geometry/.README.txt b/examples/extended/geometry/.README.txt new file mode 100644 index 0000000000..52be1302f8 --- /dev/null +++ b/examples/extended/geometry/.README.txt @@ -0,0 +1,20 @@ + +///\file "geometry/.README.txt" +///\brief Examples geometry README page + +/*! \page Examples_geometry Category "geometry" + +This directory includes examples for the geometry setup. + +\link Exampletransforms Transforms \endlink + +This extended example demonstrates various ways of definition of +3D transformations for placing volumes. + +\link ExamplevecGeomNavigation vecGeomNavigation \endlink + +This example demonstrates integration of the navigation elements of +[VecGeom](https://gitlab.cern.ch/VecGeom/VecGeom), to investigate the +performance benefits. + +*/ diff --git a/examples/extended/geometry/README b/examples/extended/geometry/README new file mode 100644 index 0000000000..d0230af6b0 --- /dev/null +++ b/examples/extended/geometry/README @@ -0,0 +1,17 @@ + + Geometry tools + -------------- + +This directory includes examples for the geometry setup. + +Transforms +---------- +This extended example demonstrates various ways of definition of +3D transformations for placing volumes. + +vecGeomNavigation +----------------- + +This example demonstrates integration of the navigation elements of +[VecGeom](https://gitlab.cern.ch/VecGeom/VecGeom), to investigate the +performance benefits. diff --git a/examples/extended/geometry/transforms/.README.txt b/examples/extended/geometry/transforms/.README.txt new file mode 100644 index 0000000000..450b5cc4c4 --- /dev/null +++ b/examples/extended/geometry/transforms/.README.txt @@ -0,0 +1,104 @@ + +///\file "geometry/transforms/.README.txt" +///\brief Extended example Transforms README page + +/*! \page Exampletransforms Example transforms + + This example illustrates various ways to place a volume. + + There are two G4PVPlacement constructors. One uses a direct rotation matrix, + via G4Transform3D class. The other uses an inverse rotation matrix. + The rotation matrices themselves, direct or inverse, can be explicitely computed + by users, or built with various G4 build-in transformations methods, + like axial rotations. + +\section Transforms_s1 Geometry construction + + Two G4Trd volumes (daughters) are placed within a G4Tubs (mother), in such a way + that their z_axis are in the mother xy plane. + To see the picture, run the example in interactive mode. + + The various ways of placement are implemented in the DetectorConstruction class + in the following private functions: + + - \link DetectorConstruction::PlaceWithDirectMatrix() PlaceWithDirectMatrix() \endlink \n + This method is using G4PVPlacement with G4Transform3D, which is constructed from a rotation matrix (G4RotationMatrix) and a translation vector (G4ThreeVector). The rotation and translation in this case represent the active transformation: the solid itself is moved by rotating and translating it to bring it into the system of coordinates of the mother volume.\n + The rotation matrix is defined via the daughter frame axes with respect to the mother frame.\n\n + + - \link DetectorConstruction::PlaceWithInverseMatrix() PlaceWithInverseMatrix() \endlink \n + This method is using G4PVPlacement with a rotation matrix (G4RotationMatrix) and a translation vector (G4ThreeVector). The rotation Matrix represents the rotation of the reference frame of the considered volume relatively to its mother volume’s reference frame. The translation Vector represents the translation of the current volume in the reference frame of its mother volume. \n + If compared to the previous construct, the transformation in this case is generated by specifying the same translation with respect to its mother volume and the inverse of the rotation matrix. \n + The rotation matrix is defined again via the daughter frame axes with respect to the mother frame. \n\n + + - \link DetectorConstruction::PlaceWithAxialRotations() PlaceWithAxialRotations() \endlink \n + This method is using G4PVPlacement with G4Transform3D again, but in difference from + PlaceWithDirectMatrix(), the rotation matrix is defined via rotate[X,Y,Z]() member functions of G4RotationMatrix. \n\n + + - \link DetectorConstruction::PlaceWithEulerAngles() PlaceWithEulerAngles() \endlink \n + This method is using G4PVPlacement with G4Transform3D again, but with the rotation matrix is defined via Euler angles. \n\n + + - \link DetectorConstruction::PlaceWithReflections() PlaceWithReflections() \endlink \n + In this method, in addition to two positions defined via "PlaceWithAxialRotations" method, two more positions including reflection symmetry are defined. + When reflections are present in geometry, the placements have to be applied + via G4ReflectionFactory::Place() method, where a G4Transform3D with reflection + can be used. + + These functions are then called from the Construct() function. + All methods define exactly same geometry except for the placement + with reflection where trapezoids are placed with their symmetry axis + in parallel with z-axis in order to make easier to check reflection + visually. + + The method of placement can be selected interactively via the command + (see DetectorMessenger and transforms.in): +\verbatim +/placement/setMethod method + where method = WithDirectMatrix, WithInverseMatrix, WithAxialRotations, + WithEulerAngles, WithReflections +\endverbatim + +\section Transforms_s2 Physics list + + PhysicsList.cc defines only geantino and transportation process. + +\section Transforms_s3 Primary generator + + Default kinematic is a geantino, at coordinate origin. + Can be changed with particleGun commands. + +\section Transforms_s4 Physics + + No physics; only transportation. + +\section Transforms_s5 Visualisation + + In interactive mode, visualization manager is set in the main(). + Initialisation of the drawing is done via the commands + /vis/.. in the macro vis.mac : /control/execute vis.mac + +\section Transforms_s6 How to start ? + + - Execute transforms in 'interactive mode' with visualization +\verbatim +% transforms +.... +Idle> ---> type your commands. For instance: +Idle> /placement/setMethod WithInverseMatrix +Idle> /control/execute vis.mac +Idle> /tracking/verbose 1 +Idle> /run/beamOn 1 +Idle> exit +\endverbatim + or, simply +\verbatim +Idle> /control/execute rotations.mac +Idle> /control/execute reflections.mac +\endverbatim + + - Execute transforms in 'batch' mode from macro files +\verbatim +% transforms transforms.in +\endverbatim + +*/ + diff --git a/examples/extended/geometry/transforms/README b/examples/extended/geometry/transforms/README new file mode 100644 index 0000000000..ae4110a6c2 --- /dev/null +++ b/examples/extended/geometry/transforms/README @@ -0,0 +1,94 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + transforms + ---------- + + This example illustrates various ways to place a volume. + There are two G4PVPlacement constructors. One uses a direct rotation matrix, + via G4Transform3D class. The other uses an inverse rotation matrix. + The rotation matrices themselves, direct or inverse, can be explicitely computed + by users, or built with various G4 build-in transformations methods, + like axial rotations. + + 1- Geometry construction + --------------------- + Two G4Trd volumes (daughters) are placed within a G4Tubs (mother), in such a way + that their z_axis are in the mother xy plane. + To see the picture, run the example in interactive mode. + + The various ways of placement are implemented in the DetectorConstruction class + in the following private functions: + + - PlaceWithDirectMatrix() + This method is using G4PVPlacement with G4Transform3D, which is constructed from a rotation matrix (G4RotationMatrix) and a translation vector (G4ThreeVector). The rotation and translation in this case represent the active transformation: the solid itself is moved by rotating and translating it to bring it into the system of coordinates of the mother volume. + The rotation matrix is defined via the daughter frame axes with respect to the mother frame. + + - PlaceWithInverseMatrix() + This method is using G4PVPlacement with a rotation matrix (G4RotationMatrix) and a translation vector (G4ThreeVector). The rotation Matrix represents the rotation of the reference frame of the considered volume relatively to its mother volume’s reference frame. The translation Vector represents the translation of the current volume in the reference frame of its mother volume. + - If compared to the previous construct, the transformation in this case is generated by specifying the same translation with respect to its mother volume and the inverse of the rotation matrix. + The rotation matrix is defined again via the daughter frame axes with respect to the mother frame. + + - PlaceWithAxialRotations() + This method is using G4PVPlacement with G4Transform3D again, but in difference from + PlaceWithDirectMatrix(), the rotation matrix is defined via rotate[X,Y,Z]() member functions of G4RotationMatrix. + + - PlaceWithEulerAngles() + This method is using G4PVPlacement with G4Transform3D again, but with the rotation matrix is defined via Euler angles. + + - PlaceWithReflections() + In this method, in addition to two positions defined via "PlaceWithAxialRotations" method, two more positions including reflection symmetry are defined. + When reflections are present in geometry, the placements have to be applied + via G4ReflectionFactory::Place() method, where a G4Transform3D with reflection + can be used. + + These functions are then called from the Construct() function. + All methods define exactly same geometry except for the placement + with reflection where trapezoids are placed with their symmetry axis + in parallel with z-axis in order to make easier to check reflection + visually. + + The method of placement can be selected interactively via the command + (see DetectorMessenger): + /placement/setMethod method (see transfoms.in) + + + 2- Physics list + ------------ + PhysicsList.cc defines only geantino and transportation process. + + 3- Primary generator + ----------------- + Default kinematic is a geantino at coordinate origin. + Can be changed with particleGun commands. + + 4- Physics + ------- + No physics; only transportation. + + 5- Visualisation + ------------- + In interactive mode, visualization manager is set in the main(). + Initialisation of the drawing is done via the commands + /vis/.. in the macro vis.mac : /control/execute vis.mac + + 6- How to start ? + -------------- + - execute transforms in 'interactive mode' with visualization + % transforms + .... + Idle> ---> type your commands. For example: + Idle> /placement/setMethod WithInverseMatrix + Idle> /control/execute vis.mac + Idle> /tracking/verbose 1 + Idle> /run/beamOn 1 + Idle> exit + or, simply + Idle> /control/execute rotations.mac + Idle> /control/execute reflections.mac + + - execute transforms in 'batch' mode from macro files + % transforms transforms.in diff --git a/examples/extended/geometry/vecGeomNavigation/.README.txt b/examples/extended/geometry/vecGeomNavigation/.README.txt new file mode 100644 index 0000000000..d77a694f3e --- /dev/null +++ b/examples/extended/geometry/vecGeomNavigation/.README.txt @@ -0,0 +1,39 @@ +///\file "geometry/vecGeomNavigation/.README.txt" +///\brief Extended example vecGeomNavigation README page + +/*! \page ExamplevecGeomNavigation Example vecGeomNavigation + +This example demonstrates integration of the navigation elements of +[VecGeom](https://gitlab.cern.ch/VecGeom/VecGeom), to investigate the +performance benefits. + +This integration is in development. Supporting Placement volumes -- other +volumes would be handled by existing Geant4 navigation. + +The example loads a GDML file for the geometry, and can execute a batch +file (first) or run interactive commands or both. + +# Installation / Configuration + +## Dependencies + +In addition to Geant4, two projects: are required VecGeom and G4VecGeomNav. +VecCore is also required, but can be found through VecGeom. + +It is optionally possible to use Root in G4VecGeomNav to store voxel +information for safety computation. These can require significant computation +to calculate if at least one logical volume contains many daughter volume. + +## Configuration + +To configure you must set: + + setenv CMAKE_PREFIX_PATH "${VECCORE_DIR}:${VECGEOM_DIR}" + +or if you are using Vc from Root + + setenv CMAKE_PREFIX_PATH "${ROOTSYS}:${VECGEOM_DIR}" + +where VecGeom has also been built with the same installation of Vc from Root. + +*/ diff --git a/examples/extended/geometry/vecGeomNavigation/README b/examples/extended/geometry/vecGeomNavigation/README new file mode 100644 index 0000000000..9b87987925 --- /dev/null +++ b/examples/extended/geometry/vecGeomNavigation/README @@ -0,0 +1,32 @@ + + +This example demonstrates integration of the navigation elements of +[VecGeom](https://gitlab.cern.ch/VecGeom/VecGeom), to investigate the +performance benefits. + +This integration is in development. Supporting Placement volumes -- other +volumes would be handled by existing Geant4 navigation. + +The example loads a GDML file for the geometry, and can execute a batch +file (first) or run interactive commands or both. + +# Installation / Configuration + +## Dependencies + +In addition to Geant4, two projects: are required VecGeom and G4VecGeomNav. +VecCore is also required, but can be found through VecGeom. + +It is optionally possible to use Root in G4VecGeomNav to store voxel +information for safety computation. These can require significant computation +to calculate if at least one logical volume contains many daughter volume. + +## Configuration +- To configure you must set: + + setenv CMAKE_PREFIX_PATH "${VECCORE_DIR}:${VECGEOM_DIR}" + +or if you are using Vc from Root + setenv CMAKE_PREFIX_PATH "${ROOTSYS}:${VECGEOM_DIR}" +where VecGeom has also been built with the same installation of Vc from Root. + diff --git a/examples/extended/hadronic/.README.txt b/examples/extended/hadronic/.README.txt new file mode 100644 index 0000000000..36cfa34236 --- /dev/null +++ b/examples/extended/hadronic/.README.txt @@ -0,0 +1,93 @@ + +///\file "hadronic/.README.txt" +///\brief Examples hadronic README page + +/*! \page Examples_hadronic Category "hadronic" + + Examples in this directory demonstrate specific hadronic physics simulation + with histogramming. + +\link ExampleHadr00 Hadr00 \endlink + +This example demonstrates a usage of G4PhysListFactory to build +Physics List and G4HadronicProcessStore to access cross sections. + +\link ExampleHadr01 Hadr01 \endlink + +This example application is based on the application IION developed for +simulation of proton or ion beam interaction with a water target. Different +aspects of beam target interaction are demonstrating in the example including +longitudinal profile of energy deposition, spectra of secondary particles, +spectra of particles leaving the target. + +\link ExampleHadr02 Hadr02 \endlink + +This example application is providing simulation of ion beam interaction with different +targets. Hadronic aspects of beam target interaction are demonstrated in the example +including longitudinal profile of energy deposition, spectra of secondary particles, +isotope production spectra. + +\link ExampleHadr03 Hadr03 \endlink + +This example demonstrates how to compute total cross section from the direct evaluation of the +mean free path ( see below, item Physics), how to identify nuclear reactions, how to plot +energy spectrum of secondary particles. + +\link ExampleHadr04 Hadr04 \endlink + +This example is focused on neutronHP physics, especially neutron transport, +including thermal scattering. + +\link ExampleHadr05 Hadr05 \endlink + +Examples of hadronic calorimeters + +\link ExampleHadr06 Hadr06 \endlink + +This example demonstrates survey of energy deposition and particle's flux from +a hadronic cascade. + +\link ExampleHadr07 Hadr07 \endlink + +Survey energy deposition and particle's flux from an hadronic cascade. +Use PhysicsConstructor objects rather than predefined G4 PhysicsLists. +Show how to plot a depth dose profile in a rectangular box. + +\link ExampleHadr08 Hadr08 \endlink + +This example shows how to get "hadronic model per region" using generic +biasing: in particular, it is shown how to use "FTFP+INCLXX" in one region, +while using the default "FTFP+BERT" in all other regions. +Notice that we use the generic biasing machinery, but the actual weights +of all tracks remain to the usual value (1.0) as in the normal (unbiased) +case. + +\link ExampleHadr09 Hadr09 \endlink + +This example shows how to use Geant4 as a generator for simulating +inelastic hadron-nuclear interactions. +Notice that the Geant4 run-manager is not used. + +\link ExampleHadr10 Hadr10 \endlink + +This example aims to test the treatment of decays in Geant4. +In particular, we want to test the decays of the tau lepton, charmed and +bottom hadrons, and the use of pre-assigned decays. + +\link ExampleFissionFragment FissionFragment \endlink + +This example demonstrates the Fission Fragment model as used within the +neutron_hp model. It will demostrate the capability for fission product +containmentby the cladding in a water moderated sub-critical assembly. It could +also be further extended to calculate the effective multiplication factor of +the subcritical assembly for various loading schemes. + +\link ExampleNeutronSource NeutronSource \endlink + +NeutronSource is an example of neutrons production. It illustrates the cooperative work +of nuclear reactions and radioactive decay processes. +It survey energy deposition and particle's flux. +It uses PhysicsConstructor objects. + +*/ + diff --git a/examples/extended/hadronic/FissionFragment/.README.txt b/examples/extended/hadronic/FissionFragment/.README.txt new file mode 100644 index 0000000000..56444851eb --- /dev/null +++ b/examples/extended/hadronic/FissionFragment/.README.txt @@ -0,0 +1,126 @@ + +//! \file "hadronic/FissionFragment/.README.txt" +//! +//! \brief Example FissionFragment README page + +/*! \page ExampleFissionFragment Example FissionFragment + + This example demonstrates an application of the fission fragment model in the + NeutronHP model. This example is capable of using both models, but is designed + around the Wendt Fission Model. A warning will be shown if the environment + variable that enables the Wendt fission model is not set. + +\tableofcontents + +
+ +\section FissionFragment_s1 EXECUTION + +\subsection FissionFragment_sub1_s1 ENVIRONMENT + - G4NEUTRONHP_PRODUCE_FISSION_FRAGMENTS + - Required + - The example requires this enviroment variable to be set. An error will be + displayed and the example will terminate if this environment variable is + not set. + + - G4NEUTRON_HP_USE_WENDT_FISSION_MODEL + - Optional + - This environment variable enables the Wendt fission model contained within + the NeutronHP model for simulating fission events. The default model will + be used otherwise. A warning will be displayed if this environment + variable is not set. + +\subsection FissionFragment_sub2_s1 COMMAND LINE ARGUMENTS + The example can be run without any input arguments. However, a few options + are available: +\verbatim + -i ARG : run in batch mode from script file ARG + -o ARG : write output to file ARG + (defaults to FF_Neutron_HP.out) + -n ARG : multithreading with ARG number of threads + (only works if Geant4 was compiled with multithreading enabled) +\endverbatim + No output is currently generated, although the argument is provided. It is + anticipated that future versions will provide some form of output + summarizing the results of the simulation. + +\subsection FissionFragment_sub3_s1 INTERACTIVE + No specialized UI commands are currently provided. + + To run the simulation, use the standard UI command: +\verbatim + /run/beamOn +\endverbatim + + +\section FissionFragment_s2 GEOMETRY + + The geometry is constructed in the FFDetectorConstruction class. The setup is + based on a subcritical assembly design. + +\subsection FissionFragment_sub1_s2 MATERIALS + This example requires a number of materials. They are loaded or constructed + in the "DefineMaterials" function. A few of the materials are obtained from + the NIST database. These materials are: + - Air + - Aluminum + - Graphite + - Polyethylene + - Stainless steel + - Water + + For more information, visit: Geant4 User's + Guide for Application Developers, Appendix: Geant4 Materials Database + + Not all of the necessary materials were available from the NIST database, + and were constructed manually from the estimated isotopics. These materials + are: + - 20% U235 enriched uranium + - 93% B10 enriched BF3 + +\subsection FissionFragment_sub2_s2 VOLUMES + The world is composed of air instead of a vacuum to provide room return. + + The subcritical assembly is a water-filled aluminum tank. + + The fuel plates are composed of aluminum-clad uranium meat, and are + completely submersed in the water of the subcritical assembly. + + An AmBe neutron source is placed in the exact center of the fuel plate + loading configuration. The material is currently modeled as steel until + more exact specifics of the AmBe isotopics can be obtained. + + The subcritical assembly rests on top of a graphite pile for moderation and + shielding. + + +\section FissionFragment_s3 PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the QGSP_BIC_HP physics list. + + +\section FissionFragment_s4 PRIMARY GENERATOR + + The primary generator is defined in the FFPrimaryGeneratorAction class. + The default particle is a 4.5 MeV neutron originating from the + "NeutronSource" volume. The particles initial direction is isotropically + sampled. + + +\section FissionFragment_s5 DETECTOR RESPONSE + + The scoring method is yet to be implemented, although the BF3 detector is + already included in the detector construction. + + +\section FissionFragment_s6 VISUALISATION + An example "vis.mac" will be included in a future release. For now, please + refer to other examples for a few suggestions. + +
+ +\author B. Wendt (brycen.linn.wendt@cern.ch) +\date June 26, 2014 + +*/ diff --git a/examples/extended/hadronic/FissionFragment/README b/examples/extended/hadronic/FissionFragment/README new file mode 100644 index 0000000000..d2555eb52d --- /dev/null +++ b/examples/extended/hadronic/FissionFragment/README @@ -0,0 +1,114 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + ------------------------- + FissionFragment Example + + B.Wendt + brycen.linn.wendt@cern.ch + ------------------------- + + This example demonstrates an application of the fission fragment model in the + NeutronHP model. This example is capable of using both models, but is designed + around the Wendt Fission Model. A warning will be shown if the environment + variable that enables the Wendt fission model is not set. + + + 1 - EXECUTION + + A - Enable the following UI command : + + /process/had/particle_hp/use_Wendt_fission_model true + + to use the alternative Wendt fission model contained within the + NeutronHP model for simulating fission events + (else, the default fission model will be used). + + B - COMMAND LINE ARGUMENTS + The example can be run without any input arguments. However, a few options + are available: + -i ARG : run in batch mode from script file ARG + -o ARG : write output to file ARG + (defaults to FF_Neutron_HP.out) + -n ARG : multithreading with ARG number of threads + (only works if Geant4 was compiled with multithreading + enabled) + + No output is currently generated, although the argument is provided. It is + anticipated that future versions will provide some form of output + summarizing the results of the simulation. + + C - INTERACTIVE + No specialized UI commands are currently provided. + + To run the simulation, use the standard UI command (after eventually + the above UI command to use the alternative Wendt fission model): + + /run/beamOn + + + 2 - GEOMETRY + + The geometry is constructed in the FFDetectorConstruction class. The setup is + based on a subcritical assembly design. + + A - MATERIALS + This example requires a number of materials. They are loaded or constructed + in the "DefineMaterials" function. A few of the materials are obtained from + the NIST database (ref. Geant4 User's Guide for Application Developers, + Appendix: Geant4 Materials Database). These materials are: + - Air + - Aluminum + - Graphite + - Polyethylene + - Stainless steel + - Water + + Not all of the necessary materials were available from the NIST database, + and were constructed manually from the estimated isotopics. These materials + are: + - 20% U235 enriched uranium + - 93% B10 enriched BF3 + + B - Volumes + The world is composed of air instead of a vacuum to provide room return. + + The subcritical assembly is a water-filled aluminum tank. + + The fuel plates are composed of aluminum-clad uranium meat, and are + completely submersed in the water of the subcritical assembly. + + An AmBe neutron source is placed in the exact center of the fuel plate + loading configuration. The material is currently modeled as steel until + more exact specifics of the AmBe isotopics can be obtained. + + The subcritical assembly rests on top of a graphite pile for moderation and + shielding. + + + 3 - PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in the QGSP_BIC_HP physics list. + + + 4 - PRIMARY GENERATOR + + The primary generator is defined in the FFPrimaryGeneratorAction class. + The default particle is a 4.5 MeV neutron originating from the + "NeutronSource" volume. The particles initial direction is isotropically + sampled. + + + 5 - DETECTOR RESPONSE + + The scoring method is yet to be implemented, although the BF3 detector is + already included in the detector construction. + + + 6 - VISUALISATION + An example "vis.mac" will be included in a future release. For now, please + refer to other examples for a few suggestions. + + diff --git a/examples/extended/hadronic/Hadr00/.README.txt b/examples/extended/hadronic/Hadr00/.README.txt new file mode 100644 index 0000000000..9089200c9b --- /dev/null +++ b/examples/extended/hadronic/Hadr00/.README.txt @@ -0,0 +1,113 @@ + +///\file "hadronic/Hadr00/.README.txt" +///\brief Example Hadr00 README page + +/*! \page ExampleHadr00 Example Hadr00 + +\author V.Ivanchenko \n +CERN, Geneva, Switzerland + +This example demonstrates a usage of G4PhysListFactory to build +Physics List and G4HadronicProcessStore to access cross sections. + +\section Hadr00_s1 GEOMETRY + +The Target volume is a cylinder placed inside the World volume. Following +UI commands are available to modify the geometry: + +\verbatim +/testhadr/TargetMat G4_Pb +/testhadr/WorldMat G4_AIR +/testhadr/TargetRadius 10 mm +/testhadr/TargetLength 20 cm +\endverbatim + +If geometry was changed between two runs, then the following command need to +be executed: + +\verbatim +/testhadr/update +\endverbatim + +By default beam direction coincides with the target axis and is Z axis +in the global coordinate system. The beam starts in the middle of the target. +G4ParticleGun is used as a primary generator. The energy and the type of +the beam can be defined via standard UI commands + +\verbatim +/gun/energy 15 GeV +/gun/particle proton +\endverbatim + +\section Hadr00_s2 PHYSICS + +Physics List is defined by its name given in the 3d argument of the of the +run command. + +\verbatim +Hadr00 my.macro QGSP_BERT +\endverbatim + +If 3d argument is not set then by the PHYSLIST environment variable. +By default FTFP_BERT Physics List will be instantiated. + +\section Hadr00_s3 CROSS SECTION + +At the end of any run the set of cross sections is built and can be printed +out for a given projectile particle and a target element, which can be +defined via UI commands: + +\verbatim +/testhadr/particle pi+ +/testhadr/targetElm Pb +/testhadr/verbose 1 +\endverbatim + +The level verbosity above zero provides printout of the cross section table. +The energy/momentum limits and number of bins can be set via UI commands: + +\verbatim +/testhadr/nBinsE 900 +/testhadr/nBinsP 700 +/testhadr/minEnergy 1 keV +/testhadr/maxEnergy 1 TeV +/testhadr/minMomentum 1 MeV +/testhadr/maxMOmentum 10 TeV +\endverbatim + +\section Hadr00_s4 VISUALIZATION + +For interactive mode G4 visualization options and variables should be +defined, then the example should be recompiled: + +\verbatim +gmake visclean +gmake +\endverbatim + +The vis.mac file can be used an example of visualization. The following +command can be used: + +\verbatim +/testhadr/DrawTracks charged +/testhadr/DrawTracks neutral +/testhadr/DrawTracks all +\endverbatim + +\section Hadr00_s5 HISTOGRAMS + +All histograms are provided in decimal logarithmic scale (log10(E/MeV) +and log10(p/GeV)) for one projectile particle and one target element. +The element is taken from the Geant4 NIST database, natural isotope +composition is assumed. + +It is possible to change scale and output file name using UI commands: + +\verbatim +/testhadr/histo/fileName name +/testhadr/histo/setHisto idx nbins vmin vmax unit +\endverbatim + +Only ROOT histograms are available. + +*/ diff --git a/examples/extended/hadronic/Hadr00/README b/examples/extended/hadronic/Hadr00/README new file mode 100644 index 0000000000..76c02ea847 --- /dev/null +++ b/examples/extended/hadronic/Hadr00/README @@ -0,0 +1,91 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + + HADR00 + + V.Ivanchenko + CERN, Geneva, Switzerland + + +This example demonstrates a usage of G4PhysListFactory to build +Physics List and G4HadronicProcessStore to access cross sections. + + GEOMETRY + +The Target volume is a cylinder placed inside the World volume. Following +UI commands are available to modify the geometry: + +/testhadr/TargetMat G4_Pb +/testhadr/WorldMat G4_AIR +/testhadr/TargetRadius 10 mm +/testhadr/TargetLength 20 cm + +By default beam direction coincides with the target axis and is Z axis +in the global coordinate system. The beam starts in the middle of the target. +G4ParticleGun is used as a primary generator. The energy and the type of +the beam can be defined via standard UI commands + +/gun/energy 15 GeV +/gun/particle proton + + PHYSICS + +Physics List is defined by its name given in the 3d argument of the of the +run command. + +Hadr00 my.macro QGSP_BERT + +If 3d argument is not set then by the PHYSLIST environment variable. +By default FTFP_BERT Physics List will be instantiated. + + + CROSS SECTION + +At the end of any run the set of cross sections is built and can be printed +out for a given projectile particle and a target element, which can be +defined via UI commands: + +/testhadr/particle pi+ +/testhadr/targetElm Pb +/testhadr/verbose 1 + +The level verbosity above zero provides printout of the cross section table. +The energy/momentum limits and number of bins can be set via UI commands: + +/testhadr/nBinsE 900 +/testhadr/nBinsP 700 +/testhadr/minEnergy 1 keV +/testhadr/maxEnergy 1 TeV +/testhadr/minMomentum 1 MeV +/testhadr/maxMOmentum 10 TeV + + VISUALIZATION + +For interactive mode G4 visualization options and variables should be +defined, then the example should be recompiled: + +gmake visclean +gmake + +The vis.mac file can be used an example of visualization. The following +command can be used: + +/testhadr/DrawTracks charged +/testhadr/DrawTracks neutral +/testhadr/DrawTracks all + + HISTOGRAMS + +All histograms are provided in decimal logarithmic scale (log10(E/MeV) +and log10(p/GeV)) for one projectile particle and one target element. +The element is taken from the Geant4 NIST database, natural isotope +composition is assumed. + +It is possible to change scale and output file name using UI commands: + +/testhadr/histo/fileName name +/testhadr/histo/setHisto idx nbins vmin vmax unit + +Only ROOT histograms are available. diff --git a/examples/extended/hadronic/Hadr01/.README.txt b/examples/extended/hadronic/Hadr01/.README.txt new file mode 100644 index 0000000000..35496ce2a6 --- /dev/null +++ b/examples/extended/hadronic/Hadr01/.README.txt @@ -0,0 +1,160 @@ + +///\file "hadronic/Hadr01/.README.txt" +///\brief Example Hadr01 README page + +/*! \page ExampleHadr01 Example Hadr01 + +\author A.Bagulya, I.Gudowska, V.Ivanchenko, N.Starkov \n +CERN, Geneva, Switzerland \n +Karolinska Institute & Hospital, Stockholm, Sweden \n +Lebedev Physical Institute, Moscow, Russia + +This example application is based on the application IION developed for +simulation of proton or ion beam interaction with a water target. Different +aspects of beam target interaction are demonstrating in the example including +longitudinal profile of energy deposition, spectra of secondary particles, +spectra of particles leaving the target. The results are presenting in a form +of average numbers and histograms. + + +\section Hadr01_s1 GEOMETRY + +The Target volume is a cylinder placed inside Check cylindrical volume. The +Check volume is placed inside the World volume. The radius and the length of +the Check volume are 1 mm larger than the radius and the length of the Target. +The material of the Check volume is the same as the World material. The World +volume has the sizes 10 mm larger than that of the Target volume. Any material +from the Geant4 database can be defined. The default World material is +G4Galactic and the default Target material is aluminum. The Target is +subdivided on number of equal slices. Following UI commands are available to +modify the geometry: + +\verbatim +/testhadr/TargetMat G4_Pb +/testhadr/WorldMat G4_AIR +/testhadr/TargetRadius 10 mm +/testhadr/TargetLength 20 cm +/testhadr/NumberDivZ 200 +\endverbatim + +Beam direction coincides with the target axis and is Z axis in the global +coordinate system. The beam starts 5 mm in front of the target. G4ParticleGun +is used as a primary generator. The energy and the type of the beam can be +defined via standard UI commands + +\verbatim +/gun/energy 15 GeV +/gun/particle proton +\endverbatim + +Default beam position is -(targetHalfLength + 5*mm) and direction along Z axis. +Beam position and direction can be changed by gun UI commands: + +\verbatim +/gun/position 1 10 3 mm +/gun/direction 1 0 0 +\endverbatim + +however, position command is active only if before it the flag is set + +\verbatim +/testhadr/DefaultBeamPosition false +\endverbatim + +\section Hadr01_s2 SCORING + +The scoring is performed with the help of UserStackingAction class and two +sensitive detector classes: one associated with a target slice, another with +the Check volume. Each secondary particle is scored by the StackingAction. In +the StackingAction it is also possible to kill all or one type of secondary +particles + +\verbatim +/testhadr/Kill neutron +/testhadr/KillAllSecondaries +\endverbatim + +To control running the following options are available: + +\verbatim +/testhadr/PrintModulo 100 +/testhadr/DebugEvent 977 +\endverbatim + +The last command selects an events, for which "/tracking/verbose 2" level +of printout is established. + + +\section Hadr01_s3 PHYSICS + +PhysicsList of the application uses reference Phsyics Lists or its components, +which are distributed with Geant4 in /geant4/physics_lists subdirectory. + +The reference Physics List name may be defined in the 3d argument of the +run command: + +\verbatim +Hadr01 my.macro QGSP_BERT +\endverbatim + +If 3d argument is not set then the PHYSLIST environment variable is checked. +If both are not defined then reference Phsyics Lists is not instantiated, +instead the local Physics List is used which is built from components using +UI interface. The choice of the physics is provided by the UI command: + +\verbatim +/testhadr/Physics QGSP_BIC +\endverbatim + +To see the list of available configurations with UI one can use + +\verbatim +/testhadr/ListPhysics +\endverbatim + +The cuts for electromagnetic physics can be established via + +\verbatim +/testhadr/CutsAll 1 mm +/testhadr/CutsGamma 0.1 mm +/testhadr/CutsEl 0.2 mm +/testhadr/CutsPos 0.3 mm +/testhadr/CutsProt 0.6 mm +\endverbatim + +Note that testhadr UI commands are not available in the case when PHYSLIST +environment variable is defined. + + +\section Hadr01_s4 VISUALIZATION + +For interactive mode G4 visualization options and variables should be +defined, then the example should be recompiled: + +\verbatim +gmake visclean +gmake +\endverbatim + + +\section Hadr01_s5 HISTOGRAMS + +There are built in histograms. The 1st one (idx=0, id="1") scores energy +deposition along the target. Histograms "22", "23", "24", "25" scores +energy deposition per particle type. + +All other histograms are provided in decimal logarithmic scale (log10(E/MeV), +where E is secondary particle energy at production + +It is possible to change scale and output file name using UI commands: + +\verbatim +/testhadr/histo/fileName name +/testhadr/histo/setHisto idx nbins vmin vmax unit +\endverbatim + +Only ROOT histograms are available. + +All histograms are normalized to the number of events. + +*/ diff --git a/examples/extended/hadronic/Hadr01/README b/examples/extended/hadronic/Hadr01/README new file mode 100644 index 0000000000..1b7d019d1c --- /dev/null +++ b/examples/extended/hadronic/Hadr01/README @@ -0,0 +1,136 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + + HADR01 + + A.Bagulya, I.Gudowska, V.Ivanchenko, N.Starkov + CERN, Geneva, Switzerland + Karolinska Institute & Hospital, Stockholm, Sweden + Lebedev Physical Institute, Moscow, Russia + + +This example application is based on the application IION developed for +simulation of proton or ion beam interaction with a water target. Different +aspects of beam target interaction are demonstrating in the example including +longitudinal profile of energy deposition, spectra of secondary particles, +spectra of particles leaving the target. The results are presenting in a form +of average numbers and histograms. + + + GEOMETRY + +The Target volume is a cylinder placed inside Check cylindrical volume. The +Check volume is placed inside the World volume. The radius and the length of +the Check volume are 1 mm larger than the radius and the length of the Target. +The material of the Check volume is the same as the World material. The World +volume has the sizes 10 mm larger than that of the Target volume. Any material +from the Geant4 database can be defined. The default World material is +G4Galactic and the default Target material is aluminum. The Target is +subdivided on number of equal slices. Following UI commands are available to +modify the geometry: + +/testhadr/TargetMat G4_Pb +/testhadr/WorldMat G4_AIR +/testhadr/TargetRadius 10 mm +/testhadr/TargetLength 20 cm +/testhadr/NumberDivZ 200 + +Beam direction coincides with the target axis and is Z axis in the global +coordinate system. The beam starts 5 mm in front of the target. G4ParticleGun +is used as a primary generator. The energy and the type of the beam can be +defined via standard UI commands + +/gun/energy 15 GeV +/gun/particle proton + +Default beam position is -(targetHalfLength + 5*mm) and direction along Z axis. +Beam position and direction can be changed by gun UI commands: + +/gun/position 1 10 3 mm +/gun/direction 1 0 0 + +however, position command is active only if before it the flag is set + +/testhadr/DefaultBeamPosition false + + SCORING + +The scoring is performed with the help of UserStackingAction class and two +sensitive detector classes: one associated with a target slice, another with +the Check volume. Each secondary particle is scored by the StackingAction. In +the StackingAction it is also possible to kill all or one type of secondary +particles + +/testhadr/Kill neutron +/testhadr/KillAllSecondaries + +To control running the following options are available: + +/testhadr/PrintModulo 100 +/testhadr/DebugEvent 977 + +The last command selects an events, for which "/tracking/verbose 2" level +of printout is established. + + + PHYSICS + +PhysicsList of the application uses reference Phsyics Lists or its components, +which are distributed with Geant4 in /geant4/physics_lists subdirectory. + +The reference Physics List name may be defined in the 3d argument of the +run command: + +Hadr01 my.macro QGSP_BERT + +If 3d argument is not set then the PHYSLIST environment variable is checked. +If both are not defined then reference Phsyics Lists is not instantiated, +instead the local Physics List is used which is built from components using +UI interface. The choice of the physics is provided by the UI command: + +/testhadr/Physics QGSP_BIC + +To see the list of available configurations with UI one can use + +/testhadr/ListPhysics + +The cuts for electromagnetic physics can be established via + +/testhadr/CutsAll 1 mm +/testhadr/CutsGamma 0.1 mm +/testhadr/CutsEl 0.2 mm +/testhadr/CutsPos 0.3 mm +/testhadr/CutsProt 0.6 mm + +Note that testhadr UI commands are not available in the case when PHYSLIST +environment variable is defined. + + + VISUALIZATION + +For interactive mode G4 visualization options and variables should be +defined, then the example should be recompiled: + +gmake visclean +gmake + + + HISTOGRAMS + +There are built in histograms. The 1st one (idx=0, id="1") scores energy +deposition along the target. Histograms "22", "23", "24", "25" scores +energy deposition per particle type. + +All other histograms are provided in decimal logarithmic scale (log10(E/MeV), +where E is secondary particle energy at production + +It is possible to change scale and output file name using UI commands: + +/testhadr/histo/fileName name +/testhadr/histo/setHisto idx nbins vmin vmax unit + +Only ROOT histograms are available. + +All histograms are normalized to the number of events. diff --git a/examples/extended/hadronic/Hadr02/.README.txt b/examples/extended/hadronic/Hadr02/.README.txt new file mode 100644 index 0000000000..5cacb2559f --- /dev/null +++ b/examples/extended/hadronic/Hadr02/.README.txt @@ -0,0 +1,231 @@ + +///\file "hadronic/Hadr02/.README.txt" +///\brief Example Hadr02 README page + +/*! \page ExampleHadr02 Example Hadr02 + +Example and DMJET: +\author V.Ivanchenko, A.Ivanchenko, \n +UrQMD: Kh Abdel-Waged et al, A. Dotti \n +CERN, Geneva, Switzerland \n +Geant4 Associate International \n +University of Bordeaux, CENBG/IN2P3/CNRS \n +(ESA contract 22712/09/NL/AT) + +This example application is providing simulation of ion beam interaction with different +targets. Hadronic aspects of beam target interaction are demonstrated in the example +including longitudinal profile of energy deposition, spectra of secondary particles, +isotope production spectra. The results are presenting in a form of average numbers +and histograms. All ion/ion models of Geant4 are available and also the interface to +the FORTRAN code DPMJET-2.5 developed by J.Ranft for FLUKA. The interface was developed +by P.Truscott (QinetiQ, UK) under European Space Agency (ESA) contract 19770/06/NL/JD. +In addition an interface to the FORTRAN code UrQMD-1.3rc developed by Kh, Abdel-Waged et al +for the KACST/NCMP. UrQMD model by S.A.Bass et al. Prog.Part.Nucl.Phys. 41 (1998) 225 +and M.Bleicher et al. J.Phys. G25 (1999) 1859. +UrQMD can be used only for ion-ion physics or for all hadronic inelastic interactions. + + +\section Hadr02_s1 INSTALLATION + +For simulation with Geant4 native models installation procedure is the same as for +other examples. + +\subsection Hadr02_sub_s11 ACTIVATION OF DPMJET INTERFACE + +In order to use DPMJET additional installation steps are required. +It is recommended to use DPMJET with SLC5 64 bit PC with gcc4.3.2 or newer compiler. + +Two environment variables should be defined: + +\verbatim +G4DPMJET2_5DATA - path to Glauber data +CERNLIB - path to cernlib library +G4_USE_DPMJET - flag of DPMJET activation +\endverbatim + +To run the example with DPMJET: + +\verbatim +Hadr02 dpmjet.in QGSP_BIC +\endverbatim + +The last parameter is optional. It is the name of Geant4 reference Physics List on +top of which a new ion physics is added. Alternatively Physics List can be defined via +environment variable + +\verbatim +setenv PHYSLIST QGSP_BIC +\endverbatim + +\subsection Hadr02__sub_s12 ACTIVATION OF URQMD INTERFACE + +UrQMD 1.3 FORTRAN code is NOT provided with Geant4 code-base. +You can get UrQMD code from UrQMD code website: http://urqmd.org +The Geant4 interface has been developed and tested against urqmd-1.3cr +Once the tarball urqmd-1.3cr.tar.gz has been downloaded copy it in the +urqmd1_3 directory of this example. +To compile support for UrQMD interface in the example define the environment +variable G4_USE_URQMD. i.e. by typing: + +\verbatim +setenv G4_USE_URQMD 1 +\endverbatim + +Two possible uses of UrQMD interface are possible: use UrQMD code only for +ion-ion interactions or use the provided UrQMD physics list (all hadron inelastic interactions +use UrQMD). +To run the example with UrQMD only for ion-ion physics: + +\verbatim +Hadr02 urqmd.in QGSP_BIC +\endverbatim + +The last parameter is optional. It is the name of Geant4 reference Physics List on +top of which a new ion physics is added. Alternatively Physics List can be defined via +environment variable + +\verbatim +setenv PHYSLIST QGSP_BIC +\endverbatim + +To run the example with the full UrQMD physics: + +\verbatim +Hadr02 default.in UrQMD +\endverbatim +or: +\verbatim +setenv PHYSLIST UrQMD +Hadr02 default.in +\endverbatim + +UrQMD physics list can be used in any application, releavant headers and source files (*UrQDM*) +should be copied in your application source tree, together with the urqmd1_3 sub-directory. +Your application makefile should also be modified following the example of the makefile for this +example. + +\section Hadr02_s2 GEOMETRY + +The Target volume is a cylinder placed inside Check cylindrical volume. The +Check volume is placed inside the World volume. The radius and the length of +the Check volume are 1 mm larger than the radius and the length of the Target. +The material of the Check volume is the same as the World material. The World +volume has the sizes 10 mm larger than that of the Target volume. Any material +from the Geant4 database can be defined. The default World material is +G4Galactic and the default Target material is aluminum. The Target is +subdivided on number of equal slices. Following UI commands are available to +modify the geometry: + +\verbatim +/testhadr/TargetMat G4_Pb +/testhadr/WorldMat G4_AIR +/testhadr/TargetRadius 10 mm +/testhadr/TargetLength 20 cm +/testhadr/NumberDivZ 200 +\endverbatim + +Beam direction coincides with the target axis and is Z axis in the global +coordinate system. G4ParticleGun is used as a primary generator. The energy +and the type of the beam can be defined via standard UI commands + +\verbatim +/gun/energy 150 GeV +/gun/particle ion +/gun/ion 6 12 +\endverbatim + +Default beam position is -(targetHalfLength + 5*mm) and direction along Z axis. +Beam position and direction can be changed by gun UI commands: + +\verbatim +/gun/position 1 10 3 mm +/gun/direction 1 0 0 +\endverbatim + +however, position command is active only if before it the flag is set + +\verbatim +/testhadr/DefaultBeamPosition false +\endverbatim + +\section Hadr02_s3 SCORING + +The scoring is performed with the help of UserStackingAction class and a +sensitive detector class associated with a target slice. +Each secondary particle is scored by the StackingAction. In +the StackingAction it is also possible to kill all or only EM (e+, e-, gamma) +secondary particles + +\verbatim +/testhadr/killAll +/testhadr/KillEM +\endverbatim + +To control running the following options are available: + +\verbatim +/run/printProgress 10 +\endverbatim + + +\section Hadr02_s4 PHYSICS + +PhysicsList of the application uses components, which are distributed with +Geant4 in /geant4/physics_lists subdirectory. + +Reference Physics Lists are used and the environment variable PHYSLIST should +be defined. + +Additionally it is possible to add ion-ion interactions using UI command + +\verbatim +/testhadr/ionPhysics DPMJET +/testhadr/ionPhysics FTF +\endverbatim + + +\section Hadr02_s5 VISUALIZATION + +For interactive mode G4 visualization options and variables should be +defined, then the example should be recompiled: + +\verbatim +gmake visclean +gmake +\endverbatim + +The vis.mac file can be used an example of visualization. The following command can +be used: + +\verbatim +/testhadr/DrawTracks charged +/testhadr/DrawTracks charged+n +/testhadr/DrawTracks neutral +/testhadr/DrawTracks all +\endverbatim + + +\section Hadr02_s6 HISTOGRAMS + +It is possible to choose the format of the output file with +histograms using UI command: + +\verbatim +/testhadr/HistoName name +/testhadr/HistoType type +\endverbatim + +The following types are available: root, xml(aida). They will be +stored in the file "name.root", or "name.xml". +If the environment variable HISTODIR is defined, files are stored in this +subdirectory. + +To show the content of a histogram ID=i the commands may be applied: + +\verbatim +/testhadr/HistoPrint i +\endverbatim + +All histograms are normalized to the number of events. + +*/ diff --git a/examples/extended/hadronic/Hadr02/README b/examples/extended/hadronic/Hadr02/README new file mode 100644 index 0000000000..4fcf3d6e3e --- /dev/null +++ b/examples/extended/hadronic/Hadr02/README @@ -0,0 +1,238 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + + HADR02 + + Example and DMJET: V.Ivanchenko, A.Ivanchenko, + UrQMD: Kh Abdel-Waged et al, A. Dotti + CRMC: A. Ribon (with contributions by T. Pierog and A. Tykhonov) + CERN, Geneva, Switzerland + Geant4 Associate International + University of Bordeaux, CENBG/IN2P3/CNRS + (ESA contract 22712/09/NL/AT) + + +This example application is providing simulation of ion beam interaction with different +targets. Hadronic aspects of beam target interaction are demonstrated in the example +including longitudinal profile of energy deposition, spectra of secondary particles, +isotope production spectra. The results are presenting in a form of average numbers +and histograms. All ion/ion models of Geant4 are available. + +In addition an interface to the FORTRAN code UrQMD-1.3rc developed by Kh, Abdel-Waged et al +for the KACST/NCMP. UrQMD model by S.A.Bass et al. Prog.Part.Nucl.Phys. 41 (1998) 225 +and M.Bleicher et al. J.Phys. G25 (1999) 1859. +UrQMD can be used only for ion-ion physics or for all hadronic inelastic interactions. + +The interface to the Cosmic Ray Monte Carlo (CRMC) allows to use generators - +such as EPOS, DPMJET, SIBYLL etc. - for hadron-nucleus and nucleus-nucleus collisions +at very high energies. + + INSTALLATION + +For simulation with Geant4 native models installation procedure is the same as for +other examples. + + HOW TO RUN + +To run the example: + + Hadr02 QGSP_BIC + +The last parameter is optional. It is the name of Geant4 reference Physics List, +alternatively Physics List can be defined via environment variable + + setenv PHYSLIST QGSP_BIC + + ACTIVATION OF URQMD INTERFACE + +UrQMD 1.3 FORTRAN code is NOT provided with Geant4 code-base. +You can get UrQMD code from UrQMD code website: http://urqmd.org +The Geant4 interface has been developed and tested against urqmd-1.3cr +Once the tarball urqmd-1.3cr.tar.gz has been downloaded copy it in the +urqmd1_3 directory of this example. +To compile support for UrQMD interface in the example define the environment +variable G4_USE_URQMD. i.e. by typing: + + setenv G4_USE_URQMD 1 + +Two possible uses of UrQMD interface are possible: use UrQMD code only for +ion-ion interactions or use the provided UrQMD physics list (all hadron inelastic interactions +use UrQMD). +To run the example with UrQMD only for ion-ion physics: + + Hadr02 urqmd.in QGSP_BIC + +The last parameter is optional. It is the name of Geant4 reference Physics List on +top of which a new ion physics is added. Alternatively Physics List can be defined via +environment variable + + setenv PHYSLIST QGSP_BIC + +To run the example with the full UrQMD physics: + + Hadr02 default.in UrQMD +or: + setenv PHYSLIST UrQMD + Hadr02 default.in + +UrQMD physics list can be used in any application, releavant headers and source files (*UrQDM*) +should be copied in your application source tree, together with the urqmd1_3 sub-directory. +Your application makefile should also be modified following the example of the makefile for this +example. + + ACTIVATION OF CRMC INTERFACE + +The CRMC (Cosmic Ray Monte Carlo) interface is NOT provided with Geant4 code-base. +A modified version of the CRMC interface for Geant4 applications has been kindly +prepared by Tanguy Pierog (IKP) and Andrii Tykhonov (Universite' de Geneve) +and can be obtained here: + https://gitlab.ikp.kit.edu/AirShowerPhysics/crmc/-/tree/svn/geant4 + +Assuming that this special version of CRMC is installed in the subdirectory +crmc-svn-geant4/ , you need first to build it : please look at the README and +README_GEANT4_CRMC_INTERFACE files for detailed instructions on how to build it. +In short: + +1. Install BOOST +2. Install HepMC (and define the corresponding environmental variable HEP_ROOT) +3. Install FASTJET (and define the corresponding environmental variable + FASTJET_ROOT_DIR) +4. Set the LD_LIBRARY_PATH as follows: + export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HEP_ROOT}/lib:${FASTJET_ROOT_DIR}/lib +5. Source the Geant4 script geant4make.sh , e.g. + source /your-geant4-installation-dir/share/Geant4-10.7.1/geant4make/geant4make.sh +6. cd crmc-svn-geant4/ +7. mkdir Build/ ; cd Build/ # Subdirectory where to build and install CRMC +8. cmake ../ +9. make +10. make install # Yes, you need also to install it (in the same directory)! + +After you have built CRMC you can build the Hadr02 application that uses it as follows: + +1. Define the following environmental variable (in addition to the environmental + variables defined above, needed to build CRMC): + export G4_USE_CRMC=1 + export CRMCROOT=/your-crmc-installation-dir/crmc-svn-geant4/ + export CPATH=${CPATH}:${CRMCROOT}/Build/src:${CRMCROOT}/src + export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${CRMCROOT}/Build/lib + export CRMC_CONFIG_FILE=${CRMCROOT}/Build/crmc.param +2. cd /your-geant4/examples/extended/hadronic/Hadr02 +3. mkdir Build/ ; cd Build/ # Subdirectory where to build Hadr02 +4. cmake -DG4_USE_CRMC=ON -DGeant4_DIR=/your-geant4-installation-dir/ ../ +5. make + +To run the application: + +1. Define the following environmental variable (besides the previous ones): + export PHYSLIST=CRMC_FTFP_BERT +2. cd /your-geant4/examples/extended/hadronic/Hadr02/Build +3. ./Hadr02 crmc.in + +which runs the special "CRMC_FTFP_BERT" physics list, defined in this example, +which consists of using the standard FTFP_BERT physics list for hadrons of +kinetic energies below 100 GeV, while using CRMC above 110 GeV : in the interval +between 100 and 110 GeV, there is the transition between FTFP and CRMC (which +means that one of these two models is randomly chosen for each interaction, +with a probability which is 100% (0%) for FTFP (CRMC) at 100 GeV, and +decreases (grows) linearly to 0% (100%) for FTFP (CRMC) at 110 GeV. +Which of the MC generators of CRMC is actually used is specified in the file: + include/G4CRMCModel.hh +(search for string "***LOOKHERE***" : these are the available choices: + EPOS LHC (0) - the default - , EPOS 1.99 (1), SIBYLL 2.3c (6), and + DPMJET 3 (12) ). + +Notice that we use CRMC only for inelastic final-state of pion- , kaon- , +proton- , neutron- and ion-nuclear interactions, whereas for the rest +(i.e. elastic and inelastic cross sections, elastic final-state interactions, +hyperon- , antihyperon- , antinucleon- and light anti-ion nuclear interactions) +we use Geant4 FTFP_BERT. + + GEOMETRY + +The Target volume is a cylinder placed inside Check cylindrical volume. The +Check volume is placed inside the World volume. The radius and the length of +the Check volume are 1 mm larger than the radius and the length of the Target. +The material of the Check volume is the same as the World material. The World +volume has the sizes 10 mm larger than that of the Target volume. Any material +from the Geant4 database can be defined. The default World material is +G4Galactic and the default Target material is aluminum. The Target is +subdivided on number of equal slices. Following UI commands are available to +modify the geometry: + +/testhadr/TargetMat G4_Pb +/testhadr/WorldMat G4_AIR +/testhadr/TargetRadius 10 mm +/testhadr/TargetLength 20 cm +/testhadr/NumberDivZ 200 + +Beam direction coincides with the target axis and is Z axis in the global +coordinate system. G4ParticleGun is used as a primary generator. The energy +and the type of the beam can be defined via standard UI commands + +/gun/energy 150 GeV +/gun/particle ion +/gun/ion 6 12 + +Default beam position is -(targetHalfLength + 5*mm) and direction along Z axis. +Beam position and direction can be changed by gun UI commands: + +/gun/position 1 10 3 mm +/gun/direction 1 0 0 + +however, position command is active only if before it the flag is set + +/testhadr/DefaultBeamPosition false + + SCORING + +The scoring is performed with the help of UserStackingAction class and a +sensitive detector class associated with a target slice. +Each secondary particle is scored by the StackingAction. In +the StackingAction it is also possible to kill all or only EM (e+, e-, gamma) +secondary particles + +/testhadr/killAll +/testhadr/KillEM + +To control running the following options are available: + +/run/printProgress 10 + + + PHYSICS + +PhysicsList of the application uses components, which are distributed with +Geant4 in /geant4/physics_lists subdirectory. + +Reference Physics Lists are used and the environment variable PHYSLIST should +be defined. + +Additionally it is possible to add ion-ion interactions using UI command + +/testhadr/ionPhysics HIJING +/testhadr/ionPhysics QrQMD + + + VISUALIZATION + +For interactive mode G4 visualization options and variables should be +defined, then the example should be recompiled: + +gmake visclean +gmake + +The vis.mac file can be used an example of visualization. The following command can +be used: + +/testhadr/DrawTracks charged +/testhadr/DrawTracks charged+n +/testhadr/DrawTracks neutral +/testhadr/DrawTracks all + + + HISTOGRAMS + +All histograms are normalized to the number of events. + diff --git a/examples/extended/hadronic/Hadr02/hijing1_383/README b/examples/extended/hadronic/Hadr02/hijing1_383/README new file mode 100644 index 0000000000..0d76957a14 --- /dev/null +++ b/examples/extended/hadronic/Hadr02/hijing1_383/README @@ -0,0 +1,118 @@ + HIJING interface + ---------------- + + Khaled Abdel-Waged + -------------------- + + version 0.0, 1-11-2012 + ---------------------- + +>Installation requirements +-------------------------- + +The Geant4 interface to HIJING uses the following software tools and packages: + +1. HIJING (available at fttp://nta0.lbl.gov/pub/xnwang/hijing) +2. The following Geant4 versions: + − ver.9.5 or above + +The interface and original HIJING code have been compiled and tested using: +• gcc 4.1.2 with gfortran (FORTRAN95) and GNUmake) + +Operating systems used for this test is: +Red Hat Linux 4.1.2-64 + + +>Changes in the Fortran code +---------------------------- + +1) The main subroutines +SUBROUTINE HIJSET(EFRM, FRAME, PROJ, TARG, IAP, IZP, IAT, IZT) +is replaced with + SUBROUTINE HIJSET(EFRM) + +SUBROUTINE HIJING (FRAME, BMIN, BMAX) +is replaced with + SUBROUTINE HIJING (BMIN, BMAX) + + +The input variables are directly inserted into the following common block: + +COMMON/HIPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50) +Projectile: + IHNT2(1)=IAP // Nucleus mass number +or IHNT2(1)=1 //Hadron +IHNT2(2)=IZP //charge +IHNT2(5)=0 //id code + Target: + IHNT2(3)=IAT + IHNT2(4)=IZT + IHNT2(6)=0 //id Target (Fixed) + Rest Mass: + HINT1(8)= //projectile + HINT1(9)= //Target + +2) In subroutines HIJSET and HIJING, + +Since Geant4 hadronic cascade models always works in the LABoratory frame + +the statement Frame=”LAB” is inserted. + + +3)Random number generator + +The two random generator functions become one! + +This is done by replacing +RAN(NSEED) with RLU(0) in hijing1.383.f + + +>Consequences of conversion from f77 (g77) to gfortran +------------------------------------------------------ + +When running HIJING code in gfortran directly, the execution is blocked. +This problem is solved by the following changes + +1) You have to add in the GNUmake file, the line + + FFLAGS=-fno-automatic + +This treats each program unit as if the SAVE statement were specified +for every local variable and array referenced in it. + + +2) Problem related to the function ROMG(x) in hijing1.383.f: + + FUNCTION ROMG(X) +C This gives the eikonal function from a table +C calculated in the first call + DIMENSION FR(0:1000) + DATA I0/0/ + + COMMON/EIKONAL/FR !New->Khaled + + IF(I0.NE.0) GO TO 100 + DO 50 I=1,1001 + XR=(I-1)*0.01 + FR(I-1)=OMG0(XR) +50 CONTINUE +100 I0=1 + IF(X.GE.10.0) THEN + ROMG=0.0 + RETURN + ENDIF + IX=INT(X*100) + ROMG=(FR(IX)*((IX+1)*0.01-X)+FR(IX+1)*(X-IX*0.01))/0.01 + RETURN + END + +Our analysis shows that the array FR() is not saved in the subsequent calls of the function ROMG(). +Therefore, the statement “COMMON/EIKONAL/FR” is inserted, as shown above. + + +>Interface design +----------------- + +The use of HIJING physics in Geant4 has resulted in the introduction of a new event model (G4HIJING_Model). +The G4HIJING_Model class is derived from G4HadronicInteraction, and is defined within the Geant4 user physics +list if access to HIJING physics is required. It controls initialisation of HIJING through common block variables. diff --git a/examples/extended/hadronic/Hadr03/.README.txt b/examples/extended/hadronic/Hadr03/.README.txt new file mode 100644 index 0000000000..d8d185b934 --- /dev/null +++ b/examples/extended/hadronic/Hadr03/.README.txt @@ -0,0 +1,158 @@ + +///\file "hadronic/Hadr03/.README.txt" +///\brief Example Hadr03 README page + +/*! \page ExampleHadr03 Example Hadr03 + + - How to compute total cross section from the direct evaluation of the + mean free path ( see below, item Physics). + - How to identify nuclear reactions. + - How to plot energy spectrum of secondary particles. + +\section Hadr03_s1 GEOMETRY DEFINITION + + It is a single box representing a 'semi infinite' homogeneous medium. + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + + The default geometry (10 m of molybdenum) is built in DetectorConstruction, + but the above parameters can be changed interactively via commands defined + in DetectorMessenger. + +\section Hadr03_s2 PHYSICS LIST + + The PhysicsList contains builders for hadronic interactions. + Predefined G4 PhysicsConstructors or 'local' PhysicsConstructors can be used + (see geant4/source/physics_lists or example runAndEvent/RE04). + + In order not to introduce 'artificial' constraints on the step size, + electromagnetic processes are not registered: there is no continuous energy + loss. + + Several hadronic physics options are controlled by environment variables. + To select them, see Hadr03.cc + +\section Hadr03_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the edge + of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (neutron 1 MeV), and can be changed via the G4 + build-in commands of ParticleGun class (see the macros provided with + this example). + +\section Hadr03_s4 PHYSICS + + An event is killed at the first interaction of the incident paticle. + The absorption length, also called mean free path, is computed as + the mean value of the track length of the incident particle. + This is why the medium must be 'infinite' : to be sure that interaction + occurs at any events. + + The result is compared with the 'input' value, i.e. with the cross sections + given by G4HadronicProcessStore and used by Geant4. + + The list of nuclear reactions that occured is printed. + (the number of gamma of deexcitation is not printed). + + Then, comes the total list of generated particles and ions. + The energy spectrum of the scattered particle (if any) and of the created + secondaries are plotted (see SteppingAction). + + Momentum conservation is checked as : +\verbatim + momentum balance = modulus(P_out - P_in) +\endverbatim + + A set of macros defining various run conditions are provided. + The processes can be actived/inactived in order to survey the processes + individually. + +\section Hadr03_s5 HISTOGRAMS + + The test contains 13 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + - 1 : "kinetic energy of scattered primary particle" + - 2 : "kinetic energy of gamma" + - 3 : "kinetic energy of e-" + - 4 : "kinetic energy of neutrons" + - 5 : "kinetic energy of protons" + - 6 : "kinetic energy of deuterons" + - 7 : "kinetic energy of alphas" + - 8 : "kinetic energy of nuclei" + - 9 : "kinetic energy of mesons" + - 10 : "kinetic energy of baryons" + - 11 : "Q = Ekin out - Ekin in" + - 12 : "Pbalance = mag(P_out - P_in)" + - 13 : "atomic mass of nuclei" + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default Hadr03) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default Hadr03) + +\section Hadr03_s6 VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the box. + The tracks are drawn at the end of event, and erased at the end of run. + +\section Hadr03_s7 HOW TO START ? + + Execute Hadr03 in 'batch' mode from macro files : +\verbatim +% Hadr03 inelastic.mac +\endverbatim + + Execute Hadr03 in 'interactive mode' with visualization : +\verbatim +% Hadr03 +Idle> control/execute vis.mac +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + + Macros provided in this example: + - Au196.mac: neutron (1 MeV) on Au195 + - elastic.mac: proton (10 MeV) on Mo100. Elastic collisions alone + - fusion.mac: deuteron (400 keV) on tritium + - gamma.mac: gamma (10 MeV) on Au196 + - inelastic.mac: proton (10 MaV) on Mo98. Inelastic interactions alone + - ion.mac: Li7 (140 MeV) on Be9 + - nCapture.mac: neutron (1 eV) on Boron. Capture process alone + - nFission.mac: neutron (1 eV) on U235. Fission process alone + - neutron.mac: neutron (1 MeV) on Boron + + Macros to be run interactively: + - debug.mac: proton (10 MeV) on Boron + - vis.mac: To activate visualization +*/ diff --git a/examples/extended/hadronic/Hadr03/README b/examples/extended/hadronic/Hadr03/README new file mode 100644 index 0000000000..7b46f5368e --- /dev/null +++ b/examples/extended/hadronic/Hadr03/README @@ -0,0 +1,145 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Hadr03 + ------ + + How to compute total cross section from the direct evaluation of the + mean free path ( see below, item Physics). + How to identify nuclear reactions. + How to plot energy spectrum of secondary particles. + + 1- GEOMETRY DEFINITION + + It is a single box representing a 'semi infinite' homogeneous medium. + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + + The default geometry (10 m of molybdenum) is built in DetectorConstruction, + but the above parameters can be changed interactively via commands defined + in DetectorMessenger. + + 2- PHYSICS LIST + + The PhysicsList contains builders for hadronic interactions. + Predefined G4 PhysicsConstructors or 'local' PhysicsConstructors can be used + (see geant4/source/physics_lists or example runAndEvent/RE04). + + In order not to introduce 'artificial' constraints on the step size, + electromagnetic processes are not registered: there is no continuous energy + loss. + + Several hadronic physics options are controlled by environment variables. + To select them, see Hadr03.cc. + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the edge + of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (neutron 1 MeV), and can be changed via the G4 + build-in commands of ParticleGun class (see the macros provided with + this example). + + 4- PHYSICS + + An event is killed at the first interaction of the incident paticle. + The absorption length, also called mean free path, is computed as + the mean value of the track length of the incident particle. + This is why the medium must be 'infinite' : to be sure that interaction + occurs at any events. + + The result is compared with the 'input' value, i.e. with the cross sections + given by G4HadronicProcessStore and used by Geant4. + + The list of nuclear reactions that occured is printed. + (the number of gamma of deexcitation is not printed). + + Then, comes the total list of generated particles and ions. + The energy spectrum of the scattered particle (if any) and of the created + secondaries are plotted (see SteppingAction). + + Momentum conservation is checked as : + momentum balance = modulus(P_out - P_in) + + A set of macros defining various run conditions are provided. + The processes can be actived/inactived in order to survey the processes + individually. + + 5- HISTOGRAMS + + The test contains 12 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + 1 "kinetic energy of scattered primary particle" + 2 "kinetic energy of gamma" + 3 "kinetic energy of e-" + 4 "kinetic energy of neutrons" + 5 "kinetic energy of protons" + 6 "kinetic energy of deuterons" + 7 "kinetic energy of alphas" + 8 "kinetic energy of nuclei" + 9 "kinetic energy of mesons" + 10 "kinetic energy of baryons" + 11 "Q = Ekin out - Ekin in" + 12 "Pbalance = mag(P_out - P_in)" + 13 "atomic mass of nuclei" + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default Hadr03) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default Hadr03) + + 6- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the box. + The tracks are drawn at the end of event, and erased at the end of run. + + 7- HOW TO START ? + + Execute Hadr03 in 'batch' mode from macro files : + % Hadr03 inelastic.mac + + Execute Hadr03 in 'interactive mode' with visualization : + % Hadr03 + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit + + Macros provided in this example: + - Au196.mac: neutron (1 MeV) on Au195 + - elastic.mac: proton (10 MeV) on Mo100. Elastic collisions alone + - fusion.mac: deuteron (400 keV) on tritium + - gamma.mac: gamma (10 MeV) on Au196 + - inelastic.mac: proton (10 MaV) on Mo98. Inelastic interactions alone + - ion.mac: Li7 (140 MeV) on Be9 + - nCapture.mac: neutron (1 eV) on Boron. Capture process alone + - nFission.mac: neutron (1 eV) on U235. Fission process alone + - neutron.mac: neutron (1 MeV) on Boron + + Macros to be run interactively: + - debug.mac: proton (10 MeV) on Boron + - vis.mac: To activate visualization diff --git a/examples/extended/hadronic/Hadr04/.README.txt b/examples/extended/hadronic/Hadr04/.README.txt new file mode 100644 index 0000000000..0f13cc0e6b --- /dev/null +++ b/examples/extended/hadronic/Hadr04/.README.txt @@ -0,0 +1,132 @@ + +///\file "hadronic/Hadr04/.README.txt" +///\brief Example Hadr04 README page + +/*! \page ExampleHadr04 Example Hadr04 + + This example is focused on neutronHP physics, especially neutron transport, + including thermal scattering. + See A.R. Garcia, E. Mendoza, D. Cano-Ott presentation at G4 Hadronic group + meeting (04/2013) and note on G4NeutronHP package + +\section Hadr04_s1 MATERIALS AND GEOMETRY DEFINITION + + It is a single box representing a 'quasi infinite' homogeneous medium. + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + + The default geometry (1 m3 of pressurized water) is built in + DetectorConstruction, but the above parameters can be changed interactively + via commands defined in DetectorMessenger. + + A function, and its associated UI command, allows to build a material + directly from a single isotope. + + To be identified by the ThermalScattering module, the elements composing a + material must have a specific name (see G4NeutronHPThermalScatteringNames.cc) + Examples of such materials are build in DetectorConstruction. + +\section Hadr04_s2 PHYSICS LIST + + Only processes of neutronHP package are registered : neutronElastic + (including thermalScattering), neutronInelastic, nCapture; nFission. + See class NeutronHPphysics. No other hadronic nor electromagnetic processes. + + A command allows to select or not ThermalScattering model. + + Several hadronic physics options are controlled by environment variables. + To select them, see Hadr04.cc + + NB. class NeutronHPphysics can be reused with other physicsConstructors, + as neutron processes are deleted before to be re-created. + +\section Hadr04_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic is a single particle randomly shooted at the + centre of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (neutron 2 MeV), and can be changed via the G4 + build-in commands of ParticleGun class (see the macros provided with + this example). + +\section Hadr04_s4 PHYSICS + + All secondaries are killed in StackingAction. Therefore an event consists of + the transport of the primary neutron. Then one survey the thermal and non + thermal part of this parcours. + + +\section Hadr04_s5 HISTOGRAMS + + The test contains 7 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + - 1 "incident neutron: nb of collisions above 1 eV" + - 2 "incident neutron: total track length above 1 eV" + - 3 "incident neutron: time of flight above 1 eV" + - 4 "incident neutron: nb of collisions below 1 eV" + - 5 "incident neutron: total track length below 1*eV" + - 6 "incident neutron: time of flight below 1 eV" + - 7 "incident neutron: energy distribution below 1*eV" + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default Hadr04) +\endverbatim + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default Hadr04) + +\section Hadr04_s6 VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The detector has a default view which is a longitudinal view of the box. + The tracks are drawn at the end of event, and erased at the end of run. + +\section Hadr04_s7 HOW TO START ? + + Execute Hadr04 in 'batch' mode from macro files : +\verbatim +% Hadr04 run01.mac +\endverbatim + + Execute Hadr04 in 'interactive mode' with visualization : +\verbatim +% Hadr04 +Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit +\endverbatim + + Macros provided in this example: + - graphite.mac: neutron (2 MeV) in graphite + - run01.mac: neutron (2 MeV) in Water_ts + + Macros to be run interactively: + - debug.mac: neutron (2 MeV) in Water_ts + - vis.mac: To activate visualization +*/ diff --git a/examples/extended/hadronic/Hadr04/README b/examples/extended/hadronic/Hadr04/README new file mode 100644 index 0000000000..4799e55080 --- /dev/null +++ b/examples/extended/hadronic/Hadr04/README @@ -0,0 +1,124 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Hadr04 + ------ + + This example is focused on neutronHP physics, especially neutron transport, + including thermal scattering. + See A.R. Garcia, E. Mendoza, D. Cano-Ott presentation at G4 Hadronic group + meeting (04/2013) and note on G4NeutronHP package + + 1- MATERIALS AND GEOMETRY DEFINITION + + It is a single box representing a 'quasi infinite' homogeneous medium. + Two parameters define the geometry : + - the material of the box, + - the (full) size of the box. + + The default geometry (1 m3 of pressurized water) is built in + DetectorConstruction, but the above parameters can be changed interactively + via commands defined in DetectorMessenger. + + A function, and its associated UI command, allows to build a material + directly from a single isotope. + + To be identified by the ThermalScattering module, the elements composing a + material must have a specific name (see G4NeutronHPThermalScatteringNames.cc) + Examples of such materials are build in DetectorConstruction. + + 2- PHYSICS LIST + + Only processes of neutronHP package are registered : neutronElastic + (including thermalScattering), neutronInelastic, nCapture; nFission. + See class NeutronHPphysics. + No other hadronic nor electromagnetic processes are registered. + + A command allows to select or not ThermalScattering model. + + Several hadronic physics options are controlled by environment variables. + To select them, see Hadr04.cc + + NB. class NeutronHPphysics can be reused with other physicsConstructors, + as neutron processes are deleted before to be re-created. + + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic is a single particle randomly shooted at the + centre of the box. The type of the particle and its energy are set in + PrimaryGeneratorAction (neutron 2 MeV), and can be changed via the G4 + build-in commands of ParticleGun class (see the macros provided with + this example). + + 4- PHYSICS + + All secondaries are killed in StackingAction. Therefore an event consists of + the transport of the primary neutron. Then one survey the thermal and non + thermal part of this parcours. + + + 5- HISTOGRAMS + + The test contains 7 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + 1 "incident neutron: nb of collisions above 1 eV" + 2 "incident neutron: total track length above 1 eV" + 3 "incident neutron: time of flight above 1 eV" + 4 "incident neutron: nb of collisions below 1 eV" + 5 "incident neutron: total track length below 1*eV" + 6 "incident neutron: time of flight below 1 eV" + 7 "incident neutron: energy distribution below 1*eV" + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default Hadr04) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default Hadr04) + + 6- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The detector has a default view which is a longitudinal view of the box. + The tracks are drawn at the end of event, and erased at the end of run. + + 7- HOW TO START ? + + Execute Hadr04 in 'batch' mode from macro files : + % Hadr04 run01.mac + + Execute Hadr04 in 'interactive mode' with visualization : + % Hadr04 + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit + + Macros provided in this example: + - graphite.mac: neutron (2 MeV) in graphite + - run01.mac: neutron (2 MeV) in Water_ts + + Macros to be run interactively: + - debug.mac: neutron (2 MeV) in Water_ts + - vis.mac: To activate visualization diff --git a/examples/extended/hadronic/Hadr05/.README.txt b/examples/extended/hadronic/Hadr05/.README.txt new file mode 100644 index 0000000000..b1c174b74b --- /dev/null +++ b/examples/extended/hadronic/Hadr05/.README.txt @@ -0,0 +1,188 @@ + +///\file "hadronic/Hadr05/.README.txt" +///\brief Example Hadr05 README page + +/*! \page ExampleHadr05 Example Hadr05 + + How to collect energy deposition in a sampling calorimeter. + How to survey energy flow. + Hadr05 is the hadronic equivalent of TestEm3. + + + \section Hadr05_s1 GEOMETRY DEFINITION + + The calorimeter is a box made of a given number of layers. + A layer consists of a sequence of various absorbers (maximum MaxAbsor=9). + The layer is replicated. + + Parameters defining the calorimeter : + - the number of layers, + - the number of absorbers within a layer, + - the material of the absorbers, + - the thickness of the absorbers, + - the transverse size of the calorimeter (the input face is a square). + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, but all + of the above parameters can be modified interactively via the commands + defined in the DetectorMessenger class. + +\verbatim + |<----layer 0---------->|<----layer 1---------->|<----layer 2---------->| + | | | | | + ========================================================================== + || | || | || | || + || | || | || | || + || abs 1 | abs 2 || abs 1 | abs 2 || abs 1 | abs 2 || + || | || | || | || + || | || | || | || + beam || | || | || | || +======> || | || | || | || + || | || | || | || + || | || | || | || + || | || | || | || + || | || | || | || + || cell 1 | cell 2 || cell 3 | cell 4 || cell 5 | cell 6 || + ========================================================================== + ^ ^ ^ ^ ^ ^ ^ + pln1 pln2 pln3 pln4 pln5 pln6 pln7 +\endverbatim + + NB. The number of absorbers and the number of layers can be set to 1. + In this case we have a unique homogeneous block of matter, which looks like + a bubble chamber rather than a calorimeter ... + (see the macro emtutor.mac) + + A function, and its associated UI command, allows to build a material + directly from a single isotope. + + To be identified by the ThermalScattering module, the elements composing a + material must have a specific name (see G4ParticleHPThermalScatteringNames.cc) + Examples of such materials are build in Hadr06/src/DetectorConstruction.cc + + \section Hadr05_s2 PHYSICS LISTS + + "Full" set of physics processes are registered, but via PhysicsConstructor + objects rather than complete pre-defined G4 physics lists. This alternative + way gives more freedom to register physics. + + Physics constructors are either constructors provided in Geant4 (with G4 prefix) + or 'local'. They include : HadronElastic, HadronInelastic, IonsInelastic, + GammaNuclear, RadioactiveDecay and Electomagnetic. + (see geant4/source/physics_lists/constructors) + + HadronElasticPhysicsHP include a model for thermalized neutrons, + under the control of the command /testhadr/phys/thermalScattering + + GammmaNuclearPhysics is a subset of G4BertiniElectroNuclearBuilder. + + ElectromagneticPhysics is a readable version of G4EmStandardPhysics_opt3. + + Several hadronic physics options are controlled by environment variables. + To select them, see Hadr07.cc + + \section Hadr05_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the calorimeter + perpendicular to the input face. The type of the particle and its energy are + set in the PrimaryGeneratorAction class, and can be changed via the + G4 build-in commands of G4ParticleGun class (see the macros provided with this + example). + + In addition one can choose randomly the impact point of the incident particle. + The corresponding interactive command is built in PrimaryGeneratorAction. + + A RUN is a set of events. + + Hadr05 computes the energy deposited per absorber and the energy flow through + the calorimeter. + + \section Hadr05_s4 VISUALIZATION + + The Visualization Manager is set in the main() (see Hadr05.cc). + The initialisation of the drawing is done via the commands : + /vis/... in the macro vis.mac. In interactive session: +\verbatim + PreInit or Idle > /control/execute vis.mac +\endverbatim + + The default view is a longitudinal view of the calorimeter. + + \section Hadr05_s5 PHYSICS DEMO + + The particle's type and the physics processes which will be available + in this example are set in PhysicsList class. + + In addition a built-in interactive command (/process/inactivate processName) + allows to activate/inactivate the processes one by one. + Then one can well visualize the processes one by one, especially + in the bubble chamber setup with a transverse magnetic field. + + \section Hadr05_s6 HOW TO START ? + + - Execute Hadr05 in 'batch' mode from macro files +\verbatim +% Hadr05 Cu-lAr.mac +\endverbatim + + - Execute Hadr05 in 'interactive mode' with visualization +\verbatim +% Hadr05 +.... +Idle> type your commands. For instance: +Idle> /control/execute vis.mac +.... +Idle> exit +\endverbatim + + Macros provided in this example: + - Fe-Sci.mac, Cu-lAr.mac, Pb-lAr.mac, W-lAr.mac : names are self explanatory + - emtest.mac, emtutor.mac : to be run interactively + - vis.mac: to activate visualization + +\section Hadr05_s7 HISTOGRAMS + + Hadr05 can produce histograms : + +\verbatim + histo 1 : energy deposit in absorber 1 + histo 2 : energy deposit in absorber 2 + ...etc........... + + histo 11 : longitudinal profile of energy deposit in absorber 1 (MeV/event) + histo 12 : longitudinal profile of energy deposit in absorber 2 (MeV/event) + ...etc........... + + histo 21 : energy flow (MeV/event) + histo 22 : lateral energy leak (MeV/event) + + NB. Numbering scheme for histograms: + layer : from 1 to NbOfLayers (included) + absorbers : from 1 to NbOfAbsor (included) + planes : from 1 to NbOfLayers*NbOfAbsor + 1 (included) +\endverbatim + + One can control the binning of the histo with the command: +\verbatim +/analysis/h1/set idAbsor nbin Emin Emax unit +\endverbatim + etc., + where unit is the desired energy unit for that histo (see Hadr05.in). + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default hadr05) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id + \endverbatim + All selected histos will be written on a file name.ascii (default hadr05) + +*/ + diff --git a/examples/extended/hadronic/Hadr05/README b/examples/extended/hadronic/Hadr05/README new file mode 100644 index 0000000000..cfa5099738 --- /dev/null +++ b/examples/extended/hadronic/Hadr05/README @@ -0,0 +1,172 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Hadr05 + ------ + + How to collect energy deposition in a sampling calorimeter. + How to survey energy flow. + Hadr05 is the hadronic equivalent of TestEm3. + + + 1- GEOMETRY DEFINITION + + The calorimeter is a box made of a given number of layers. + A layer consists of a sequence of various absorbers (maximum MaxAbsor=9). + The layer is replicated. + + Parameters defining the calorimeter : + - the number of layers, + - the number of absorbers within a layer, + - the material of the absorbers, + - the thickness of the absorbers, + - the transverse size of the calorimeter (the input face is a square). + + In addition a transverse uniform magnetic field can be applied. + + The default geometry is constructed in DetectorConstruction class, but all + of the above parameters can be modified interactively via the commands + defined in the DetectorMessenger class. + + + |<----layer 0---------->|<----layer 1---------->|<----layer 2---------->| + | | | | | + ========================================================================== + || | || | || | || + || | || | || | || + || abs 1 | abs 2 || abs 1 | abs 2 || abs 1 | abs 2 || + || | || | || | || + || | || | || | || + beam || | || | || | || +======> || | || | || | || + || | || | || | || + || | || | || | || + || | || | || | || + || | || | || | || + || cell 1 | cell 2 || cell 3 | cell 4 || cell 5 | cell 6 || + ========================================================================== + ^ ^ ^ ^ ^ ^ ^ + pln1 pln2 pln3 pln4 pln5 pln6 pln7 + + NB. The number of absorbers and the number of layers can be set to 1. + In this case we have a unique homogeneous block of matter, which looks like + a bubble chamber rather than a calorimeter ... + (see the macro emtutor.mac) + + A function, and its associated UI command, allows to build a material + directly from a single isotope. + + To be identified by the ThermalScattering module, the elements composing a + material must have a specific name (see G4ParticleHPThermalScatteringNames.cc) + Examples of such materials are build in Hadr06/src/DetectorConstruction.cc + + 2- PHYSICS LISTS + + "Full" set of physics processes are registered, but via PhysicsConstructor + objects rather than complete pre-defined G4 physics lists. This alternative + way gives more freedom to register physics. + + Physics constructors are either constructors provided in Geant4 (with G4 prefix) + or 'local'. They include : HadronElastic, HadronInelastic, IonsInelastic, + GammaNuclear, RadioactiveDecay and Electomagnetic. + (see geant4/source/physics_lists/constructors) + + HadronElasticPhysicsHP include a model for thermalized neutrons, + under the control of the command /testhadr/phys/thermalScattering + + GammmaNuclearPhysics is a subset of G4BertiniElectroNuclearBuilder. + + ElectromagneticPhysics is a readable version of G4EmStandardPhysics_opt3. + + Several hadronic physics options are controlled by environment variables. + To select them, see Hadr07.cc + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle which hits the calorimeter + perpendicular to the input face. The type of the particle and its energy are + set in the PrimaryGeneratorAction class, and can be changed via the + G4 build-in commands of G4ParticleGun class (see the macros provided with this + example). + + In addition one can choose randomly the impact point of the incident particle. + The corresponding interactive command is built in PrimaryGeneratorAction. + + A RUN is a set of events. + + Hadr05 computes the energy deposited per absorber and the energy flow through + the calorimeter. + + 4- VISUALIZATION + + The Visualization Manager is set in the main() (see Hadr05.cc). + The initialisation of the drawing is done via the commands : + /vis/... in the macro vis.mac. In interactive session: + PreInit or Idle > /control/execute vis.mac + + The default view is a longitudinal view of the calorimeter. + + 5- PHYSICS DEMO + + The particle's type and the physics processes which will be available + in this example are set in PhysicsList class. + + In addition a built-in interactive command (/process/inactivate processName) + allows to activate/inactivate the processes one by one. + Then one can well visualize the processes one by one, especially + in the bubble chamber setup with a transverse magnetic field. + + 6- HOW TO START ? + + - Execute Hadr05 in 'batch' mode from macro files + % Hadr05 Cu-lAr.mac + + - Execute Hadr05 in 'interactive mode' with visualization + % Hadr05 + .... + Idle> type your commands. For instance: + Idle> /control/execute vis.mac + .... + Idle> exit + + Macros provided in this example: + - Fe-Sci.mac, Cu-lAr.mac, Pb-lAr.mac, W-lAr.mac : names are self explanatory + - emtest.mac, emtutor.mac : to be run interactively + - vis.mac: to activate visualization + + 7- HISTOGRAMS + + Hadr05 can produce histograms : + histo 1 : energy deposit in absorber 1 + histo 2 : energy deposit in absorber 2 + ...etc........... + + histo 11 : longitudinal profile of energy deposit in absorber 1 (MeV/event) + histo 12 : longitudinal profile of energy deposit in absorber 2 (MeV/event) + ...etc........... + + histo 21 : energy flow (MeV/event) + histo 22 : lateral energy leak (MeV/event) + + NB. Numbering scheme for histograms: + layer : from 1 to NbOfLayers (included) + absorbers : from 1 to NbOfAbsor (included) + planes : from 1 to NbOfLayers*NbOfAbsor + 1 (included) + + One can control the binning of the histo with the command: + /analysis/h1/set idAbsor nbin Emin Emax unit + where unit is the desired energy unit for that histo + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default hadr05) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default hadr05) + diff --git a/examples/extended/hadronic/Hadr06/.README.txt b/examples/extended/hadronic/Hadr06/.README.txt new file mode 100644 index 0000000000..f754e6b309 --- /dev/null +++ b/examples/extended/hadronic/Hadr06/.README.txt @@ -0,0 +1,162 @@ + +///\file "hadronic/Hadr06/.README.txt" +///\brief Example Hadr06 README page + +/*! \page ExampleHadr06 Example Hadr06 + + Survey energy deposition and particle's flux from an hadronic cascade. + Use PhysicsConstructor objects rather than predefined G4 PhysicsLists. + +\section Hadr06_s1 MATERIALS AND GEOMETRY DEFINITION + + The geometry is a single sphere (absorber) of an homogenous material. + + Two parameters define the geometry : + - the radius of the sphere + - the material of the sphere + + The default geometry (R=30 cm of water) is built in + DetectorConstruction, but the above parameters can be changed interactively + via commands defined in DetectorMessenger. + + The absorber is surrounded by a World volume (vacuum) + + A function, and its associated UI command, allows to build a material + directly from a single isotope. + + To be identified by the ThermalScattering module, the elements composing a + material must have a specific name (see G4NeutronHPThermalScatteringNames.cc) + Examples of such materials are build in DetectorConstruction. + +\section Hadr06_s2 PHYSICS LIST + + "Full" set of physics processes are registered, but via PhysicsConstructor + objects rather than complete pre-defined G4 physics lists. This alternative + way gives more freedom to register physics. + + Physics constructors are either constructors provided in Geant4 (with G4 prefix) + or 'local'. They include : HadronElastic, HadronInelastic, IonsInelastic, GammaNuclear, + RadioactiveDecay and Electomagnetic. + (see geant4/source/physics_lists/constructors) + + HadronElasticPhysicsHP include a model for thermalized neutrons, under the control of a command + defined in NeutronHPMesseger. + + GammmaNuclearPhysics is a subset of G4BertiniElectroNuclearBuilder. + + ElectromagneticPhysics is a simplified version of G4EmStandardPhysics. + + Several hadronic physics options are controlled by environment variables. + To trigger them, see Hadr06.cc + +\section Hadr06_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic is a single particle randomly shooted at the + centre of the sphere. The type of the particle and its energy are set in + PrimaryGeneratorAction (neutron 14 MeV), and can be changed via the G4 + build-in commands of ParticleGun class (see the macros provided with + this example). + +\section Hadr06_s4 PHYSICS + + The program computes and plots energy deposited in the interaction volume + (absorber) and the flux of particles leaving this volume. + Processes invoked and particles generated during hadronic cascade are listed. + + + +\section Hadr06_s5 HISTOGRAMS + + The test contains 23 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + 1 "total energy deposit" + 2 "Edep (MeV/mm) profile along radius" + 3 "total kinetic energy flow" + 4 "energy spectrum of gamma at creation" + 5 "energy spectrum of e+- at creation" + 6 "energy spectrum of neutrons at creation" + 7 "energy spectrum of protons at creation" + 8 "energy spectrum of deuterons at creation" + 9 "energy spectrum of alphas at creation" + 10 "energy spectrum of all others ions at creation" + 11 "energy spectrum of all others baryons at creation" + 12 "energy spectrum of all others mesons at creation" + 13 "energy spectrum of all others leptons (neutrinos) at creation" + 14 "energy spectrum of emerging gamma" + 15 "energy spectrum of emerging e+-" + 16 "energy spectrum of emerging neutrons" + 17 "energy spectrum of emerging protons" + 18 "energy spectrum of emerging deuterons" + 19 "energy spectrum of emerging alphas" + 20 "energy spectrum of all others emerging ions" + 21 "energy spectrum of all others emerging baryons" + 22 "energy spectrum of all others emerging mesons" + 23 "energy spectrum of all others emerging leptons (neutrinos)" + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default Hadr06) +\endverbatim + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default Hadr06) + +\section Hadr06_s6 VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The tracks are drawn at the end of event, and erased at the end of run. + gamma green + neutron yellow + negative particles (e-, ...) red + positive particles (e+, ions, ...) blue + +\section Hadr06_s7 HOW TO START ? + + Execute Hadr06 in 'batch' mode from macro files : +\verbatim +% Hadr06 run1.mac +\endverbatim + + Execute Hadr06 in 'interactive mode' with visualization : +\verbatim +% Hadr06 +Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit +\endverbatim + + Macros provided in this example: + - graphite.mac: neutron,14 MeV, in graphite + - run1.mac: neutron,14 MeV, in Li7 + - singleFission.mac: single fission in U235 + + Macros to be run interactively: + - debug.mac: water with thermal scattering + - fission.mac: U235 + - vis.mac: To activate visualization +*/ diff --git a/examples/extended/hadronic/Hadr06/README b/examples/extended/hadronic/Hadr06/README new file mode 100644 index 0000000000..e643ea50f2 --- /dev/null +++ b/examples/extended/hadronic/Hadr06/README @@ -0,0 +1,152 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Hadr06 + ------ + + Survey energy deposition and particle's flux from an hadronic cascade. + Use PhysicsConstructor objects rather than predefined G4 PhysicsLists. + + + 1- MATERIALS AND GEOMETRY DEFINITION + + The geometry is a single sphere (absorber) of an homogenous material. + + Two parameters define the geometry : + - the radius of the sphere + - the material of the sphere + + The default geometry (R=30 cm of water) is built in + DetectorConstruction, but the above parameters can be changed interactively + via commands defined in DetectorMessenger. + + The absorber is surrounded by a World volume (vacuum) + + A function, and its associated UI command, allows to build a material + directly from a single isotope. + + To be identified by the ThermalScattering module, the elements composing a + material must have a specific name (see G4ParticleHPThermalScatteringNames.cc) + Examples of such materials are build in DetectorConstruction. + + 2- PHYSICS LIST + + "Full" set of physics processes are registered, but via PhysicsConstructor + objects rather than complete pre-defined G4 physics lists. This alternative + way gives more freedom to register physics. + + Physics constructors are either constructors provided in Geant4 (with G4 prefix) + or 'local'. They include : HadronElastic, HadronInelastic, IonsInelastic, GammaNuclear, + RadioactiveDecay and Electomagnetic. + (see geant4/source/physics_lists/constructors) + + HadronElasticPhysicsHP include a model for thermalized neutrons, under the control of a command + defined in NeutronHPMesseger. + + GammmaNuclearPhysics is a subset of G4BertiniElectroNuclearBuilder. + + ElectromagneticPhysics is a simplified version of G4EmStandardPhysics. + + Several hadronic physics options are controlled by environment variables. + To trigger them, see Hadr06.cc + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic is a single particle randomly shooted at the + centre of the sphere. The type of the particle and its energy are set in + PrimaryGeneratorAction (neutron 14 MeV), and can be changed via the G4 + build-in commands of ParticleGun class (see the macros provided with + this example). + + 4- PHYSICS + + The program computes and plots energy deposited in the interaction volume + (absorber) and the flux of particles leaving this volume. + Processes invoked and particles generated during hadronic cascade are listed. + + 5- HISTOGRAMS + + The test contains 23 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + 1 "total energy deposit" + 2 "Edep (MeV/mm) profile along radius" + 3 "total kinetic energy flow" + 4 "energy spectrum of gamma at creation" + 5 "energy spectrum of e+- at creation" + 6 "energy spectrum of neutrons at creation" + 7 "energy spectrum of protons at creation" + 8 "energy spectrum of deuterons at creation" + 9 "energy spectrum of alphas at creation" + 10 "energy spectrum of all others ions at creation" + 11 "energy spectrum of all others baryons at creation" + 12 "energy spectrum of all others mesons at creation" + 13 "energy spectrum of all others leptons (neutrinos) at creation" + 14 "energy spectrum of emerging gamma" + 15 "energy spectrum of emerging e+-" + 16 "energy spectrum of emerging neutrons" + 17 "energy spectrum of emerging protons" + 18 "energy spectrum of emerging deuterons" + 19 "energy spectrum of emerging alphas" + 20 "energy spectrum of all others emerging ions" + 21 "energy spectrum of all others emerging baryons" + 22 "energy spectrum of all others emerging mesons" + 23 "energy spectrum of all others emerging leptons (neutrinos)" + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default Hadr06) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default Hadr04) + + 6- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The tracks are drawn at the end of event, and erased at the end of run. + gamma green + neutron yellow + negative particles (e-, ...) red + positive particles (e+, ions, ...) blue + + 7- HOW TO START ? + + Execute Hadr06 in 'batch' mode from macro files : + % Hadr06 run1.mac + + Execute Hadr06 in 'interactive mode' with visualization : + % Hadr06 + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit + + Macros provided in this example: + - graphite.mac: neutron,14 MeV, in graphite + - run1.mac: neutron,14 MeV, in Li7 + - singleFission.mac: single fission in U235 + + Macros to be run interactively: + - debug.mac: water with thermal scattering + - fission.mac: U235 + - vis.mac: To activate visualization + diff --git a/examples/extended/hadronic/Hadr07/.README.txt b/examples/extended/hadronic/Hadr07/.README.txt new file mode 100644 index 0000000000..b6ecc7da6a --- /dev/null +++ b/examples/extended/hadronic/Hadr07/.README.txt @@ -0,0 +1,170 @@ + +///\file "hadronic/Hadr07/.README.txt" +///\brief Example Hadr07 README page + +/*! \page ExampleHadr07 Example Hadr07 + + Survey energy deposition and particle's flux from an hadronic cascade. + Use PhysicsConstructor objects rather than predefined G4 PhysicsLists. + How to plot a depth dose profile in a rectangular box. + +\section Hadr07_s1 MATERIALS AND GEOMETRY DEFINITION + + The geometry consists of a stack of one or several blocks of homogenous + material, called absorbers. + + A minimum of 4 parameters define the geometry : + - the number of absorbers (NbOfAbsor) + - the material of each absorber, + - the thickness of each absorber, + - the tranverse dimension of the stack (sizeYZ) + + In addition a transverse uniform magnetic field can be applied. + eg: /globalField/setValue 0 0 5 tesla + + The absorber is surrounded by a World volume (vacuum) + + A function, and its associated UI command, allows to build a material + directly from a single isotope. + + The default geometry is built in DetectorConstruction, but the above parameters + can be changed interactively via commands defined in DetectorMessenger. + + To be identified by the ThermalScattering module, the elements composing a + material must have a specific name (see G4ParticleHPThermalScatteringNames.cc) + Examples of such materials are build in Hadr06/src/DetectorConstruction. + +\section Hadr07_s2 PHYSICS LIST + + "Full" set of physics processes are registered, but via PhysicsConstructor + objects rather than complete pre-defined G4 physics lists. This alternative + way gives more freedom to register physics. + + Physics constructors are either constructors provided in Geant4 (with G4 prefix) + or 'local'. They include : HadronElastic, HadronInelastic, IonsInelastic, GammaNuclear, + RadioactiveDecay and Electomagnetic. + (see geant4/source/physics_lists/constructors) + + HadronElasticPhysicsHP include a model for thermalized neutrons, under the control of a command + defined in NeutronHPMesseger. + + GammmaNuclearPhysics is a subset of G4BertiniElectroNuclearBuilder. + + ElectromagneticPhysics is a simplified version of G4EmStandardPhysics. + + Several hadronic physics options are controlled by environment variables. + To select them, see Hadr07.cc + +\section Hadr07_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the + left face of the box. The type of the particle and its energy are set + in the PrimaryGeneratorAction class, and can be changed via the G4 + build-in commands of G4ParticleGun class (see the macros provided with + this example). + + In addition one can choose randomly the impact point of the incident + particle. The corresponding interactive command is built in + PrimaryGeneratorMessenger class. + + A RUN is a set of events. + +\section Hadr07_s4 PHYSICS + + The program computes the energy deposited in each absorber, + and the flux of particles emerging in the world. + Processes invoked and particles generated are listed. + +\section Hadr07_s5 HISTOGRAMS + + The test has several built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : +\verbatim + /analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + 1 "total energy deposited in absorber 1 + 2 "total energy deposited in absorber 2 + ........................................... + 9 "total energy deposited in absorber 9 + 10 "Edep (MeV/mm) profile along absorbers" + + One can control the name of the histograms file with the command: +\verbatim + /analysis/setFileName name (default Hadr07) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim + /analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default Hadr07) + +\section Hadr07_s6 TRACKING and STEP MAX + + Hadr07 computes the distribution of energy deposited along the trajectory of + the incident particle : the so-called longitudinal energy profile, + or depth dose distribution (histogram 10). + The energy deposited (edep) is randomly distribued along the step (see + SteppingAction). + + In order to control the accuracy of the deposition, the maximum step size + of charged particles is computed automatically from the binning of + histogram 10. + + As an example, this limitation is implemented as a 'full' process : + see StepMax class and its Messenger. The 'StepMax process' is registered + in the Physics List, via a physicsConstructor object (a builder). + + StepMax is evaluated in the StepMax process. + A boolean UI command allows to deactivate this mechanism. + Another UI command allows to define directly a stepMax value. + +\section Hadr07_s7 VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim + > /control/execute vis.mac +\endverbatim + + The tracks are drawn at the end of event, and erased at the end of run. + gamma green + neutron yellow + negative particles (e-, ...) red + positive particles (e+, ions, ...) blue + +\section Hadr07_s8 HOW TO START ? + + Execute Hadr07 in 'batch' mode from macro files : +\verbatim + % Hadr07 run1.mac +\endverbatim + + Execute Hadr07 in 'interactive mode' with visualization : +\verbatim + % Hadr07 + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit +\endverbatim + + Macros provided in this example: + - Na22.mac: multilayers. Radioactive source + - alpha.mac: alpha (400 MeV). Limit the step size from histo 10 + - ionC12.mac: C12 (2.4 GeV). Limit the step size from histo 10 + - water.mac: e- (4 MeV) in Water + + Macros to be run interactively: + - proton.mac: proton (1 GeV). Multilayers + - vis.mac: To activate visualization +*/ diff --git a/examples/extended/hadronic/Hadr07/README b/examples/extended/hadronic/Hadr07/README new file mode 100644 index 0000000000..60ef384935 --- /dev/null +++ b/examples/extended/hadronic/Hadr07/README @@ -0,0 +1,161 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Hadr07 + ------ + + Survey energy deposition and particle's flux from an hadronic cascade. + Use PhysicsConstructor objects rather than predefined G4 PhysicsLists. + Show how to plot a depth dose profile in a rectangular box. + + + 1- MATERIALS AND GEOMETRY DEFINITION + + The geometry consists of a stack of one or several blocks of homogenous + material, called absorbers. + + A minimum of 4 parameters define the geometry : + - the number of absorbers (NbOfAbsor) + - the material of each absorber, + - the thickness of each absorber, + - the tranverse dimension of the stack (sizeYZ) + + In addition a transverse uniform magnetic field can be applied. + eg: /globalField/setValue 0 0 5 tesla + + The absorber is surrounded by a World volume (vacuum) + + A function, and its associated UI command, allows to build a material + directly from a single isotope. + + The default geometry is built in DetectorConstruction, but the above parameters + can be changed interactively via commands defined in DetectorMessenger. + + To be identified by the ThermalScattering module, the elements composing a + material must have a specific name (see G4ParticleHPThermalScatteringNames.cc) + Examples of such materials are build in Hadr06/src/DetectorConstruction. + + 2- PHYSICS LIST + + "Full" set of physics processes are registered, but via PhysicsConstructor + objects rather than complete pre-defined G4 physics lists. This alternative + way gives more freedom to register physics. + + Physics constructors are either constructors provided in Geant4 (with G4 prefix) + or 'local'. They include : HadronElastic, HadronInelastic, IonsInelastic, GammaNuclear, + RadioactiveDecay and Electomagnetic. + (see geant4/source/physics_lists/constructors) + + HadronElasticPhysicsHP include a model for thermalized neutrons, under the control of a command + defined in NeutronHPMesseger. + + GammmaNuclearPhysics is a subset of G4BertiniElectroNuclearBuilder. + + ElectromagneticPhysics is a simplified version of G4EmStandardPhysics. + + Several hadronic physics options are controlled by environment variables. + To select them, see Hadr07.cc + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the + left face of the box. The type of the particle and its energy are set + in the PrimaryGeneratorAction class, and can be changed via the G4 + build-in commands of G4ParticleGun class (see the macros provided with + this example). + + In addition one can choose randomly the impact point of the incident + particle. The corresponding interactive command is built in + PrimaryGeneratorMessenger class. + + A RUN is a set of events. + + 4- PHYSICS + + The program computes the energy deposited in each absorber, + and the flux of particles emerging in the world. + Processes invoked and particles generated are listed. + + 5- HISTOGRAMS + + The test has several built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + 1 "total energy deposited in absorber 1 + 2 "total energy deposited in absorber 2 + ........................................... + 9 "total energy deposited in absorber 9 + 10 "Edep (MeV/mm) profile along absorbers" + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default Hadr07) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default Hadr07) + + 6- TRACKING and STEP MAX + + Hadr07 computes the distribution of energy deposited along the trajectory of + the incident particle : the so-called longitudinal energy profile, + or depth dose distribution (histogram 10). + The energy deposited (edep) is randomly distribued along the step (see + SteppingAction). + + In order to control the accuracy of the deposition, the maximum step size + of charged particles is computed automatically from the binning of + histogram 10. + + As an example, this limitation is implemented as a 'full' process : + see StepMax class and its Messenger. The 'StepMax process' is registered + in the Physics List, via a physicsConstructor object (a builder). + + StepMax is evaluated in the StepMax process. + A boolean UI command allows to deactivate this mechanism. + Another UI command allows to define directly a stepMax value. + + + 7- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The tracks are drawn at the end of event, and erased at the end of run. + gamma green + neutron yellow + negative particles (e-, ...) red + positive particles (e+, ions, ...) blue + + 8- HOW TO START ? + + Execute Hadr07 in 'batch' mode from macro files : + % Hadr07 run1.mac + + Execute Hadr07 in 'interactive mode' with visualization : + % Hadr07 + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit + + Macros provided in this example: + - Na22.mac: multilayers. Radioactive source + - alpha.mac: alpha (400 MeV). Limit the step size from histo 10 + - ionC12.mac: C12 (2.4 GeV). Limit the step size from histo 10 + - water.mac: e- (4 MeV) in Water + + Macros to be run interactively: + - proton.mac: proton (1 GeV). Multilayers + - vis.mac: To activate visualization diff --git a/examples/extended/hadronic/Hadr08/.README.txt b/examples/extended/hadronic/Hadr08/.README.txt new file mode 100644 index 0000000000..d3c702dd7c --- /dev/null +++ b/examples/extended/hadronic/Hadr08/.README.txt @@ -0,0 +1,57 @@ + +///\file "hadronic/Hadr08/.README.txt" +///\brief Example Hadr08 README page + +/*! \page ExampleHadr08 Example Hadr08 + +This is an example of how to use "generic biasing" to get the following +functionality which is currently not available directly in the Geant4 +hadronic framework. + +\section Hadr08_s1 PHYSICS LIST + +We want to use the physics list FTFP_BERT everywhere in our detector, +except that in one (or more) logical volume(s) we want to use a +different combination of hadronic models, e.g. FTFP + INCLXX +(instead of the default FTFP + BERT), for the final-state generation. + +Notice that we use the powerful "generic biasing" machinery available +in Geant4, but the actual weights of all tracks remain to the usual +value (1.0) as in the normal (unbiased) case. + +\section Hadr08_s2 MATERIALS AND GEOMETRY DEFINITION + +In this example, the detector is very simple: +- a homogeneous block of silicon, as a proxy of a tracker sub-detector; +- followed by a crystal, as a proxy of an electromagnetic calorimeter; +- followed by a homogeneous block of iron, as a proxy of a hadron + calorimeter. +We assume that the block of silicon is where we want to replace FTFP+BERT +with FTFP+INCLXX for the final-state modeling of proton, neutron, pion- +and pion+-inelastic interactions (of any energy). +This silicon layer is made artificially thick (20 cm) in order to have +more hadron inelastic interactions for testing. + +This example has been tested only for G4 10.5.p01 and 10.6, but it should +work also for previous recent releases (i.e. 10.4 and 10.3). +The example works in both sequential and multi-threaded modes, and the +CPU overhead due to "generic biasing" for this application seems to be +very small (at the per-cent level). + +\section Hadr08_s3 HOW TO START ? + +To build it: +\verbatim + mkdir Build; cd Build + cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DGeant4_DIR=/path-to-geant4-libraries ../. + make +\endverbatim + +To run it: +\verbatim + ./Hadr08 hadr08.in +\endverbatim +which shoot 100 pion+ of 5 GeV kinetic energy. + +*/ diff --git a/examples/extended/hadronic/Hadr08/README b/examples/extended/hadronic/Hadr08/README new file mode 100644 index 0000000000..1a7888d58e --- /dev/null +++ b/examples/extended/hadronic/Hadr08/README @@ -0,0 +1,40 @@ +This is an example of how to use "generic biasing" to get the following +functionality which is currently not available directly in the Geant4 +hadronic framework. + +We want to use the physics list FTFP_BERT everywhere in our detector, +except that in one (or more) logical volume(s) we want to use a +different combination of hadronic models, e.g. FTFP + INCLXX +(instead of the default FTFP + BERT), for the final-state generation. + +Notice that we use the powerful "generic biasing" machinery available +in Geant4, but the actual weights of all tracks remain to the usual +value (1.0) as in the normal (unbiased) case. + +In this example, the detector is very simple: +- a homogeneous block of silicon, as a proxy of a tracker sub-detector; +- followed by a crystal, as a proxy of an electromagnetic calorimeter; +- followed by a homogeneous block of iron, as a proxy of a hadron + calorimeter. +We assume that the block of silicon is where we want to replace FTFP+BERT +with FTFP+INCLXX for the final-state modeling of proton, neutron, pion- +and pion+-inelastic interactions (of any energy). +This silicon layer is made artificially thick (20 cm) in order to have +more hadron inelastic interactions for testing. + +This example has been tested only for G4 10.5.p01 and 10.6, but it should +work also for previous recent releases (i.e. 10.4 and 10.3). +The example works in both sequential and multi-threaded modes, and the +CPU overhead due to "generic biasing" for this application seems to be +very small (at the per-cent level). + +To build it: + mkdir Build; cd Build + cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DGeant4_DIR=/path-to-geant4-libraries ../. + make + +To run it: + ./Hadr08 hadr08.in +which shoot 100 pion+ of 5 GeV kinetic energy. + diff --git a/examples/extended/hadronic/Hadr09/.README.txt b/examples/extended/hadronic/Hadr09/.README.txt new file mode 100644 index 0000000000..26526a93fa --- /dev/null +++ b/examples/extended/hadronic/Hadr09/.README.txt @@ -0,0 +1,53 @@ + +///\file "hadronic/Hadr09/.README.txt" +///\brief Example Hadr09 README page + +/*! \page ExampleHadr09 Example Hadr09 + +This example shows how to use Geant4 as a generator for simulating +inelastic hadron-nuclear interactions. + +The class HadronicGenerator is the "generator". +The main hadronic models (FTFP, QGSP, BERT, BIC, IonBIC, INCL) +and some combinations of two of them - in a transition energy region, +similarly to what happens in physics lists - are available. +See include/HadronicGenerator.hh for more detailed information. + +The main, Hadr09.cc, shows an example of how to use it. +It samples randomly the projectile hadron, its energy, its direction +and the target material, and then it calls the generator. +Some information regarding the secondaries which are produced can be +printed out. +See the comments in Hadr09.cc for more information and how eventually +to change some of its configurations. +Notice that Hadr09.cc does nothing really useful: users should consider +to use eventually only the class HadronicGenerator. + +Notice that the Geant4 run-manager is not used. + +\section Hadr09_s1 HOW TO START ? + +To build it: +\verbatim + mkdir Build; cd Build + cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DGeant4_DIR=/path-to-geant4-libraries ../. + make +\endverbatim + +To run it: +\verbatim + ./Hadr09 [Hadr09.in] +\endverbatim + +which simulates 1000 hadron-nucleus collisions, randomnly selected, and +prints out some information about the secondaries produced in these +interactions. It takes only a few seconds to run. +Notice that the input file, Hadr09.in, which is empty, is not needed +by Hadr09, and can be omitted; however, it has been created because +is expected by system testing. + +Note: this example has been included in Geant4 10.7, but it should work + also for early versions of Geant4, in particular 10.6, 10.5 and 10.4. + +*/ diff --git a/examples/extended/hadronic/Hadr09/README b/examples/extended/hadronic/Hadr09/README new file mode 100644 index 0000000000..c5f1d38ff3 --- /dev/null +++ b/examples/extended/hadronic/Hadr09/README @@ -0,0 +1,46 @@ +This example shows how to use Geant4 as a generator for simulating +inelastic hadron-nuclear interactions. + +The class HadronicGenerator is the "generator". +The main hadronic models (FTFP, QGSP, BERT, BIC, IonBIC, INCL) +and some combinations of two of them - in a transition energy region, +similarly to what happens in physics lists - are available. +See include/HadronicGenerator.hh for more detailed information. + +The main, Hadr09.cc, shows an example of how to use it. +It samples randomly the projectile hadron, its energy, its direction +and the target material, and then it calls the generator. +Some information regarding the secondaries which are produced can be +printed out. +See the comments in Hadr09.cc for more information and how eventually +to change some of its configurations. +Notice that Hadr09.cc does nothing really useful: users should consider +to use eventually only the class HadronicGenerator. + +( + The file Hadr09.cc-ION_PROJECTILE shows an example of a ion-ion + collision, for fixed type of projectile ion, target ion, projectile + kinetic energy, and projectile direction. + This file is obtained from Hadr09.cc with minimal changes. +) + +Notice that the Geant4 run-manager is not used. + +To build this example: + mkdir Build; cd Build + cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DGeant4_DIR=/path-to-geant4-libraries ../. + make + +To run it: + ./Hadr09 [Hadr09.in] + +which simulates 1000 hadron-nucleus collisions, randomnly selected, and +prints out some information about the secondaries produced in these +interactions. It takes only a few seconds to run. +Notice that the input file, Hadr09.in, which is empty, is not needed +by Hadr09, and can be omitted; however, it has been created because +is expected by system testing. + +Note: this example has been included in Geant4 10.7, but it should work + also for early versions of Geant4, in particular 10.6, 10.5 and 10.4. diff --git a/examples/extended/hadronic/Hadr10/.README.txt b/examples/extended/hadronic/Hadr10/.README.txt new file mode 100644 index 0000000000..ca3eac13f3 --- /dev/null +++ b/examples/extended/hadronic/Hadr10/.README.txt @@ -0,0 +1,78 @@ +///\file "hadronic/Hadr10/.README.txt" +///\brief Example Hadr10 README page + +/*! \page ExampleHadr10 Example Hadr10 + +This is an example that aims to test the treatment of decays in Geant4. +In particular, we want to test the decays of the tau lepton, charmed and +bottom hadrons, and the use of pre-assigned decays. + +Note that pre-assigned decays are decays that are usually specified by +Monte Carlo event generators. For simplicity, and to avoid dependencies +on external code, in this test we don't use any MC generator, and we +pre-assign decays by hand (using the Geant4 decay table: this is done +in the method SteppingAction::UserSteppingAction). But this does not +change anything regarding the testing of the pre-assignment mechanism +of Geant4. + +The set-up is very simple: a cylindrical layer, 2 meter long, whose radii +(inner and outer) and material can be specified via UI commands. By default, +the material is Beryllium, with inner radius of 9 mm and outer radius of +11 mm (i.e. the default thickness is 2 mm). In the rest of the world volume, +is filled with G4_Galactic material (i.e. very low density gas). +There is an uniform and constant magnetic field along the z-axis, whose +value is set via UI command. + +The primary particle, tau- by default, is shot along the x-axis, starting +from the center (0, 0, 0). +Its kinetic energy, by default 500 GeV, can be set via UI command. + +All secondaries are killed immediately, so only the primary particle +is studied. + +The only interesting part of this example is the SteppingAction. +The decay of the primary particle is pre-assigned there. +When the primary particle decays, the properties of the decay - +position, momentum, energy, etc. of the particle at the moment +of the decay - are collected and then used to: +- compute the difference between the "MC-truth" decay radius + (defined as the radius at which the primary would have decayed + if there were no magnetic field and interactions with matter, + i.e. no energy loss and no multiple scattering) and the real + decay radius +- compute the angular deflection (in degrees) between the initial + direction of the primary and its final direction at the moment + it decays +- the energy loss (i.e. the difference between the initial kinetic energy + of the primary and the its kinetic energy at the moment of the decay) +- the energy-momentum violation of the decay (i.e. the difference between + the sum of the 4-momenta of the decay products and the 4-momentum of + primary particle at the moment of its decay). +Some of these information are printed out for each decay, and a summary +statistics is printed out at the end of the application. + +Look for the string "***LOOKHERE***" for those parameters/options that +are hardwired in the code (i.e. not available via UI command). + +This example uses the physics list factory, therefore you can specify +the reference physics list you want to use via the PHYSLIST +environmental variable (by default, if you don't set it, the FTFP_BERT +physics list is used). + +To build this example: + + mkdir Build; cd Build + cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DGeant4_DIR=/path-to-geant4-libraries ../. + make + +To run it: + + ./Hadr10 hadr10.in + +which shoots 500 GeV TeV particles - one run of 10'000 events for each +type of particle - along the x-axis, and print out some information +regarding their decays, as well as some summary information at the end +of each run. + +*/ diff --git a/examples/extended/hadronic/Hadr10/README b/examples/extended/hadronic/Hadr10/README new file mode 100644 index 0000000000..78929286e0 --- /dev/null +++ b/examples/extended/hadronic/Hadr10/README @@ -0,0 +1,71 @@ +This is an example that aims to test the treatment of decays in Geant4. +In particular, we want to test the decays of the tau lepton, charmed and +bottom hadrons, and the use of pre-assigned decays. + +Note that pre-assigned decays are decays that are usually specified by +Monte Carlo event generators. For simplicity, and to avoid dependencies +on external code, in this test we don't use any MC generator, and we +pre-assign decays by hand (using the Geant4 decay table: this is done +in the method SteppingAction::UserSteppingAction). But this does not +change anything regarding the testing of the pre-assignment mechanism +of Geant4. + +The set-up is very simple: a cylindrical layer, 2 meter long, whose radii +(inner and outer) and material can be specified via UI commands. By default, +the material is Beryllium, with inner radius of 9 mm and outer radius of +11 mm (i.e. the default thickness is 2 mm). In the rest of the world volume, +is filled with G4_Galactic material (i.e. very low density gas). +There is an uniform and constant magnetic field along the z-axis, whose +value is set via UI command. + +The primary particle, tau- by default, is shot along the x-axis, starting +from the center (0, 0, 0). +Its kinetic energy, by default 500 GeV, can be set via UI command. + +All secondaries are killed immediately, so only the primary particle +is studied. + +The only interesting part of this example is the SteppingAction. +The decay of the primary particle is pre-assigned there. +When the primary particle decays, the properties of the decay - +position, momentum, energy, etc. of the particle at the moment +of the decay - are collected and then used to: +- compute the difference between the "MC-truth" decay radius + (defined as the radius at which the primary would have decayed + if there were no magnetic field and interactions with matter, + i.e. no energy loss and no multiple scattering) and the real + decay radius +- compute the angular deflection (in degrees) between the initial + direction of the primary and its final direction at the moment + it decays +- the energy loss (i.e. the difference between the initial kinetic energy + of the primary and the its kinetic energy at the moment of the decay) +- the energy-momentum violation of the decay (i.e. the difference between + the sum of the 4-momenta of the decay products and the 4-momentum of + primary particle at the moment of its decay). +Some of these information are printed out for each decay, and a summary +statistics is printed out at the end of the application. + +Look for the string "***LOOKHERE***" for those parameters/options that +are hardwired in the code (i.e. not available via UI command). + +This example uses the physics list factory, therefore you can specify +the reference physics list you want to use via the PHYSLIST +environmental variable (by default, if you don't set it, the FTFP_BERT +physics list is used). + +To build this example: + + mkdir Build; cd Build + cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DGeant4_DIR=/path-to-geant4-libraries ../. + make + +To run it: + + ./Hadr10 hadr10.in + +which shoots 500 GeV TeV particles - one run of 10'000 events for each +type of particle - along the x-axis, and print out some information +regarding their decays, as well as some summary information at the end +of each run. diff --git a/examples/extended/hadronic/NeutronSource/.README.txt b/examples/extended/hadronic/NeutronSource/.README.txt new file mode 100644 index 0000000000..206e4bed81 --- /dev/null +++ b/examples/extended/hadronic/NeutronSource/.README.txt @@ -0,0 +1,154 @@ + +///\file "hadronic/NeutronSource/.README.txt" +///\brief Example NeutronSource README page + +/*! \page ExampleNeutronSource Example NeutronSource + + + NeutronSource is an example of neutrons production. It illustrates the cooperative work + of nuclear reactions and radioactive decay processes. + It survey energy deposition and particle's flux. + It uses PhysicsConstructor objects. + +\section NeutronSource_s1 MATERIALS AND GEOMETRY DEFINITION + + The geometry is a cylinder (absorber) of an homogenous material (default : Beryllium oxide). + This absorber is within a container (default : stainless-steel). + + Five parameters define the geometry : + - the material of the absorber + - the radius and length of the absorber + - the material of the container + - the thickness of the container + + The default geometry is built in DetectorConstruction, but the above + parameters can be changed interactively via commands defined in DetectorMessenger. + + The container is surrounded by a World volume (air) + + A function, and its associated UI command, allows to build a material + directly from a single isotope. + + To be identified by the ThermalScattering module, the elements composing a + material must have a specific name (see G4ParticleHPThermalScatteringNames.cc) + Examples of such materials are build in DetectorConstruction of Hadr04,06,07. + +\section NeutronSource_s2 PHYSICS LIST + + "Full" set of physics processes are registered, but via PhysicsConstructor + objects rather than complete pre-defined G4 physics lists. This alternative + way may give more freedom to register physics. + + Physics constructors are either constructors provided in Geant4 (with G4 prefix) + or 'local'. They include : HadronElastic, HadronInelastic, IonsInelastic, GammaNuclear, + RadioactiveDecay and Electomagnetic. + (see geant4/source/physics_lists/constructors) + + HadronElasticPhysicsHP include a model for thermalized neutrons, under the control of a command + defined in NeutronHPMesseger. + + GammmaNuclearPhysics is a subset of G4BertiniElectroNuclearBuilder. + + ElectromagneticPhysics is a simplified version of G4EmStandardPhysics. + + In PhysicsList::ConstructProcess() we give an example of how to access hadronic models. + + Several hadronic physics options are controlled by environment variables. + To select them, see NeutronSource.cc + +\section NeutronSource_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic is a single particle uniformly shooted within the absorber. + The type of the particle and its energy are set in PrimaryGeneratorAction (Am241, at rest), + and can be changed via the G4 build-in commands of ParticleGun class + (see the macros provided with this example). + +\section NeutronSource_s4 PHYSICS + + The program computes and plots energy deposited in the interaction volume + (absorber + container) and the flux of particles leaving this volume. + Processes invoked and particles generated during hadronic cascade are listed. + +\section NeutronSource_s5 HISTOGRAMS + + The test contains 13 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + 1 "total energy deposit" + 2 "dummy" + 3 "total kinetic energy flow" + 4 "gamma flux (dN/dE) at exit" + 5 "e+- flux (dN/dE) at exit" + 6 "neutrons flux (dN/dE) at exit" + 7 "protons flux (dN/dE) at exit" + 8 "deuterons flux (dN/dE) at exit" + 9 "alphas flux (dN/dE) at exit" + 10 "all others ions flux (dN/dE) at exit" + 11 "all others baryons flux (dN/dE) at exit" + 12 "all others mesons flux (dN/dE) at exit" + 13 "all others leptons flux (dN/dE) at exit" + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default NeutronSource) +\endverbatim + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default NeutronSource) + +\section NeutronSource_s6 VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The tracks are drawn at the end of event, and erased at the end of run. + gamma green + neutron yellow + negative particles (e-, ...) red + positive particles (e+, ions, ...) blue + +\section NeutronSource_s7 HOW TO START ? + + Execute NeutronSource in 'batch' mode from macro files : +\verbatim +% NeutronSource run1.mac +\endverbatim + + Execute NeutronSource in 'interactive mode' with visualization : +\verbatim +% NeutronSource +Idle> control/execute vis.mac +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + + Macros provided in this example: + - run1.mac: Am-Be system (default configuration) + + Macros to be run interactively: + - debug.mac: Am-Be + - vis.mac: To activate visualization + +*/ diff --git a/examples/extended/hadronic/NeutronSource/README b/examples/extended/hadronic/NeutronSource/README new file mode 100644 index 0000000000..07dd1b6ab3 --- /dev/null +++ b/examples/extended/hadronic/NeutronSource/README @@ -0,0 +1,143 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + NeutronSource + ------------- + + NeutronSource is an example of neutrons production. It illustrates the cooperative work + of nuclear reactions and radioactive decay processes. + It survey energy deposition and particle's flux. + It uses PhysicsConstructor objects. + + + 1- MATERIALS AND GEOMETRY DEFINITION + + The geometry is a cylinder (absorber) of an homogenous material (default : Beryllium oxide). + This absorber is within a container (default : stainless-steel). + + Five parameters define the geometry : + - the material of the absorber + - the radius and length of the absorber + - the material of the container + - the thickness of the container + + The default geometry is built in DetectorConstruction, but the above + parameters can be changed interactively via commands defined in DetectorMessenger. + + The container is surrounded by a World volume (air) + + A function, and its associated UI command, allows to build a material + directly from a single isotope. + + To be identified by the ThermalScattering module, the elements composing a + material must have a specific name (see G4ParticleHPThermalScatteringNames.cc) + Examples of such materials are build in DetectorConstruction of Hadr04,06,07. + + 2- PHYSICS LIST + + "Full" set of physics processes are registered, but via PhysicsConstructor + objects rather than complete pre-defined G4 physics lists. This alternative + way may give more freedom to register physics. + + Physics constructors are either constructors provided in Geant4 (with G4 prefix) + or 'local'. They include : HadronElastic, HadronInelastic, IonsInelastic, GammaNuclear, + RadioactiveDecay and Electomagnetic. + (see geant4/source/physics_lists/constructors) + + HadronElasticPhysicsHP include a model for thermalized neutrons, under the control of a command + defined in NeutronHPMesseger. + + GammmaNuclearPhysics is a subset of G4BertiniElectroNuclearBuilder. + + ElectromagneticPhysics is a simplified version of G4EmStandardPhysics. + + In PhysicsList::ConstructProcess() we give an example of how to access hadronic models. + + Several hadronic physics options are controlled by environment variables. + To select them, see NeutronSource.cc + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic is a single particle uniformly shooted within the absorber. + The type of the particle and its energy are set in PrimaryGeneratorAction (Am241, at rest), + and can be changed via the G4 build-in commands of ParticleGun class + (see the macros provided with this example). + + 4- PHYSICS + + The program computes and plots energy deposited in the interaction volume + (absorber + container) and the flux of particles leaving this volume. + Processes invoked and particles generated during hadronic cascade are listed. + + 5- HISTOGRAMS + + The test contains 13 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + 1 "total energy deposit" + 2 "dummy" + 3 "total kinetic energy flow" + 4 "energy spectrum of emerging gamma" + 5 "energy spectrum of emerging e+-" + 6 "energy spectrum of emerging neutrons" + 7 "energy spectrum of emerging protons" + 8 "energy spectrum of emerging deuterons" + 9 "energy spectrum of emerging alphas" + 10 "energy spectrum of all others emerging ions" + 11 "energy spectrum of all others emerging baryons" + 12 "energy spectrum of all others emerging mesons" + 13 "energy spectrum of all others emerging leptons (neutrinos)" + + The histograms are managed by the HistoManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default NeutronSource) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default NeutronSource) + + 6- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The tracks are drawn at the end of event, and erased at the end of run. + gamma green + neutron yellow + negative particles (e-, ...) red + positive particles (e+, ions, ...) blue + + 7- HOW TO START ? + + Execute NeutronSource in 'batch' mode from macro files : + % NeutronSource run1.mac + + Execute NeutronSource in 'interactive mode' with visualization : + % NeutronSource + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit + + Macros provided in this example: + - run1.mac: Am-Be system (default configuration) + + Macros to be run interactively: + - debug.mac: Am-Be + - vis.mac: To activate visualization diff --git a/examples/extended/hadronic/README b/examples/extended/hadronic/README new file mode 100644 index 0000000000..acbbaed5ec --- /dev/null +++ b/examples/extended/hadronic/README @@ -0,0 +1,101 @@ + + Geant4 extended examples - Hadronic processes + ---------------------------------------------- + + Examples in this directory demonstrate specific hadronic physics simulation + with histogramming. + +Hadr00 +------ + +This example demonstrates a usage of G4PhysListFactory to build +Physics List and G4HadronicProcessStore to access cross sections. + +Hadr01 +------ + +This example application is based on the application IION developed for +simulation of proton or ion beam interaction with a water target. Different +aspects of beam target interaction are demonstrating in the example including +longitudinal profile of energy deposition, spectra of secondary particles, +spectra of particles leaving the target. + +Hadr02 +------ + +This example application is providing simulation of ion beam interaction with different +targets. Hadronic aspects of beam target interaction are demonstrated in the example +including longitudinal profile of energy deposition, spectra of secondary particles, +isotope production spectra. + +Hadr03 +------ + +This example demonstrates how to compute total cross section from the direct evaluation of the +mean free path ( see below, item Physics), how to identify nuclear reactions, how to plot +energy spectrum of secondary particles. + +Hadr04 +------ + +This example is focused on neutronHP physics, especially neutron transport, +including thermal scattering. +See A.R. Garcia, E. Mendoza, D. Cano-Ott presentation at G4 Hadronic group +meeting (04/2013) and note on G4NeutronHP package + +Hadr05 +------ + +Examples of hadronic calorimeters + +Hadr06 +------ + +This example demonstrates survey of energy deposition and particle's flux from +a hadronic cascade. + +Hadr07 +------ + +Survey energy deposition and particle's flux from an hadronic cascade. +Use PhysicsConstructor objects rather than predefined G4 PhysicsLists. +Show how to plot a depth dose profile in a rectangular box. + +Hadr08 +------ + +This example shows how to get "hadronic model per region" using generic +biasing: in particular, it is shown how to use "FTFP+INCLXX" in one region, +while using the default "FTFP+BERT" in all other regions. +Notice that we use the generic biasing machinery, but the actual weights +of all tracks remain to the usual value (1.0) as in the normal (unbiased) +case. + +Hadr09 +------ + +This example shows how to use Geant4 as a generator for simulating +inelastic hadron-nuclear interactions. +Notice that the Geant4 run-manager is not used. + +Hadr10 +------ + +This example aims to test the treatment of decays in Geant4. +In particular, we want to test the decays of the tau lepton, charmed and +bottom hadrons, and the use of pre-assigned decays. + +FissionFragment +--------------- +This example demonstrates the Fission Fragment model as used within the +neutron_hp model. It will demostrate the capability for fission product +containmentby the cladding in a water moderated sub-critical assembly. It could +also be further extended to calculate the effective multiplication factor of +the subcritical assembly for various loading schemes. + +NeutronSource +------------- +NeutronSource is an example of neutrons production. It illustrates the cooperative work +of nuclear reactions and radioactive decay processes. +It survey energy deposition and particle's flux. +It uses PhysicsConstructor objects. diff --git a/examples/extended/medical/.README.txt b/examples/extended/medical/.README.txt new file mode 100644 index 0000000000..679436d8ed --- /dev/null +++ b/examples/extended/medical/.README.txt @@ -0,0 +1,50 @@ + +///\file "medical/.README.txt" +///\brief Examples medical README page + +/*! \page Examples_medical Category "medical" + + Specific examples for medical physics applications are demonstarted + in this directory. + +\link ExampleDICOM DICOM \endlink + +This example serves first to convert a DICOM file to a simple ASCII +file, where the Hounsfield numbers are converted to materials and +densities so that it can be used by GEANT4. It serves also to create +a GEANT4 geometry based on the DICOM file information using the +G4PhantomParameterisation. + +\link ExampleDICOM2 DICOM2 \endlink + +This example demonstrates how to reuse the DICOM example library +for another application. + +\link Examples_dna dna \endlink + +Set of examples using the Geant4-DNA physics processes and models. + +\link ExampleelectronScattering electronScattering \endlink \n +\link ExampleelectronScattering2 electronScattering2 \endlink + +These example demonstrate electron scattering benchmarks. +ElectronScattering2 simulates the experiment with a minimum of user code, whereas the other +version of this example shows how to do more of the work directly as the user. + +\link ExamplefanoCavity fanoCavity \endlink + +This example computes the dose deposited in an ionization chamber by a +monoenergetic photon beam. + +\link ExamplefanoCavity2 fanoCavity2 \endlink + +This example computes the dose deposited in an ionization chamber by an +extended (one dimensional) monoenergetic electron source. +This variante of the Fano cavity test make use of an reciprocity theorem. + +\link ExampleGammaTherapy GammaTherapy \endlink + +This example demonstrates a gamma therapy application. + +*/ + diff --git a/examples/extended/medical/DICOM/.README.txt b/examples/extended/medical/DICOM/.README.txt new file mode 100644 index 0000000000..a363a08722 --- /dev/null +++ b/examples/extended/medical/DICOM/.README.txt @@ -0,0 +1,354 @@ + +///\file "medical/DICOM/.README.txt" +///\brief ExampleDICOM README page + +/*! \page ExampleDICOM Example DICOM + + +The DICOM application has been originally developed by the Geant4 users: \n +Louis Archambault,(1)Luc Beaulieu, (2)Vincent Hubert-Tremblay. + +- (1) Centre Hospitalier Universitaire de Quebec (CHUQ), \n +Hotel-Dieu de Quebec, departement de Radio-oncologie \n +11 cote du palais. Quebec, QC, Canada, G1R 2J6 \n +tel (418) 525-4444 #6720 \n +fax (418) 691 5268 \n +web : thomson.phy.ulaval.ca/phys_med \n + +- (2) Universite Laval, Quebec (QC) Canada + +And it has been deeply reviewed by Pedro Arce in December 2007. \n +Very small changes by Stephane Chauvie in January 2008. \n +Stephane Chauvie, Oct 2009: changed Physics list; changes in DICOM read. \n +Stephane Chauvie and Andrea Armando; June 2010 adapted for reading whatever DICOM file \n +Jonathan Madsen, Nov 2013: updated DICOM to utilize multithreading now available in Geant4.10 \n + + +\section DICOM_s0 NEW DICOM READER BASED ON DCMTK + +A new way to read DICOM files has been implemented since release 10.3, to avoid the often problems found by users when reading DICOM files. +It can also read RT structures in DICOM format as well as RT plans. +This utility uses the DCMTK (http://dicom.offis.de/dcmtk.php.en). + +\section DICOM_s1 NEW DICOM HEAD Project + +A new DICOM Digital Head included by S. Guatelli (susanna@uow.edu.au) and V. Giacometti. Available since Geant4 10.4. +The Digital model is documented in: Giacometti, V., Guatelli, S., Bazalova-Carter, M., Rosenfeld, A.B., Schulte, R.W., +"Development of a high resolution voxelised head phantom for medical physics applications", (2017) Physica Medica, 33, pp. 182-188. + +\section DICOM_s2 Introduction + +This example serves first to convert a DICOM file to a simple ASCII file, where the Hounsfield numbers are converted to materials and densities so that it can be used by GEANT4. It serves also to create a GEANT4 geometry based on the DICOM file information using the G4PhantomParameterisation. + +You can find the phantom reproduced in the image PhantomCT.jpg. +In the application the phantom is placed on a table. + +\section DICOM_s3a Installation OLD: + + - A standard Geant4 example GNUmakefile is provided + - Compile it with 'make'/'gmake' + + - A standard Geant4 example CMakeLists.txt is provided + - Configure via cmake with 'cmake -DGeant4_DIR=/path_to_geant4_install/lib/Geant4-x.x.x /path/to/DICOM/source' then make + +\section DICOM_s3b Installation NEW: + +You have to download and install DCMTK, see http://dicom.offis.de/dcmtk.php.en . At least you need version 3.6.1 or newer; the important thing is that you make sure it contains the dcmrt package. +Then define the enviromental variable DCMTK_BASE_DIR to point to the directory where you have installed it. +And to run it, you have to add to the enviromental variable LD_LIBRARY_PATH the path ${DCMTK_BASE_DIR}/lib (i.e. export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${DCMTK_BASE_DIR}/lib ) + +Then you have to set the enviromental variable DICOM_USE_DCMTK to 1. + - A standard Geant4 example GNUmakefile is provided, but have to uncomment the line +\verbatim +#DICOM_USE_DCMTK := true +\endverbatim + - Compile it with 'make'/'gmake' + + - A standard Geant4 example CMakeLists.txt is provided + - Configure via cmake with +\verbatim + 'cmake -DGeant4_DIR=/path_to_geant4_install/lib/Geant4-x.x.x \ + -DDCMTK_DIR=/path_to_dcmtk_install /path/to/DICOM/source' +\endverbatim + then make + +\section DICOM_s3c CMake installation and inheriting from DICOM + + - Set the CMAKE_INSTALL_PREFIX (typically use the same install prefix as the Geant4 distribution) + - Install the project + - Installation will install libraries + DICOMConfig.cmake + other config files + - if DCMTK is enabled, will also install dicomReader library + icomReaderConfig.cmake and it's other config files + - In the new Geant4 application, add "find_package(DICOM REQUIRED)" to CMakeLists.txt + - (optionally) add "set(DICOM_DIR ${Geant4_DIR} CACHE PATH "Path to DICOM installation config files") to CMakeLists.txt + - add "include_directories(${DICOM_INCLUDE_DIRS}) and link target to ${DICOM_LIBRARIES} + - if DCMTK is enabled, DICOMConfig.cmake will include the DCMTK and dicomReader installations, i.e. there is not need for "find_package(dicomReader)" or "find_package(DCMTK)" + +\section DICOM_s4 Run the example: + + - To run the environment variable G4LEDATA needs to be set, pointing to the low energy data base, and the G4LEVELGAMMADATA pointing to the PhotonEvaporation data base + + - batch mode: +\verbatim +DICOM run.mac +\endverbatim + + - interactive mode: +\verbatim +DICOM +\endverbatim + the file vis.mac is read in order to visualise the phantom with OpenGL, DAWN or VRML + + + - Environment variables: + - DICOM_CHANGE_MATERIAL_DENSITY + - set to the minimum density difference before making a separate material + - e.g. if DenseBone is from > 1.496 to <= 1.654 and DICOM_CHANGE_MATERIAL_DENSITY=0.079 + then DenseBone would be separated into DenseBone > 1.496 to <= 1.575 and DenseBone > 1.575 to <= 1.654 + - DICOM_PARTIAL_PARAM + - set to 1 to build the partial build instead of regular or nested construction (see section 9) + - DICOM_NESTED_PARAM + - set to 1 to build the nested construction (see section 9; overridden by DICOM_PARTIAL_PARAM) + - DICOM_NTHREADS + - To set the number of threads (when G4MULTITHREADED is defined via GEANT4_BUILD_MULTITHREADED=ON during Geant4 source build) + - Needs to be set to the number of desired threads, e.g. DICOM_NTHREADS=8 (default is 4 threads) + - DICOM_USE_HEAD + - set to 1 (export DICOM_USE_HEAD=1) to use the digital head phantom documented in Giacometti, V., Guatelli, S., Bazalova-Carter, M., Rosenfeld, A.B., Schulte, R.W., + "Development of a high resolution voxelised head phantom for medical physics applications", (2017) Physica Medica, 33, pp. 182-188. + To use this option, the DICOM library needs to be downloaded. This is distributed with the other Geant4 data files on the Geant4 Download site. + For convenience of use, it is suggested to have the DICOM library directory in the DICOM Geant4 extended example or in the directory containing the DICOM executable. + When using this option, + 1) export DICOM_USE_HEAD=1 + 2) export DICOM_PATH=path/to/DICOM1.1/DICOM_HEAD - to use the full DICOM HEAD project + or + export DICOM_PATH=path/to/DICOM1.1/DICOM_HEAD_TEST - to use 4 DICOM files of the DICOM HEAD project. This option is useful for testing purposes. + 3) THE DICOM_HEAD uses the OLD version of the Metadata files (see point 4a) + Note 1: The Conversion of Hounsfield numbers to materials (point 5) is not used. The material is associated to the voxel in the Detector Construction + without using the calibration curve.This happens because the DICOM project has already been segmented and cleaned from artefacts (see publication). + +\section DICOM_s5 Metadata file: + +The old version of "Data.dat" is found in "Data.dat.old", when the project is configured with DICOM_USE_DCMTK=OFF, +"Data.dat.old" is copied into the binary directory at "Data.dat". + - i.e. cp ${PROJECT_SOURCE_DIR}/Data.dat.old ${PROJECT_BINARY_DIR}/Data.dat + +The new version of "Data.dat" is found in "Data.dat.new", when the project is configured with DICOM_USE_DCMTK=ON, +"Data.dat.new" is copied into the binary directory as "Data.dat". + - i.e. cp ${PROJECT_SOURCE_DIR}/Data.dat.new ${PROJECT_BINARY_DIR}/Data.dat + +\section DICOM_s5a Metadata file, OLD version: + + The file Data.dat has the following information + - A line with the compression value (used only to create the .g4dcm and .g4dcmb, not to read it) + - A line with the number of files + - A line for each file name (to these names it will be added the suffix .dcm to read the DICOM files in their original format, and the suffix .g4dcm to read the text files that contain the DICOM information where the Hounsfield numbers have been converted to material and densities) + +In case you want to convert DICOM files to text files, it must have the following lines: + - The number of materials you want to use + - A line for each material describing its name and the upper bound of the density interval. The materials should be described in increasing order of density. The voxels with a density between 0. and the first upper bound will be assigned to the first material, those with a density between the first upper bound and the second upper bound will be assigned to the second material, etc. + +\section DICOM_s5b Metadata file, NEW version (based on DCMTK): + +As for the previous version, a Data.dat file has to be defined to manage the conversion options. The format of this file is though quite different from the previous version. The format of this file is based on tags (similary to the ASCII geometry files). +The following tags should be used: + +\subsection DICOM_s5b_sub1 :COMPRESSION level +Where "level" is the number of voxels that will be merged into one in the X and Y dimen- +sions. The Hounsfield numbers of the voxels merged are averaged to give the +resulting value for the new voxel.\n +Example: +\verbatim +:COMPRESSION 4 +\endverbatim +4 X 4 voxels will be merged, so that the number of voxels in X and Y dimensions will be reduced by a factor 4 + +\subsection DICOM_s5b_sub2 :FILE file_name +These are the list of files (one line per file) in DICOM format that will be treated. +They can be of modality CT, RTSTRUCT or RTPLAN (the code will automatically +detect its modality and treat it correspondingly).\n +Example: +\verbatim +:FILE 1.dcm +:FILE 2.dcm +:FILE 3.dcm +\endverbatim + +\subsection DICOM_s5b_sub3 :CT2D Hounsfield_number density +These sets of value pairs build the calibration curve (linearly interpolating between them). In other words, each Hounsfield number is given a material density using a function that is built interpolating between this list of value pairs.\n +Example: +\verbatim +:CT2D -5000 0. +:CT2D -1000 0.01 +:CT2D -400 0.602 +:CT2D 300 1.145 +:CT2D 2000 1.856 +\endverbatim + +\subsection DICOM_s5b_sub4 :MATE material_name upper_bound_of_material_Hounsfield_number_interval +This serves for the Hounsfield number to material name conversion. The voxels with a Hounsfield number between 0. and the first upper bound will be assigned to the first material, those with a Hounsfiled number between the first upper bound and the second upper bound will be assigned to the second material, etc.\n +Example: +\verbatim +:MATE G4_AIR -800 +:MATE G4_LUNG_ICRP -145 +:MATE G4_ADIPOSE_TISSUE_ICRP -60 +:MATE G4_WATER 0 +\endverbatim + +Alternatively to the use of :MATE, you can use the :MATE_DENS +\subsection DICOM_s5b_sub5 :MATE_DENS material_name upper_bound_of_material_density_interval +This serves for the material density to material name conversion. The voxels with a density between 0. and the first upper bound will be assigned to the first material, those with a density between the first upper bound and the second upper bound will be assigned to the second material, etc.\n +Example: +\verbatim +:MATE_DENS G4_AIR 0.207 +:MATE_DENS G4_LUNG_ICRP 0.919 +:MATE_DENS G4_ADIPOSE_TISSUE_ICRP 0.979 +:MATE_DENS G4_WATER 1.01 +\endverbatim + +We recommend the use of :MATE instead of :MATE_DENS as this is the way is used more often in the literature. + +\subsection DICOM_s5b_sub6 :FILE_OUT file_name +Name of output file containing the DICOM information in ASCII format + +\section DICOM_s6 Conversion of Hounsfield numbers to materials: + +After reading the name of files from Data.dat, if a file .dcm is found, then it looks for the corresponding .g4dcm file and if not found creates it. +Each file corresponds to a Z slice. The Z slices will be merged at runtime to form a unique patient volume; therefore the different slices have to be contiguous in Z. + +The DICOM images pixel values represent CT (Hounsfield) numbers and they should be converted, first, to a given density and then to a material type. The relation between CT number and density is more or less linear. +The file CT2Density.dat contains the calibration curve to convert CT (Hounsfield) number to physical density +The assignment of material densities to materials is done following the information from the file Data.dat (see below). In this case we have used: + +
+           #####################################################
+           #     Density Range                   Material      #
+           #---------------------------------------------------#
+           #       mg/cm3                            -         #
+           #---------------------------------------------------#
+           #  [ 0.    , 0.207 )                 Air            #
+           #  [ 0.207 , 0.481 )                 Lungs (inhale) #
+           #  [ 0.481 , 0.919 )                 Lungs (exhale) #
+           #  [ 0.919 , 0.979 )                 Adipose        #
+           #  [ 0.979 , 1.004 )                 Breast         #
+           #  [ 1.004 , 1.043 )                 Phantom        #
+           #  [ 1.043 , 1.109 )                 Liver          #
+           #  [ 1.109 , 1.113 )                 Muscle         #
+           #  [ 1.113 , 1.496 )                 Trabecular Bone#
+           #  [ 1.496 , 1.654 ]                 Dense Bone     #
+           #####################################################
+
+ +Data taken from the International Commission on Radiation Units and measurements (ICRU) report 46 was used to build the materials (lung, liver, breast, bones, ...) + +\section DICOM_s7 Splitting materials in density intervals: + +In the class DicomDetectorConstruction, it is defined a density interval + +\verbatim +G4double densityDiff = 0.1; +\endverbatim + +This means that the voxels of each material will be grouped in density intervals of 0.1 g/cm3 and a new material will be created for each group of voxels. + +\section DICOM_s8 Voxel colouring: + +The file Colormap.dat defines the colour that will be assigned to the voxels of each material. + +\section DICOM_s9 DICOM file formats: + +The DICOM files are converted to a simple text format. You may create your own file with the following format (see e.g. 14196616.g4dcm): + +- A line with the number of materials +- A line for each material with its index and name (the same name of materials that you construct as G4Material's) +- A line with the number of voxels in X, Y and Z +- A line with the minimum and maximum extension in X (mm) +- A line with the minimum and maximum extension in Y (mm) +- A line with the minimum and maximum extension in Z (mm) +- A number of lines containing the nVoxelX*nVoxelY*nVoxelZ material indices (one per voxel) +- A number of lines containing the nVoxelX*nVoxelY*nVoxelZ material densities (one per voxel) + +As commented before the DICOM files (.dcm) are assumed to describe one Z slice per file, and therefore the GEANT4 text files (.g4dcm) created from them have also one unique Z slice per file. Nevertheless if you create your own .g4dcm file you may include as many Z slices as desired. In any case you have to respect the rule that the Z slices must be contiguous. + +The same information is also used to fill a file in binary format, that contains the same information as the text format. Its name ends in .g4dcmb, instead of .g4dcm . + +\section DICOM_s10 Choosing different parameterisation/navigation options: + +There are four possible ways in GEANT4 to treat the navigation in regular voxelised volumes: + +-# The 3D optimisation with G4SmartVoxel: a 3D grid is built, so that the location of voxels is fast, but it requires a lot of memory +-# Using G4NestedParameterisation. The search is done hierarchically in X, Y and Z. It is fast and does not require big memory +-# Using G4PhantomParameterisation/G4RegularNavigation: an special algorithm to navigate in regular voxelised geometries (see GEANT4 doc). This is the fastest way without any extra memory requirement (and it is the default in this example). It includes an option (default) to skip frontiers between voxels when they have the same material. When using this option at each step the energy is all deposited in the last voxel; for properly distribution of the dose (=energy/volume) the G4PSDoseDeposit_RegNav scorer can be used (see below) + +Obsolete option: +-# The 1D optimisation . It will be very slow because each time a track exits a voxel it has to loop to all other voxels to know which one it may enter + +You can select among the four options in the following way: + +- By default the example will run with G4RegularNavigation + +- To use the first option at RegularDicomDetectorConstruction.cc you just have to set +\verbatim +patient_phys->SetRegularStructureId(0); +\endverbatim + +- To use the second option (Nested Parameterisation) you must set the enviromental variable DICOM_NESTED_PARAM to 1 + +- To use the final, obsolete 1D-option, apart from the change above at RegularDicomDetectorConstructio\ +n.cc you need to replace (i.e. use kUndefined) +\verbatim +G4PVParameterised* patient_phys + = new G4PVParameterised("Patient",voxel_logic,container_logic, + kXAxis, nVoxelX*nVoxelY*nVoxelZ, param); +\endverbatim +by +\verbatim +G4PVParameterised * patient_phys + = new G4PVParameterised("Patient",voxel_logic,container_logic, + kUndefined, nVoxelX*nVoxelY*nVoxelZ, param); +\endverbatim + +Note also you must *not* set the enviromental variable DICOM_NESTED_PARAM. + + +\section DICOM_s11 Calculating dose in phantom voxels for regular navigation + +As mentioned above the regular navigation has the option to keip voxel frontiers when two voxels share the same material, what can make the CPU time several times smaller. But this option makes that all energy deposited is computed in the last voxel, instead of distributing it along the voxels traversed. To properly calculate the dose in each voxel the G4PSDoseDeposit_RegNav scorer can be used. + +It takes into account the fact that, when the particle travels through the voxels it looses energy and therefore the energy lost per length (dEdx) is bigger and also the effect of the multiple scattering is bigger. +The algorithm to make this correction is an iterative one, as the step length increase due multiple scattering (that converts the geometrical step length in what we will call the true step length) and the energy loss are correlated. +It works in the folloing way: first the total true step length is distributed among the voxels proportionally to their geometrical step length; with these values it is calculated one voxel after another the value of dEdx and then the value of the kinetic energy at the entrance of each voxel; with these values it is calculated the geometrical to true step corrections due to multiple scattering for each voxel; finally these new values are used to recalculate the energy lost in each voxel. It has been demonstrated for dose in a water phantom and in a real phantom that the two-step iteration described is enough to reproduce the dose calcualted when no skipping of voxel frontiers is done. + +This scorer is implemented in this examples if the regular navigation option is +chosen. It is triggered at the method RegularDicomDetectorConstruction::ConstructPhantom() by the call +\verbatim +SetScorer(voxel_logic); +\endverbatim + +\section DICOM_s12 Output +dicom.out is produced running the macro file run.mac. It has 2 columns: the first is the number of +voxel (ordered in x,y,z) and the second the dose there deposited (in Gy) +It is produced, as an example, with a compression value of 32 + + +\section DICOM_s13 Partial phantom +It is possible to create a partial phantom, that is the intersection of a phantom with a volume. You may define the volume with the command + +\verbatim +/dicom/intersectWithUserVolume 0. 0. 0. 45.*deg 0. 0. TUBE 0. 150. 100. +\endverbatim + +where the first three arguments are its position, its second three arguments are the rotation around the global X, Y and Z axis and the rest of the parameters are the same that you use to build a solid using the ASCII geometry format + +Alternatively you can intersect the phantom with an existing Geant4 volume with the command + +\verbatim +/dicom/intersectWithG4Volume VOLUME_NAME +\endverbatim + +The job will create an ASCII file names "phantom.g4pdcm" containing the partial phantom. To read this file all what is needed is to set the enviromental variable DICOM_PARTIAL_PARAM to 1 + +\section DICOM_s14 Visualisation + +The Geant4 drivers are not meant for visualizing millions of voxel and visualising the DICOM geometries can be very computationally demanding. +The users may want to visualise each DICOM slice separately or use higher compression values when visualising a part of DICOM project. + +*/ diff --git a/examples/extended/medical/DICOM/README b/examples/extended/medical/DICOM/README new file mode 100644 index 0000000000..0f3fbb1a85 --- /dev/null +++ b/examples/extended/medical/DICOM/README @@ -0,0 +1,331 @@ ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| DicomG4 | ++ + +| README | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +The DICOM application has been originally developed by the Geant4 users: +Louis Archambault,+Luc Beaulieu, ++Vincent Hubert-Tremblay. + ++ Centre Hospitalier Universitaire de Quebec (CHUQ), +Hotel-Dieu de Quebec, departement de Radio-oncologie +11 cote du palais. Quebec, QC, Canada, G1R 2J6 +tel (418) 525-4444 #6720 +fax (418) 691 5268 +web : thomson.phy.ulaval.ca/phys_med + +++ Université Laval, Québec (QC) Canada + + +And it has been deeply reviewed by Pedro Arce in December 2007. +Very small changes by Stephane Chauvie in January 2008. +Stephane Chauvie, Oct 2009: changed Physics list; changes in DICOM read. +Stephane Chauvie and Andrea Armando; June 2010 adapted for reading whatever DICOM file +Jonathan Madsen, Nov 2013: updated DICOM to utilize multithreading now available in Geant4.10 + +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@@ @@@ +@@@ NEW DICOM READER BASED ON DCMTK @@@ +@@@ @@@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +A new way to read DICOM files has been implemented since release 10.3, to avoid the often problems found by users when reading DICOM files. +It can also read RT structures in DICOM format as well as RT plans. +This utility uses the DCMTK (http://dicom.offis.de/dcmtk.php.en). + + +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@@ @@@ +@@@ NEW DICOM HEAD PROJECT @@@ +@@@ @@@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +A new DICOM Digital Head included by S. Guatelli (susanna@uow.edu.au) and V. Giacometti. Available since Geant4 10.4. +The Digital model is documented in: Giacometti, V., Guatelli, S., Bazalova-Carter, M., Rosenfeld, A.B., Schulte, R.W., +"Development of a high resolution voxelised head phantom for medical physics applications", (2017) Physica Medica, 33, pp. 182-188. + +--->1) Introduction + +This example serves first to convert a DICOM file to a simple ASCII file, where the Hounsfield numbers are converted to materials and densities so that it can be used by GEANT4. It serves also to create a GEANT4 geometry based on the DICOM file information using the G4PhantomParameterisation. + +You can find the phantom reproduced in the image PhantomCT.jpg. +In the application the phantom is placed on a table. + +---> 2a) Installation, OLD version: + + - A standard Geant4 example GNUmakefile is provided + - Compile it with 'make'/'gmake' + + - A standard Geant4 example CMakeLists.txt is provided + - Configure via cmake with 'cmake -DGeant4_DIR=/path_to_geant4_install/lib/Geant4-x.x.x /path/to/DICOM/source' then make + +---> 2b) Installation, NEW version (based on DCMTK): + +You have to download and install DCMTK, see http://dicom.offis.de/dcmtk.php.en . At least you need version 3.6.1 or newer; the important thing is that you make sure it contains the dcmrt package. +Then define the enviromental variable DCMTK_BASE_DIR to point to the directory where you have installed it. +And to run it, you have to add to the enviromental variable LD_LIBRARY_PATH the path ${DCMTK_BASE_DIR}/lib (i.e. export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${DCMTK_BASE_DIR}/lib ) + + Then you have to set the enviromental variable DICOM_USE_DCMTK to 1. + - A standard Geant4 example GNUmakefile is provided, but have to uncomment the line + #DICOM_USE_DCMTK := true + - Compile it with 'make'/'gmake' + + - A standard Geant4 example CMakeLists.txt is provided + - Configure via cmake with + 'cmake -DGeant4_DIR=/path_to_geant4_install/lib/Geant4-x.x.x \ + -DDCMTK_DIR=/path_to_dcmtk_install /path/to/DICOM/source' +then make + +---> 2c) CMake installation and inheriting from DICOM: + + - Set the CMAKE_INSTALL_PREFIX (typically use the same install prefix as the Geant4 distribution) + - Install the project + - Installation will install libraries + DICOMConfig.cmake + other config files + - if DCMTK is enabled, will also install dicomReader library + icomReaderConfig.cmake and it's other config files + - In the new Geant4 application, add "find_package(DICOM REQUIRED)" to CMakeLists.txt + - (optionally) add "set(DICOM_DIR ${Geant4_DIR} CACHE PATH "Path to DICOM installation config files") to CMakeLists.txt + - add "include_directories(${DICOM_INCLUDE_DIRS}) and link target to ${DICOM_LIBRARIES} + - if DCMTK is enabled, DICOMConfig.cmake will include the DCMTK and dicomReader installations, i.e. there is not need for "find_package(dicomReader)" or "find_package(DCMTK)" + + +---> 3) Run the example: + + - To run, the environment variable G4LEDATA needs to be set, pointing to the low energy data base, and the G4LEVELGAMMADATA pointing to the PhotonEvaporation data base + + - batch mode: + - DICOM run.mac + + - interactive mode: + - DICOM + the file vis.mac is read in order to visualise the phantom with OpenGL, DAWN or VRML + + - Environment variables: + - DICOM_CHANGE_MATERIAL_DENSITY + - set to the minimum density difference before making a separate material + - e.g. if DenseBone is from > 1.496 to <= 1.654 and DICOM_CHANGE_MATERIAL_DENSITY=0.079 + then DenseBone would be separated into DenseBone > 1.496 to <= 1.575 and DenseBone > 1.575 to <= 1.654 + - DICOM_PARTIAL_PARAM + - set to 1 to build the partial build instead of regular or nested construction (see section 9) + - DICOM_NESTED_PARAM + - set to 1 to build the nested construction (see section 9; overridden by DICOM_PARTIAL_PARAM) + - DICOM_NTHREADS + - To set the number of threads (when G4MULTITHREADED is defined via GEANT4_BUILD_MULTITHREADED=ON during Geant4 source build) + - Needs to be set to the number of desired threads, e.g. DICOM_NTHREADS=8 (default is 4 threads) + - DICOM_USE_HEAD + - set to 1 (export DICOM_USE_HEAD=1) to use the digital head phantom documented in Giacometti, V., Guatelli, S., Bazalova-Carter, M., Rosenfeld, A.B., Schulte, R.W., + "Development of a high resolution voxelised head phantom for medical physics applications", (2017) Physica Medica, 33, pp. 182-188. + To use this option, the DICOM library needs to be downloaded. This is distributed with the other Geant4 data files on the Geant4 Download site. + For convenience of use, it is suggested to have the DICOM library directory in the DICOM Geant4 extended example or in the directory containing the DICOM executable. + When using this option, + 1) export DICOM_USE_HEAD=1 + 2) export DICOM_PATH=path/to/DICOM1.1/DICOM_HEAD - to use the full DICOM HEAD project + or + export DICOM_PATH=path/to/DICOM1.1/DICOM_HEAD_TEST - to use 4 DICOM files of the DICOM HEAD project. This option is useful for testing purposes. + 3) THE DICOM_HEAD uses the OLD version of the Metadata files (see point 4a) + Note 1: The Conversion of Hounsfield numbers to materials (point 5) is not used. The material is associated to the voxel in the Detector Construction + without using the calibration curve.This happens because the DICOM project has already been segmented and cleaned from artefacts (see publication). + +---> 4) Metadata file: + +The old version of "Data.dat" is found in "Data.dat.old", when the project is configured with DICOM_USE_DCMTK=OFF, +"Data.dat.old" is copied into the binary directory at "Data.dat". + - i.e. cp ${PROJECT_SOURCE_DIR}/Data.dat.old ${PROJECT_BINARY_DIR}/Data.dat + +The new version of "Data.dat" is found in "Data.dat.new", when the project is configured with DICOM_USE_DCMTK=ON, +"Data.dat.new" is copied into the binary directory as "Data.dat". + - i.e. cp ${PROJECT_SOURCE_DIR}/Data.dat.new ${PROJECT_BINARY_DIR}/Data.dat + +---> 4a) Metadata file, OLD version: + + The file Data.dat has the following information + - A line with the compression value (used only to create the .g4dcm and .g4dcmb, not to read it) + - A line with the number of files + - A line for each file name (to these names it will be added the suffix .dcm to read the DICOM files in their original format, and the suffix .g4dcm to read the text files that contain the DICOM information where the Hounsfield numbers have been converted to material and densities) + +In case you want to convert DICOM files to text files, it must have the following lines: + - The number of materials you want to use + - A line for each material describing its name and the upper bound of the density interval. The materials should be described in increasing order of density. The voxels with a density between 0. and the first upper bound will be assigned to the first material, those with a density between the first upper bound and the second upper bound will be assigned to the second material, etc. + +---> 4b) Metadata file, NEW version (based on DCMTK): + +As for the previous version, a Data.dat file has to be defined to manage the conversion options. The format of this file is though quite different from the previous version. The format of this file is based on tags (similary to the ASCII geometry files). +The following tags should be used: + +:COMPRESSION level + +Where "level" is the number of voxels that will be merged into one in the X and Y dimen- +sions. The Hounsfield numbers of the voxels merged are averaged to give the +resulting value for the new voxel. +Example: +:COMPRESSION 4 // 4 X 4 voxels will be merged, so that the number of voxels in X and Y dimensions will be reduced by a factor 4 + +:FILE file_name +These are the list of files (one line per file) in DICOM format that will be treated. +They can be of modality CT, RTSTRUCT or RTPLAN (the code will automatically +detect its modality and treat it correspondingly). +Example: +:FILE 1.dcm +:FILE 2.dcm +:FILE 3.dcm + +:CT2D Hounsfield_number density +These sets of value pairs build the calibration curve (linearly interpolating between them). In other words, each Hounsfield number is given a material density using a function that is built interpolating between this list of value pairs. +Example: +:CT2D -5000 0. +:CT2D -1000 0.01 +:CT2D -400 0.602 +:CT2D 300 1.145 +:CT2D 2000 1.856 + +:MATE material_name upper_bound_of_material_Hounsfield_number_interval +This serves for the Hounsfield number to material name conversion. The voxels with a Hounsfield number between 0. and the first upper bound will be assigned to the first material, those with a Hounsfiled number between the first upper bound and the second upper bound will be assigned to the second material, etc. +Example: +:MATE G4_AIR -800 +:MATE G4_LUNG_ICRP -145 +:MATE G4_ADIPOSE_TISSUE_ICRP -60 +:MATE G4_WATER 0 + +Alternatively to the use of :MATE, you can use the :MATE_DENS +:MATE_DENS material_name upper_bound_of_material_density_interval +This serves for the material density to material name conversion. The voxels with a density between 0. and the first upper bound will be assigned to the first material, those with a density between the first upper bound and the second upper bound will be assigned to the second material, etc. +Example: +:MATE_DENS G4_AIR 0.207 +:MATE_DENS G4_LUNG_ICRP 0.919 +:MATE_DENS G4_ADIPOSE_TISSUE_ICRP 0.979 +:MATE_DENS G4_WATER 1.01 + +We recommend the use of :MATE instead of :MATE_DENS as this is the way is used more often in the literature. + +:FILE_OUT file_name +Name of output file containing the DICOM information in ASCII format + + +--->5) Conversion of Hounsfield numbers to materials: + +After reading the name of files from Data.dat, if a file .dcm is found, then it looks for the corresponding .g4dcm file and if not found creates it. +Each file corresponds to a Z slice. The Z slices will be merged at runtime to form a unique patient volume; therefore the different slices have to be contiguous in Z. + +The DICOM images pixel values represent CT (Hounsfield) numbers and they should be converted, first, to a given density and then to a material type. The relation between CT number and density is more or less linear. +The file CT2Density.dat contains the calibration curve to convert CT (Hounsfield) number to physical density +The assignment of material densities to materials is done following the information from the file Data.dat (see below). In this case we have used: + + ##################################################### + # Density Range Material # + #---------------------------------------------------# + # mg/cm3 - # + #---------------------------------------------------# + # [ 0. , 0.207 ) Air # + # [ 0.207 , 0.481 ) Lungs (inhale) # + # [ 0.481 , 0.919 ) Lungs (exhale) # + # [ 0.919 , 0.979 ) Adipose # + # [ 0.979 , 1.004 ) Breast # + # [ 1.004 , 1.043 ) Phantom # + # [ 1.043 , 1.109 ) Liver # + # [ 1.109 , 1.113 ) Muscle # + # [ 1.113 , 1.496 ) Trabecular Bone# + # [ 1.496 , 1.654 ] Dense Bone # + ##################################################### + +Data taken from the International Commission on Radiation Units and measurements (ICRU) report 46 was used to build the materials (lung, liver, breast, bones, ...). + +When using the Digital Head Phantom, the CT2Density.dat is not used. The conversion is performed directly in the Dicom Handler.cc + +--->6) Splitting materials in density intervals: + +In the class DicomDetectorConstruction, it is defined a density interval + + G4double densityDiff = 0.1; + +This means that the voxels of each material will be grouped in density intervals of 0.1 g/cm3 and a new material will be created for each group of voxels. + +--->7) Voxel colouring: + +The file Colormap.dat defines the colour that will be assigned to the voxels of each material. + +--->8) DICOM file formats: + +The DICOM files are converted to a simple text format. You may create your own file with the following format (see e.g. 14196616.g4dcm): + +- A line with the number of materials +- A line for each material with its index and name (the same name of materials that you construct as G4Material's) +- A line with the number of voxels in X, Y and Z +- A line with the minimum and maximum extension in X (mm) +- A line with the minimum and maximum extension in Y (mm) +- A line with the minimum and maximum extension in Z (mm) +- A number of lines containing the nVoxelX*nVoxelY*nVoxelZ material indices (one per voxel) +- A number of lines containing the nVoxelX*nVoxelY*nVoxelZ material densities (one per voxel) + +As commented before the DICOM files (.dcm) are assumed to describe one Z slice per file, and therefore the GEANT4 text files (.g4dcm) created from them have also one unique Z slice per file. Nevertheless if you create your own .g4dcm file you may include as many Z slices as desired. In any case you have to respect the rule that the Z slices must be contiguous. + +The same information is also used to fill a file in binary format, that contains the same information as the text format. Its name ends in .g4dcmb, instead of .g4dcm . + +--->9) Choosing different parameterisation/navigation options: + +There are four possible ways in GEANT4 to treat the navigation in regular voxelised volumes: + +- The 3D optimisation with G4SmartVoxel: a 3D grid is built, so that the location of voxels is fast, but it requires a lot of memory +- Using G4NestedParameterisation. The search is done hierarchically in X, Y and Z. It is fast and does not require big memory +- Using G4PhantomParameterisation/G4RegularNavigation: an special algorithm to navigate in regular voxelised geometries (see GEANT4 doc). This is the fastest way without any extra memory requirement (and it is the default in this example). It includes an option (default) to skip frontiers between voxels when they have the same material. When using this option at each step the energy is all deposited in the last voxel; for properly distribution of the dose (=energy/volume) the G4PSDoseDeposit_RegNav scorer can be used (see below). + +Obsolete option: +- Use 1D optimisation in replica. It will be very slow because each time a track exits a voxel it has to loop to all other voxels in a 2D slide in order to locate which one it will enter. + +You can select amongst the four options in the following way: + +- By default the example will run with G4RegularNavigation + +- To use the first option at RegularDicomDetectorConstruction.cc you must set + + patient_phys->SetRegularStructureId(0); + +- To use the second option (Nested Parameterisation) you must set the enviromental variable DICOM_NESTED_PARAM to 1 + +- To use the final, obsolete 1D-option, apart from the change above at RegularDicomDetectorConstruction.cc you need to replace (i.e. use kUndefined) + + G4PVParameterised * patient_phys = new G4PVParameterised("Patient",voxel_logic,container_logic, + kUndefined, nVoxelX*nVoxelY*nVoxelZ, param); +by + G4PVParameterised * patient_phys = new G4PVParameterised("Patient",voxel_logic,container_logic, + kXAxis, nVoxelX*nVoxelY*nVoxelZ, param); + + Note also you must *not* set the enviromental variable DICOM_NESTED_PARAM. + + +--->10) Calculating dose in phantom voxels for regular navigation + +As mentioned above the regular navigation has the option to keip voxel frontiers when two voxels share the same material, what can make the CPU time several times smaller. But this option makes that all energy deposited is computed in the last voxel, instead of distributing it along the voxels traversed. To properly calculate the dose in each voxel the G4PSDoseDeposit_RegNav scorer can be used. + +It takes into account the fact that, when the particle travels through the voxels it looses energy and therefore the energy lost per length (dEdx) is bigger and also the effect of the multiple scattering is bigger. +The algorithm to make this correction is an iterative one, as the step length increase due multiple scattering (that converts the geometrical step length in what we will call the true step length) and the energy loss are correlated. +It works in the folloing way: first the total true step length is distributed among the voxels proportionally to their geometrical step length; with these values it is calculated one voxel after another the value of dEdx and then the value of the kinetic energy at the entrance of each voxel; with these values it is calculated the geometrical to true step corrections due to multiple scattering for each voxel; finally these new values are used to recalculate the energy lost in each voxel. It has been demonstrated for dose in a water phantom and in a real phantom that the two-step iteration described is enough to reproduce the dose calcualted when no skipping of voxel frontiers is done. + +This scorer is implemented in this examples if the regular navigation option is +chosen. It is triggered at the method RegularDicomDetectorConstruction::ConstructPhantom() by the call + +SetScorer(voxel_logic); + +--->11) Output +dicom.out is produced running the macro file run.mac. It has 2 columns: the first is the number of +voxel (ordered in x,y,z) and the second the dose there deposited (in Gy) +It is produced, as an example, with a compression value of 32 + + +--->12) Partial phantom +It is possible to create a partial phantom, that is the intersection of a phantom with a volume. You may define the volume with the command + +/dicom/intersectWithUserVolume 0. 0. 0. 45.*deg 0. 0. TUBE 0. 150. 100. + +where the first three arguments are its position, its second three arguments are the rotation around the global X, Y and Z axis and the rest of the parameters are the same that you use to build a solid using the ASCII geometry format + +Alternatively you can intersect the phantom with an existing Geant4 volume with the command + +/dicom/intersectWithG4Volume VOLUME_NAME + +The job will create an ASCII file names "phantom.g4pdcm" containing the partial phantom. To read this file all what is needed is to set the enviromental variable DICOM_PARTIAL_PARAM to 1 + +--->13) Visualisation + +The Geant4 drivers are not meant for visualizing millions of voxel and visualising the DICOM geometries can be very computationally demanding. +The users may want to visualise each DICOM slice separately or use higher compression values when visualising a part of DICOM project. + + + diff --git a/examples/extended/medical/DICOM2/.README.txt b/examples/extended/medical/DICOM2/.README.txt new file mode 100644 index 0000000000..71287cc9b5 --- /dev/null +++ b/examples/extended/medical/DICOM2/.README.txt @@ -0,0 +1,69 @@ + +///\file "DICOM2/.README.txt" +///\brief Example DICOM2 README page + +/*! \page ExampleDICOM2 Example DICOM2 + + This example demonstrates how to inherit from the DICOM example. + For more information of the DICOM problem, see the documentation + for the DICOM example + +\section DICOM2_s0 Introduction + +This example demonstrates how to inherit from the DICOM example. +For more information on the DICOM example, see the README in +the DICOM example. In addition to demonstrating inheritance from DICOM, +this example demonstrates method for memory savings, scoring into a sequential +container instead of an associative container, accumulating the scoring +with a statistics class instead of a simple floating point, and generic iteration +over the variety of scoring container storage variants provided by Geant4 + +\section DICOM2_s1 Configuration and Building + +The DICOM example should be built and installed. By default, the CMake configuration +for the DICOM example will install to the same directory as ${Geant4_DIR}. + +When configurating this example, provide DICOM_DIR=, e.g. + +$ cmake -DGeant4_DIR=/usr/local/lib/Geant4-10.5.0 -DDICOM_DIR=/usr/local/lib/Geant4-10.5.0 + +This example will enable DCMTK and/or DICOM_HEAD based on the configuration set when +the DICOM example was installed. The files "Data.dat.old" and "Data.dat.new" follow +the same pattern of being copied to "Data.dat" in the binary directory that is detailed +out in Section 4 of the DICOM README. + +\section DICOM2_s2 Class Overview + +- Dicom2Run: + - How to save memory with G4VTHitsVector instead of G4THitsMap + - How to implement G4VTHitsVector with objects instead of pointers (saving more memory) + - How to use G4StatAnalysis within G4VTHitsVector (or G4VTHitsMap) to obtain per-voxel + statistics + - G4StatAnalysis provides standard deviation, mean, variance, relative error, + FOM, r2int, r2eff, coefficient of variant, and efficiency in a class that + consumes significantly less memory than G4ConvergenceTester + - Implements scoring accumulation over the course of a run in + G4VTHitsVector> Dicom2RunVector + - The first template parameter is the type of the data (i.e. double, G4StatAnalysis, etc.) + and the second template parameter is the underlying storage type -- by + specifying std::vector, we override the default storage + format of std::vector which results in memory savings +- Dicom2RunAction: + - Overloads EndOfRunAction(const G4Run*) to print out the same quantities + as DICOM but with the G4StatAnalysis class + - Demonstrates generic iteration of hits containers + - The new iteration scheme over hits containers works + regardless of whether the underlying storage type is a map, multimap, unordered_map, + unordered_multimap, vector, or deque and regardless of whether the data + type stored in the sequential container types (vector and deque) are an object or + or a pointer to an object +- Dicom2PrimaryGeneratorAction: + - Minor variation of DicomPrimaryGeneratorAction that randomizes the initial + direction of the particle +- Dicom2ActionInitialization: + - In addition Dicom2RunAction and Dicom2PrimaryGeneratorAction, this class + instantiates DicomEventAction + +*/ + + diff --git a/examples/extended/medical/DICOM2/README b/examples/extended/medical/DICOM2/README new file mode 100644 index 0000000000..d8fa3f1ac6 --- /dev/null +++ b/examples/extended/medical/DICOM2/README @@ -0,0 +1,65 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example DICOM2 + -------------- + + +---> 1) Introduction + +This example demonstrates how to inherit from the DICOM example. +For more information on the DICOM example, see the README in +the DICOM example. In addition to demonstrating inheritance from DICOM, +this example demonstrates method for memory savings, scoring into a sequential +container instead of an associative container, accumulating the scoring +with a statistics class instead of a simple floating point, and generic iteration +over the variety of scoring container storage variants provided by Geant4 + +---> 2) Configuration and Building + +The DICOM example should be built and installed. By default, the CMake configuration +for the DICOM example will install to the same directory as ${Geant4_DIR}. + +When configurating this example, provide DICOM_DIR=, e.g. + +$ cmake -DGeant4_DIR=/usr/local/lib/Geant4-10.5.0 -DDICOM_DIR=/usr/local/lib/Geant4-10.5.0 + +This example will enable DCMTK and/or DICOM_HEAD based on the configuration set when +the DICOM example was installed. The files "Data.dat.old" and "Data.dat.new" follow +the same pattern of being copied to "Data.dat" in the binary directory that is detailed +out in Section 4 of the DICOM README. + +---> 3) Class Overview + +- Dicom2Run: + - How to save memory with G4VTHitsVector instead of G4THitsMap + - How to implement G4VTHitsVector with objects instead of pointers (saving more memory) + - How to use G4StatAnalysis within G4VTHitsVector (or G4VTHitsMap) to obtain per-voxel + statistics + - G4StatAnalysis provides standard deviation, mean, variance, relative error, + FOM, r2int, r2eff, coefficient of variant, and efficiency in a class that + consumes significantly less memory than G4ConvergenceTester + - Implements scoring accumulation over the course of a run in + G4VTHitsVector> Dicom2RunVector + - The first template parameter is the type of the data (i.e. double, G4StatAnalysis, etc.) + and the second template parameter is the underlying storage type -- by + specifying std::vector, we override the default storage + format of std::vector which results in memory savings +- Dicom2RunAction: + - Overloads EndOfRunAction(const G4Run*) to print out the same quantities + as DICOM but with the G4StatAnalysis class + - Demonstrates generic iteration of hits containers + - The new iteration scheme over hits containers works + regardless of whether the underlying storage type is a map, multimap, unordered_map, + unordered_multimap, vector, or deque and regardless of whether the data + type stored in the sequential container types (vector and deque) are an object or + or a pointer to an object +- Dicom2PrimaryGeneratorAction: + - Minor variation of DicomPrimaryGeneratorAction that randomizes the initial + direction of the particle +- Dicom2ActionInitialization: + - In addition Dicom2RunAction and Dicom2PrimaryGeneratorAction, this class + instantiates DicomEventAction diff --git a/examples/extended/medical/GammaTherapy/.README.txt b/examples/extended/medical/GammaTherapy/.README.txt new file mode 100644 index 0000000000..33c57b96e3 --- /dev/null +++ b/examples/extended/medical/GammaTherapy/.README.txt @@ -0,0 +1,70 @@ + +///\file "medical/GammaTherapy/.README.txt" +///\brief Example GammaTherapy README page + +/*! \page ExampleGammaTherapy Example GammaTherapy + +\author I.Gudovska, V.Ivanchenko, S.Larsson \n +Karolinska Institute & Hospital, Stockholm, Sweden \n +CERN, Geneva, Switzerland + +Electron beam of 50 MeV converted on target. All charged particles removed +from the beam after the target. Gamma beam irradiate a water phantom. +In front of the phantom a thin CheckVolume is placed to score gamma +beam properties. Inside the phantom a score volume is placed to calculate +radial radiation dose distribution. + + +\section ExampleGammaTherapy_s1 GEOMETRY + + +GammaTherapy application geometry consists of along z: + +-# Generator of electrons directed along z-axis +-# Target1 (Be, W) +-# Target2 (W, Cu) +-# GasVolume (He) : all charged particles are killed inside +-# CheckVolume (Air) : is sensitive for scoring in front of thephantom +-# Phantom (H2O) : is sensitive for radioactive dose calculation +-# Absorber in Phantom (H2O) : is sensitive for transverse dose calculation + +World volume consists of Air. + +\section ExampleGammaTherapy_s2 STEERING + +Geometry and other parameters can be defined by G4 UI commands. + +Following macro files are prepared for different targets used in the real +setup: be.in (thin Be target), be_w.in (thick BeW target), cu_w.in (thick +Cu W target). + +Only Physics Lists from physics_list kernal library can be activated. +Corresponding UI commands are following + +\verbatim +/testem/phys/addPhysics emstandard +/testem/phys/addPhysics emstandard_opt3 +/testem/phys/addPhysics empenelope +/testem/phys/addPhysics emlivermore +\endverbatim + +For interactive mode G4 visualization options and variables should be +defined, then the example should be recompiled: + +\verbatim +gmake visclean +gmake +\endverbatim + +The vis.mac file can be used an example of visualization. + +\section ExampleGammaTherapy_s3 HISTOGRAMS + +Built in histograms are provided. Name of output root file can be +defined via UI command + +\verbatim +/testem/histoName +\endverbatim + +*/ diff --git a/examples/extended/medical/GammaTherapy/README b/examples/extended/medical/GammaTherapy/README new file mode 100644 index 0000000000..0acfb8798f --- /dev/null +++ b/examples/extended/medical/GammaTherapy/README @@ -0,0 +1,67 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + + GAMMA THERAPY + + I.Gudovska, V.Ivanchenko, S.Larsson + Karolinska Institute & Hospital, Stockholm, Sweden + CERN, Geneva, Switzerland + + +Electron beam of 50 MeV converted on target. All charged particles removed +from the beam after the target. Gamma beam irradiate a water phantom. +In front of the phantom a thin CheckVolume is placed to score gamma +beam properties. Inside the phantom a score volume is placed to calculate +radial radiation dose distribution. + + + GEOMETRY + + +GammaTherapy application geometry consists of along z: + +1. Generator of electrons directed along z-axis +2. Target1 (Be, W) +3. Target2 (W, Cu) +4. GasVolume (He) all charged particles are killed inside +5. CheckVolume (Air) is sensitive for scoring in front of thephantom +6. Phantom (H2O) is sensitive for radioactive dose calculation +7. Absorber in Phantom (H2O) is sensitive for transverse dose calculation + +World volume consists of Air. + + + STEERING + +Geometry and other parameters can be defined by G4 UI commands. + +Following macro files are prepared for different targets used in the real +setup: be.in (thin Be target), be_w.in (thick BeW target), cu_w.in (thick +Cu W target). + +Only Physics Lists from physics_list kernal library can be activated. +Corresponding UI commands are following + +/testem/phys/addPhysics emstandard +/testem/phys/addPhysics emstandard_opt3 +/testem/phys/addPhysics empenelope +/testem/phys/addPhysics emlivermore + +For interactive mode G4 visualization options and variables should be +defined, then the example should be recompiled: + +gmake visclean +gmake + +The vis.mac file can be used an example of visualization. + + + HISTOGRAMS + +Built in histograms are provided. Name of output root file can be +defined via UI command + +/testem/histoName + diff --git a/examples/extended/medical/README b/examples/extended/medical/README new file mode 100644 index 0000000000..d2f30771de --- /dev/null +++ b/examples/extended/medical/README @@ -0,0 +1,55 @@ + + Geant4 extended examples - medical + ----------------------------------- + + Specific examples for medical physics applications are demonstarted + in this directory. + +DICOM +----- + +This example serves first to convert a DICOM file to a simple ASCII +file, where the Hounsfield numbers are converted to materials and +densities so that it can be used by GEANT4. It serves also to create +a GEANT4 geometry based on the DICOM file information using the +G4PhantomParameterisation. + +DICOM2 +------ + +This example demonstrates how to reuse the DICOM example library +for another application. + +dna +--- +Set of examples using the Geant4-DNA physics processes and models. + +electronScattering +electronScattering2 +-------------------- + +These example demonstrate electron scattering benchmarks. +ElectronScattering2 simulates the experiment with a minimum of user code, whereas the other +version of this example shows how to do more of the work directly as the user. + +fanoCavity +------------ + +This example computes the dose deposited in an ionization chamber by a +monoenergetic photon beam. + +fanoCavity2 +------------ + +This example computes the dose deposited in an ionization chamber by an +extended (one dimensional) monoenergetic electron source. +This variante of the Fano cavity test make use of an reciprocity theorem. + +GammaTherapy +------------ + +This example demonstrates a gamma therapy application. + + + + diff --git a/examples/extended/medical/dna/.README.txt b/examples/extended/medical/dna/.README.txt new file mode 100644 index 0000000000..bf23e61c2b --- /dev/null +++ b/examples/extended/medical/dna/.README.txt @@ -0,0 +1,55 @@ + +///\file "medical/dna/.README.txt" +///\brief Examples dna README page + +/*! \page Examples_dna Category "medical/dna" + +This directory contains a set of Geant4-DNA examples. + +\section dna_s0 Physics + - \link ExampleDnaphysics dnaphysics \endlink Simulation of track structures in liquid water using the Geant4-DNA physics processes and models. + + - \link Exampleclustering clustering \endlink Clustering application for direct damage extraction. + + - \link Exampleicsd icsd \endlink Use of cross section models for DNA materials, + + - \link Examplemfp mfp \endlink Simulation of mean free path in liquid water. + + - \link ExampleMicrodosimetry microdosimetry \endlink Simulation of the track of a 5 MeV proton in liquid water. Geant4 standard EM models are used in the World volume while Geant4-DNA models are used in a Target volume, declared as a Region. + + - \link Examplemicroprox microprox \endlink Computation of proximity functions in liquid water + + - \link Examplemicroyz microyz \endlink Simulation of microdosimetry spectra + + - \link Examplerange range \endlink Simulation of ranges. + + - \link ExampleSlowing slowing \endlink Simulation of slowing down spectra. + + - \link ExampleSplitting splitting \endlink Use of variance reduction to improve the computational efficiency of ionization. + + - \link Examplespower spower \endlink Simulation of stopping power. + + - \link Examplesvalue svalue \endlink Simulation of S-values in spheres of liquid water using the Geant4-DNA physics processes and models. + + - \link Examplewvalue wvalue \endlink Simulation of W-values in liquid water using the Geant4-DNA physics processes and models. + + - \link ExampleAuNP AuNP \endlink Simulation calculates absorbed dose around AuNP. + +\section dna_s1 Chemistry + - \link ExampleChem1 chem1 \endlink Simple activation of the chemistry module. + - \link ExampleChem2 chem2 \endlink Usage of TimeStepAction in the chemistry module. + - \link ExampleChem3 chem3 \endlink Activate the full interactivity with the chemistry module. + - \link ExampleChem4 chem4 \endlink Simulation of radiochemical yields with the chemistry module. + - \link ExampleChem5 chem5 \endlink Variation of chem4, using the contructors G4EmDNAPhysics_option8 and G4EmDNAChemistry_option1. + - \link ExampleChem6 chem6 \endlink Based on chem4 example, this example provides to score the radiochemical yield G. + - \link Examplescavenger scavenger \endlink Activation of the scavenging process in chemistry. + +\section dna_s2 Geometry and other + - \link ExamplePdb4dna pdb4dna \endlink Usage of the Protein Data Bank (PDB) file format to build geometries. + - \link ExampleWholeNuclearDNA wholeNuclearDNA \endlink Geometrical description of a full simplified cell nucleus. + - \link Examplednadamage1 dnadamage1 \endlink Damage simulation on a chromatin fiber. + - \link Exampleneuron neuron \endlink Irradiation of a realistic neuron cell. + +See the README page inside each example for more detail. +*/ + diff --git a/examples/extended/medical/dna/AuNP/.README.txt b/examples/extended/medical/dna/AuNP/.README.txt new file mode 100644 index 0000000000..0241a4ec35 --- /dev/null +++ b/examples/extended/medical/dna/AuNP/.README.txt @@ -0,0 +1,100 @@ + +///\file "medical/dna/AuNP/.README.txt" +///\brief ExampleAuNP README page + +/*! \page ExampleAuNP Example AuNP + +\author D. Sakata (a) \n +(a) email: sakata.dousatsu@qst.go.jp, dosatsu.sakata@cern.ch \n + +\section AuNP_s1 INTRODUCTION + +The AuNP example simulates the track-structure of electrons in microscopic gold volume. +The example also simulates that in liquid water medium surrunding the gold volume. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at:\n +http://geant4-dna.org \n\n + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications:\n +Phys. Med. 31 (2015) 861-874 \n +Med. Phys. 37 (2010) 4692-4708 \n\n + +We also suggest these other references related to this example:\n +Phys. Med. 63 (2019), 98-104 \n +Med. Phys. 45 (2018), 2230-2242 \n +J. App. Phys. 120 (2016), 244901 \n\n + +The AuNP example simulates the track-structure of electrons +in microscopic gold volume.The example also simulates that +in liquid water medium surrunding the gold volume. + +The details of the physics models are described in the following paper: +J. Appl. Phys. 120 (2016) 244901 + +The details of the application are described in the following paper: +Phys. Med. 63 (2019) 98-104 +Med. Phys. 45(5) (2018) 2230-2242 + +\section AuNP_s2 GEOMETRY SET-UP. + +The geometry is a sphere (World) made of liquid water containing a smaller +sphererical target volume of Gold. + +The default geometry is constructed in DetectorConstruction class. + +\section AuNP_s3 PHYSICS LIST + +The default physics list is constructed in PhysicsList class. + +\section AuNP_s4 DETECTOR RESPONSE : Scorers + +This scorer computes following quantities. + +- the energy spectra of secondary particles generated in AuNP +- the energy spectra of secondary particles at AuNP surface +- the energy spectra of secondary particles generated in liquid water +- the energy deposit and the position in the absorber surrunding AuNP + +Run::RecordEvent(), called at end of event, collects informations +event per event from the hits collections, and accumulates statistic for +RunAction::EndOfRunAction(). + +In multi-threading mode the statistics accumulated per workers is merged +to the master in Run::Merge(). + +The information is scored in a ROOT ntuple file AuNP.root. + +\section AuNP_s5 HOW TO RUN THE EXAMPLE + +This example shows: +- how to use the Geant4-DNA processes for gold +- how to count and save occurrences of processes + +The code can be compiled with cmake. +It works in MT mode. + +Two user macro files can be used: +\verbatim +./AuNP AuNP.mac +\endverbatim + +\section AuNP_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consists in an AuNP.root file, containing for the run: +- the energy spectra of secondary particles generated in AuNP +- the energy spectra of secondary particles at AuNP surface +- the energy spectra of secondary particles generated in liquid water +- the energy deposit and the position in the absorber surrunding AuNP + +This file can be easily analyzed using for example the provided ROOT macro +file plot.C; to do so : +- be sure to have ROOT installed on your machine +- be sure to be in the microdosimetry directory +- launch ROOT by typing root +- under your ROOT session, type in : .X plot.C to execute the macro file +- alternatively you can type directly under your session : root plot.C + +*/ diff --git a/examples/extended/medical/dna/AuNP/README b/examples/extended/medical/dna/AuNP/README new file mode 100644 index 0000000000..2d3877613f --- /dev/null +++ b/examples/extended/medical/dna/AuNP/README @@ -0,0 +1,105 @@ +------------------------------------------------------------------- +------------------------------------------------------------------- + + ========================================================= + Geant4 - AuNP example + ========================================================= + + README file + ---------------------- + + CORRESPONDING AUTHOR + +Should you have any enquiry, please do not hesitate to contact: +D. Sakata +National Institute of Radiological Science +* e-mail:sakata.dousatsu@qst.go.jp, dosatsu.sakata@cern.ch + +---->0. INTRODUCTION. + +The AuNP example simulates the track-structure of electrons in microscopic gold volume. +The example also simulates that in liquid water medium surrunding the gold volume. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +We also suggest these other references related to this example: +Phys. Med. 63 (2019), 98-104 +Med. Phys. 45 (2018), 2230-2242 +J. App. Phys. 120 (2016), 244901 + +The AuNP example simulates the track-structure of electrons +in microscopic gold volume.The example also simulates that +in liquid water medium surrunding the gold volume. + +The details of the physics models are described in the following paper: +J. Appl. Phys. 120 (2016) 244901 + +The details of the application are described in the following paper: +Phys. Med. 63 (2019) 98-104 +Med. Phys. 45(5) (2018) 2230-2242 + +---->1. GEOMETRY SET-UP. + +The geometry is a sphere (World) made of liquid water containing a smaller +sphererical target volume of Gold. + +The default geometry is constructed in DetectorConstruction class. + +--->2. PHYSICS LIST + +The default physics list is constructed in PhysicsList class. + +--->3. DETECTOR RESPONSE : Scorers + +This scorer computes following quantities. + +- the energy spectra of secondary particles generated in AuNP +- the energy spectra of secondary particles at AuNP surface +- the energy spectra of secondary particles generated in liquid water +- the energy deposit and the position in the absorber surrunding AuNP + +Run::RecordEvent(), called at end of event, collects informations +event per event from the hits collections, and accumulates statistic for +RunAction::EndOfRunAction(). + +In multi-threading mode the statistics accumulated per workers is merged +to the master in Run::Merge(). + +The information is scored in a ROOT ntuple file AuNP.root. + +---->4. HOW TO RUN THE EXAMPLE + +This example shows: +- how to use the Geant4-DNA processes for gold +- how to count and save occurrences of processes + +The code can be compiled with cmake. +It works in MT mode. + +Two user macro files can be used: +./AuNP AuNP.mac + +---->5. SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consists in an AuNP.root file, containing for the run: +- the energy spectra of secondary particles generated in AuNP +- the energy spectra of secondary particles at AuNP surface +- the energy spectra of secondary particles generated in liquid water +- the energy deposit and the position in the absorber surrunding AuNP + +This file can be easily analyzed using for example the provided ROOT macro +file plot.C; to do so : +* be sure to have ROOT installed on your machine +* be sure to be in the microdosimetry directory +* launch ROOT by typing root +* under your ROOT session, type in : .X plot.C to execute the macro file +* alternatively you can type directly under your session : root plot.C + diff --git a/examples/extended/medical/dna/README b/examples/extended/medical/dna/README new file mode 100644 index 0000000000..fca38f7afd --- /dev/null +++ b/examples/extended/medical/dna/README @@ -0,0 +1,89 @@ + ========================================================= + Geant4 - dna examples + ========================================================= + README file + ---------------------- + +This directory contains a set of Geant4-DNA examples. + + Physics + + - dnaphysics + The dnaphysics example shows how to simulate track structures in liquid + water using the Geant4-DNA physics processes and models. + + - clustering + Clustering application for direct damage extraction. + + - icsd + This example shows how to use cross section models for DNA materials + + - mfp + This example shows how to simulate mean free path in liquid water + + - microdosimetry + The microdosimetry example simulates the track of a 5 MeV proton in + liquid water. + Geant4 standard EM models are used in the World volume while Geant4-DNA + models are used in a Target volume, declared as a Region. + + - microprox + Computation of proximity functions in liquid water + + - microyz + Simulation of microdosimetry spectra + + - range + Simulation of ranges. + + - slowing + Simulation of slowing down spectra. + + - splitting + Use of variance reduction to improve the computational efficiency of + ionization. + + - spower + Simulation of stopping power. + + - svalue + This example shows how to simulate S-values in spheres of liquid water + using the Geant4-DNA physics processes and models. + + - wvalue + This example shows how to simulate W-values in liquid water + using the Geant4-DNA physics processes and models. + + - AuNP + Simulation calculates absorbed dose around AuNP + + Chemistry + + - chem1 Simple activation of the chemistry module. + - chem2 Usage of TimeStepAction in the chemistry module. + - chem3 Activate the full interactivity with the chemistry module. + - chem4 Simulation of radiochemical yields with the chemistry module. + - chem5 Variation of chem4, using the contructors G4EmDNAPhysics_option8 and + G4EmDNAChemistry_option1. + - chem6 Scoring of the radiochemical yield G defined as a function of time + and LET. + - scavenger + Activation of the scavenging process in chemistry + + Geometry and other + + - pdb4dna + Usage of the Protein Data Bank (PDB) file format to build geometries. + + - wholeNuclearDNA + Geometrical description of a full simplified cell nucleus. + + - dnadamage1 + Damage simulation on a chromatin fiber. + + - neuron + Irradiation of a realistic neuron cell. + +See the README page inside each example for more detail. + + diff --git a/examples/extended/medical/dna/chem1/.README.txt b/examples/extended/medical/dna/chem1/.README.txt new file mode 100644 index 0000000000..3df8134acc --- /dev/null +++ b/examples/extended/medical/dna/chem1/.README.txt @@ -0,0 +1,51 @@ +----------------------------------------- +///\file "medical/dna/chem1/.README.txt" +///\brief ExampleChem1 README page + +/*! \page ExampleChem1 Example chem1 + +\section Chem1_s1 General description + + This example is provided by the Geant4-DNA collaboration. + + These processes and models are further described at: + http://geant4-dna.org + + Any report or published results obtained using the Geant4-DNA software shall + cite the following Geant4-DNA collaboration publications: + Phys. Med. 31 (2015) 861-874 + Med. Phys. 37 (2010) 4692-4708 + + How to activate chemistry code. + +\section Chem1_s2 GEOMETRY DEFINITION + + It is a simple box which represents a 'semi infinite' homogeneous medium. + + Two parameters define the geometry : + - the material of the box -- for Geant4-DNA it has to be water. + - the full size of the box. + + The default geometry is constructed in DetectorConstruction class. + +\section Chem1_s3 PHYSICS LIST + + PhysicsList is Geant4 modular physics list using G4EmDNAPhysics & + G4EmDNAChemistry constructors. + +\section Chem1_s4 AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the center of + the box. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in commands + of G4ParticleGun class. + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed. + +\section Chem1_s5 OUTPUT + + Physics initialization and the defined reaction table are printed. + G4ITStepManager processes the chemical stage time step after time step. + Chemical reactions are printed. +*/ + diff --git a/examples/extended/medical/dna/chem1/README b/examples/extended/medical/dna/chem1/README new file mode 100644 index 0000000000..540479b223 --- /dev/null +++ b/examples/extended/medical/dna/chem1/README @@ -0,0 +1,52 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + chem1 + ------- + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +How to activate chemistry code. + + 1 - GEOMETRY DEFINITION + + It is a simple box which represents a 'semi infinite' homogeneous medium. + + Two parameters define the geometry : + - the material of the box -- for Geant4-DNA it has to be water. + - the full size of the box. + + The default geometry is constructed in DetectorConstruction class. + + 2 - PHYSICS LIST + + PhysicsList is Geant4 modular physics list using G4EmDNAPhysics & + G4EmDNAChemistry constructors. + + 3 - AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the center of + the box. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in commands + of G4ParticleGun class. + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed. + + 4 - OUTPUT + + Physics initialization and the defined reaction table are printed. + G4ITStepManager processes the chemical stage time step after time step. + Chemical reactions are printed. + + diff --git a/examples/extended/medical/dna/chem2/.README.txt b/examples/extended/medical/dna/chem2/.README.txt new file mode 100644 index 0000000000..df1223e8be --- /dev/null +++ b/examples/extended/medical/dna/chem2/.README.txt @@ -0,0 +1,53 @@ +----------------------------------------- +///\file "medical/dna/chem2/.README.txt" +///\brief ExampleChem2 README page + +/*! \page ExampleChem2 Example chem2 + +\section Chem2_s1 General description + + This example is provided by the Geant4-DNA collaboration. + + These processes and models are further described at: + http://geant4-dna.org + + Any report or published results obtained using the Geant4-DNA software shall + cite the following Geant4-DNA collaboration publications: + Phys. Med. 31 (2015) 861-874 + Med. Phys. 37 (2010) 4692-4708 + + How to activate chemistry code. + + How to set minimum time step limits using TimeStepAction. + +\section Chem2_s2 GEOMETRY DEFINITION + + It is a simple box which represents a 'semi infinite' homogeneous medium. + + Two parameters define the geometry : + - the material of the box, + - the full size of the box. + + The default geometry is constructed in DetectorConstruction class. + +\section Chem2_s3 PHYSICS LIST + + PhysicsList is Geant4 modular physics list using G4EmDNAPhysics & + G4EmDNAChemistry constructors. + +\section Chem2_s4 AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the center of + the box. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in commands + of G4ParticleGun class. + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed. + +\section Chem2_s5 OUTPUT + + Physics initialization and the defined reaction table are printed. + G4ITStepManager processes the chemical stage time step after time step. + Chemical reactions are printed. +*/ + diff --git a/examples/extended/medical/dna/chem2/README b/examples/extended/medical/dna/chem2/README new file mode 100644 index 0000000000..9b67c683a9 --- /dev/null +++ b/examples/extended/medical/dna/chem2/README @@ -0,0 +1,54 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + chem2 + ------- + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +How to activate chemistry code. + +How to set minimum time step limits using TimeSteppingManager. + + 1 - GEOMETRY DEFINITION + + It is a simple box which represents a 'semi infinite' homogeneous medium. + + Two parameters define the geometry : + - the material of the box, + - the full size of the box. + + The default geometry is constructed in DetectorConstruction class. + + 2 - PHYSICS LIST + + PhysicsList is Geant4 modular physics list using G4EmDNAPhysics & + G4EmDNAChemistry constructors. + + 3 - AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the center of + the box. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in commands + of G4ParticleGun class. + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed. + + + 4 - OUTPUT + + Physics initialization and the defined reaction table are printed. + G4ITStepManager processes the chemical stage time step after time step. + Chemical reactions are printed. + diff --git a/examples/extended/medical/dna/chem3/.README.txt b/examples/extended/medical/dna/chem3/.README.txt new file mode 100644 index 0000000000..e580e91a72 --- /dev/null +++ b/examples/extended/medical/dna/chem3/.README.txt @@ -0,0 +1,68 @@ +----------------------------------------- +///\file "medical/dna/chem3/.README.txt" +///\brief ExampleChem3 README page + +/*! \page ExampleChem3 Example chem3 + +\section Chem3_s1 General description + +This example is provided by the Geant4-DNA collaboration. + + These processes and models are further described at: + http://geant4-dna.org + + Any report or published results obtained using the Geant4-DNA software shall + cite the following Geant4-DNA collaboration publications: + Phys. Med. 31 (2015) 861-874 + Med. Phys. 37 (2010) 4692-4708 + + How to activate chemistry code. + How to set minimum time step limits using TimeStepAction. + +\section Chem3_s2 GEOMETRY DEFINITION + + It is a simple sphere which represents a 'semi infinite' homogeneous medium. + + Two parameters define the geometry : + - the material of the sphere, + - the full size of the sphere. + + The default geometry is constructed in DetectorConstruction class. + +\section Chem3_s3 PHYSICS LIST + + The physics list is initialized in G4EmDNAChemistry, together with chemical + stage models configuration. + +\section Chem3_s4 AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the center of + the sphere. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in commands + of G4ParticleGun class. + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed. + + \section Chem3_s5 HOW TO START ? + + Run the example from this directory. + The user interface will be launched. Continue using /run/beamOn 1 command. + +\section Chem3_s6 OUTPUT + + Physics initialization and the defined reaction table are printed. + G4ITStepManager processes the chemical stage time step after time step. + Chemical reactions are printed. + In the GUI window a cummulative trajectory of the chemical species is drawn. + +\section Chem3_s7 TIME EVOLUTION VISUALIZATION + + User can start a visualization of the chemical track evolution in time and + space using /control/execute movie.mac. + Note, that in default setup the simulation requires machine with 6 GB of RAM. + To lower memory requirements, either decrease energy of the incident electron + in prep.mac or/and shorten the simulation using SetEndTime setting in + src/ActionInitialization.cc. + +*/ + diff --git a/examples/extended/medical/dna/chem3/README b/examples/extended/medical/dna/chem3/README new file mode 100644 index 0000000000..26780850d1 --- /dev/null +++ b/examples/extended/medical/dna/chem3/README @@ -0,0 +1,68 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Chem3 + ------- + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +How to implement user actions in the chemistry module. + + 1 - GEOMETRY DEFINITION + + It is a simple box which represents a 'semi infinite' homogeneous medium. + + Two parameters define the geometry : + - the material of the box -- for Geant4-DNA it has to be water. + - the full size of the box. + + The default geometry is constructed in DetectorConstruction class, but all of + the above parameters can be changed interactively via the commands defined in + the DetectorMessenger class. + + 2 - PHYSICS LIST + + The physics list is initialized in G4EmDNAChemistry, together with chemical + stage models configuration. + + 3 - AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the center of + the sphere. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in commands + of G4ParticleGun class. + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed. + + 4 - HOW TO START ? + + Run the example from this directory. + The user interface will be launched. Continue using /run/beamOn 1 command. + + 5 - OUTPUT + + Physics initialization and the defined reaction table are printed. + G4ITStepManager processes the chemical stage time step after time step. + Chemical reactions are printed. + In the GUI window a cummulative trajectory of the chemical species is drawn. + + 6 - TIME EVOLUTION VISUALIZATION + + User can start a visualization of the chemical track evolution in time and space + using /control/execute movie.mac. + Note, that in default setup the simulation requires machine with 6 GB of RAM. + To lower memory requirements, either decrease energy of the incident electron + in prep.mac or/and shorten the simulation using SetEndTime setting in + src/ActionInitialization.cc. + diff --git a/examples/extended/medical/dna/chem4/.README.txt b/examples/extended/medical/dna/chem4/.README.txt new file mode 100644 index 0000000000..7e18659734 --- /dev/null +++ b/examples/extended/medical/dna/chem4/.README.txt @@ -0,0 +1,194 @@ + +///\file "medical/dna/chem4/.README.txt" +///\brief ExampleChem4 README page + +/*! \page ExampleChem4 Example chem4 + +\author P. Piersimoni (a), M. Karamitros (b) \n +(a) pierluigi.piersimoni _ gmail _ com \n +(b) matkara _ gmail _ com \n + +This example is provided by the Geant4-DNA collaboration. +(http://geant4-dna.org) + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: \n +Phys. Med. 31 (2015) 861-874 \n +Med. Phys. 37 (2010) 4692-4708 \n + +The example shows how to activate the chemistry code and score the radiochemical yield G +defined as \n +\verbatim +(Number of species X) / (100 eV of deposited energy). +\endverbatim +in a range of deposited energy [X;Y] chosen by the user.\n + +\section CHEM4_s1 GEOMETRY DEFINITION +The world volume is a simple box which represents a 'pseudo infinite' +homogeneous medium. + +Two parameters define the geometry : +- the material of the box -- for Geant4-DNA it has to be water. +- the full size of the box. + +The default geometry is constructed in DetectorConstruction class. + +\section CHEM4_s2 PHYSICS LIST + + PhysicsList is Geant4 modular physics list using G4EmDNAPhysics & + G4EmDNAChemistry constructors. + It will later be updated to use the G4EmDNAModelActivator constructor + +\section CHEM4_s3 ACTION INITALIZATION + + The class ActionInitialization instantiates and registers + to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instantiated just once, + via invoking the method + ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + +\section CHEM4_s4 AN EVENT: PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the center + of the box. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in + commands of G4ParticleGun class. + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed. + +\section CHEM4_s5 DETECTOR RESPONSE : Scorers + +\subsection CHEM4_s5_sub1 Species scorer + + Scorers are defined in DetectorConstruction::ConstructSDandField(). There is + one G4MultiFunctionalDetector object which computes the energy deposition and + the number of species along time in order to extract + the radiochemical yields: +\verbatim +(Number of species X) / (100 eV of deposited energy). +\endverbatim + + Run::RecordEvent(), called at end of event, collects informations + event per event from the hits collections, and accumulates statistic for + RunAction::EndOfRunAction(). + + In multi-threading mode the statistics accumulated per workers is merged + to the master in Run::Merge(). + + The information about all the molecular species is scored in a ROOT + ntuple file Species.root. The root macro program PlotNtuple.C can be used to + plot the G values vs time, for each species. + +\subsection CHEM4_s5_sub2 Primary Killer + The G-values are computing for a range of deposited energy. + We are in an infinite volume. Therefore the energy lost by the + primary equals the deposited energy since all secondary particles + will finally slow down to the thermal energy. + The primary is killed once it has deposited more energy than a + minimum threshold. + IMPORTANT: However, when the primary particle looses more energy in + few interaction steps than the maximum allowed thresold, the event is + disregarded (=aborted). \n + + These two macro commands can be used to control the energy loss by the primary: + +\verbatim +/primaryKiller/eLossMin 1 keV +# after 1 keV of energy loss by the primary particle, the primary is killed + +/primaryKiller/eLossMax 2 keV +# if the primary particle losses more than 2 keV, the event is aborted +\endverbatim + + The G-values are then computed for a deposited energy in the range [1 keV;2 keV]. + + Note that if the upper boundary of the energy lost by the primary is not set, the chemistry may + take a lot of time to compute as the number of secondaries may be huge. + This set of macros is embedded in the PrimaryKiller class. + The species scorer must check whether the event was aborted before taking it or not into + account for the computation of the results. + +\section CHEM4_s6 STACKING ACTION + + StackingAction::NewStage is called when a stack of tracks has been processed + (for more details, look at the Geant4 documentation). + A verification on whether physical tracks remain to be processed is done. + If no tracks remain to be processed, the chemical module is then triggered. + +\section CHEM4_s7 VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in chem4.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. To activate the visualization mode run: +\verbatim +./chem4 -vis +\endverbatim + +\section CHEM4_s8 OUTPUT + + Physics initialization and the defined reaction table are printed. + G4Scheduler processes the chemical stage time step after time step. + Chemical reactions are printed. + The molecular reaction as a function of the elapsed time can be displayed + setting the macro command /scheduler/verbose 1 + +\section CHEM4_s9 RELEVANT MACRO COMMANDS +\verbatim +/primaryKiller/eLoss 1 keV # after 1 keV of energy loss by the primary particle, the primary is killed +/scheduler/verbose 1 # set the verbose level of the G4Scheduler class (time steps, reactions ...) +/scheduler/endTime 1 microsecond # set the time at which the simulation stops +/scheduler/whyDoYouStop # for advanced users: print information at the end of the chemical stage + # to know why the simulation has stopped +\endverbatim + +\section CHEM4_s10 PLOT + The information about all the molecular species is scored in a ROOT + ntuple file Species.root during the run of chem4. + The ROOT program plotG can be used to plot the G values vs time, + for each species. It must be launched after + chem4 has run. When "plotG" is executed, select the root file output by the + chem4 application. + You can also execute plotG as: +\verbatim +./plot/plotG Species.root +\endverbatim + where Species.root is the file output by the chem4 application. + +\section CHEM4_s11 OTHER INFORMATION + I have access to a track. How do I access to its molecular information? +\verbatim +#include "G4Molecule.hh" +G4Track* thisIsMytrack = ... +G4Molecule* thisIsMyMolecule = GetMolecule(thisIsMyTrack); +\endverbatim + If the pointer thisIsMyMolecule is null, then this is NOT a chemical species + + How do I get the molecule's name? +\verbatim +G4Molecule* thisIsMyMolecule = ... +const G4String& moleculeName = thisIsMyMolecule->GetName(); +\endverbatim + +How can I display the reaction information? + - Use this macro command: +\verbatim +/scheduler/verbose 1 +\endverbatim + +How can I display the step by step information? + 1. Add ITTrackingInteraction to the G4Scheduler singleton (cf. chem3) + 2. Use +\verbatim +/chem/tracking/verbose 1 +\endverbatim + +*/ diff --git a/examples/extended/medical/dna/chem4/README b/examples/extended/medical/dna/chem4/README new file mode 100644 index 0000000000..341f6f9781 --- /dev/null +++ b/examples/extended/medical/dna/chem4/README @@ -0,0 +1,177 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Chem4 + ------- + +CORRESPONDING AUTHORS +P. Piersimoni (a), M. Karamitros (b) +(a) pierluigi.piersimoni _ gmail _ com +(b) matkara _ gmail _ com + +This example is provided by the Geant4-DNA collaboration. +(http://geant4-dna.org) + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +The example shows how to activate chemistry code and score the radiochemical yield G +defined as + (Number of species X) / (100 eV of deposited energy). +in a range of deposited energy [X;Y] chosen by the user. + + 1 - GEOMETRY DEFINITION + + The world volume is a simple box which represents a 'pseudo infinite' + homogeneous medium. + + Two parameters define the geometry : + - the material of the box -- for Geant4-DNA it has to be water. + - the full size of the box. + + The default geometry is constructed in DetectorConstruction class. + + 2 - PHYSICS LIST + + PhysicsList is Geant4 modular physics list using G4EmDNAPhysics & + G4EmDNAChemistry constructors. + It will later be updated to use the G4EmDNAModelActivator constructor + + 3 - ACTION INITALIZATION + + The class ActionInitialization instantiates and registers + to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instantiated just once, + via invoking the method: + ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method: + ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + + 4 - AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the center + of the box. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in + commands of G4ParticleGun class. + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed. + + 5 - DETECTOR RESPONSE: Scorers + + 5.1 - Species scorer + + Scorers are defined in DetectorConstruction::ConstructSDandField(). There is + one G4MultiFunctionalDetector object which computes the energy deposition and + the number of species along time in order to extract + the radiochemical yields: + (Number of species X) / (100 eV of deposited energy). + + Run::RecordEvent(), called at end of event, collects informations + event per event from the hits collections, and accumulates statistic for + RunAction::EndOfRunAction(). + + In multi-threading mode the statistics accumulated per workers is merged + to the master in Run::Merge(). + The information about all the molecular species is scored in a ROOT + ntuple file Species.root. The root macro program PlotNtuple.C can be used to + plot the G values vs time, for each species. + + 5.2 - Primary killer + + The G-values are computing for a range of deposited energy. + We are in an infinite volume. Therefore the energy lost by the + primary equals the deposited energy since all secondary particles + will finally slow down to the thermal energy. + The primary is killed once it has deposited more energy than a + minimum threshold. + + **IMPORTANT**: However, when the primary particle looses more energy + in few interaction steps than the maximum allowed thresold, + the event is disregarded (=aborted). + + These two macro commands can be used to control the energy loss by + the primary: + + /primaryKiller/eLossMin 1 keV + # after 1 keV of energy loss by the primary particle, the primary is killed + + /primaryKiller/eLossMax 2 keV + # if the primary particle losses more than 2 keV, the event is aborted + + The G-values are then computed for a deposited energy in the range [1 keV;2 keV]. + + Note that if the upper boundary of the energy lost by the primary is + not set, the chemistry may take a lot of time to compute. + This set of macros is embedded in the PrimaryKiller class. + The species scorer must check whether the event was aborted before taking it or not into + account for the computation of the results. + + 6 - STACKING ACTION + + StackingAction::NewStage is called when a stack of tracks has been processed + (for more details, look at the Geant4 documentation). + A verification on whether physical tracks remain to be processed is done. + If no tracks remain to be processed, the chemical module is then triggered. + + 7 - VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in chem4.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. To activate the visualization mode run: + ./chem4 -vis + + 8 - OUTPUT + + Physics initialization and the defined reaction table are printed. + G4Scheduler processes the chemical stage time step after time step. + Chemical reactions are printed. + The molecular reaction as a function of the elapsed time can be displayed + setting the macro command /scheduler/verbose 1 + +9 - RELEVANT MACRO COMMANDS + /primaryKiller/eLossMin 1 keV # after 1 keV of energy loss by the primary particle, the primary is killed + /primaryKiller/eLossMax 2 keV # if the primary particle losses more than 2 keV, the event is aborted + /scheduler/verbose 1 # set the verbose level of the G4Scheduler class (time steps, reactions ...) + /scheduler/endTime 1 microsecond # set the time at which the simulation stops + /scheduler/whyDoYouStop # for advanced users: print information at the end of the chemical stage to know why the simulation has stopped + +10 - PLOT + The information about all the molecular species is scored in a ROOT + ntuple file Species.root during the run of chem4. + The ROOT program plotG can be used to plot the G values vs time, + for each species. It must be launched after + chem4 has run. When "plotG" is executed, select the root file output by the + chem4 application. + You can also execute plotG as: + .plot/plotG Species.root + where Species.root is the file output by the chem4 application. + +11 - OTHER INFORMATION + I have access to a track. How do I access to its molecular information? + #include "G4Molecule.hh" + G4Track* thisIsMytrack = ... + G4Molecule* thisIsMyMolecule = GetMolecule(thisIsMyTrack); + If the pointer thisIsMyMolecule is null, then this is NOT a chemical species + + How do I get the molecule's name? + G4Molecule* thisIsMyMolecule = ... + const G4String& moleculeName = thisIsMyMolecule->GetName(); + + How can I display the reaction information? + - Use this macro command: /scheduler/verbose 1 + + How can I display the step by step information? + 1. Add ITTrackingInteraction to the G4Scheduler singleton (cf. chem3) + 2. Use /chem/tracking/verbose 1 diff --git a/examples/extended/medical/dna/chem5/.README.txt b/examples/extended/medical/dna/chem5/.README.txt new file mode 100644 index 0000000000..b3c76c7b38 --- /dev/null +++ b/examples/extended/medical/dna/chem5/.README.txt @@ -0,0 +1,159 @@ + +///\file "medical/dna/chem5/.README.txt" +///\brief ExampleChem5 README page + +/*! \page ExampleChem5 Example chem5 + +\author Ramos-Mendez (a) based on initial implementation of chem5 from \n +P. Piersimoni (b), M. Karamitros (c) \n +(a) joserm84 _ gmail _ com \n + +This example is provided by the Geant4-DNA collaboration. +(http://geant4-dna.org) + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: \n +Phys. Med. 31 (2015) 861-874 \n +Med. Phys. 37 (2010) 4692-4708 \n +Phys. Med. Biol. 63(10) (2018) 105014-12pp\n + +The example is a variation of the chem4 example, it shows how to activate +the chemistry code and score the radiochemical yield G using the constructors +G4EmDNAPhysics_option8 and G4EmDNAChemistry_option1\n + +\section CHEM5_s1 GEOMETRY DEFINITION +The world volume is a simple box which represents a 'pseudo infinite' +homogeneous medium. + +Two parameters define the geometry : +- the material of the box -- for Geant4-DNA it has to be water. +- the full size of the box. + +The default geometry is constructed in DetectorConstruction class. + +\section CHEM5_s2 PHYSICS LIST + + PhysicsList is Geant4 modular physics list using G4EmDNAPhysics_option8 & + G4EmDNAChemistry_option1 constructors. + +\section CHEM5_s3 ACTION INITALIZATION + + The class ActionInitialization instantiates and registers + to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instantiated just once, + via invoking the method + ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + +\section CHEM5_s4 AN EVENT: PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the center + of the box. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in + commands of G4ParticleGun class. + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed. + +\section CHEM5_s5 DETECTOR RESPONSE : Scorers + +\subsection CHEM5_s5_sub1 Species scorer + + Scorers are defined in DetectorConstruction::ConstructSDandField(). There is + one G4MultiFunctionalDetector object which computes the energy deposition and + the number of species along time in order to extract + the radiochemical yields: +\verbatim +(Number of species X) / (100 eV of deposited energy). +\endverbatim + + Run::RecordEvent(), called at end of event, collects informations + event per event from the hits collections, and accumulates statistic for + RunAction::EndOfRunAction(). + + In multi-threading mode the statistics accumulated per workers is merged + to the master in Run::Merge(). + + The information about G-value as a function of the time for each + molecular specie is scored in ASCII format. + +\subsection CHEM5_s5_sub2 Primary Killer + The G-values are computing for a range of deposited energy. + An infinite volume is assumed as the geometrical scenario. Therefore the energy lost by the + primary particle equals the deposited energy from all secondary particles. + + The primary is killed once it has deposited more energy than a + minimum threshold. + IMPORTANT: However, when the primary particle looses more energy in + few interaction steps than the maximum allowed thresold, the event is + disregarded (=aborted). \n + + These two macro commands can be used to control the energy loss by the primary: + +\verbatim +/primaryKiller/eLossMin 10 keV +# after 1 keV of energy loss by the primary particle, the primary is killed + +/primaryKiller/eLossMax 10.1 keV +# if the primary particle losses more than 2 keV, the event is aborted +\endverbatim + + The G-values are then computed for a deposited energy in the range [10 keV;10.1 keV]. + + Note that if the upper boundary of the energy lost by the primary is not set, the chemistry may + take a lot of time to compute as the number of secondaries may be huge. + This set of macros is embedded in the PrimaryKiller class. + The species scorer must check whether the event was aborted before taking it or not into + account for the computation of the results. + +\section CHEM5_s6 STACKING ACTION + + StackingAction::NewStage is called when a stack of tracks has been processed + (for more details, look at the Geant4 documentation). + A verification on whether physical tracks remain to be processed is done. + If no tracks remain to be processed, the chemical module is then triggered. + +\section CHEM5_s7 VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in chem5.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. To activate the visualization mode run: +\verbatim +./chem5 -vis +\endverbatim + +\section CHEM5_s8 OUTPUT + + Physics initialization and the defined reaction table are printed. + G4Scheduler processes the chemical stage time step after time step. + Chemical reactions are printed. + The molecular reaction as a function of the elapsed time can be displayed + setting the macro command /scheduler/verbose 1 + +\section CHEM5_s9 RELEVANT MACRO COMMANDS +\verbatim +/primaryKiller/eLoss 10 keV # after 10 keV of energy loss by the primary particle, the primary is killed +/scheduler/verbose 1 # set the verbose level of the G4Scheduler class (time steps, reactions ...) +/scheduler/endTime 1 microsecond # set the time at which the simulation stops +/scheduler/whyDoYouStop # for advanced users: print information at the end of the chemical stage + # to know why the simulation has stopped +\endverbatim + +\section CHEM5_s10 PLOT + The information about all the molecular species is scored in a ASCII + tuple, each value corresponding to the G-value per time. This format is friendly + with a wide variety of plotting software. + Experimental data of G-values for solvated electron and hydroxil radical (as a function of the time) + from the literature is available in data subdirectory, the references are provided + in the header of each file. Further information is available in Phys. Med. Biol. 63(10) (2018) 105014-12pp. + + + A gnuplot script (plot.gp) file is provided to display the output data with the experimental data +*/ diff --git a/examples/extended/medical/dna/chem5/README b/examples/extended/medical/dna/chem5/README new file mode 100644 index 0000000000..8633a8ccb6 --- /dev/null +++ b/examples/extended/medical/dna/chem5/README @@ -0,0 +1,165 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Chem5 + ------- + +Jose Ramos-Mendez(a) and Bruce Faddegon +Department of Radiation Oncology, +University of California San Francisco. + +(a) CORRESPONDING AUTHOR +joserm84 _ gmail _ com + +This example is provided by the Geant4-DNA collaboration. +(http://geant4-dna.org) + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +Any report or published results obtained using this example shall +cite the following publication: +Phys. Med. Biol. 63(10) (2018) 105014-12pp + +The example is a variation of chem4, it shows how to activate +chemistry code and score the radiochemical yield G using the contructors +G4EmDNAPhysics_option8 and G4EmDNAChemistry_option1 + + 1 - GEOMETRY DEFINITION + + The world volume is a simple box which represents a 'pseudo infinite' + homogeneous medium. + + Two parameters define the geometry : + - the material of the box -- for Geant4-DNA it has to be water. + - the full size of the box. + + The default geometry is constructed in DetectorConstruction class. + + 2 - PHYSICS LIST + + PhysicsList is Geant4 modular physics list using G4EmDNAPhysics_option8 & + G4EmDNAChemistry_option1 constructors. + + 3 - ACTION INITALIZATION + + The class ActionInitialization instantiates and registers + to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instantiated just once, + via invoking the method: + ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method: + ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + + 4 - AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the center + of the box. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in + commands of G4ParticleGun class. + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed. + + 5 - DETECTOR RESPONSE: Scorers + + 5.1 - Species scorer + + Scorers are defined in DetectorConstruction::ConstructSDandField(). There is + one G4MultiFunctionalDetector object which computes the energy deposition and + the number of species along time in order to extract + the radiochemical yields: + (Number of species X) / (100 eV of deposited energy). + + Run::RecordEvent(), called at end of event, collects informations + event per event from the hits collections, and accumulates statistic for + RunAction::EndOfRunAction(). + + In multi-threading mode the statistics accumulated per workers is merged + to the master in Run::Merge(). + + The information about G-value as a function of the time for each + molecular specie is scored in a ASCII format + + + 5.2 - Primary killer + + The G-values are computing for a range of deposited energy. + An infinite volume is assumed as geometric scenario. Therefore the energy lost by the + primary particle equals the deposited energy from all secondary particles. + + The primary is killed once it has deposited more energy than a + minimum threshold. + + **IMPORTANT**: However, when the primary particle looses more energy + in few interaction steps than the maximum allowed thresold, + the event is disregarded (=aborted). + + These two macro commands can be used to control the energy loss by + the primary: + + /primaryKiller/eLossMin 10 keV + # after 10 keV of energy loss by the primary particle, the primary is killed + + /primaryKiller/eLossMax 10.1 keV + # if the primary particle losses more than 10.1 keV, the event is aborted + + The G-values are then computed for a deposited energy in the range [10.0 keV;10.1 keV]. + + Note that if the upper boundary of the energy lost by the primary is + not set, the chemistry may take a lot of time to compute. + This set of macros is embedded in the PrimaryKiller class. + The species scorer must check whether the event was aborted before taking it or not into + account for the computation of the results. + + 6 - STACKING ACTION + + StackingAction::NewStage is called when a stack of tracks has been processed + (for more details, look at the Geant4 documentation). + A verification on whether physical tracks remain to be processed is done. + If no tracks remain to be processed, the chemical module is then triggered. + + 7 - VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in chem5.cc. + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. To activate the visualization mode run: + ./chem5 -vis + + 8 - OUTPUT + + Physics initialization and the defined reaction table are printed. + G4Scheduler processes the chemical stage time step after time step. + Chemical reactions are printed. + The molecular reaction as a function of the elapsed time can be displayed + setting the macro command /scheduler/verbose 1 + +9 - RELEVANT MACRO COMMANDS + /primaryKiller/eLossMin 10 keV # after 10 keV of energy loss by the primary particle, the primary is killed + /primaryKiller/eLossMax 10.1 keV # if the primary particle losses more than 10.1 keV, the event is aborted + /scheduler/verbose 1 # set the verbose level of the G4Scheduler class (time steps, reactions ...) + /scheduler/endTime 1 microsecond # set the time at which the simulation stops + /scheduler/whyDoYouStop # for advanced users: print information at the end of + #the chemical stage to know why the simulation has stopped + +10 - PLOT + The information about all the molecular species is scored in a ASCII + tuple, each value corresponding to the G-value per time. This format is friendly + with a wide variety of plotting software. + Experimental data of G-values for solvated electron and hydroxil radical (as a function of the time) + from the literature is available in data subdirectory, the references are provided + in the header of each file. Further information is available in Phys. Med. Biol. 63(10) (2018) 105014-12pp. + + A gnuplot script (plot.gp) file is provided to display the output data with the experimental data + diff --git a/examples/extended/medical/dna/chem6/.README.txt b/examples/extended/medical/dna/chem6/.README.txt new file mode 100644 index 0000000000..66541a217c --- /dev/null +++ b/examples/extended/medical/dna/chem6/.README.txt @@ -0,0 +1,218 @@ + +///\file "medical/dna/chem6/.README.txt" +///\brief ExampleChem6 README page + +/*! \page ExampleChem6 Example chem6 + +\author W. G. Shin (a), S. Incerti (b) \n +(a) ukguen _ gmail _ com \n +(b) incerti _ cenbg _ in2p3 _ fr \n + +This example is provided by the Geant4-DNA collaboration. +(http://geant4-dna.org) + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: \n +Med. Phys. 45 (2018) e722-e739 \n +Phys. Med. 31 (2015) 861-874 \n +Med. Phys. 37 (2010) 4692-4708 \n +Int. J. Model. Simul. Sci . Comput. 1 (2010) 157-178 \n + +\section CHEM6_s1 INTRODUCTION + Based on chem4 example, this example provides to score the radiochemical yield G + defined as \n +\verbatim +(Number of species X) / (100 eV of deposited energy). +\endverbatim + as a function of time and LET. + + The details are described in the following paper: + J. Appl. Phys. 125 (2019) 104301 + +\section CHEM6_s2 GEOMETRY DEFINITION + The world volume is a simple water box which represents a 'pseudo infinite' + homogeneous medium. + + The default geometry is constructed in DetectorConstruction class. + + The size of detector can be controlled by PrimaryKiller class (see section \ref CHEM6_s5) + in order to prevent crash. + +\section CHEM6_s3 PHYSICS LIST + + PhysicsList is Geant4 modular physics list using: + + G4EmDNAPhysics_option2 constructor: + - the accelerated physics constructor based on G4EmDNAPhysics constructor. + + G4EmDNAChemistry_option3 constructor: + - the chemistry constructor is based on the pre-chemical stage of PARTRAC + and chemical parameters of RITRACKS. + - this chemistry constructor uses independent reaction time method as a + default. + +\section CHEM6_s4 ACTION INITALIZATION + + The class ActionInitialization instantiates and registers + to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instantiated just once, + via invoking the method + ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + +\section CHEM6_s5 AN EVENT: PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the center + of the box. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in + commands of G4ParticleGun class. + + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed. + +\section CHEM6_s6 DETECTOR RESPONSE : Scorers + +\subsection CHEM6_s6_sub1 Species scorer + + This scorer computes the energy deposition and the number of species along + time in order to extract the radiochemical yields as chem4 example. + + Run::RecordEvent(), called at end of event, collects informations + event per event from the hits collections, and accumulates statistic for + RunAction::EndOfRunAction(). + + In multi-threading mode the statistics accumulated per workers is merged + to the master in Run::Merge(). + + These two macro commands can be used to control the scoring time: + +\verbatim +/scorer/species/addTimeToRecord 1 ps +# user can select time bin to score G values. + +/scorer/species/nOfTimeBins +# or user can automatically select time bin logarithmically. +\endverbatim + + The information about all the molecular species is scored in a ROOT + ntuple file Species(runID).root. + e.g.) Species0.root Species1.root ... + + G values at the last time bin are scored in a text file Species.txt in order to + obtain G versus LET results. + The G versus LET results are accumulated all along, thus, user should remove Species.txt + file directly in order to initialize the results. + +\subsection CHEM6_s6_sub2 Primary Killer + The G-values are computing for a range of deposited energy. + We are in an infinite volume. Therefore the energy lost by the + primary equals the deposited energy since all secondary particles + will finally slow down to the thermal energy. + The primary is killed once it has deposited more energy than a + minimum threshold. + IMPORTANT: However, when the primary particle looses more energy in + few interaction steps than the maximum allowed thresold, the event is + disregarded (=aborted). \n + + These two macro commands can be used to control the energy loss by the primary: + +\verbatim +/primaryKiller/eLossMin 1 keV +# after 1 keV of energy loss by the primary particle, the primary is killed + +/primaryKiller/eLossMax 2 keV +# if the primary particle losses more than 2 keV, the event is aborted +\endverbatim + + The G-values are then computed for a deposited energy in the range [1 keV;2 keV]. + + Note that if the upper boundary of the energy lost by the primary is not set, the chemistry may + take a lot of time to compute as the number of secondaries may be huge. + This set of macros is embedded in the PrimaryKiller class. + The species scorer must check whether the event was aborted before taking it or not into + account for the computation of the results. + + The size of detector can be controlled by this class using user macro command: + +\verbatim +/primaryKiller/setSize 5 5 5 um +# kill the particles (primary and secondary) outside of the virtual volume +\endverbatim + +\subsection CHEM6_s6_sub3 LET scorer + In order to obtain G versus LET results, LET values are simultaneously calculated + during the simulation in ScorerLET class. + + A macro command can be used to control the LET scorer: + +\verbatim +/scorer/LET/cutoff +# select cut-off energy for restricted LET. +\endverbatim + +\section CHEM6_s7 TIMESTEP ACTION + The user defined time steps can be given by G4UserTimeStepAction::AddTimeStep() method. + This method is not recommended for IRT method. + + These two method are called before and after every time steps: + - TimeStepAction::UserPreTimeStepAction() + - TimeStepAction::UserPostTimeStepAction() + + This method is called when a chemical reaction is occurred: + - TimeStepAction::UserReactionAction(const G4Track&, const G4Track&, const std::vector*) + +In order to access to molecular information: +\verbatim +#include "G4Molecule.hh" +G4Molecule* thisIsMyMolecule = GetMolecule(thisIsMyTrack); +const G4String& moleculeName = thisIsMyMolecule->GetName(); +\endverbatim + +\section CHEM6_s8 STACKING ACTION + + StackingAction::NewStage is called when a stack of tracks has been processed + (for more details, look at the Geant4 documentation). + A verification on whether physical tracks remain to be processed is done. + If no tracks remain to be processed, the chemical module is then triggered. + +\section CHEM6_s9 OUTPUT + + Physics initialization and the defined reaction table are printed. + G4Scheduler processes the chemical stage time step after time step. + Chemical reactions are printed. + + The molecular reaction as a function of the elapsed time can be displayed + setting the macro command /scheduler/verbose 1 + +\section CHEM6_s10 RELEVANT MACRO FILES + + Two user macro files can be used: + +\verbatim +./chem6 beam.in +# electron simulations w primary killer method. + +./chem6 beam_HCP.in +# protons and alphas are generated at the edge of a 5x5x5 um3 water phantom. +\endverbatim + + +\section CHEM6_s11 PLOT + + Two root macros can be used: + +\verbatim +root plotG_time.root +# plot G values as a function of time according to the molecular species by importing Species0.root. + +root plotG_LET.root +# plot G values as a function of LET according to the molecular species by importing Species.txt. +\endverbatim +*/ diff --git a/examples/extended/medical/dna/chem6/README b/examples/extended/medical/dna/chem6/README new file mode 100644 index 0000000000..66c1f2ebe5 --- /dev/null +++ b/examples/extended/medical/dna/chem6/README @@ -0,0 +1,213 @@ +$Id: $ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Chem6 + ------- + +CORRESPONDING AUTHORS +W. G. Shin (a), S. Incerti (b) +(a) ukguen _ gmail _ com +(b) incerti _ cenbg _ in2p3 _ fr + +This example is provided by the Geant4-DNA collaboration. +(http://geant4-dna.org) + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: + + +J. Appl. Phys. 125 (2019) 104301 +Med. Phys. 45 (2018) e722-e739 +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 +Int. J. Model. Simul. Sci . Comput. 1 (2010) 157-178 + + 0 - INTRODUCTION + Based on chem4 and chem5 examples, this example provides scoring of the + radiochemical yield G defined as + (Number of species X) / (100 eV of deposited energy). + as a function of time and LET. + The example uses the IRT approach by default. + + The details are described in the following paper: + J. Appl. Phys. 125 (2019) 104301 + + 1 - GEOMETRY DEFINITION + + The world volume is a simple water box which represents a 'pseudo infinite' + homogeneous medium. + + The default geometry is constructed in DetectorConstruction class. + + The size of detector can be controlled by PrimaryKiller class (see section 5.2). + + 2 - PHYSICS LIST + + PhysicsList is Geant4 modular physics list using: + + G4EmDNAPhysics_option2 constructor + - the accelerated physics constructor based on G4EmDNAPhysics constructor. + + G4EmDNAChemistry_option3 constructor. + - the chemistry constructor is based on the pre-chemical stage of PARTRAC + and chemical parameters of RITRACKS. + - this chemistry constructor uses independent reaction time method as a + default. + + 3 - ACTION INITALIZATION + + The class ActionInitialization instantiates and registers + to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instantiated just once, + via invoking the method: + ActionInitialization::Build() + In multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method: + ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + + 4 - AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the center + of the box. The type of the particle and its energy are set in the + PrimaryGeneratorAction class, and can be changed via the G4 build-in + commands of G4ParticleGun class. + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed. + + 5 - DETECTOR RESPONSE: Scorers + + 5.1 - Species scorer + + This scorer computes the energy deposition and the number of species along + time in order to extract the radiochemical yields as in chem4 example. + + Run::RecordEvent(), called at end of event, collects informations + event per event from the hits collections, and accumulates statistics for + RunAction::EndOfRunAction(). + + In multi-threading mode the statistics accumulated per worker is merged + to the master in Run::Merge(). + + These two macro commands can be used to control the scoring time: + + /scorer/species/addTimeToRecord 1 ps + # user can select time bin to score G values. + + /scorer/species/nOfTimeBins + # or user can automatically select time bin logarithmically. + + The information about all the molecular species is scored in a ROOT + ntuple file Species(runID).root. + e.g.) Species0.root Species1.root ... + + G values at the last time bin are scored in a text file Species.txt in order to + obtain G versus LET results. + The G versus LET results are accumulated all along, thus, user should remove Species.txt + file directly in order to initialize the results. + + 5.2 - Primary killer + + The G-values are computed for a range of deposited energy. + We are in an infinite volume. Therefore the energy lost by the + primary equals the deposited energy since all secondary particles + will finally slow down to the thermal energy. + The primary is killed once it has deposited more energy than a + minimum threshold. + + **IMPORTANT**: However, when the primary particle loses more energy + in few interaction steps than the maximum allowed threshold, + the event is disregarded (=aborted). + + These two macro commands can be used to control the energy loss by + the primary: + + /primaryKiller/eLossMin 1 keV + # after 1 keV of energy loss by the primary particle, the primary is killed + + /primaryKiller/eLossMax 2 keV + # if the primary particle losses more than 2 keV, the event is aborted + + The G-values are then computed for a deposited energy in the range [1 keV;2 keV]. + + Note that if the upper boundary of the energy lost by the primary is + not set, the chemistry may take a lot of time to compute. + This set of commands is embedded in the PrimaryKiller class. + The species scorer must check whether the event was aborted before taking + it or not into account for the computation of the results. + + The size of detector can be controlled by this class using user macro command: + + /primaryKiller/setSize 5 5 5 um + # kills the particles (primary and secondary) outside of the virtual volume + + 5.3. - LET scorer + + In order to obtain G versus LET results, LET values are simultaneously calculated + during the simulation in ScorerLET class. + + A macro command can be used to control the LET scorer: + + /scorer/LET/cutoff + # selects cut-off energy for restricted LET. + + 6 - TIMESTEP ACTION + + The user defined time steps can be given by G4UserTimeStepAction::AddTimeStep() method. + This method is not recommended for IRT method. + + These two method are called before and after every time steps: + + TimeStepAction::UserPreTimeStepAction() + TimeStepAction::UserPostTimeStepAction() + + This method is called when a chemical reaction is occurred: + + TimeStepAction::UserReactionAction(const G4Track&, const G4Track&, const std::vector*) + In order to access to molecular information, + #include "G4Molecule.hh" + G4Molecule* thisIsMyMolecule = GetMolecule(thisIsMyTrack); + const G4String& moleculeName = thisIsMyMolecule->GetName(); + + 7 - STACKING ACTION + + StackingAction::NewStage is called when a stack of tracks has been processed + (for more details, look at the Geant4 documentation). + A verification on whether physical tracks remain to be processed is done. + If no tracks remain to be processed, the chemical module is then triggered. + + 8 - OUTPUT + + Physics initialization and the defined reaction table are printed. + G4Scheduler processes the chemical stage time step after time step. + Chemical reactions are printed. + The molecular reaction as a function of the elapsed time can be displayed + setting the macro command /scheduler/verbose 1 + + 9 - RELEVANT MACRO FILES + + Two user macro files can be used: + + ./chem6 beam.in + # electron simulations w primary killer method. + + ./chem6 beam_HCP.in + # protons and alphas are generated at the edge of a 5x5x5 um3 water phantom. + +10 - PLOT + + Two root macros can be used: + + root plotG_time.C + # plot G values as a function of time according to the molecular species by importing Species0.root. + + root plotG_LET.C + # plot G values as a function of LET according to the molecular species by importing Species.txt. diff --git a/examples/extended/medical/dna/clustering/.README.txt b/examples/extended/medical/dna/clustering/.README.txt new file mode 100644 index 0000000000..5e7cb05ea0 --- /dev/null +++ b/examples/extended/medical/dna/clustering/.README.txt @@ -0,0 +1,127 @@ +----------------------------------------- +///\file "medical/dna/clustering/.README.txt" +///\brief Exampleclustering README page + +/*! \page Exampleclustering Example clustering + +\author Y. Perrot, H. Payno \n +(a) ysperrot@gmail.com \n +(b) henri.payno@gmail.com \n +Laboratoire de Physique Corpusculaire de Clermont-Ferrand, CNRS/IN2P3 - Clermont University, France + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: \n +Phys. Med. 31 (2015) 861-874 \n +Med. Phys. 37 (2010) 4692-4708 + +\section clustering_s1 Introduction + +The clustering example simulates protons tracks in liquid water using Geant4-DNA processes and models. +Energy deposit are clustered with a dedicated clustering algorithm to assess strand breaks. +The default parameters of the clustering algorithm have been tuned to reproduce data published by +Francis et al. 2011 Comput. Meth. Programs. Biomed. 2011 101(3) + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publication: +Med. Phys. 37 (2010) 4692-4708 + +\section clustering_s2 Set-up + +It is similar to the geometry set-up proposed in Francis et al. 2011 Comput. Meth. Programs. Biomed. 2011 101(3). +It consists in a World volume containing a Target box made of liquid water of 1µm x 1µm x 0.5 µm. +Energy deposits in the Target are registered (see SteppingAction.cc) and the clustering algorithm is run at the end of each event +(see EventAction.cc) + +\section clustering_s3 How to run the example + +To get help, run: + +\verbatim +> ./clustering -h +\endverbatim + +In interactive mode, run: + +\verbatim +> ./clustering -gui +\endverbatim + +In batch mode , run: + +\verbatim +> ./clustering [-mac run.in] [-mt numberofThreads] +\endverbatim + +Two macros are available: + +- run.in: shoots 1000 protons of 500 keV + +- runOneEvent.in: shoots one proton of 500 keV + +All UI clustering commands in these macros are described below in section 'More information'. + +\section clustering_s4 Simulation output + +The output results consists in a clusters_output.root file, containing for each event: +- the number of single strand break +- the number of complex single strand break +- the number of double strand break +- the cluster size distribution +- the absorbed dose in the Target + +\section clustering_s5 More information + +Specific classes are available in this example: + +- ClusteringAlgo: contains the core clustering algorithm + +- ClusteringAlgoMessenger: defines all UI commands to tune +the clustering algorithm + +\verbatim +/clustering/algo/setMinPts +\endverbatim + Minimal number of points to create a cluster + +\verbatim +/clustering/algo/setSelectionProb +\endverbatim + Probability to select potential damage according to the geometry + +\verbatim +/clustering/algo/setEps +\endverbatim + Maximal distance between points to create a cluster + +\verbatim +/clustering/algo/setEmin +\endverbatim + Energy to have a probability to create a strand break = 0 + +\verbatim +/clustering/algo/setEmax +\endverbatim + Energy to have a probability to create a strand break = 1 +allow + +- ClusterSBPoints: defines a cluster of strand break points + +- CommandLineParser: defines a parser for command line control +as in other Geant4-DNA examples + +- RunInitObserver: allows initializations at new run +(as in pdb4dna and microdosimetry) + +- SBPoint: defines a class for point of energy deposition + +\section clustering_s6 Acknowledgments + +Ziad Francis for discussion about clustering algorithm. + +*/ + diff --git a/examples/extended/medical/dna/clustering/README b/examples/extended/medical/dna/clustering/README new file mode 100644 index 0000000000..7b86406119 --- /dev/null +++ b/examples/extended/medical/dna/clustering/README @@ -0,0 +1,109 @@ +================================================================= + Geant4 - clustering +================================================================= + + +Authors: Y. Perrot (a), H. Payno (b) + +(a) ysperrot@gmail.com +(b) henri.payno@gmail.com + +Laboratoire de Physique Corpusculaire de Clermont-Ferrand, CNRS/IN2P3 - Clermont University, France + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +---> 1. Introduction + +The clustering example simulates protons tracks in liquid water using Geant4-DNA processes and models. +Energy deposit are clustered with a dedicated clustering algorithm to assess strand breaks. +The default parameters of the clustering algorithm have been tuned to reproduce data published by +Francis et al. 2011 Comput. Meth. Programs. Biomed. 2011 101(3) + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publication: +Med. Phys. 37 (2010) 4692-4708 + +----> 2. Set-up + +It is similar to the geometry set-up proposed in Francis et al. 2011 Comput. Meth. Programs. Biomed. 2011 101(3). +It consists in a World volume containing a Target box made of liquid water of 1µm x 1µm x 0.5 µm. +Energy deposits in the Target are registered (see SteppingAction.cc) and the clustering algorithm is run at the end of each event +(see EventAction.cc) + +----> 3. How to run the example + +To get help, run: + +> ./clustering -h + +In interactive mode, run: + +> ./clustering -gui + +In batch mode , run: + +> ./clustering [-mac run.in] [-mt numberofThreads] + +Two macros are available: + +run.in: shoots 1000 protons of 500 keV + +runOneEvent.in: shoots one proton of 500 keV + +All UI clustering commands in these macros are described below in section 5. + +----> 4. Simulation output + +The output results consists in a clusters_output.root file, containing for each event: +- the number of single strand break +- the number of complex single strand break +- the number of double strand break +- the cluster size distribution +- the absorbed dose in the Target + +----> 5. More information + +Specific classes are available in this example: + +* ClusteringAlgo: contains the core clustering algorithm + +* ClusteringAlgoMessenger: defines all UI commands to tune +the clustering algorithm + +/clustering/algo/setMinPts: + Minimal number of points to create a cluster + +/clustering/algo/setSelectionProb: + Probability to select potential damage according to the geometry + +/clustering/algo/setEps: + Maximal distance between points to create a cluster + +/clustering/algo/setEmin: + Energy to have a probability to create a strand break = 0 + +/clustering/algo/setEmax: + Energy to have a probability to create a strand break = 1 +allow +* ClusterSBPoints: defines a cluster of strand break points + +* CommandLineParser: defines a parser for command line control +as in other Geant4-DNA examples + +* RunInitObserver: allows initializations at new run +(as in pdb4dna and microdosimetry) + +* SBPoint: defines a class for point of energy deposition + +----> Acknowledgments : + + Ziad Francis for discussion about clustering algorithm. + diff --git a/examples/extended/medical/dna/dnadamage1/.README.txt b/examples/extended/medical/dna/dnadamage1/.README.txt new file mode 100644 index 0000000000..042ff1a72b --- /dev/null +++ b/examples/extended/medical/dna/dnadamage1/.README.txt @@ -0,0 +1,95 @@ +///\file "medical/dna/dnadamage1/.README.txt" +///\brief Example dnadamage1 README page + + +/*! \page Examplednadamage1 Example dnadamage1 + +This is a new example and it may contain bugs. +It was developed by Hoang Tran. +If you find a bug, please contact IRSN: +yann.perrot@irsn.fr or carmen.villagrasa@irsn.fr + +\section dnadamage1_s0 INTRODUCTION + +The dnadamage1 example shows a simple way to simulate dna direct and indirect damages +using the Geant4-DNA physics and chemical processes in a molecular DNA geometry. + +This example is based on the work described in Sc. Rep. 7 (2017)11923 +and is provided by the Geant4-DNA collaboration. + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +- Phys. Med. 31 (2015) 861-874 +- Med. Phys. 37 (2010) 4692-4708 + +\section dnadamage1_s1 GEOMETRY SET-UP + +The geometry is chromatical fiber in a 40-nm side cube (Voxel) made of liquid water (G4_WATER +material). Particles are randomly shot in a cicle of 5 nm2 radius from left side of the cube. + +The DNA chromatical fiber geometry is generated by DnaFabric tool(https://bitbucket.org/sylMeylan/opendnafabric). +For detail, please see: Sc. Rep. 7 (2017) 11923 + +\section dnadamage1_s2 SET-UP + +The code can be compiled with cmake. +It works in MT mode. +Chemistry stage is automatically activated. + +\section dnadamage1_s3 HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +\verbatim +./dnadamage1 +\endverbatim + +Note: interactive mode needs at least 6Go of RAM for visualization and may not work correctly in some plateformes. + +In batch, the macro dnadamage1.in can be used as bellows. It shows how to shoot different +particle types and energies. + +\verbatim +./dnadamage1 dnadamage1.in +\endverbatim + +\section dnadamage1_s4 PHYSICS + +This example shows: +- how to use the Geant4-DNA processes (physics and chemistry) through G4EmDNAPhysics and G4EmDNAChemistry_option2 constructors +(look at the PhysicsList.cc file) +- how to count and save energy depositions giving rise to direct damages using an energy thershold +of 17.5 eV in teh nucleotide backbone region. +(look at the SteppingAction.cc file) +-how to forbid water radicals to be created at the DNA molecule volume (look at the SteppingAction.cc file) +) + +\section dnadamage1_s5 CHEMISTRY + +This example shows: +- how to add a parallel world for chemistry +- how to add a new reaction of free radicals with a DNA molecule using "Step by step model" +(look at the G4EmDNAChemistry_option2) +- how to count and save occurrences of chemical reactions for indirect damages +(look at to TimeStepAction.cc file) + + +\section dnadamage1_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +This file can be easily analyzed using the provided ROOT macro +file analysis.C (and plot.C, molecule.C); The plot.C results in a text file using the SDD format: + "A new standard DNA damage (SDD) data format" J. Schuemann et al. Published in Rad. Res. 191 (2019) 76-92 + +To do so : +- be sure to have ROOT installed on your machine (version 6 series) +- be sure to be in the directory containing the ROOT files created by dnadamage1 +- copy analysis.C (and plot.C, molecule.C) into this directory +- from there, launch ROOT by typing root +- under your ROOT session, type in : .X analysis.C to execute the macro file +- alternatively you can type directly under your session : root -b analysis.C + +--------------------------------------------------------------------------- + +Contact: ngoc-hoang.tran@irsn.fr, carmen.villagrasa@irsn.fr + +*/ diff --git a/examples/extended/medical/dna/dnadamage1/README.txt b/examples/extended/medical/dna/dnadamage1/README.txt new file mode 100644 index 0000000000..6f2e297979 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage1/README.txt @@ -0,0 +1,90 @@ + ========================================================= + Geant4 - dnadamage1 example + ========================================================= + + README file + ---------------------- + + +This is a new example and it may contain bugs. +It was developed by Hoang Tran. +If you find a bug, please contact IRSN: + yann.perrot@irsn.fr or carmen.villagrasa@irsn.fr + +---->0. INTRODUCTION. + +The dnadamage1 example shows a simple way to simulate dna direct and indirect damages +using the Geant4-DNA physics and chemical processes in a molecular DNA geometry. + +This example is based on the work described in Sc. Rep. 7 (2017)11923 +and is provided by the Geant4-DNA collaboration. + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +---->1. GEOMETRY SET-UP. + +The geometry is chromatical fiber in a 40-nm side cube (Voxel) made of liquid water (G4_WATER +material). Particles are randomly shot in a cicle of 5 nm2 radius from left side of the cube. + +The DNA chromatical fiber geometry is generated by DnaFabric tool(https://bitbucket.org/sylMeylan/opendnafabric). +For detail, please see: Sc. Rep. 7 (2017) 11923 + +---->2. SET-UP + +The code can be compiled with cmake. +It works in MT mode. +Chemistry stage is automatically activated. + +---->3. HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +./dnadamage1 +(Note: interactive mode needs at least 6Go of RAM for visualization and may not work correctly in some plateformes) + +In batch, the macro dnadamage1.in can be used as bellows. It shows how to shoot different +particle types and energies. + +./dnadamage1 dnadamage1.in + +---->4. PHYSICS + +This example shows: +- how to use the Geant4-DNA processes (physics and chemistry) through G4EmDNAPhysics and G4EmDNAChemistry_option2 constructors +(look at the PhysicsList.cc file) +- how to count and save energy depositions giving rise to direct damages using an energy thershold +of 17.5 eV in teh nucleotide backbone region. +(look at the SteppingAction.cc file) +-how to forbid water radicals to be created at the DNA molecule volume (look at the SteppingAction.cc file) +) + +---->5. CHEMISTRY + +This example shows: +- how to add a parallel world for chemistry +- how to add a new reaction of free radicals with a DNA molecule using +(look at the G4EmDNAChemistry_option2) +- how to count and save occurrences of chemical reactions for indirect damages +(look at to TimeStepAction.cc file) + + +---->6. SIMULATION OUTPUT AND RESULT ANALYSIS + +This file can be easily analyzed using the provided ROOT macro +file analysis.C (and plot.C, molecule.C); The plot.C results in a text file using the SDD format: + "A new standard DNA damage (SDD) data format" J. Schuemann et al. Published in Rad. Res. 191 (2019) 76-92 + to do so : +* be sure to have ROOT installed on your machine (version 6 series) +* be sure to be in the directory containing the ROOT files created by dnadamage1 +* copy analysis.C (and plot.C, molecule.C) into this directory +* from there, launch ROOT by typing root +* under your ROOT session, type in : .X analysis.C to execute the macro file +* alternatively you can type directly under your session : root -b analysis.C + +--------------------------------------------------------------------------- + +Contact: ngoc-hoang.tran@irsn.fr, carmen.villagrasa@irsn.fr + diff --git a/examples/extended/medical/dna/dnaphysics/.README.txt b/examples/extended/medical/dna/dnaphysics/.README.txt new file mode 100644 index 0000000000..2c38f47583 --- /dev/null +++ b/examples/extended/medical/dna/dnaphysics/.README.txt @@ -0,0 +1,183 @@ + +///\file "medical/dna/dnaphysics/.README.txt" +///\brief Example dnaphysics README page + + +/*! \page ExampleDnaphysics Example dnaphysics + +\author S. Incerti (a, *), V. Ivantchenko (b), M. Karamitros (a) \n +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan \n +(CENBG), IN2P3 / CNRS / Bordeaux 1 University, 33175 Gradignan, France \n +b. G4AI Ltd., UK +* e-mail:incerti@cenbg.in2p3.fr \n + +\section dnaphysics_s1 INTRODUCTION. + +The dnaphysics example shows how to simulate track structures in liquid water +using the Geant4-DNA physics processes and models. + +Below 1 MeV, Geant4-DNA models are used while, above this energy, +G4EmStandardPhysics_option4 models are used. + +The Geant4-DNA processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Med. Phys. 45, e722-e739 (2018) +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 +Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 + +\section dnaphysics_s2 GEOMETRY SET-UP + +The geometry is a 100-micron side cube (World) made of liquid water (G4_WATER +material). Particles are shot from the center of the volume. + +The variable density feature of materials is illustrated. + +Material can be changed directly in dna.mac macro file. + +\section dnaphysics_s3 SET-UP + +Make sure $G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +\section dnaphysics_s4 HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +\verbatim +./dnaphysics +\endverbatim + +In batch, the macro dnaphysics.in can be used. It shows how to shoot different +particle types. + +The combination of G4EmStandardPhysics_option4 and Geant4-DNA models in the World +is activated thanks to the following UI command in dnaphysics.in: + +\verbatim +/process/em/AddDNARegion World DNA_Opt0 +\endverbatim + +For now, only the "DNA_Opt0" configuration is allowed. + +\section dnaphysics_s5 PHYSICS + +This example shows: +- how to use the Geant4-DNA models, which are activated automatically at low energy, +below 1 MeV, and G4EmStandardPhysics_option4 models above +(look at the PhysicsList.cc file) +- how to count and save occurrences of processes +(look at the SteppingAction.cc file) + +Alternatively, the direct usage of Geant4-DNA physics constructors is also shown +in comment in the PhysicsList.cc file. + +\section dnaphysics_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consists in a dna.root file, containing for each simulation step: +- the type of particle for the current step +- the type of process for the current step +- the track position of the current step (in nanometers) +- the energy deposit along the current step (in eV) +- the step length (in nm) +- the total energy loss along the current step (in eV) +- the kinetic energy at PreStepPoint +- the cos of the scattering angle +- the event ID +- the track ID +- the parent track ID +- the step number + +This file can be easily analyzed using for example the provided ROOT macro +file plot.C; to do so : +* be sure to have ROOT installed on your machine +* be sure to be in the directory containing the ROOT files created by dnaphysics +* copy plot.C into this directory +* from there, launch ROOT by typing root +* under your ROOT session, type in : .X plot.C to execute the macro file +* alternatively you can type directly under your session : root plot.C + +The naming scheme on the displayed ROOT plots is as follows (see SteppingAction.cc): + +This is the same naming scheme as in the "microdosimetry" advanced example. + +- particles: \n +gamma : 0 \n +e- : 1 \n +proton : 2 \n +hydrogen : 3 \n +alpha : 4 \n +alpha+ : 5 \n +helium : 6 \n +\n +- processes: \n + +eCapture 1 \n +(only if one uses G4EmDNAPhysicsActivator in PhysicsList) + +e-_G4DNAElectronSolvation 10 \n +e-_G4DNAElastic 11 \n +e-_G4DNAExcitation 12 \n +e-_G4DNAIonisation 13 \n +e-_G4DNAAttachment 14 \n +e-_G4DNAVibExcitation 15 \n +msc 110 \n +CoulombScat 120 \n +eIoni 130 \n \n + +proton_G4DNAElastic 21 \n +proton_G4DNAExcitation 22 \n +proton_G4DNAIonisation 23 \n +proton_G4DNAChargeDecrease 24 \n +msc 210 \n +CoulombScat 220 \n +hIoni 230 \n +nuclearStopping 240 \n \n + +hydrogen_G4DNAElastic 31 \n +hydrogen_G4DNAExcitation 32 \n +hydrogen_G4DNAIonisation 33 \n +hydrogen_G4DNAChargeIncrease 35 \n \n + +alpha_G4DNAElastic 41 \n +alpha_G4DNAExcitation 42 \n +alpha_G4DNAIonisation 43 \n +alpha_G4DNAChargeDecrease 44 \n +msc 410 \n +CoulombScat 420 \n +ionIoni 430 \n +nuclearStopping 440 \n \n + +alpha+_G4DNAElastic 51 \n +alpha+_G4DNAExcitation 52 \n +alpha+_G4DNAIonisation 53 \n +alpha+_G4DNAChargeDecrease 54 \n +alpha+_G4DNAChargeIncrease 55 \n +msc 510 \n +CoulombScat 520 \n +hIoni 530 \n +nuclearStopping 540 \n + +helium_G4DNAElastic 61 \n +helium_G4DNAExcitation 62 \n +helium_G4DNAIonisation 63 \n +helium_G4DNAChargeIncrease 65 \n \n + +GenericIon_G4DNAIonisation 73 \n +msc 710 \n +CoulombScat 720 \n +ionIoni 730 \n +nuclearStopping 740 \n \n + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr + +*/ diff --git a/examples/extended/medical/dna/dnaphysics/README b/examples/extended/medical/dna/dnaphysics/README new file mode 100644 index 0000000000..0dfbe41f60 --- /dev/null +++ b/examples/extended/medical/dna/dnaphysics/README @@ -0,0 +1,181 @@ + ========================================================= + Geant4 - dnaphysics example + ========================================================= + + README file + ---------------------- + + CORRESPONDING AUTHOR + +S. Incerti (a,*), V. Ivantchenko (b), M. Karamitros (a) +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan +(CENBG), IN2P3 / CNRS / Bordeaux 1 University, 33175 Gradignan, France +* e-mail:incerti@cenbg.in2p3.fr + +---->0. INTRODUCTION. + +The dnaphysics example shows how to simulate track structures in liquid water +using the Geant4-DNA physics processes and models. + +Below 1 MeV, Geant4-DNA models are used while, above this energy, +G4EmStandardPhysics_option4 models are used. + +Geant4-DNA models for electrons are based on a combination of default models with option4 models. + +The Geant4-DNA processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Med. Phys. 45, e722-e739 (2018) +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 +Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 + +---->1. GEOMETRY SET-UP. + +The geometry is a 100-micron side cube (World) made of liquid water (G4_WATER +material). Particles are shot from the center of the volume. + +The variable density feature of materials is illustrated. + +Material can be changed directly in dna.mac macro file. + +---->2. SET-UP + +Make sure $G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +---->3. HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +./dnaphysics + +In batch, the macro dnaphysics.in can be used. It shows how to shoot different +particle types. + +The combination of G4EmStandardPhysics_option4 and Geant4-DNA models in the World +is activated thanks to the following UI command in dnaphysics.in: + +/process/em/AddDNARegion World DNA_Opt0 + +For now, only the "DNA_Opt0" configuration is allowed. + +---->4. PHYSICS + +This example shows: +- how to use the Geant4-DNA models, which are activated automatically at low energy, +below 1 MeV, and G4EmStandardPhysics_option4 models above +(look at the PhysicsList.cc file) +- how to count and save occurrences of processes +(look at the SteppingAction.cc file) + +Alternatively, the direct usage of Geant4-DNA physics constructors is also shown +in comment in the PhysicsList.cc file. + +---->5. SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consists in a dna.root file, containing for each simulation step: +- the type of particle for the current step +- the type of process for the current step +- the track position of the current step (in nanometers) +- the energy deposit along the current step (in eV) +- the step length (in nm) +- the total energy loss along the current step (in eV) +- the kinetic energy at PreStepPoint +- the cos of the scattering angle +- the event ID +- the track ID +- the parent track ID +- the step number + +This file can be easily analyzed using for example the provided ROOT macro +file plot.C; to do so : +* be sure to have ROOT installed on your machine +* be sure to be in the directory containing the ROOT files created by dnaphysics +* copy plot.C into this directory +* from there, launch ROOT by typing root +* under your ROOT session, type in : .X plot.C to execute the macro file +* alternatively you can type directly under your session : root plot.C + +The naming scheme on the displayed ROOT plots is as follows (see SteppingAction.cc): + +This is the same naming scheme as in the "microdosimetry" advanced example. + +-particles: + +gamma : 0 +e- : 1 +proton : 2 +hydrogen : 3 +alpha : 4 +alpha+ : 5 +helium : 6 + +-processes: + +Capture 1 +(only if one uses G4EmDNAPhysicsActivator in PhysicsList) + +e-_G4DNAElectronSolvation 10 +e-_G4DNAElastic 11 +e-_G4DNAExcitation 12 +e-_G4DNAIonisation 13 +e-_G4DNAAttachment 14 +e-_G4DNAVibExcitation 15 +msc 110 +CoulombScat 120 +eIoni 130 + +proton_G4DNAElastic 21 +proton_G4DNAExcitation 22 +proton_G4DNAIonisation 23 +proton_G4DNAChargeDecrease 24 +msc 210 +CoulombScat 220 +hIoni 230 +nuclearStopping 240 + +hydrogen_G4DNAElastic 31 +hydrogen_G4DNAExcitation 32 +hydrogen_G4DNAIonisation 33 +hydrogen_G4DNAChargeIncrease 35 + +alpha_G4DNAElastic 41 +alpha_G4DNAExcitation 42 +alpha_G4DNAIonisation 43 +alpha_G4DNAChargeDecrease 44 +msc 410 +CoulombScat 420 +ionIoni 430 +nuclearStopping 440 + +alpha+_G4DNAElastic 51 +alpha+_G4DNAExcitation 52 +alpha+_G4DNAIonisation 53 +alpha+_G4DNAChargeDecrease 54 +alpha+_G4DNAChargeIncrease 55 +msc 510 +CoulombScat 520 +hIoni 530 +nuclearStopping 540 + +helium_G4DNAElastic 61 +helium_G4DNAExcitation 62 +helium_G4DNAIonisation 63 +helium_G4DNAChargeIncrease 65 + +GenericIon_G4DNAIonisation 73 +msc 710 +CoulombScat 720 +ionIoni 730 +nuclearStopping 740 + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr diff --git a/examples/extended/medical/dna/icsd/.README.txt b/examples/extended/medical/dna/icsd/.README.txt new file mode 100644 index 0000000000..2319303b4b --- /dev/null +++ b/examples/extended/medical/dna/icsd/.README.txt @@ -0,0 +1,67 @@ + +///\file "medical/dna/icsd/.README.txt" +///\brief Example icsd README page + +/*! \page Exampleicsd Example icsd + +\author Sylvain Meylan , Carmen Villagrasa (a) \n +(a) carmen.villagrasa _irsn _ fr \n + +This example is provided by the Geant4-DNA collaboration \n +Any report or published results obtained using the Geant4-DNA software +shall cite the following Geant4-DNA collaboration publications: \n +[1] Med. Phys. 37 (2010) 4692-4708 \n +[2] Phys. Med. 31 (2015) 861-874 \n +In addition, for this example using DNA-materials cross-sections, please cite: \n +[3] Rad. Phys and Chem. 130 (2017) 459-479 \n + +\section icsd_s1 INTRODUCTION + +The icsd name of this example stands for: Ionisation Cluster Size Distribution. +This example allows the calculation of the distribution concerning the number of ionisations per event in an small cylinder of 2.3 nanometers diameter and 3.4 nanometers heigh, typical dimensions of a 10 base pairs piece of chromatin. + +It constitutes the first use of new DNA-like material's cross-sections that were experimentally obtained at PTB (Rad. Phys and Chem. 130 (2017) 459-479) for electrons and calculated for protons on THF, TMP, PY and PU materials. + +The new physical models corresponding to the DNA materials have recently been implemented in Geant4-DNA thaks to new classes, that allow the use of other materials different from liquid water: G4VDNAModel, G4DNAModelInterface,G4DNADummyModel and other associated classes. + +These new models are further described at: +http://geant4-dna.org + +\section icsd_s2 GEOMETRY SET-UP AND PRIMARY PARTICLES + +As indicated in the introduction, the geometry used in this exercise is very simple: a cylinder of 2.3 nanometers diameter and 3.4 nanometers heigh, typical dimensions of a 10 base pairs piece of chromatin that is centered in a cubic world of 10 nanometers side length filled with liquid water. + +This cylinder is filled with THF material. The definition of the THF material must be done using the G4String="THF". Currently, other materials are available than also use the G4Strings to be recognized by the model classes "TMP", "PY" or "PU" for the DNA-like materials and "deoxyribose","adenine", "guanine", "thymine" or "cytosine" for the derived DNA materials. + +Primary particles are electrons starting at (-1.15 nanometers, 0,0) (at the cylinder's edge) and initial momentum (1,0,0) + +\section icsd_s3 PHYSICS LIST + +The PhysicsList used in this example show how to use the new classes that allow Geant4-DNA to use other materials than liquid water : +-# Models are built: classical Geant4-DNA models for liquid water material and PTB models for DNA-like materials +-# G4DNAModelInterface object is built for each type of interaction (elastic, ionisation, excitation) +-# G4DNAModels are registered within the corresponding G4DNAModelInterface. For liquid water models, the particle name must be added to the RegisterModel function. For DNA-like material models and Vacuum no other parameter is needed. +-# G4DNAProcesses objects are built and the corresponding G4DNAModelInterface is registered within. G4DNAModelInterface acts like a classical G4VEmModel + +Remember that new DNA-like material classes are available for: +\verbatim +electrons from 12 eV-1 keV, including elastic, ionisation and excitation processes +protons from 70 keV to 10 MeV, only for ionisation processes following a modified HKS formalism +\endverbatim + +\section icsd_s4 SET UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +\section icsd_s5 HOW TO RUN THE EXAMPLE + + ./icsd will run in multi-threaded mode with 2 threads by default. + Two ntuples will be filled in the output file: + - Ntuple 1 contains the information for calculating the ionisation cluster size distribution per event + - Ntuple 2 contains interaction information at the step level + +\verbatim +Please, do not forget to make "hadd ICSD.root ICSD_t0.root ICSD_t1.root" before using plot.C +\endverbatim + +*/ diff --git a/examples/extended/medical/dna/icsd/README b/examples/extended/medical/dna/icsd/README new file mode 100644 index 0000000000..794bf5aea2 --- /dev/null +++ b/examples/extended/medical/dna/icsd/README @@ -0,0 +1,61 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + icsd + ------- + +Authors: Sylvain Meylan et Carmen Villagrasa (IRSN, France) +For any question, please contact: +carmen.villagrasa@irsn.fr + +This example is provided by the Geant4-DNA collaboration +Any report or published results obtained using the Geant4-DNA software +shall cite the following Geant4-DNA collaboration publications: +[1] Med. Phys. 37 (2010) 4692-4708 +[2] Phys. Med. 31 (2015) 861-874 +In addition, for this example using DNA-materials cross-sections, please cite: +[3] Rad. Phys and Chem. 130 (2017) 459-479 + +---->0. INTRODUCTION. + +The icsd name of this example stands for: Ionisation Cluster Size Distribution. +This example allows the calculation of the distribution concerning the number of ionisations per event in an small cylinder of 2.3 nanometers diameter and 3.4 nanometers heigh, typical dimensions of a 10 base pairs piece of chromatin. +It constitutes the first use of new DNA-like material's cross-sections that were experimentally obtained at PTB (Rad. Phys and Chem. 130 (2017) 459-479) for electrons and calculated for protons on THF, TMP, PY and PU materials. +The new physical models corresponding to the DNA materials have recently been implemented in Geant4-DNA thaks to new classes, that allow the use of other materials different from liquid water: G4VDNAModel, G4DNAModelInterface,G4DNADummyModel and other associated classes. + +These new models are further described at: +http://geant4-dna.org + +---->1. GEOMETRY SET-UP AND PRIMARY PARTICLES + +As indicated in the introduction, the geometry used in this exercise is very simple: a cylinder of 2.3 nanometers diameter and 3.4 nanometers heigh, typical dimensions of a 10 base pairs piece of chromatin that is centered in a cubic world of 10 nanometers side length filled with liquid water. +This cylinder is filled with THF material. The definition of the THF material must be done using the G4String="THF". Currently, other materials are available than also use the G4Strings to be recognized by the model classes "TMP", "PY" or "PU" for the DNA-like materials and "deoxyribose","adenine", "guanine", "thymine" or "cytosine" for the derived DNA materials. +Primary particles are electrons starting at (-1.15 nanometers, 0,0) (at the cylinder's edge) and initial momentum (1,0,0) + +---->2. PHYSICS LIST + +The PhysicsList used in this example show how to use the new classes that allow Geant4-DNA to use other materials than liquid water : +1/ Models are built: classical Geant4-DNA models for liquid water material and PTB models for DNA-like materials +2/ G4DNAModelInterface object is built for each type of interaction (elastic, ionisation, excitation) +3/ G4DNAModels are registered within the corresponding G4DNAModelInterface. For liquid water models, the particle name must be added to the RegisterModel function. For DNA-like material models and Vacuum no other parameter is needed. +4/ G4DNAProcesses objects are built and the corresponding G4DNAModelInterface is registered within. G4DNAModelInterface acts like a classical G4VEmModel + +Remember that new DNA-like material classes are available for: + +electrons from 12 eV-1 keV, including elastic, ionisation and excitation processes +protons from 70 keV to 10 MeV, only for ionisation processes following a modified HKS formalism + +---->3. SET UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +---->4. HOW TO RUN THE EXAMPLE + + ./icsd will run in multi-threaded mode with 2 threads by default. + Two ntuples will be filled in the output file: + - Ntuple 1 contains the information for calculating the ionisation cluster size distribution per event + - Ntuple 2 contains interaction information at the step level + diff --git a/examples/extended/medical/dna/mfp/.README.txt b/examples/extended/medical/dna/mfp/.README.txt new file mode 100644 index 0000000000..759e8af6e6 --- /dev/null +++ b/examples/extended/medical/dna/mfp/.README.txt @@ -0,0 +1,85 @@ + +///\file "medical/dna/mfp/.README.txt" +///\brief Example mfp README page + + +/*! \page Examplemfp Example mfp + +\author S. Incerti et al. (a, *) \n +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan \n +(CENBG), IN2P3 / CNRS / Bordeaux University, 33175 Gradignan, France \n +* e-mail:incerti@cenbg.in2p3.fr + +\section mfp_s1 INTRODUCTION. + +The mfp example shows how to calculate mean free path of particles +in liquid water using the Geant4-DNA physics processes and models. + +It has been adapted from the spower and TestEm14 examples. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software +shall cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +\section mfp_s2 GEOMETRY SET-UP + +The geometry is a 1 m radius sphere of liquid water (G4_WATER +material). Particles are shot along x from the sphere centre. + +Radius of the sphere, physics constructor, primary particle and +energy can be controlled by the mfp.in macro file. + +\section mfp_s3 SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +\section mfp_s4 HOW TO RUN THE EXAMPLE + +Use: + +\verbatim +./mfp mfp.in +\endverbatim + +The mfp.in macro allows a full control of the simulation. + +The computation of MFP and other quantities is performed in the +SteppingAction::UserSteppingAction method. + +The histo.in macro shows how to display several quantities +(energy spectrum, scattering angle along x) of primary and secondaries. + +\section mfp_s5 PHYSICS + +G4EmDNAPhysics* constructors are used. + +\section mfp_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +The accuracy of results may depend on incident statistics as well as +on number of steps specified in the SteppingAction::UserSteppingAction +method. + +The output results consist in a text file (mfp.txt), containing : +- energy of incident particles (in eV) +- mfp (in nm) +- rms (i.e. standard deviation) on mfp (in nm) + +Otherwise you may use histo.in to generate ROOT histograms of the +other quantities. + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr + +*/ diff --git a/examples/extended/medical/dna/mfp/README b/examples/extended/medical/dna/mfp/README new file mode 100644 index 0000000000..afbdd876ee --- /dev/null +++ b/examples/extended/medical/dna/mfp/README @@ -0,0 +1,79 @@ + ========================================================= + Geant4 - mfp example + ========================================================= + + README file + ---------------------- + + CORRESPONDING AUTHOR + +S. Incerti et al. (a, *) +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan +(CENBG), IN2P3 / CNRS / Bordeaux University, 33175 Gradignan, France +* e-mail:incerti@cenbg.in2p3.fr + +---->0. INTRODUCTION. + +The mfp example shows how to calculate mean free path of particles +in liquid water using the Geant4-DNA physics processes and models. + +It has been adapted from the spower and TestEm14 examples. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software +shall cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +---->1. GEOMETRY SET-UP. + +The geometry is a 1 m radius sphere of liquid water (G4_WATER +material). Particles are shot along x from the sphere centre. + +Radius of the sphere, physics constructor, primary particle and +energy can be controlled by the mfp.in macro file. + +---->2. SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +---->3. HOW TO RUN THE EXAMPLE + +Use: + +./mfp mfp.in + +The mfp.in macro allows a full control of the simulation. + +The computation of MFP and other quantities is performed in the +SteppingAction::UserSteppingAction method. + +The histo.in macro shows how to display several quantities +(energy spectrum, scattering angle along x) of primary and secondaries. + +---->4. PHYSICS + +G4EmDNAPhysics* constructors are used. + +---->5. SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consist in a text file (mfp.txt), containing : +- energy of incident particles (in eV) +- mfp (in nm) +- rms (i.e. standard deviation) on mfp (in nm) + +Otherwise you may use histo.in to generate ROOT histograms of the +other quantities. + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr diff --git a/examples/extended/medical/dna/microdosimetry/.README.txt b/examples/extended/medical/dna/microdosimetry/.README.txt new file mode 100644 index 0000000000..4bcae9d619 --- /dev/null +++ b/examples/extended/medical/dna/microdosimetry/.README.txt @@ -0,0 +1,191 @@ + +///\file "medical/dna/microdosimetry/.README.txt" +///\brief ExampleMicrodosimetry README page + + +/*! \page ExampleMicrodosimetry Example microdosimetry + +\author S. Incerti (a, *), V. Ivantchenko (b), M. Karamitros (a) \n +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan +(CENBG), IN2P3 / CNRS / Bordeaux 1 University, 33175 Gradignan, France \n +b. G4AI Ltd, UK \n +* e-mail:incerti@cenbg.in2p3.fr \n + +\section microdosimetry_s1 INTRODUCTION + +The microdosimetry example simulates the track of two 5 MeV protons in liquid water. +Geant4 standard EM models are used in the World volume while Geant4-DNA models +are used in a Target volume, declared as a Region. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: \n +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +We also suggest these other references related to this example: \n +Nucl. Instrum. and Meth. B 273 (2012) 95-97 \n +Prog. Nucl. Sci. Tec. 2 (2011) 898-903 \n + +\section microdosimetry_s2 GEOMETRY SET-UP + +The geometry is a 1 mm side cube (World) made of liquid water containing a smaller cubic Target volume of liquid +water, which dimensions are twenty times smaller than the dimensions of the World volume. + +\section microdosimetry_s3 SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic libraries. + +The code can be compiled with cmake. + +It works in MT mode. + +\section microdosimetry_s4 HOW TO RUN THE EXAMPLE +Normal mode, run: + +\verbatim +./microdosimetry -mt 2 -out microdosimetry +\endverbatim + +(or more generally +\verbatim +./microdosimetry -mt 2 -out myRootFile +\endverbatim +) + +The macro microdosimetry.in is executed by default; to select another one: + +\verbatim +./microdosimetry -mac myMacro.mac +\endverbatim + +To get visualization and interactivity: + +\verbatim +./microdosimetry -gui +\endverbatim +( OGL used by default) + +or you may use your own visualization driver, for instance: +\verbatim +./microdosimetry -vis "DAWNFILE" +\endverbatim + +\section microdosimetry_s5 PHYSICS + +This example shows: +- how to use the Geant4-DNA processes, +- how to count and save occurrences of processes +- how to combine them with Standard EM Physics. + +A simple electron capture process is also provided in order to kill electrons +below a chosen energy threshold, set in the Physics list. + +Look at the PhyscisList.cc file. + +\section microdosimetry_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consists in a dna.root file, containing for each simulation step: +- the type of particle for the current step +- the type of process for the current step +- the track position of the current step (in nanometers) +- the energy deposit along the current step (in eV) +- the step length (in nm) +- the total energy loss along the current step (in eV) +- the kinetic energy at PreStepPoint +- the cos of the scattering angle +- the event ID +- the track ID +- the parent track ID +- the step number + +This file can be easily analyzed using for example the provided ROOT macro +file plot.C; to do so : +* be sure to have ROOT installed on your machine +* be sure to be in the microdosimetry directory +* launch ROOT by typing root +* under your ROOT session, type in : .X plot.C to execute the macro file +* alternatively you can type directly under your session : root plot.C + +The naming scheme on the displayed ROOT plots is as follows (see SteppingAction.cc), +as in the 'dnaphysics' example: + +- particles: \n +gamma : 0 \n +e- : 1 \n +proton : 2 \n +hydrogen : 3 \n +alpha : 4 \n +alpha+ : 5 \n +helium : 6 \n +\n +- processes: \n + +eCapture 1 \n +(only if one uses G4EmDNAPhysicsActivator in PhysicsList) + +e-_G4DNAElectronSolvation 10 \n +e-_G4DNAElastic 11 \n +e-_G4DNAExcitation 12 \n +e-_G4DNAIonisation 13 \n +e-_G4DNAAttachment 14 \n +e-_G4DNAVibExcitation 15 \n +msc 110 \n +CoulombScat 120 \n +eIoni 130 \n \n + +proton_G4DNAElastic 21 \n +proton_G4DNAExcitation 22 \n +proton_G4DNAIonisation 23 \n +proton_G4DNAChargeDecrease 24 \n +msc 210 \n +CoulombScat 220 \n +hIoni 230 \n +nuclearStopping 240 \n \n + +hydrogen_G4DNAElastic 31 \n +hydrogen_G4DNAExcitation 32 \n +hydrogen_G4DNAIonisation 33 \n +hydrogen_G4DNAChargeIncrease 35 \n \n + +alpha_G4DNAElastic 41 \n +alpha_G4DNAExcitation 42 \n +alpha_G4DNAIonisation 43 \n +alpha_G4DNAChargeDecrease 44 \n +msc 410 \n +CoulombScat 420 \n +ionIoni 430 \n +nuclearStopping 440 \n \n + +alpha+_G4DNAElastic 51 \n +alpha+_G4DNAExcitation 52 \n +alpha+_G4DNAIonisation 53 \n +alpha+_G4DNAChargeDecrease 54 \n +alpha+_G4DNAChargeIncrease 55 \n \n +msc 510 \n +CoulombScat 520 \n +hIoni 530 \n +nuclearStopping 540 \n + +helium_G4DNAElastic 61 \n +helium_G4DNAExcitation 62 \n +helium_G4DNAIonisation 63 \n +helium_G4DNAChargeIncrease 65 \n \n + +GenericIon_G4DNAIonisation 73 \n +msc 710 \n +msc 710 \n +CoulombScat 720 \n +ionIoni 730 \n +nuclearStopping 740 \n \n + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr\n + +*/ diff --git a/examples/extended/medical/dna/microdosimetry/README b/examples/extended/medical/dna/microdosimetry/README new file mode 100644 index 0000000000..1c8f6aae31 --- /dev/null +++ b/examples/extended/medical/dna/microdosimetry/README @@ -0,0 +1,184 @@ +------------------------------------------------------------------- +------------------------------------------------------------------- + + ========================================================= + Geant4 - Microdosimetry example + ========================================================= + + README file + ---------------------- + + CORRESPONDING AUTHOR + +S. Incerti (a, *), V. Ivantchenko (b), M. Karamitros (a) +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan +(CENBG), IN2P3 / CNRS / Bordeaux 1 University, 33175 Gradignan, France +b. G4AI Ltd, UK +* e-mail:incerti@cenbg.in2p3.fr + +---->0. INTRODUCTION. + +The microdosimetry example simulates the track of two 5 MeV protons in liquid water. +Geant4 standard EM models are used in the World volume while Geant4-DNA models +are used in a Target volume, declared as a Region. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +We also suggest these other references related to this example: +Nucl. Instrum. and Meth. B 273 (2012) 95-97 +Prog. Nucl. Sci. Tec. 2 (2011) 898-903 + +---->1. GEOMETRY SET-UP. + +The geometry is a 1 mm side cube (World) made of liquid water containing a smaller cubic Target volume of liquid +water, which dimensions are twenty times smaller than the dimensions of the World volume. + +--->2. SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic libraries. + +The code can be compiled with cmake. + +It works in MT mode. + +---->3. HOW TO RUN THE EXAMPLE + +Normal mode, run: + +./microdosimetry -mt 2 -out microdosimetry + +(or more generally +./microdosimetry -mt 2 -out myRootFile +) + +The macro microdosimetry.in is executed by default; to select another one: + +./microdosimetry -mac myMacro.mac + +To get visualization and interactivity: + +./microdosimetry -gui +( OGL used by default) + +or you may use your own visualization driver, for instance: +./microdosimetry -vis "DAWNFILE" + +---->4. PHYSICS + +This example shows: +- how to use the Geant4-DNA processes, +- how to count and save occurrences of processes +- how to combine them with Standard EM Physics. + +A simple electron capture process is also provided in order to kill electrons +below a chosen energy threshold, set in the Physics list. + +Look at the PhyscisList.cc file. + +---->5. SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consists in a dna.root file, containing for each simulation step: +- the type of particle for the current step +- the type of process for the current step +- the track position of the current step (in nanometers) +- the energy deposit along the current step (in eV) +- the step length (in nm) +- the total energy loss along the current step (in eV) +- the kinetic energy at PreStepPoint +- the cos of the scattering angle +- the event ID +- the track ID +- the parent track ID +- the step number + +This file can be easily analyzed using for example the provided ROOT macro +file plot.C; to do so : +* be sure to have ROOT installed on your machine +* be sure to be in the microdosimetry directory +* launch ROOT by typing root +* under your ROOT session, type in : .X plot.C to execute the macro file +* alternatively you can type directly under your session : root plot.C + +The naming scheme on the displayed ROOT plots is as follows (see SteppingAction.cc), +as in the 'dnaphysics' example: + +-particles: +gamma : 0 +e- : 1 +proton : 2 +hydrogen : 3 +alpha : 4 +alpha+ : 5 +helium : 6 + +-processes: + +eCapture 1 +(only if one uses G4EmDNAPhysicsActivator in PhysicsList) + +e-_G4DNAElectronSolvation 10 +e-_G4DNAElastic 11 +e-_G4DNAExcitation 12 +e-_G4DNAIonisation 13 +e-_G4DNAAttachment 14 +e-_G4DNAVibExcitation 15 +msc 110 +CoulombScat 120 +eIoni 130 + +proton_G4DNAElastic 21 +proton_G4DNAExcitation 22 +proton_G4DNAIonisation 23 +proton_G4DNAChargeDecrease 24 +msc 210 +CoulombScat 220 +hIoni 230 +nuclearStopping 240 + +hydrogen_G4DNAElastic 31 +hydrogen_G4DNAExcitation 32 +hydrogen_G4DNAIonisation 33 +hydrogen_G4DNAChargeIncrease 35 + +alpha_G4DNAElastic 41 +alpha_G4DNAExcitation 42 +alpha_G4DNAIonisation 43 +alpha_G4DNAChargeDecrease 44 +msc 410 +CoulombScat 420 +ionIoni 430 +nuclearStopping 440 + +alpha+_G4DNAElastic 51 +alpha+_G4DNAExcitation 52 +alpha+_G4DNAIonisation 53 +alpha+_G4DNAChargeDecrease 54 +alpha+_G4DNAChargeIncrease 55 +msc 510 +CoulombScat 520 +hIoni 530 +nuclearStopping 540 + +helium_G4DNAElastic 61 +helium_G4DNAExcitation 62 +helium_G4DNAIonisation 63 +helium_G4DNAChargeIncrease 65 + +GenericIon_G4DNAIonisation 73 +msc 710 +CoulombScat 720 +ionIoni 730 +nuclearStopping 740 + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr diff --git a/examples/extended/medical/dna/microprox/.README.txt b/examples/extended/medical/dna/microprox/.README.txt new file mode 100644 index 0000000000..743d9f2530 --- /dev/null +++ b/examples/extended/medical/dna/microprox/.README.txt @@ -0,0 +1,70 @@ +//$Id$ + +///\file "dna/microprox/.README.txt" +///\brief Example microprox README page + +/*! \page Examplemicroprox Example microprox + +Author: S. Incerti et al. \n +Date: MArch 2nd, 2019 \n +Email: incerti@cenbg.in2p3.fr + +(c) The Geant4-DNA collaboration. + +This examples shows how to compute proximity functions +in liquid water using exclusively Geant4-DNA +physics processes and models. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +- J. Appl. Phys. (2019) in press +- Med. Phys. 45 (2018) e722-e739 +- Phys. Med. 31 (2015) 861-874 +- Med. Phys. 37 (2010) 4692-4708 +- Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 + +\section Examplemicroprox_s1 Geometry + +An infinite box of liquid water. + +\section Examplemicroprox_s2 Incident particles + +Particles can be selected from the microprox.in macro +as well as their incident energy. +They are shot from the center of the box. +Tracking cut can also be selected (as energy). + +\section Examplemicroprox_s3 Physics + +The default Geant4-DNA physics constructor 2 is used in +the PhysicsList class. Alternative constructor can be +selected from microprox.in + +\section Examplemicroprox_s4 Scoring of enery deposition + +Energy depositions are scored in spherical shells from randomly selected hits. +The user can select the dimensions of the shells as well as radius steps in TrackerSD.cc. + +\section Examplemicroprox_s5 Run + +The code can be run using: +\verbatim +./microprox microprox.in +\endverbatim + +\section Examplemicroprox_s6 Results + +Results can be analyzed after the run using: +\verbatim +root plot.C +\endverbatim + +The distribution of t is shown by default. + +*/ + diff --git a/examples/extended/medical/dna/microprox/README b/examples/extended/medical/dna/microprox/README new file mode 100644 index 0000000000..85c01ca989 --- /dev/null +++ b/examples/extended/medical/dna/microprox/README @@ -0,0 +1,52 @@ +*** microprox example *** + +Author: S. Incerti et al. +Date: MArch 2nd, 2019 +Email: incerti@cenbg.in2p3.fr + +(c) The Geant4-DNA collaboration. + +This examples shows how to compute proximity functions +in liquid water using exclusively Geant4-DNA +physics processes and models. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: + +J. Appl. Phys. (2019) in press +Med. Phys. 45 (2018) e722-e739 +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 +Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 + +1) Geometry +An infinite box of liquid water. + +2) Incident particles +Particles can be selected from the microprox.in macro +as well as their incident energy. +They are shot from the center of the box. +Tracking cut can also be selected (as energy). + +3) Physics +The default Geant4-DNA physics constructor 2 is used in +the PhysicsList class. Alternative constructor can be +selected from microprox.in + +4) Scoring of enery deposition +Energy depositions are scored in spherical shells from randomly selected hits. +The user can select the dimensions of the shells as well as radius steps in TrackerSD.cc. + +5) The code can be run using: +./microprox microprox.in + +6) Results can be analyzed after the run using: +root plot.C + +The distribution of t is shown by default. + diff --git a/examples/extended/medical/dna/microyz/.README b/examples/extended/medical/dna/microyz/.README new file mode 100644 index 0000000000..537579000e --- /dev/null +++ b/examples/extended/medical/dna/microyz/.README @@ -0,0 +1,73 @@ + +///\file "dna/microyz/.README.txt" +///\brief Example microyz README page + +/*! \page Examplemicroyz Example microyz + +Author: S. Incerti et al. +Date: 17 Apr. 2015 +Email: incerti@cenbg.in2p3.fr + +(c) The Geant4-DNA collaboration. + +This examples shows how to compute microdosimetry +distributions y, z in liquid water using exclusively Geant4-DNA +physics processes and models. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 +J. Appl. Phys. 122 (2017) 024303 + +\section Examplemicroyz_s1 Geometry + +A box of liquid water. + +\section Examplemicroyz_s2 Incident particles + +Particles can be selected from the mycroyz.in macro +as well as their incident energy. +They are shot from the center of the box. + +\section Examplemicroyz_s3 Physics + +The default Geant4-DNA physics constructor 2 is used in +the PhysicsList class. Alternative constructor can be +selected from microyz.in + +\section Examplemicroyz_s4 Scoring of enery deposition + +Energy depositions are scored in spheres randomly +placed along the incident particle track, +using a weighted sampling. + +The user can select in the TrackerSD class +the radius of the sphere (5 nm by default) + +\section Examplemicroyz_s5 Run + +The code can be run using: +\verbatim +./microyz microyz.in +\endverbatim + +\section Examplemicroyz_s6 Results + +Results can be analyzed after the run using: +\verbatim +root plot.C +\endverbatim + +The distribution of y is shown by default. + +The following quantities are calculated: yF and yD. + + +*/ + diff --git a/examples/extended/medical/dna/microyz/.README.txt b/examples/extended/medical/dna/microyz/.README.txt new file mode 100644 index 0000000000..537579000e --- /dev/null +++ b/examples/extended/medical/dna/microyz/.README.txt @@ -0,0 +1,73 @@ + +///\file "dna/microyz/.README.txt" +///\brief Example microyz README page + +/*! \page Examplemicroyz Example microyz + +Author: S. Incerti et al. +Date: 17 Apr. 2015 +Email: incerti@cenbg.in2p3.fr + +(c) The Geant4-DNA collaboration. + +This examples shows how to compute microdosimetry +distributions y, z in liquid water using exclusively Geant4-DNA +physics processes and models. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 +J. Appl. Phys. 122 (2017) 024303 + +\section Examplemicroyz_s1 Geometry + +A box of liquid water. + +\section Examplemicroyz_s2 Incident particles + +Particles can be selected from the mycroyz.in macro +as well as their incident energy. +They are shot from the center of the box. + +\section Examplemicroyz_s3 Physics + +The default Geant4-DNA physics constructor 2 is used in +the PhysicsList class. Alternative constructor can be +selected from microyz.in + +\section Examplemicroyz_s4 Scoring of enery deposition + +Energy depositions are scored in spheres randomly +placed along the incident particle track, +using a weighted sampling. + +The user can select in the TrackerSD class +the radius of the sphere (5 nm by default) + +\section Examplemicroyz_s5 Run + +The code can be run using: +\verbatim +./microyz microyz.in +\endverbatim + +\section Examplemicroyz_s6 Results + +Results can be analyzed after the run using: +\verbatim +root plot.C +\endverbatim + +The distribution of y is shown by default. + +The following quantities are calculated: yF and yD. + + +*/ + diff --git a/examples/extended/medical/dna/microyz/README b/examples/extended/medical/dna/microyz/README new file mode 100644 index 0000000000..828a823c6e --- /dev/null +++ b/examples/extended/medical/dna/microyz/README @@ -0,0 +1,59 @@ +*** microyz example *** + +Author: S. Incerti et al. +Date: 1 June 2017 +Email: incerti@cenbg.in2p3.fr + +(c) The Geant4-DNA collaboration. + +This examples shows how to compute microdosimetry +distributions y, z in liquid water using exclusively Geant4-DNA +physics processes and models. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 +J. Appl. Phys. 122 (2017) 024303 + +1) Geometry +A box of liquid water. + +2) Incident particles +Particles can be selected from the mycroyz.in macro +as well as their incident energy. +They are shot from the center of the box. + +3) Physics +The default Geant4-DNA physics constructor 2 is used in +the PhysicsList class. Alternative constructor can be +selected from microyz.in. + +Livermore and Penelope physics lists can be used as well. + +Tracking cut and maximum step size can be selected in the macro + file microyz.in + +4) Scoring of enery deposition +Energy depositions are scored in spheres randomly +placed along the incident particle track, +using a weighted sampling. + +The user can select in the TrackerSD class the radius +of the sphere (5 nm by default). + +5) The code can be run using: +./microyz microyz.in + +6) Results can be analyzed after the run using: +root plot.C + +The distribution of y is shown by default. + +The following quantities are calculated: yF and yD. + diff --git a/examples/extended/medical/dna/neuron/.README b/examples/extended/medical/dna/neuron/.README new file mode 100644 index 0000000000..ee12c691b3 --- /dev/null +++ b/examples/extended/medical/dna/neuron/.README @@ -0,0 +1,164 @@ + +///\file "medical/dna/neuron/.README" +///\brief Exampleneuron README page + + +/*! \page Exampleneuron Example neuron + +\authors M. Batmunkh *(a,b), O.V. Belov *(a), L. Bayarchimeg (a), O. Lkhagva (b) \n +(a) Laboratory of Radiation Biology, Joint Institute for Nuclear Research (JINR), +6 Joliot-Curie St., 141980 Dubna, Moscow Region, Russia \n +(b) Division of Natural Sciences, National University of Mongolia (NUM), +1 University St., 210646 Ulaanbaatar, Mongolia \n +* Corresponding authors, email to batmunkh@jinr.ru, dem@jinr.ru \n + +Paper: O.V. Belov, M. Batmunkh, S. Incerti, O. Lkhagva. Radiation damage to \n +neuronal cells: Simulating the energy deposition and water radiolysis \n +in a small neural network. Physica Medica. 2016. 32. 1510-1520. \n + +\section neuron_s1 INTRODUCTION + +The NEURON example allows for the modelling of neuron cell irradiation, including physical, +physico-chemical and chemical processes (eg. production of oxidative radical species in the +vicinity of neurons). It uses realistic geometrical models of neurons generated from a +standardized SWC file representing neuron morphology. + // A typical neuron cell is composed of a cell body (soma), a single axon, a dendritic tree, + // and thousands of dendritic spines. In the example, individual compartments of a neuron cell + // are simulated by spherical and cylindrical voxels. + // The soma is represented by combination of several spheres, while the dendritic tree is described with combinations of cylinders. + // Each voxel is represented as interconnection of two tracing points of the neuron model. + + // A standardized neuromorphometric format (SWC) is an output file representing individual neuron + // morphology generated by digitally tracing tools based on 3D confocal microscopy images. + // In the SWC file, different numerical markers (e.g. from 1 to 6) describe different types of tracing points: + // 1 - soma + // 2 - axon + // 3 - apical dendrite + // 4 - basal dendrite + // 5+ - custom (5 – spines, 6 – terminals, etc.). + // Details are available in the NeuronLoadDataFile class. + + // In order to simulate a neural network, user can create his own file containing + // a combination of several individual neurons (see NeuralNETWORK.dat sample file + // describing a network of 10 pyramidal neurons). + +Geant4-DNA models are activated in the neuron model, which is declared as a G4Region. +Geant4 condensed EM models are used outside the neuron structure. + +The example package contains: +- source files (src, include, neuron.cc) +- README +- .in, plotDend.C and visualization macro files +- GranuleCell-Nr2.CNG.swc (Sample file describing a single granule neuron is loaded by default) +- NeuralNETWORK.dat (Sample file describing a network of 10 pyramidal neurons) + +To run the example: see section 4 of this README +To simulation output: see section 5 of this README + +The code can be compiled with cmake. +It works in MT mode. + +\section neuron_s2 GEOMETRY SET-UP + +The geometry is cube (World) made of galactic material. +Before computation, user loads a standardized SWC file of a neuron and generates +a bounding volume and a homogeneous spherical medium of liquid water. +Dimensions of the target volume are automatically extrapolated using SWC file describing +3D coordinates of a neuron. The homogeneous medium contains volumes of neuronal cell and a bounding slice. +The side cube (World) is again represented as overall dimensions of neuronal cell +that is equal to the diameter of the homogeneous medium. + +The construction of whole geometry of neuron morphology is set in the +DetectorConstruction class. + +User can choose between single-neuron simulation and modelling a neural network. Single-neuron +simulation is set by default. To switch simulation to neural network, the following command should be used: +> ./neuron -network FileName.dat + +\section neuron_s3 EVENT: THE PRIMARY GENERATOR + +The primary kinematic consists of a single particle starting at the random positions +on the sphere surface. Then, the particle beam is directed towards the bounding slice volume, +and traverses the individual neurons (default option). The type of the particle and its energy are set in the +PrimaryGeneratorAction class, and can be changed via the G4 build-in commands of G4ParticleGun class. +We included the following options for particle directions: +a) Particles are directed to "square" on the XY plane of bounding slice (or YZ, XZ) +./neuron -mac myMacro.mac -sXY +b) Particles are directed to "disk" on the XY plane of bounding slice (or YZ, XZ) +./neuron -mac myMacro.mac -dXY +c) Particles are directed towards the bounding slice (default option) +./neuron -mac myMacro.mac + +\section neuron_s5 PHYSICS + +The following options of physical and chemical processes are included: +Default Livermore physics +./neuron -mac myMacro.mac + +a) Livermore + DNAphysics with extended Rudd ionisation model. +./neuron -mac myMacro.mac -dnaliv +b) Livermore + DNAPhysics + DNAChemistry +./neuron -mac myMacro.mac -dnachemON +c) Combination of DNA- and Livermore- physics with hadronic physics. +./neuron -mac myMacro.mac -dnahad + +NOTE, that it requires more memory or computing resources when chemistry is ON (b) and +also long computational time when dnaphysics activated. Conversely, it can works faster when default. + +Look at the src/PhyscisList.cc files. + +\section neuron_s5 HOW TO RUN THE EXAMPLE + +To get help, run: + +> ./neuron -h + +In visualization and interactive mode, run: + +> ./neuron -gui +( OGL used by default) +or you may use your own visualization driver, for instance: + ./neuron -vis "DAWNFILE" + +"GranuleCell-Nr2.CNG.swc" is the default file and it should be placed into same directory as the executable. +You can download it here: +http://neuromorpho.org/neuron_info.jsp?neuron_name=GranuleCell-Nr2 +You can change neuron`s file name using the following command: + +> ./neuron -gui -swc newFileName.swc + +In batch mode , run: + +> ./neuron(.exe) [-mac neuron.in] [-mt numberofThreads] +> ./neuron -mac ../neuron.in -mt 3 > neuron.out + +To get visualization, make sure to uncomment the #/control/execute vis.mac line in the macro. +User can start a visualization of the chemical track evolution in time and space +using SetEndTime (default-10 ps) and SetVerbose setting in src/ActionInitialization.cc file. + +\section neuron_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +The simulation outputs appears in terminal display. +- the energy deposit in the bounding slice and each structure of neuron (in kiloelectronVolt) +- the scored energy deposit within hitting compartment of neuron structure (in kiloelectronVolt) +- the number of particles inside and outside neuron +- the number of radiolytic species inside neuron when chemistry is activated + +The main output results are stored in OutputPerEvent.out file, containing for each event. +Dend3DEdep.out, Axon3DEdep.out and Soma3DEdep.out files for given dose: +- the position (x, y, z in micrometre) of compartments traversed by particle track. +- the Axon and Dendrite (basal and apical) distance of compartments from Soma (in micrometre). +- the energy deposition in compartments (in kiloelectronVolt). + +This file can be easily analysed using for example the provided ROOT macro +file plotDend.C; to do so: +* be sure to have ROOT installed on your machine +* be sure to be in the neuron directory +* launch ROOT by typing root +* under your ROOT session, type in : .X plotDend.C to execute the macro file +* alternatively you can type directly under your session : root plotDend.C +--------------------------------------------------------------------------- +If you have any questions or wish to notify of updates and/or modification please contact: +batmunkh@jinr.ru, dem@jinr.ru \n + +*/ diff --git a/examples/extended/medical/dna/neuron/.README.txt b/examples/extended/medical/dna/neuron/.README.txt new file mode 100644 index 0000000000..6265f8210f --- /dev/null +++ b/examples/extended/medical/dna/neuron/.README.txt @@ -0,0 +1,173 @@ + +///\file "medical/dna/neuron/.README.txt" +///\brief Exampleneuron README page + + +/*! \page Exampleneuron Example neuron + +\authors M. Batmunkh *(a,b), O.V. Belov *(a) \n +(a) Laboratory of Radiation Biology, Joint Institute for Nuclear Research (JINR), +6 Joliot-Curie St., 141980 Dubna, Moscow Region, Russia \n +(b) Division of Natural Sciences, National University of Mongolia (NUM), +1 University St., 210646 Ulaanbaatar, Mongolia \n +* Corresponding authors, email to batmunkh@jinr.ru, dem@jinr.ru \n + +Paper: O.V. Belov, M. Batmunkh, S. Incerti, O. Lkhagva. Radiation damage to \n +neuronal cells: Simulating the energy deposition and water radiolysis \n +in a small neural network. Physica Medica. 2016. 32. 1510-1520. \n + +\section neuron_s1 INTRODUCTION + +The NEURON example allows for the modelling of neuron cell irradiation, including physical, +physico-chemical and chemical processes (eg. production of oxidative radical species in the +vicinity of neurons). It uses realistic geometrical models of neurons generated from a +standardized SWC file representing neuron morphology. + +A typical neuron cell is composed of a cell body (soma), a single axon, a dendritic tree, +and thousands of dendritic spines. In the example, individual compartments of a neuron cell +are simulated by spherical and cylindrical voxels. +The soma is represented by combination of several spheres, while the dendritic tree is described with combinations of cylinders. +Each voxel is represented as interconnection of two tracing points of the neuron model. + +A standardized neuromorphometric format (SWC) is an output file representing individual neuron +morphology generated by digitally tracing tools based on 3D confocal microscopy images. +In the SWC file, different numerical markers (e.g. from 1 to 6) describe different types of tracing points: +- 1 - soma +- 2 - axon +- 3 - apical dendrite +- 4 - basal dendrite +- 5+ - custom (5 – spines, 6 – terminals, etc.). +Details are available in the NeuronLoadDataFile class. + +In order to simulate a neural network, user can create his own file containing +a combination of several individual neurons (see NeuralNETWORK.dat sample file +describing a network of 10 pyramidal neurons). + +Geant4-DNA models are activated in the neuron model, which is declared as a G4Region. +Geant4 condensed EM models are used outside the neuron structure. + +The example package contains: +- source files (src, include, neuron.cc) +- README +- .in, plotDend.C and visualization macro files +- GranuleCell-Nr2.CNG.swc (Sample file describing a single granule neuron is loaded by default) +- NeuralNETWORK.dat (Sample file describing a network of 10 pyramidal neurons) + +To run the example: see \ref neuron_s5 of this README +To simulation output: see \ref neuron_s6 of this README + +The code can be compiled with cmake. +It works in MT mode. + +\section neuron_s2 GEOMETRY SET-UP + +The geometry is cube (World) made of galactic material. +Before computation, user loads a standardized SWC file of a neuron and generates +a bounding volume and a homogeneous spherical medium of liquid water. +Dimensions of the target volume are automatically extrapolated using SWC file describing +3D coordinates of a neuron. The homogeneous medium contains volumes of neuronal cell and a bounding slice. +The side cube (World) is again represented as overall dimensions of neuronal cell +that is equal to the diameter of the homogeneous medium. + +The construction of whole geometry of neuron morphology is set in the +DetectorConstruction class. + +User can choose between single-neuron simulation and modelling a neural network. Single-neuron +simulation is set by default. To switch simulation to neural network, the following command should be used: +> ./neuron -network FileName.dat + +\section neuron_s3 EVENT: THE PRIMARY GENERATOR + +The primary kinematic consists of a single particle starting at the random positions +on the sphere surface. Then, the particle beam is directed towards the bounding slice volume, +and traverses the individual neurons (default option). The type of the particle and its energy are set in the +PrimaryGeneratorAction class, and can be changed via the G4 build-in commands of G4ParticleGun class. +We included the following options for particle directions: + +a) Particles are directed to "square" on the XY plane of bounding slice (or YZ, XZ) +> ./neuron -mac myMacro.mac -sXY + +b) Particles are directed to "disk" on the XY plane of bounding slice (or YZ, XZ) +> ./neuron -mac myMacro.mac -dXY + +c) Particles are directed towards the bounding slice (default option) +> ./neuron -mac myMacro.mac + +\section neuron_s4 PHYSICS + +The following options of physical and chemical processes are included: +Default Livermore physics +> ./neuron -mac myMacro.mac + +a) Livermore + DNAphysics with extended Rudd ionisation model. +> ./neuron -mac myMacro.mac -dnaliv + +b) Livermore + DNAPhysics + DNAChemistry +> ./neuron -mac myMacro.mac -dnachemON + +c) Combination of DNA- and Livermore- physics with hadronic physics. +> ./neuron -mac myMacro.mac -dnahad + +NOTE, that it requires more memory or computing resources when chemistry is ON (b) and +also long computational time when dnaphysics activated. Conversely, it can works faster when default. + +Look at the src/PhyscisList.cc files. + +\section neuron_s5 HOW TO RUN THE EXAMPLE + +To get help, run: + +> ./neuron -h + +In visualization and interactive mode, run: +> ./neuron -gui +( OGL used by default) + +or you may use your own visualization driver, for instance: +> ./neuron -vis "DAWNFILE" + +"GranuleCell-Nr2.CNG.swc" is the default file and it should be placed into same directory as the executable. +You can download it here: +http://neuromorpho.org/neuron_info.jsp?neuron_name=GranuleCell-Nr2 +You can change neuron`s file name using the following command: + +> ./neuron -gui -swc newFileName.swc + +In batch mode , run: + +> ./neuron(.exe) [-mac neuron.in] [-mt numberofThreads] +> ./neuron -mac ../neuron.in -mt 3 > neuron.out + +To get visualization, make sure to uncomment the #/control/execute vis.mac line in the macro. +User can start a visualization of the chemical track evolution in time and space +using SetEndTime (default-10 ps) and SetVerbose setting in src/ActionInitialization.cc file. + +\section neuron_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +The simulation outputs appears in terminal display. +- the energy deposit in the bounding slice and each structure of neuron (in kiloelectronVolt) +- the scored energy deposit within hitting compartment of neuron structure (in kiloelectronVolt) +- the number of particles inside and outside neuron +- the number of radiolytic species inside neuron when chemistry is activated + +The main output results are stored in OutputPerEvent.out file, containing for each event. +Dend3DEdep.out, Axon3DEdep.out and Soma3DEdep.out files for given dose: +- the position (x, y, z in micrometre) of compartments traversed by particle track. +- the Axon and Dendrite (basal and apical) distance of compartments from Soma (in micrometre). +- the energy deposition in compartments (in kiloelectronVolt). +- the dose deposition in compartments (in Gray). + +This file can be easily analysed using for example the provided ROOT macro +file plotDend.C; to do so: +- be sure to have ROOT installed on your machine +- be sure to be in the neuron directory +- launch ROOT by typing root +- under your ROOT session, type in : .X plotDend.C to execute the macro file +- alternatively you can type directly under your session : root plotDend.C + +--------------------------------------------------------------------------- + +If you have any questions or wish to notify of updates and/or modification please contact: +batmunkh@jinr.ru, dem@jinr.ru \n + +*/ diff --git a/examples/extended/medical/dna/neuron/README b/examples/extended/medical/dna/neuron/README new file mode 100644 index 0000000000..d8a47c9e19 --- /dev/null +++ b/examples/extended/medical/dna/neuron/README @@ -0,0 +1,165 @@ + + ========================================================= + Geant4 - NEURON + ========================================================= + + README file + ---------------------- + + +Authors: M. Batmunkh *(a,b), O.V. Belov *(a), L. Bayarchimeg (a), O. Lkhagva (b) + +(a) Laboratory of Radiation Biology, Joint Institute for Nuclear Research (JINR), 6 Joliot-Curie St., 141980 Dubna, Moscow Region, Russia +(b) Division of Natural Sciences, National University of Mongolia (NUM), 1 University St., 210646 Ulaanbaatar, Mongolia +* Corresponding authors, email to batmunkh@jinr.ru, dem@jinr.ru + +Paper: O.V. Belov, M. Batmunkh, S. Incerti, O. Lkhagva. Radiation damage to +neuronal cells: Simulating the energy deposition and water radiolysis +in a small neural network. Physica Medica. 2016. 32. 1510-1520. + +---->1. INTRODUCTION. + +The NEURON example allows for the modelling of neuron cell irradiation, including physical, +physico-chemical and chemical processes (eg. production of oxidative radical species in the +vicinity of neurons). It uses realistic geometrical models of neurons generated from a +standardized SWC file representing neuron morphology. + // A typical neuron cell is composed of a cell body (soma), a single axon, a dendritic tree, + // and thousands of dendritic spines. In the example, individual compartments of a neuron cell + // are simulated by spherical and cylindrical voxels. + // The soma is represented by combination of several spheres, while the dendritic tree is described with combinations of cylinders. + // Each voxel is represented as interconnection of two tracing points of the neuron model. + + // A standardized neuromorphometric format (SWC) is an output file representing individual neuron + // morphology generated by digitally tracing tools based on 3D confocal microscopy images. + // In the SWC file, different numerical markers (e.g. from 1 to 6) describe different types of tracing points: + // 1 - soma + // 2 - axon + // 3 - apical dendrite + // 4 - basal dendrite + // 5+ - custom (5 – spines, 6 – terminals, etc.). + // Details are available in the NeuronLoadDataFile class. + + // In order to simulate a neural network, user can create his own file containing + // a combination of several individual neurons (see NeuralNETWORK.dat sample file + // describing a network of 10 pyramidal neurons). + +Geant4-DNA models are activated in the neuron model, which is declared as a G4Region. +Geant4 condensed EM models are used outside neuron structure. + +The example package contains: +- source files (src, include, neuron.cc) +- README +- .in, plotDend.C and visualization macro files +- GranuleCell-Nr2.CNG.swc (Sample file describing a single granule neuron is loaded by default) +- NeuralNETWORK.dat (Sample file describing a network of 10 pyramidal neurons) + +To run the example: see section 5 of this README +To simulation output: see section 6 of this README + +The code can be compiled with cmake. +It works in MT mode. + +---->2. GEOMETRY SET-UP. + +The geometry is cube (World) made of galactic material. +Before computation, user loads a standardized SWC file of a neuron and generates +a bounding volume and a homogeneous spherical medium of liquid water. +Dimensions of the target volume are automatically extrapolated using SWC file describing +3D coordinates of a neuron. The homogeneous medium contains volumes of neuronal cell and a bounding slice. +The side cube (World) is again represented as overall dimensions of neuronal cell +that is equal to the diameter of the homogeneous medium. + +The construction of whole geometry of neuron morphology is set in the +DetectorConstruction class. + +User can choose between single-neuron simulation and modelling a neural network. Single-neuron +simulation is set by default. To switch simulation to neural network, the following command should be used: +> ./neuron -network FileName.dat + +---->3. EVENT: THE PRIMARY GENERATOR + +The primary kinematic consists of a single particle starting at the random positions +on the sphere surface. Then, the particle beam is directed towards the bounding slice volume, +and traverses the individual neurons (default option). The type of the particle and its energy are set in the +PrimaryGeneratorAction class, and can be changed via the G4 build-in commands of G4ParticleGun class. +We included the following options for particle directions: +a) Particles are directed to "square" on the XY plane of bounding slice (or YZ, XZ) +./neuron -mac myMacro.mac -sXY +b) Particles are directed to "disk" on the XY plane of bounding slice (or YZ, XZ) +./neuron -mac myMacro.mac -dXY +c) Particles are directed towards the bounding slice (default option) +./neuron -mac myMacro.mac + +---->4. PHYSICS + +The following options of physical and chemical processes are included: +Default Livermore physics +./neuron -mac myMacro.mac + +a) Livermore + DNAphysics with extended Rudd ionisation model. +./neuron -mac myMacro.mac -dnaliv +b) Livermore + DNAPhysics + DNAChemistry +./neuron -mac myMacro.mac -dnachemON +c) Combination of DNA- and Livermore- physics with hadronic physics. +./neuron -mac myMacro.mac -dnahad + +NOTE, that it requires more memory or computing resources when chemistry is ON (b) and +also long computational time when dnaphysics activated. Conversely, it can works faster when default. + +Look at the src/PhyscisList.cc files. + + +---->5. HOW TO RUN THE EXAMPLE + +To get help, run: + +> ./neuron -h + +In visualization and interactive mode, run: + +> ./neuron -gui +( OGL used by default) +or you may use your own visualization driver, for instance: + ./neuron -vis "DAWNFILE" + +"GranuleCell-Nr2.CNG.swc" is the default file and it should be placed into same directory as the executable. +You can download it here: +http://neuromorpho.org/neuron_info.jsp?neuron_name=GranuleCell-Nr2 +You can change neuron`s file name using the following command: + +> ./neuron -swc newFileName.swc + +In batch mode , run: + +> ./neuron(.exe) [-mac neuron.in] [-mt numberofThreads] +> ./neuron -mac ../neuron.in -mt 3 > neuron.out + +To get visualization, make sure to uncomment the #/control/execute vis.mac line in the macro. +User can start a visualization of the chemical track evolution in time and space +using SetEndTime (default-10 ps) and SetVerbose setting in src/ActionInitialization.cc file. + + +---->6. SIMULATION OUTPUT AND RESULT ANALYSIS + +The simulation outputs appears in terminal display. +- the energy deposit in the bounding slice and each structure of neuron (in kiloelectronVolt) +- the scored energy deposit within hitting compartment of neuron structure (in kiloelectronVolt) +- the number of particles inside and outside neuron +- the number of radiolytic species inside neuron when chemistry is activated + +The main output results are stored in OutputPerEvent.out file, containing for each event. +Dend3DEdep.out, Axon3DEdep.out and Soma3DEdep.out files for given dose: +- the position (x, y, z in micrometre) of compartments traversed by particle track. +- the Axon and Dendrite (basal and apical) distance of compartments from Soma (in micrometre). +- the energy deposition in compartments (in kiloelectronVolt). + +This file can be easily analysed using for example the provided ROOT macro +file plotDend.C; to do so: +* be sure to have ROOT installed on your machine +* be sure to be in the neuron directory +* launch ROOT by typing root +* under your ROOT session, type in : .X plotDend.C to execute the macro file +* alternatively you can type directly under your session : root plotDend.C +--------------------------------------------------------------------------- +If you have any questions or wish to notify of updates and/or modification please contact: +batmunkh@jinr.ru, dem@jinr.ru diff --git a/examples/extended/medical/dna/pdb4dna/.README.txt b/examples/extended/medical/dna/pdb4dna/.README.txt new file mode 100644 index 0000000000..1113085c42 --- /dev/null +++ b/examples/extended/medical/dna/pdb4dna/.README.txt @@ -0,0 +1,134 @@ + +///\file "medical/dna/pdb4dna/.README.txt" +///\brief Examplepdb4dna README page + +/*! \page ExamplePdb4dna Example pdb4dna + +\author E. Delage, Y. Perrot, Q.T. Pham \n +Laboratoire de Physique Corpusculaire de Clermont-Ferrand \n +CNRS/IN2P2 - Clermont University, France + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +\section pdb4dna_s1 A brief description + +The PDB4DNA example simulates energy deposits in a target volume generated from a PDB file representing DNA geometry. +Position of energy deposits are used to compute strand breaks in the DNA geometry. +Geant4-DNA processes are used. + +The example package contains: +- source files (src, include, pdb4dna.cc) +- README +- .in, analysis.C and visualization macro files +- 1ZBB.pdb (di nucleosome is loaded by default) + +To run the example: see section 4 of this README +To analyze output: see section 6 of this README + +\section pdb4dna_s2 Set-up + +The geometry is a 1000 angstrom side cube (World) made of galactic material. +Before a computation, user loads a PDB file and generates a target volume (the bounding volume) of liquid water, which dimensions are extrapolated from PDB file atom 3D coordinates. + +\section pdb4dna_s3 Some main features + +\verbatim +| MESSENGER LIST | +----------------------------------------------------------------- +[1] Load a PDB file (The default atoms visualization is done by sphere that are parametrized with the van der Waals radius). \n +CPK coloring. \n +- Hydrogen(H) => white sphere, +- Carbon(C) => gray sphere, +- Oxygen(O) => red sphere, +- Nitrogen(N) => dark blue sphere, +- Sulfur(S) => yellow sphere, +- Phosphorus(P) => orange sphere, +- others/undefined => pink sphere. \n +/PDB4DNA/det/loadPDB filename.pdb +----------------------------------------------------------------- +[2] Build only a bounding volume for computation and draw it : \n +/PDB4DNA/det/buildBoundingV +----------------------------------------------------------------- +[3] Draw Atoms : /PDB4DNA/det/drawAtoms \n +[4] Draw Nucleotids (sphere representing nucleotids) : /PDB4DNA/det/drawNucleotides \n +[5] Draw Residues : /PDB4DNA/det/drawResidues \n +- Base => blue sphere,Sugar => yellow sphere,Phosphate => red sphere. \n +Spheres are linked by cylinders + +[6] Draw Atoms with bounding volume : /PDB4DNA/det/drawAtomsWithBounding \n +[7] Draw Nucleotides with bounding volume : /PDB4DNA/det/drawNucleotidesWithBounding \n +[8] Draw Residues with bounding volume : /PDB4DNA/det/drawResiduesWithBounding \n +----------------------------------------------------------------- +[9] Set energy treshold to compute SSB : /PDB4DNA/event/setEnergyThres 8.22 eV (default value set to 8.22 eV) \n +[10] Set distance treshlod to compute DSB : /PDB4DNA/event/setDistanceThres 10 (default value set to 10) \n + +Notes: \n +[1] is mandatory for visualization and simulation. \n +[2] is needed for simulation. \n +\endverbatim + +\section pdb4dna_s4 How to run the example. + +To get help, run: + +> ./pdb4dna(.exe) -h + +In interactive mode, run: + +> ./pdb4dna(.exe) -gui + +"1ZBB.pdb" is the default file and it should be placed into same directory as the executable. +You can download it here: \n +http://www.rcsb.org/pdb/download/downloadFile.do?fileFormat=pdb&compression=NO&structureId=1ZBB + +In batch mode , run: + +> ./pdb4dna(.exe) [-mac pdb4dna.in] [-mt numberofThreads] \n + +To get visualization, make sure to uncomment the #/control/execute vis.mac line in the macro. + +\section pdb4dna_s5 The physics + + This example shows how to use the Geant4-DNA processes from constructor + +Look at the PhyscisList.cc file. + +\section pdb4dna_s6 Simulation output + +The output results consists in a pdb.root file, containing for each event: \n +- the energy deposit in the bounding box (in electronVolt) \n +- the number of single strand break (SSB) \n +- the number of double strand break (DSB) \n + +This file can be easily analyzed using for example the provided ROOT macro +file analysis.C; to do so : \n +* be sure to have ROOT installed on your machine \n +* be sure to be in the example directory \n +* launch ROOT by typing root \n +* under your ROOT session, type in : .X analysis.C to execute the macro file \n +* alternatively you can type directly under your session : root analysis.C \n + +\section pdb4dna_s7 Contacts + + +If you have any questions or wish to notify of updates and/or modification please contact: \n + +E. Delage (geometry and visualization referee) at delage@clermont.in2p3.fr \n +Y. Perrot (physics and simulation referee) at perrot@clermont.in2p3.fr + + +----> Acknowledgments : + + Jean Orloff (LPC, Clermont-Ferrand, France) for 3D rotation implementation, + Michel Maire (G4AI) for /extended/geometry/transforms example, + Laurent Garnier (LAL, Orsay, France) for Qt visualisation. + +*/ diff --git a/examples/extended/medical/dna/pdb4dna/README b/examples/extended/medical/dna/pdb4dna/README new file mode 100644 index 0000000000..899f74760a --- /dev/null +++ b/examples/extended/medical/dna/pdb4dna/README @@ -0,0 +1,133 @@ +================================================================= + Geant4 - pdb4dna +================================================================= + + +Authors: E. Delage *(a), Y. Perrot *(a), Q.T. Pham (a) + +(a) Laboratoire de Physique Corpusculaire de Clermont-Ferrand, CNRS/IN2P3 - Clermont University, France +* Corresponding authors, email to delage@clermont.in2p3.fr, perrot@clermont.in2p3.fr + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +---> 1. A brief description + +The PDB4DNA example simulates energy deposits in a target volume generated from a PDB file representing DNA geometry. +Position of energy deposits are used to compute strand breaks in the DNA geometry. +Geant4-DNA processes are used. + +The example package contains: +- source files (src, include, pdb4dna.cc) +- README +- .in, analysis.C and visualization macro files +- 1ZBB.pdb (di nucleosome is loaded by default) + +To run the example: see section 4 of this README +To analyze output: see section 6 of this README + +----> 2. Set-up. + +The geometry is a 1000 angstrom side cube (World) made of galactic material. +Before a computation, user loads a PDB file and generates a target volume (the bounding volume) of liquid water, which dimensions are extrapolated from PDB file atom 3D coordinates. + +----> 3. Some main features + +| MESSENGER LIST | +----------------------------------------------------------------- +[1] Load a PDB file (The default atoms visualization is done by sphere that are parametrized with the van der Waals radius). +CPK coloring. +- Hydrogen(H) => white sphere, +- Carbon(C) => gray sphere, +- Oxygen(O) => red sphere, +- Nitrogen(N) => dark blue sphere, +- Sulfur(S) => yellow sphere, +- Phosphorus(P) => orange sphere, +- others/undefined => pink sphere. +/PDB4DNA/det/loadPDB filename.pdb +----------------------------------------------------------------- +[2] Build only a bounding volume for computation and draw it : +/PDB4DNA/det/buildBoundingV +----------------------------------------------------------------- +[3] Draw Atoms : /PDB4DNA/det/drawAtoms +[4] Draw Nucleotids (sphere representing nucleotids) : /PDB4DNA/det/drawNucleotides +[5] Draw Residues +- Base => blue sphere, +- Sugar => yellow sphere, +- Phosphate => red sphere. +Spheres are linked by cylinders: +/PDB4DNA/det/drawResidues +[6] Draw Atoms with bounding volume : /PDB4DNA/det/drawAtomsWithBounding +[7] Draw Nucleotides with bounding volume : /PDB4DNA/det/drawNucleotidesWithBounding +[8] Draw Residues with bounding volume : /PDB4DNA/det/drawResiduesWithBounding +----------------------------------------------------------------- +[9] Set energy treshold to compute SSB : /PDB4DNA/event/setEnergyThres 8.22 eV (default value set to 8.22 eV) +[10] Set distance treshlod to compute DSB : /PDB4DNA/event/setDistanceThres 10 (default value set to 10) + +Notes: +[1] is mandatory for visualization and simulation. +[2] is needed for simulation. + +----> 4. How to run the example. + +To get help, run: + +> ./pdb4dna(.exe) -h + +In interactive mode, run: + +> ./pdb4dna(.exe) -gui + +"1ZBB.pdb" is the default file and it should be placed into same directory as the executable. +You can download it here: +http://www.rcsb.org/pdb/download/downloadFile.do?fileFormat=pdb&compression=NO&structureId=1ZBB + +In batch mode , run: + +> ./pdb4dna(.exe) [-mac pdb4dna.in] [-mt numberofThreads] + +To get visualization, make sure to uncomment the #/control/execute vis.mac line in the macro. + +----> 5. The physics + +This example shows how to use the Geant4-DNA processes from constructor + +Look at the PhyscisList.cc file. + +----> 6. Simulation output + +The output results consists in a pdb_dna.root file, containing for each event: +- the energy deposit in the bounding box (in electronVolt) +- the number of single strand break (SSB) +- the number of double strand break (DSB) + +This file can be easily analyzed using for example the provided ROOT macro +file analysis.C; to do so : +* be sure to have ROOT installed on your machine +* be sure to be in the example directory +* launch ROOT by typing root +* under your ROOT session, type in : .X analysis.C to execute the macro file +* alternatively you can type directly under your session : root analysis.C + +----> 7. Contacts + +If you have any questions or wish to notify of updates and/or modification please contact: + +E. Delage (geometry and visualization referee) at delage@clermont.in2p3.fr +Y. Perrot (physics and simulation referee) at perrot@clermont.in2p3.fr + + +----> Acknowledgments : + + Jean Orloff (LPC, Clermont-Ferrand, France) for 3D rotation implementation, + Michel Maire (G4AI) for /extended/geometry/transforms example, + Laurent Garnier (LAL, Orsay, France) for Qt visualisation. + + diff --git a/examples/extended/medical/dna/range/.README.txt b/examples/extended/medical/dna/range/.README.txt new file mode 100644 index 0000000000..2d0b6caa74 --- /dev/null +++ b/examples/extended/medical/dna/range/.README.txt @@ -0,0 +1,97 @@ + +///\file "medical/dna/range/.README.txt" +///\brief Example range README page + + +/*! \page Examplerange Example range + +\author S. Incerti et al. (a, *) \n +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan \n +(CENBG), IN2P3 / CNRS / Bordeaux University, 33175 Gradignan, France \n +* e-mail:incerti@cenbg.in2p3.fr + +\section range_s1 INTRODUCTION. + +The range example shows how to calculate range of electrons +in liquid water using the Geant4-DNA physics processes and models. + +It is adapted from svalue. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: \n +Phys. Med. 31 (2015) 861-874 \n +Med. Phys. 37 (2010) 4692-4708 \n + +\section range_s2 GEOMETRY SET-UP + +The geometry is a 1 m radius sphere of liquid water (G4_WATER +material). Particles are shot randomly from the sphere centre. + +Radius of the sphere, physics constructor and energy can be +controlled by the range.in macro file. + +The PrimaryGeneratorAction class is adapted (G4 state dependent) +in order to enable generic physics list usage +(empty modular physics list). + +\section range_s3 SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +\section range_s4 HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +\verbatim +./range range.in +\endverbatim + +The range.in macro allows a full control of the simulation. + +The histo.in macro is also provided for the creation of histograms. + +The computation of ranges is performed in the +TrackingAction::PostUserTrackingAction method. The computation +for electrons uses the primary particle track length and the computation +for incident particles undergoing Geant4-DNA charge exchange processes, such +as protons, hydrogen, alpha particles and their charge states, is specific. + +\section range_s5 PHYSICS + +You can select Geant4-DNA physics in range.in. + +A tracking cut can be applied if requested. + +\section range_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consist in a text file (range.txt), containing : +- energy of incident particles (in eV) +- track length of primary particle (in nm) +- rms of track length of primary particle (in nm) +- projected length of primary particle (in nm) +- rms of projected length of primary particle (in nm) +- penetration of primary particle (in nm) +- rms of penetration of primary particle (in nm) + +Note: rms values correspond to standard deviation. + +Results in this file can be displayed using the ROOT macro plot.C: +\verbatim +root plot.C +\endverbatim + +
+ +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr + +*/ diff --git a/examples/extended/medical/dna/range/README b/examples/extended/medical/dna/range/README new file mode 100644 index 0000000000..6e36f01b4f --- /dev/null +++ b/examples/extended/medical/dna/range/README @@ -0,0 +1,93 @@ + ========================================================= + Geant4 - range example + ========================================================= + + README file + ---------------------- + + CORRESPONDING AUTHOR + +S. Incerti et al. (a, *) +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan +(CENBG), IN2P3 / CNRS / Bordeaux University, 33175 Gradignan, France +* e-mail:incerti@cenbg.in2p3.fr + +---->0. INTRODUCTION. + +The range example shows how to calculate range of electrons +in liquid water using the Geant4-DNA physics processes and models. + +It is adapted from svalue. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +---->1. GEOMETRY SET-UP. + +The geometry is a 1 m radius sphere of liquid water (G4_WATER +material). Particles are shot randomly from the sphere centre. + +Radius of the sphere, physics constructor and energy can be +controlled by the range.in macro file. + +The PrimaryGeneratorAction class is adapted (G4 state dependent) +in order to enable generic physics list usage +(empty modular physics list). + +---->2. SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +---->3. HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +./range range.in + +The range.in macro allows a full control of the simulation. + +The histo.in macro is also provided for the creation of histograms. + +The computation of ranges is performed in the +TrackingAction::PostUserTrackingAction method. The computation +for electrons uses the primary particle track length and the computation +for incident particles undergoing Geant4-DNA charge exchange processes, such +as protons, hydrogen, alpha particles and their charge states, is specific. + +---->4. PHYSICS + +You can select Geant4-DNA physics constructor in range.in. + +A tracking cut can be applied if requested. + +---->5. SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consist in a text file (range.txt), containing : +- energy of incident particles (in eV) +- track length of primary particle (in nm) +- rms of track length of primary particle (in nm) +- projected length of primary particle (in nm) +- rms of projected length of primary particle (in nm) +- penetration of primary particle (in nm) +- rms of penetration of primary particle (in nm) + +Note: rms values correspond to standard deviation. + +Results in this file can be displayed using the ROOT macro plot.C: +root plot.C + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr diff --git a/examples/extended/medical/dna/scavenger/.README.txt b/examples/extended/medical/dna/scavenger/.README.txt new file mode 100644 index 0000000000..bbcd02e699 --- /dev/null +++ b/examples/extended/medical/dna/scavenger/.README.txt @@ -0,0 +1,294 @@ + +///\file "medical/dna/scavenger/.README.txt" +///\brief Example scavenger README page + +/*! \page Examplescavenger Example scavenger + +\author F. Chappuis (a), L. Desorgher (b), H. Tran (c) \n +(a) flore.chappuis@chuv.ch \n +(b) laurent.desorgher@chuv.ch \n +(c) tran@cenbg.in2p3.fr \n + +(a,b) Institute of Radiation Physics (IRA), Lausanne University Hospital \n + and University of Lausanne, CH-1007 Lausanne, Switzerland \n +(c) CNRS, CENBG, UMR 5797, Université de Bordeaux, F-33170 Gradignan, France \n + +Funding: FNS Synergia grant MAGIC-FNS CRSII5_186369. + +This example is provided by the Geant4-DNA collaboration. +(http://geant4-dna.org) + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: \n +Med. Phys. 45 (2018) e722-e739 \n +Phys. Med. 31 (2015) 861-874 \n +Med. Phys. 37 (2010) 4692-4708 \n +Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 \n + + +\section SCAVENGER_s0 INTRODUCTION + +This example shows how to activate the scavenging process in chemistry +using the deterministic treatment of the IRT model (see chem6 example). +It allows to define chemical reactions and the concentration of +scavengers by means of a user text file (see section 10). The +concentration of scavengers is assumed to be constant over time. + +To run the example: + + mkdir scavenger-build + cd scavenger-build + cmake ../pathToExamples/scavenger + make + +In interactive mode, run: + + ./scavenger + +(Note: the interactive mode only allows the visualisation of the +physical stage and does not work for the chemical stage) + +In batch mode, the macro beam.in can be used as follows: + + ./scavenger beam.in + +or + + ./scavenger beam.in 123 + 123 is the user's seed number + +\section SCAVENGER_s1 GEOMETRY DEFINITION + +The world volume is a simple water box which represents a 'pseudo infinite' +homogeneous medium. + +Two parameters define the geometry : +- the material of the box for the physical stage is water. +- for the chemistry stage, the concentration of scavengers in [mole/l] + is added. This concentration is supposed to have no effect on the + physical stage. + +The default geometry is constructed in DetectorConstruction class. + +\section SCAVENGER_s2 PHYSICS LIST + +PhysicsList is Geant4 modular physics list using G4EmDNAPhysics_option2 +and EmDNAChemistry constructors (the chemistry constructor uses the +independent reaction time method). + +\section SCAVENGER_s3 ACTION INITIALIZATION + +The class ActionInitialization instantiates and registers +to Geant4 kernel all user action classes. + +While in sequential mode the action classes are instantiated just once, +via invoking the method +ActionInitialization::Build() +in multi-threading mode the same method is invoked for each thread worker +and so all user action classes are defined thread-local. + +A run action class is instantiated both thread-local +and global that's why its instance is created also in the method +ActionInitialization::BuildForMaster() +which is invoked only in multi-threading mode. + +To not register a molecule, add this command: +G4MoleculeCounter::Instance()->DontRegister(G4O2::Definition()); + +\section SCAVENGER_s3 AN EVENT: PRIMARY GENERATOR + +The primary kinematic consists of a single particle starting at the +center of the box. The type of the particle and its energy are set +in the PrimaryGeneratorAction class, and can be changed via the G4 +build-in commands of G4GeneralParticleSource class. +The chemistry module is triggered in the StackingAction class when +all physical tracks have been processed. + +\section SCAVENGER_s5 DETECTOR RESPONSE : Scorers + +\subsection SCAVENGER_s5_sub1 Species scorer + +Scorers are defined in DetectorConstruction::ConstructSDandField(). +There is one G4MultiFunctionalDetector object which computes the +energy deposition and the number of species along time in order to +extract the radiochemical yields: +\verbatim +(Number of species X) / (100 eV of deposited energy). +\endverbatim + +Run::RecordEvent(), called at end of event, collects information +event per event from the hits collections, and accumulates statistic +for RunAction::EndOfRunAction(). + +In multi-threading mode the accumulated statistics per workers is +merged to the master in Run::Merge(). + +These two macro commands can be used to control the scoring time: + +\verbatim +/scorer/species/addTimeToRecord 1 ps +# user can select time bin to score G values. + +/scorer/species/nOfTimeBins +# or user can automatically select time bin logarithmically. +\endverbatim + +The information about all the molecular species is scored in a ROOT +ntuple file, the name of which can be given by the user through the +macro command: /scoreSpecies/setRootFileName scorer.root. +The ROOT program plotG.C can be used to plot the G values vs time +for each species. + +\subsection SCAVENGER_s5_sub2 Primary Killer + +The G values are computed for a range of deposited energy. We are +in an infinite volume. Therefore the energy lost by the primary +equals the deposited energy since all secondary particles will +finally slow down to the thermal energy. +The primary is killed once it has deposited more energy than a +minimum threshold. + +IMPORTANT: However, when the primary particle loses more energy +in few interaction steps than the maximum allowed threshold, the +event is disregarded (= aborted). + +These two macro commands can be used to control the energy loss by +the primary: + +\verbatim +/primaryKiller/eLossMin 10 keV +# after 10 keV of energy loss by the primary particle, the primary is killed + +/primaryKiller/eLossMax 10.1 keV +# if the primary particle loses more than 10.1 keV, the event is aborted +\endverbatim + +The G values are then computed for a deposited energy in the range +[10 keV; 10.1 keV]. + +Note that if the upper boundary of the energy lost by the primary +is not set, the chemistry may take a lot of time to compute. +This set of macros is embedded in the PrimaryKiller class. +The species scorer must check whether the event was aborted before +taking it or not into account for the computation of the results. + +The size of detector can be controlled by this class using user +macro command: + +\verbatim +/primaryKiller/setSize 5 5 5 um +# kill the particles (primary and secondary) outside of the virtual volume +\endverbatim + +\section SCAVENGER_s6 STACKING ACTION + +StackingAction::NewStage is called when a stack of tracks has been +processed (for more details, look at the Geant4 documentation). +A verification on whether physical tracks remain to be processed +is done. If no tracks remain to be processed, the chemical module +is then triggered. + +\section SCAVENGER_s7 VISUALIZATION + +The visualization manager is set via the G4VisExecutive class in the +main() function in scavenger.cc. +The initialization of the drawing is done via a set of /vis/ commands +in the macro vis.mac. To activate the visualization mode, run: + +\verbatim +./scavenger +\endverbatim + +\section SCAVENGER_s8 OUTPUT + +Physics initialization and the defined reaction table are printed. +G4Scheduler processes the chemical stage after the physical stage has been completed. + +\section SCAVENGER_s9 RELEVANT MACRO COMMANDS AND MACRO FILE + +\verbatim +/primaryKiller/eLossMin 10 keV +# after 10 keV of energy loss by the primary particle, the primary is killed + +/primaryKiller/eLossMax 10.1 keV +# if the primary particle loses more than 10.1 keV, the event is aborted + +/scheduler/verbose 1 +# set the verbose level of the G4Scheduler class (time steps, reactions ...) + +/scheduler/endTime 1 microsecond +# set the time at which the simulation stops + +/scheduler/whyDoYouStop +# for advanced users: print information at the end of the chemical stage to know why the simulation has stopped +\endverbatim + +The user macro file is beam.in (electron simulations with primary killer method). + +\section SCAVENGER_s10 REACTION PARSER FILE + +This file is used to define chemical reactions and the concentration +of scavengers for the EmDNAChemistry constructor. + +Definition of scavengers: +\verbatim +scavenger: NAME CONCENTRATION +# concentration in [mole/l] +\endverbatim + +Definition of chemical reactions: +\verbatim +REACTANTS -> PRODUCTS , RATE TYPE +# reaction rate in [1/s/(mole/l)], for first order reaction in [1/s] +# reaction type based on Frongillo et al., Rad. Phys. Chem., 1998 +\endverbatim + +In any reaction, the molecules surrounded by square brackets [] are +scavengers. In the products of a reaction, the user can also use [] +to prevent a molecule from being produced. + +In this example, we provide 2 reaction tables for 2 different scavengers: +one with O2 and another with NO2-/NO3-. We encourage the user to add +chemical reactions and/or scavengers. However, the parser does not allow +the addition of molecules not defined in the model. This aspect will be +improved in future releases. In the meantime, please refer to the NO2- +or NO3- ions defined in EmDNAChemistry::ConstructMolecule() to add new +molecules. + +\section SCAVENGER_s11 PLOT + +The information about all the molecular species is scored in a ROOT +(https://root.cern) ntuple file scorer.root. The ROOT program plotG +can be used to plot the G values vs time for each species. + +Execute plotG as: +\verbatim +root plotG.C +\endverbatim + +or print G values to scorer.txt +\verbatim +root plotG.C > scorer.txt +\endverbatim + +The results show the molecular species (G values) as a function of +time (ns). Please ignore the O_2^0 molecule. + +\section SCAVENGER_s12 OTHER + +In physics: How can I display the tracking information? +\verbatim +/tracking/verbose 1 +\endverbatim + +In chemistry: How can I display the reaction information? +\verbatim +/scheduler/verbose 1 +\endverbatim + +How can I display the step by step information? +\verbatim +/scheduler/verbose 3 +\endverbatim + +*/ diff --git a/examples/extended/medical/dna/scavenger/README b/examples/extended/medical/dna/scavenger/README new file mode 100755 index 0000000000..7fe2e0965a --- /dev/null +++ b/examples/extended/medical/dna/scavenger/README @@ -0,0 +1,254 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + scavenger + --------- + +CORRESPONDING AUTHORS +F. Chappuis (a), L. Desorgher (b), H. Tran (c) +(a) flore.chappuis@chuv.ch +(b) laurent.desorgher@chuv.ch +(c) tran@cenbg.in2p3.fr + +(a,b) Institute of Radiation Physics (IRA), Lausanne University Hospital + and University of Lausanne, CH-1007 Lausanne, Switzerland +(c) CNRS, CENBG, UMR 5797, Université de Bordeaux, F-33170 Gradignan, France + +Funding: FNS Synergia grant MAGIC-FNS CRSII5_186369. + +This example is provided by the Geant4-DNA collaboration +(http://geant4-dna.org). + +Any report or published results obtained using the Geant4-DNA software +shall cite the following Geant4-DNA collaboration publications: +Med. Phys. 45 (2018) e722-e739 +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 +Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 + + 0 - INTRODUCTION + + This example shows how to activate the scavenging process in chemistry + using the deterministic treatment of the IRT model (see chem6 example). + It allows to define chemical reactions and the concentration of + scavengers by means of a user text file (see section 10). The + concentration of scavengers is assumed to be constant over time. + + To run the example: + mkdir scavenger-build + cd scavenger-build + cmake ../pathToExamples/scavenger + make + + In interactive mode, run: + ./scavenger + (Note: the interactive mode only allows the visualisation of the + physical stage and does not work for the chemical stage) + + In batch mode, the macro beam.in can be used as follows: + ./scavenger beam.in + or + ./scavenger beam.in 123 + # 123 is the user's seed number + + 1 - GEOMETRY DEFINITION + + The world volume is a simple water box which represents a 'pseudo infinite' + homogeneous medium. + + Two parameters define the geometry : + - the material of the box for the physical stage is water. + - for the chemistry stage, the concentration of scavengers in [mole/l] + is added. This concentration is supposed to have no effect on the + physical stage. + + The default geometry is constructed in DetectorConstruction class. + + 2 - PHYSICS LIST + + PhysicsList is Geant4 modular physics list using G4EmDNAPhysics_option2 + and EmDNAChemistry constructors (the chemistry constructor uses the + independent reaction time method). + + 3 - ACTION INITIALIZATION + + The class ActionInitialization instantiates and registers + to Geant4 kernel all user action classes. + + While in sequential mode the action classes are instantiated just + once, via invoking the method: ActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread + worker and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local and global + that's why its instance is created also in the method: + ActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + + To not register a molecule, add this command: + G4MoleculeCounter::Instance()->DontRegister(G4O2::Definition()); + + 4 - AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting at the + center of the box. The type of the particle and its energy are set + in the PrimaryGeneratorAction class, and can be changed via the G4 + build-in commands of G4GeneralParticleSource class. + The chemistry module is triggered in the StackingAction class when + all physical tracks have been processed. + + 5 - DETECTOR RESPONSE: Scorers + + 5.1 - Species scorer + + Scorers are defined in DetectorConstruction::ConstructSDandField(). + There is one G4MultiFunctionalDetector object which computes the + energy deposition and the number of species along time in order to + extract the radiochemical yields: + (Number of species X) / (100 eV of deposited energy). + + Run::RecordEvent(), called at end of event, collects information + event per event from the hits collections, and accumulates statistic + for RunAction::EndOfRunAction(). + + In multi-threading mode the accumulated statistics per workers is + merged to the master in Run::Merge(). + + These two macro commands can be used to control the scoring time: + /scorer/species/addTimeToRecord 1 ps + # user can select time bin to score G values. + /scorer/species/nOfTimeBins + # or user can automatically select time bin logarithmically. + + The information about all the molecular species is scored in a ROOT + ntuple file, the name of which can be given by the user through the + macro command: /scoreSpecies/setRootFileName scorer.root. + The ROOT program plotG.C can be used to plot the G values vs time + for each species. + + 5.2 - Primary killer + + The G values are computed for a range of deposited energy. We are + in an infinite volume. Therefore the energy lost by the primary + equals the deposited energy since all secondary particles will + finally slow down to the thermal energy. + The primary is killed once it has deposited more energy than a + minimum threshold. + + **IMPORTANT**: However, when the primary particle loses more energy + in few interaction steps than the maximum allowed threshold, the + event is disregarded (= aborted). + + These two macro commands can be used to control the energy loss by + the primary: + /primaryKiller/eLossMin 10 keV + # after 10 keV of energy loss by the primary particle, the primary is killed + /primaryKiller/eLossMax 10.1 keV + # if the primary particle loses more than 10.1 keV, the event is aborted + + The G values are then computed for a deposited energy in the range + [10 keV; 10.1 keV]. + + Note that if the upper boundary of the energy lost by the primary + is not set, the chemistry may take a lot of time to compute. + This set of macros is embedded in the PrimaryKiller class. + The species scorer must check whether the event was aborted before + taking it or not into account for the computation of the results. + + The size of detector can be controlled by this class using user + macro command: + /primaryKiller/setSize 5 5 5 um + # kill the particles (primary and secondary) outside of the virtual volume + + 6 - STACKING ACTION + + StackingAction::NewStage is called when a stack of tracks has been + processed (for more details, look at the Geant4 documentation). + A verification on whether physical tracks remain to be processed + is done. If no tracks remain to be processed, the chemical module + is then triggered. + + 7 - VISUALIZATION + + The visualization manager is set via the G4VisExecutive class in the + main() function in scavenger.cc. + The initialization of the drawing is done via a set of /vis/ commands + in the macro vis.mac. To activate the visualization mode, run: + ./scavenger + + 8 - OUTPUT + + Physics initialization and the defined reaction table are printed. + G4Scheduler processes the chemical stage after the physical stage + has been completed + + 9 - RELEVANT MACRO COMMANDS AND MACRO FILE + + /primaryKiller/eLossMin 10 keV + # after 10 keV of energy loss by the primary particle, the primary is killed + /primaryKiller/eLossMax 10.1 keV + # if the primary particle loses more than 10.1 keV, the event is aborted + /scheduler/verbose 1 + # set the verbose level of the G4Scheduler class (time steps, reactions ...) + /scheduler/endTime 1 microsecond + # set the time at which the simulation stops + /scheduler/whyDoYouStop + # for advanced users: print information at the end of the chemical stage + # to know why the simulation has stopped + + The user macro file is: beam.in + (electron simulations with primary killer method) + + 10 - REACTION PARSER FILE + + This file is used to define chemical reactions and the concentration + of scavengers for the EmDNAChemistry constructor. + + Definition of scavengers: + scavenger: NAME CONCENTRATION + # concentration in [mole/l] + + Definition of chemical reactions: + REACTANTS -> PRODUCTS , RATE TYPE + # reaction rate in [1/s/(mole/l)], for first order reaction in [1/s] + # reaction type based on Frongillo et al., Rad. Phys. Chem., 1998 + + In any reaction, the molecules surrounded by square brackets [] are + scavengers. In the products of a reaction, the user can also use [] + to prevent a molecule from being produced. + + In this example, we provide 2 reaction tables for 2 different scavengers: + one with O2 and another with NO2-/NO3-. We encourage the user to add + chemical reactions and/or scavengers. However, the parser does not allow + the addition of molecules not defined in the model. This aspect will be + improved in future releases. In the meantime, please refer to the NO2- + or NO3- ions defined in EmDNAChemistry::ConstructMolecule() to add new + molecules. + + 11 - PLOT + + The information about all the molecular species is scored in a ROOT + (https://root.cern) ntuple file scorer.root. The ROOT program plotG + can be used to plot the G values vs time for each species. + Execute plotG as: + root plotG.C + or print G values to scorer.txt + root plotG.C > scorer.txt + + The results show the molecular species (G values) as a function of + time (ns). Please ignore the O_2^0 molecule. + + 12 - OTHER + + In physics: + How can I display the tracking information? + /tracking/verbose 1 + + In chemistry: + How can I display the reaction information? + /scheduler/verbose 1 + How can I display the step by step information? + /scheduler/verbose 3 diff --git a/examples/extended/medical/dna/slowing/.README.txt b/examples/extended/medical/dna/slowing/.README.txt new file mode 100644 index 0000000000..a4f5d73b8f --- /dev/null +++ b/examples/extended/medical/dna/slowing/.README.txt @@ -0,0 +1,75 @@ + +///\file "medical/dna/slowing/.README.txt" +///\brief Example slowing README page + +/*! \page ExampleSlowing Example slowing + +\author S. Incerti, M. Karamitros (a, *) \n +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan \n +(CENBG), IN2P3 / CNRS / Bordeaux 1 University, 33175 Gradignan, France \n +* e-mail:incerti@cenbg.in2p3.fr \n + +\section slowing_s1 INTRODUCTION. + +The slowing example shows how to simulate slowing down spectra for electrons +in liquid water using the Geant4-DNA physics processes and models. + +This example is provided by the Geant4-DNA collaboration. + +It is described in S. Incerti et al. (2017), NIMB. + +The Geant4-DNA processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +\section slowing_s2 GEOMETRY SET-UP. + +The geometry is a cube (World) made of liquid water (G4_WATER +material). Electrons are shot from the center of the volume. + +\section slowing_s3 SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +\section slowing_s4 HOW TO RUN THE EXAMPLE + +In batch mode, run: + +./slowing slowing.in + +The macro slowing.in shows how to use/define: +- number of threads +- Geant4-DNA physics constructors +- tracking cut +- atomic deexcitation +- histograms + +\section slowing_s5 PHYSICS + +All Geant4-DNA physics constructors can be used. + +\section slowing_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consists in a slowing.root file containing 3 histograms +of slowing down spectrum Phi/D (unit is /cm2/eV/Gy) as a function of energy +(log (E/eV)) for: +- all electrons (histogram number 1) +- primary electrons (histogram number 2) +- secondary electrons (histogram number 3) + +This file can be easily analyzed using the provided ROOT macro +file plot.C (root plot.C). + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr +*/ diff --git a/examples/extended/medical/dna/slowing/README b/examples/extended/medical/dna/slowing/README new file mode 100644 index 0000000000..803fe0d095 --- /dev/null +++ b/examples/extended/medical/dna/slowing/README @@ -0,0 +1,77 @@ + ========================================================= + Geant4 - slowing example + ========================================================= + + README file + ---------------------- + + CORRESPONDING AUTHOR + +S. Incerti (a, *) +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan +(CENBG), IN2P3 / CNRS / Bordeaux 1 University, 33175 Gradignan, France +* e-mail:incerti@cenbg.in2p3.fr + +---->0. INTRODUCTION. + +The slowing example shows how to simulate slowing down spectra for electrons +in liquid water using the Geant4-DNA physics processes and models. + +This example is provided by the Geant4-DNA collaboration. + +It is described in S. Incerti et al. (2017), NIMB. + +The Geant4-DNA processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +---->1. GEOMETRY SET-UP. + +The geometry is a cube (World) made of liquid water (G4_WATER +material). Electrons are shot from the center of the volume. + +---->2. SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +---->3. HOW TO RUN THE EXAMPLE + +In batch mode, run: + +./slowing slowing.in + +The macro slowing.in shows how to use/define: +- number of threads +- Geant4-DNA physics constructors +- tracking cut +- atomic deexcitation +- histograms + +---->4. PHYSICS + +All Geant4-DNA physics constructors can be used. + +---->5. SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consists in a slowing.root file containing 3 histograms +of slowing down spectrum Phi/D (unit is /cm2/eV/Gy) as a function of energy +(log (E/eV)) for: +- all electrons (histogram number 1) +- primary electrons (histogram number 2) +- secondary electrons (histogram number 3) + +This file can be easily analyzed using the provided ROOT macro +file plot.C (root plot.C). + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr diff --git a/examples/extended/medical/dna/splitting/.README.txt b/examples/extended/medical/dna/splitting/.README.txt new file mode 100644 index 0000000000..75c76f9986 --- /dev/null +++ b/examples/extended/medical/dna/splitting/.README.txt @@ -0,0 +1,109 @@ +----------------------------------------- +///\file "medical/dna/splitting/.README.txt" +///\brief ExampleSplitting README page + +/*! \page ExampleSplitting Example splitting + +\section Splitting_s1 Authorship + + Authors: J. A. Ramos-Mendez and B. A. Faddegon + + Department of Radiation Oncology, University of California San Francisco + + This example is provided by the Geant4-DNA collaboration. + + These processes and models are further described at: + http://geant4-dna.org + + Any report or published results obtained using the Geant4-DNA software shall + cite the following Geant4-DNA collaboration publications: + - Phys. Med. 31 (2015) 861-874 + - Med. Phys. 37 (2010) 4692-4708 + + If use this example, please cite + - J Ramos-Mendez, et. Al. Phys. Med. Biol. 62(15), 5908-5925, (2017) DOI: 10.1088/1361-6560/aa7831 + +\section Splitting_s2 A brief description + + The Splitting example uses variance reduction to improve the computational + efficiency of calculations of ionization cluster size distributions. Ionization + events are scored in a nanoscaled cylinder. Ionized electrons generated by + the first generation of secondary electrons are split, i.e. new clone electrons + are generated, labeled and propagated. The label is used to classify those + new particles as if they were produced by independent histories to avoid + overlapping of tracks at final analysis. The Splitting is performed only + if the ionization event occurred in the cylinder. + + Geant4-DNA processes are used. + + The example package contains: + - source files (src, include) + - README + - .in, plot.C and visualization macro files + +\section Splitting_s3 Set-up + + The geometry is a nanoscaled cylinder centered in the world. The medium is + water everywhere. The dimensions can be defined with +\verbatim +/detector/diameter 6 nm +/detector/length 10 nm +\endverbatim + + User can define the split number (default is 1, i.e. no split) + with: +\verbatim +/vrt/numberOfSplit 10 +\endverbatim + +\section Splitting_s4 How to run the example. + + In interactive mode, run: +\verbatim +./Splitting +Idle> /control/execute vis.mac +\endverbatim + + In batch mode , run: +\verbatim +./Splitting run.mac +\endverbatim + + To get visualization, make sure to uncomment the #/control/execute vis.mac line in the macro. + +\section Splitting_s5 Physics + + This example shows: + - how to use the Geant4-DNA processes, + - how to implement the Splitting via G4WrappedProcess + - how to set the Splitting in specific region + - how to propagate new track information to secondary particles + + A simple electron capture process is also provided in order to kill electrons + below a chosen energy threshold, set in the Physics list. + + Look at the PhyscisList.cc file. + +\section Splitting_s6 Simulation output + + The output results consists in two histograms in root format + + - the energy deposit in the cylindrical target + - the frequency distribution of ionization cluster size + + \subsection Splitting_sub_s1 Important + Every time a value is added to a ROOT histogram, it contributes to the statistics. + For this example, to correct estimate the uncertainties is recommended to split the simulation into + several jobs and to calculate the statistics from them: batch mode. Otherwise, the statistical + uncertainty may be underestimated. + +\section Splitting_s7 Contact + + If you have any questions or wish to notify of updates and/or modification please contact: + + J. Ramos-Mendez at joserm84@gmail.com + +\section Splitting_s8 Acknowledgments + +Sebastien Incerti (CNRS) for its guidance +*/ diff --git a/examples/extended/medical/dna/splitting/README b/examples/extended/medical/dna/splitting/README new file mode 100644 index 0000000000..3eb4d7f9c8 --- /dev/null +++ b/examples/extended/medical/dna/splitting/README @@ -0,0 +1,100 @@ +================================================================= + Geant4 - splitting +================================================================= + + +Authors: J. A. Ramos-Mendez*, B. A. Faddegon + +Department of Radiation Oncology, University of California San Francisco +* Corresponding author, email to joserm84@gmail.com + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +If use this example, please cite +J Ramos-Mendez, et. Al. Phys. Med. Biol. 62(15), 5908-5925, (2017) DOI: 10.1088/1361-6560/aa7831 + +---> 1. A brief description + +The splitting example uses variance reduction to improve the computational +efficiency of calculations of ionization cluster size distributions. Ionization +events are scored in a nanoscaled cylinder. Ionized electrons generated by +the first generation of secondary electrons are split, i.e. new clone electrons +are generated, labeled and propagated. The label is used to classify those +new particles as if they were produced by independent histories to avoid +overlapping of tracks at final analysis. The splitting is performed only +if the ionization event occurred in the cylinder. + +Geant4-DNA processes are used. + +The example package contains: +- source files (src, include) +- README +- .in, plot.C and visualization macro files + + **** 2. Set-up. + +The geometry is a nanoscaled cylinder centered in the world. The medium is +water everywhere. The dimensions can be defined with + /detector/diameter 6 nm + /detector/length 10 nm + +User can define the split number (default is 1, i.e. no split) +with: + + /vrt/numberOfSplit 10 + + **** 3. How to run the example. +In interactive mode, run: + ./splitting + Idle> /control/execute vis.mac + +In batch mode , run: + + ./splitting run.mac + +To get visualization, make sure to uncomment the #/control/execute vis.mac line in the macro. + + **** 4. The physics + +This example shows: +- how to use the Geant4-DNA processes, +- how to implement the splitting via G4WrappedProcess +- how to set the splitting in specific region +- how to propagate new track information to secondary particles + +A simple electron capture process is also provided in order to kill electrons +below a chosen energy threshold, set in the Physics list. + +Look at the PhyscisList.cc file. + + **** 5. Simulation output + +The output results consists in two histograms in root format + +- the energy deposit in the cylindrical target +- the frequency distribution of ionization cluster size + +NOTE: Every time a value is added to a ROOT histogram, it contributes to the statistics. +For this example, to correct estimate the uncertainties is recommended to split the simulation into +several jobs and to calculate the statistics from them: batch mode. Otherwise, the statistical +uncertainty may be underestimated. + + **** 6. Contacts + +If you have any questions or wish to notify of updates and/or modification please contact: + +J. Ramos-Mendez at joserm84@gmail.com + + **** Acknowledgments : + + Sebastien Incerti (CNRS) for its guidance + + diff --git a/examples/extended/medical/dna/spower/.README.txt b/examples/extended/medical/dna/spower/.README.txt new file mode 100644 index 0000000000..13fc48bd82 --- /dev/null +++ b/examples/extended/medical/dna/spower/.README.txt @@ -0,0 +1,87 @@ + +///\file "medical/dna/spower/.README.txt" +///\brief Example spower README page + + +/*! \page Examplespower Example spower + +\author S. Incerti et al. (a, *) \n +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan \n +(CENBG), IN2P3 / CNRS / Bordeaux University, 33175 Gradignan, France \n +* e-mail:incerti@cenbg.in2p3.fr + +\section spower_s1 INTRODUCTION. + +The spower example shows how to calculate stopping power of particles +in liquid water using the Geant4-DNA physics processes and models. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software +shall cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +and for this example: +Nucl. Instrum. Meth. B 397 (2017) 45-50. + +\section spower_s2 GEOMETRY SET-UP + +The geometry is a 1 m radius sphere of liquid water (G4_WATER +material). Particles are shot randomly from the sphere centre. + +Radius of the sphere, physics constructor, primary particle and +energy can be controlled by the spower.in macro file. + +The PrimaryGeneratorAction class is adapted (G4 state dependent) +in order to enable generic physics list usage +(empty modular physics list). + +\section spower_s3 SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +\section spower_s4 HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +\verbatim +./spower spower.in +\endverbatim + +The spower.in macro allows a full control of the simulation. + +The computation of stopping power is performed in the +SteppingAction::UserSteppingAction method. + +\section spower_s5 PHYSICS + +Specific physics constructors, called G4EmDNAPhysics_stationary* +and adapted from G4EmDNAPhysics* are available to set all inelastic +models in a stationary mode for the computation of the stopping +power. + +\section spower_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +The accuracy of results may depend on incident statistics as well as +on number of steps specified in the SteppingAction::UserSteppingAction +method. + +The output results consist in a text file (spower.txt), containing : +- energy of incident particles (in eV) +- stopping power (in keV/um) +- rms (i.e. standard deviation) on stopping power (in keV/um) + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr + +*/ diff --git a/examples/extended/medical/dna/spower/README b/examples/extended/medical/dna/spower/README new file mode 100644 index 0000000000..d109f6a2d5 --- /dev/null +++ b/examples/extended/medical/dna/spower/README @@ -0,0 +1,85 @@ + ========================================================= + Geant4 - spower example + ========================================================= + + README file + ---------------------- + + CORRESPONDING AUTHOR + +S. Incerti et al. (a, *) +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan +(CENBG), IN2P3 / CNRS / Bordeaux University, 33175 Gradignan, France +* e-mail:incerti@cenbg.in2p3.fr + +---->0. INTRODUCTION. + +The spower example shows how to calculate stopping power of particles +in liquid water using the Geant4-DNA physics processes and models. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software +shall cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +and for this example: +Nucl. Instrum. Meth. B 397 (2017) 45-50 + +---->1. GEOMETRY SET-UP. + +The geometry is a 1 m radius sphere of liquid water (G4_WATER +material). Particles are shot randomly from the sphere centre. + +Radius of the sphere, physics constructor, primary particle and +energy can be controlled by the spower.in macro file. + +The PrimaryGeneratorAction class is adapted (G4 state dependent) +in order to enable generic physics list usage +(empty modular physics list). + +---->2. SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +---->3. HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +./spower spower.in + +The spower.in macro allows a full control of the simulation. + +The computation of stopping power is performed in the +SteppingAction::UserSteppingAction method. + +---->4. PHYSICS + +Specific physics constructors, called G4EmDNAPhysics_stationary* +and adapted from G4EmDNAPhysics* are available to set all inelastic +models in a stationary mode for the computation of the stopping +power. + +---->5. SIMULATION OUTPUT AND RESULT ANALYSIS + +The accuracy of results may depend on incident statistics as well as +on number of steps specified in the SteppingAction::UserSteppingAction +method. + +The output results consist in a text file (spower.txt), containing : +- energy of incident particles (in eV) +- stopping power (in keV/um) +- rms (i.e. standard deviation) on stopping power (in keV/um) + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr diff --git a/examples/extended/medical/dna/svalue/.README.txt b/examples/extended/medical/dna/svalue/.README.txt new file mode 100644 index 0000000000..f28475f2c2 --- /dev/null +++ b/examples/extended/medical/dna/svalue/.README.txt @@ -0,0 +1,82 @@ + +///\file "medical/dna/svalue/.README.txt" +///\brief Example svalue README page + + +/*! \page Examplesvalue Example svalue + +\author S. Incerti et al. (a, *) \n +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan \n +(CENBG), IN2P3 / CNRS / Bordeaux University, 33175 Gradignan, France \n +* e-mail:incerti@cenbg.in2p3.fr + +\section svalue_s1 INTRODUCTION. + +The svalue example shows how to calculate monoenergetic S values in liquid water +using the Geant4-DNA physics processes and models. + +It is adapted from TestEm12. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +\section svalue_s2 GEOMETRY SET-UP + +The geometry is a 10-nm radius sphere of liquid water (G4_WATER +material). Particles are shot randomly inside the sphere. Surrounding +medium is not considered. + +Radius of the sphere, particle type and energy can be controlled by the +svalue.in macro file. + +The PrimaryGeneratorAction class is adapted (G4 state dependent) +in order to enable generic physics list usage +(empty modular physics list). + +\section svalue_s3 SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +\section svalue_s4 HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +\verbatim +./svalue svalue.in +\endverbatim + +The svalue.in macro allows a full control of the simulation. + +\section svalue_s5 PHYSICS + +You can select Geant4-DNA physics constructor in svalue.in. + +A tracking cut can be applied if requested. + +\section svalue_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consist in a text file (s.txt), containing : +- the radius of the sphere (in nm) +- the energy of incident particles (in eV) +- the S value (in Gy/Bq.s) +- the rms on S value (in Gy/Bq.s) + +Note: rms values correspond to standard deviation. + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr + +*/ diff --git a/examples/extended/medical/dna/svalue/README b/examples/extended/medical/dna/svalue/README new file mode 100644 index 0000000000..22fba4b1d3 --- /dev/null +++ b/examples/extended/medical/dna/svalue/README @@ -0,0 +1,106 @@ + ========================================================= + Geant4 - svalue example + ========================================================= + + README file + ---------------------- + + CORRESPONDING AUTHOR + +S. Incerti et al. (a, *) +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan +(CENBG), IN2P3 / CNRS / Bordeaux University, 33175 Gradignan, France +* e-mail:incerti@cenbg.in2p3.fr + +---->0. INTRODUCTION. + +The svalue example shows how to calculate S values in liquid water +using the Geant4-DNA physics processes and models. + +It is adapted from TestEm12. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +---->1. GEOMETRY SET-UP. + +The geometry is a spherical nucleus surrounded by a spherical shell +representing the cytoplasm. Nucleus radius and shell thickness can be selected +from the provided macro file svalue.in, as well as materials +(G4_WATER or G4_Galactic). The world is a sphere with radius 1e3 larger than +the radius if the nucleus + +Particles are shot randomly inside the cytoplasm. + +Particle type and energy can be controlled by the +svalue.in macro file. + +The PrimaryGeneratorAction class is adapted (G4 state dependent) +in order to enable generic physics list usage +(empty modular physics list). + +An alternative MyPrimaryGeneratorActionFromFile class is provided as an example +for reading input data from a file in MT mode for the generation of primaries. +The MyFileReader class is provided as well. They are document in: +https://twiki.cern.ch/twiki/bin/view/Geant4/QuickMigrationGuideForGeant4V10 + +---->2. SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +Set the variable MYFILE as 1 in MyFile.hh if you wish to use a spectrum file +of incident energies. By default, this variable is not defined. The file name and +number of lines to read can be specified in MyFile.cc. A spectrum.txt file is provided +as example. + +The code can be compiled with cmake. + +It works in MT mode. + +---->3. HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +./svalue svalue.in + +The svalue.in macro allows a full control of the simulation. + +Two alternative macros, svalue-iodine125.in and svalue-iodine131.in +are provided for the simulation of radioactive sources. + +The svalue-spectrum.in macro shows how to shoot particles +from the spectrum.txt file of energies (unit: eV), which has been created +using the spectrum.C sample ROOT macro. + +---->4. PHYSICS + +You can select Geant4-DNA physics constructor in svalue.in. + +A tracking cut can be applied if requested. + +---->5. SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consist in a text file (s.txt), containing : +- the radius of the nucleus (in nm) +- the thickness of the cytoplasm (in nm) +- the energy of incident particles (in eV) +- the S value for the cytoplasm (in Gy/Bq.s) +- the rms on S value for the cytoplasm (in Gy/Bq.s) +- the S value for the nucleus (in Gy/Bq.s) +- the rms on S value for the nucleus (in Gy/Bq.s) + +One can use the plot.C ROOT macro file to display results. + +Note: rms values correspond to standard deviation. + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr diff --git a/examples/extended/medical/dna/wholeNuclearDNA/.README.txt b/examples/extended/medical/dna/wholeNuclearDNA/.README.txt new file mode 100644 index 0000000000..8ee8c48cb9 --- /dev/null +++ b/examples/extended/medical/dna/wholeNuclearDNA/.README.txt @@ -0,0 +1,122 @@ + +///\file "medical/dna/wholeNuclearDNA/.README.txt" +///\brief Example wholeNuclearDNA README page + +/*! \page ExampleWholeNuclearDNA Example wholeNuclearDNA + +\author For any question, please contact: \n +C. Villagrasa \n +email: carmen.villagrasa@irsn.fr \n + +This example is provided by the Geant4-DNA collaboration +Any report or published results obtained using the Geant4-DNA software +and the DNA geometry given in the Geom_DNA example +shall cite the following Geant4-DNA collaboration publications: \n +[1] NIM B 298 (2013) 47-54 \n +[2] Med. Phys. 37 (2010) 4692-4708 +[3] Phys. Med. 31 (2015) 861-874 + +\section wholenucleardna_s1 INTRODUCTION + +The wholenucleardna example offers the basic tools to simulate the track structure +of different charge particles within a +simplified geometrical model of the DNA molecule contained in a cell nucleus. +In this example, the DetectorConstruction file contains the placement of the +6 Gbp (base-pairs) of a human cell respecting five compaction levels in the +structure of the DNA molecule: double helix, nucleosome, chromatin fiber, +simple chromatin fiber loop and complex chromatin fiber loops. +These complex chromatin fiber loops are then used to fill the chromosome +territories using a constant density (~30-31 kbp/µm3. +Even though this geometry defines different volumes for the DNA base, the +back-bone region or the histone proteins, the material filling all these volumes +in the simulation is liquid water ("G4_WATER") + +In order to simulate all the energy transfer points of the track at nanometric +level, the Geant4-DNA physics processes and models are used. +These processes and models are further described at: +http://geant4-dna.org + +\section wholenucleardna_s2 GEOMETRY SET-UP + +As indicated in the introduction, the whole DNA molecule contained in a human +cell with 5 different compaction levels is described in this geometry. In order +to place the complex chromatin loops in each of the 43 chromosome territories, +the files called "chromo-number.dat" are needed. +These 43 chromosome territories are then placed in an ellipsoid that has the +typical dimensions of a human fibroblast cell nucleus. +All the volumes in the geometry are made of liquid water (G4_WATER +material) despite of what they geometrically represent. +Particles are shot from a random (x,y)position covering the main central part of +the cell nucleus and at z=2.99 µm from the center of the nucleus. This value +allows the primary particle to be either inside the cell nucleus, either not far +from the entrance surface so its energy loss before the cell nucleus entrance is +negligible. + +WARNING: By default, the bases are not built. To build the whole geometry, set the +flag fBuildBases in DetectorConstruction to true. + +\section wholenucleardna_s3 SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The variable G4ANALYSIS_USE must be set to 1. + +The code can be compiled with gmake. + +\section wholenucleardna_s4 HOW TO RUN THE EXAMPLE + +In normal mode, without interactivity: + +> wholeNuclearDNA + +In interactive mode, run: + +> wholeNuclearDNA -gui -out + +The -gui option launches a user interface for interactivity +The -out option create a root file (can be changed for other format). This option may also take argument to set the name of the file (name of the application by default): + +> wholeNuclearDNA -gui -out MyFile + +The macro wholenucleardna.in is executed by default. A proton of 0.1 MeV is shot. This energy has been chosen because only a few minutes are needed for the proton to lose all its energy and thus the event to finish. Nevertheless, one should keep in mind that for this energy, protons do not traverse the whole cell nucleus width. + +Visualization (DAWN) is not activated by default in wholenucleardna.mac. To get visualization, make sure to uncomment the #/control/execute vis.mac. +We would like to warn the users that the time to visualize the whole DNA structure is extremely long. + +To build the whole geometry, set the flag fBuildBases in DetectorConstruction to true. + +\section wholenucleardna_s5 PHYSICS + +This example uses the Geant4-DNA processes, using the G4EmDNAPhysics constructor +as in the dnaphysics example. + +\section wholenucleardna_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consist in a wholenucleardna.root file, containing only the +information about the energy transfers located in the backbone region of the DNA +double helix. Both strands are distinguished with different flags (1 or 2): +- the type of particle for the current step +- the type of process for the current step +- the flag of the strand (1 or 2) +- the track position of the current energy transfer (in nanometers) +- the energy deposit corresponding to the energy transfer (in eV) +- the total energy loss along the current step (in eV) +- the step length (in nm) + + +This file can be easily analyzed using for example the provided ROOT macro +file plot.C; to do so : +* be sure to have ROOT installed on your machine +* be sure to be in the directory containing the ROOT files created by +* wholenucleardna +* copy plot.C into this directory +* from there, launch ROOT by typing root +* under your ROOT session, type in : .X plot.C to execute the macro file +* alternatively you can type directly under your session : root plot.C + +The naming scheme on the displayed ROOT plots can be seen in the +SteppingAction.cc file. + +*/ + + diff --git a/examples/extended/medical/dna/wholeNuclearDNA/README b/examples/extended/medical/dna/wholeNuclearDNA/README new file mode 100644 index 0000000000..0f20a71303 --- /dev/null +++ b/examples/extended/medical/dna/wholeNuclearDNA/README @@ -0,0 +1,103 @@ + ========================================================= + Geant4 - wholenucleardna example + ========================================================= + + README file + ---------------------- + + CORRESPONDING AUTHOR + +For any question, please contact: +C. Villagrasa +email: carmen.villagrasa@irsn.fr + +This example is provided by the Geant4-DNA collaboration +Any report or published results obtained using the Geant4-DNA software +and the DNA geometry given in the Geom_DNA example +shall cite the following Geant4-DNA collaboration publications: +[1] NIM B 298 (2013) 47-54 +[2] Med. Phys. 37 (2010) 4692-4708 +[3] Phys. Med. 31 (2015) 861-874 + +---->0. INTRODUCTION. + +The wholenucleardna example offers the basic tools to simulate the track structure of different charge particles within a +simplified geometrical model of the DNA molecule contained in a cell nucleus. +In this example, the DetectorConstruction file contains the placement of the 6 Gbp (base-pairs) of a human cell respecting five compaction levels in the structure of the DNA molecule: double helix, nucleosome, chromatin fiber, simple chromatin fiber loop and complex chromatin fiber loops. +These complex chromatin fiber loops are then used to fill the chromosome territories using a constant density (~30-31 kbp/µm3. +Even though this geometry defines different volumes for the DNA base, the back-bone region or the histone proteins, the material filling all these volumes in the simulation is liquid water ("G4_WATER") + +In order to simulate all the energy transfer points of the track at nanometric level, the Geant4-DNA physics processes and models are used. +These processes and models are further described at: +http://geant4-dna.org + +---->1. GEOMETRY SET-UP. + +As indicated in the introduction, the whole DNA molecule contained in a human cell with 5 different compaction levels is described in this geometry. In order to place the complex chromatin loops in each of the 43 chromosome territories, the files called "chromo-number.dat" are needed. +These 43 chromosome territories are then placed in an ellipsoid that has the typical dimensions of a human fibroblast cell nucleus. +All the volumes in the geometry are made of liquid water (G4_WATER material) despite of what they geometrically represent. +Particles are shot from a random (x,y)position covering the main central part of the cell nucleus and at z=2.99 µm from the center of the nucleus. This value allows the primary particle to be either inside the cell nucleus, either not far from the entrance surface so its energy loss before the cell nucleus entrance is negligible. + +WARNING: By default, the bases are not built. To build the whole geometry, set the flag fBuildBases in DetectorConstruction to true. + +---->2. SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The variable G4ANALYSIS_USE must be set to 1. + +The code can be compiled with gmake. + +---->3. HOW TO RUN THE EXAMPLE + +In normal mode, without interactivity: + +> wholeNuclearDNA + +In interactive mode, run: + +> wholeNuclearDNA -gui -out + +The -gui option launches a user interface for interactivity +The -out option create a root file (can be changed for other format). This option may also take argument to set the name of the file (name of the application by default): + +> wholeNuclearDNA -gui -out MyFile + +The macro wholenucleardna.in is executed by default. A proton of 0.1 MeV is shot. This energy has been chosen because only a few minutes are needed for the proton to lose all its energy and thus the event to finish. Nevertheless, one should keep in mind that for this energy, protons do not traverse the whole cell nucleus width. + +Visualization (DAWN) is not activated by default in wholenucleardna.mac. To get visualization, make sure to uncomment the #/control/execute vis.mac. +We would like to warn the users that the time to visualize the whole DNA structure is extremely long. + +To build the whole geometry, set the flag fBuildBases in DetectorConstruction to true. + +---->4. PHYSICS + +This example uses the Geant4-DNA processes, using the G4EmDNAPhysics constructor as in the dnaphysics example. + +---->5. SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consist in a wholenucleardna.root file, containing only the information about the energy transfers located in the backbone region of the DNA double helix. Both strands are distinguished with different flags (1 or 2): +- the type of particle for the current step +- the type of process for the current step +- the flag of the strand (1 or 2) +- the track position of the current energy transfer (in nanometers) +- the energy deposit corresponding to the energy transfer (in eV) +- the total energy loss along the current step (in eV) +- the step length (in nm) + + +This file can be easily analyzed using for example the provided ROOT macro +file plot.C; to do so : +* be sure to have ROOT installed on your machine +* be sure to be in the directory containing the ROOT files created by wholenucleardna +* copy plot.C into this directory +* from there, launch ROOT by typing root +* under your ROOT session, type in : .X plot.C to execute the macro file +* alternatively you can type directly under your session : root plot.C + +The naming scheme on the displayed ROOT plots can be seen in the SteppingAction.cc file. + +------------------------------------------------------------------------- + + + diff --git a/examples/extended/medical/dna/wvalue/.README.txt b/examples/extended/medical/dna/wvalue/.README.txt new file mode 100644 index 0000000000..18a44029bf --- /dev/null +++ b/examples/extended/medical/dna/wvalue/.README.txt @@ -0,0 +1,98 @@ + +///\file "medical/dna/wvalue/.README.txt" +///\brief Example wvalue README page + + +/*! \page Examplewvalue Example wvalue + +\author S. Incerti et al. (a, *) \n +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan \n +(CENBG), IN2P3 / CNRS / Bordeaux University, 33175 Gradignan, France \n +* e-mail:incerti@cenbg.in2p3.fr + +\section wvalue_s1 INTRODUCTION. + +The wvalue example shows how to calculate w in liquid water +for e- using the Geant4-DNA physics processes and models. + +w is computed as the ratio of the incident particle energy +and the total number of ionisations. + +It is adapted from svalue. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publication: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +This example is presented in the following paper, which shall also be cited: +Med. Phys. 42 (2015) 3870-3876 + +\section wvalue_s2 GEOMETRY SET-UP + +The geometry is a 1 m radius sphere of liquid water (G4_WATER +material). Particles are shot randomly from the sphere centre. + +Radius of the sphere, physics constructor and energy can be +controlled by the wvalue.in macro file. + +The PrimaryGeneratorAction class is adapted (G4 state dependent) +in order to enable generic physics list usage +(empty modular physics list). + +\section wvalue_s3 SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +\section wvalue_s4 HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +\verbatim +./wvalue wvalue.in +\endverbatim + +The wvalue.in macro allows a full control of the simulation. + +\section wvalue_s5 PHYSICS + +You can select Geant4-DNA physics constructor in wvalue.in. + +A tracking cut can be applied if requested. + +\section wvalue_s6 SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consist in a text file (wvalue.txt), containing : +- the energy of incident particles (in eV) +- the mean number of ionisations +- its rms +- the w value (in eV) +- its rms (in eV) + +Note: rms values correspond to standard deviation. + +In addition, another macro (histo.in) is also provided including +a series of histograms : +- histogram #1 : nb of ionisation interactions per event +- histogram #2 : total energy deposited in absorber +- histogram #3 : true track length of the primary particle +- histogram #4 : true step size of the primary particle +- histogram #5 : projected range of the primary particle +- histogram #6 : true track length of charged secondaries +- histogram #7 : true track length of charged secondaries + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr + +*/ diff --git a/examples/extended/medical/dna/wvalue/README b/examples/extended/medical/dna/wvalue/README new file mode 100644 index 0000000000..2282832b72 --- /dev/null +++ b/examples/extended/medical/dna/wvalue/README @@ -0,0 +1,97 @@ + ========================================================= + Geant4 - wvalue example + ========================================================= + + README file + ---------------------- + + CORRESPONDING AUTHOR + +S. Incerti et al. (a, *) +a. Centre d'Etudes Nucleaires de Bordeaux-Gradignan +(CENBG), IN2P3 / CNRS / Bordeaux University, 33175 Gradignan, France +* e-mail:incerti@cenbg.in2p3.fr + +---->0. INTRODUCTION. + +The wvalue example shows how to calculate w in liquid water +for e- using the Geant4-DNA physics processes and models. + +w is computed as the ratio of the incident particle energy +and the total number of ionisations. + +It is adapted from svalue. + +This example is provided by the Geant4-DNA collaboration. + +These processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 + +This example is presented in the following paper, which shall also be cited: +Med. Phys. 42 (2015) 3870-3876 + +---->1. GEOMETRY SET-UP. + +The geometry is a 1 m radius sphere of liquid water (G4_WATER +material). Particles are shot randomly from the sphere centre. + +Radius of the sphere, physics constructor and energy can be +controlled by the wvalue.in macro file. + +The PrimaryGeneratorAction class is adapted (G4 state dependent) +in order to enable generic physics list usage +(empty modular physics list). + +---->2. SET-UP + +Make sure G4LEDATA points to the low energy electromagnetic data files. + +The code can be compiled with cmake. + +It works in MT mode. + +---->3. HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +./wvalue wvalue.in + +The wvalue.in macro allows a full control of the simulation. + +---->4. PHYSICS + +You can select Geant4-DNA physics constructor in wvalue.in. + +A tracking cut can be applied if requested. + +---->5. SIMULATION OUTPUT AND RESULT ANALYSIS + +The output results consist in a text file (wvalue.txt), containing : +- the energy of incident particles (in eV) +- the mean number of ionisations +- its rms +- the w value (in eV) +- its rms (in eV) + +Note: rms values correspond to standard deviation. + +In addition, another macro (histo.in) is also provided including +a series of histograms : +- histogram #1 : nb of ionisation interactions per event +- histogram #2 : total energy deposited in absorber +- histogram #3 : true track length of the primary particle +- histogram #4 : true step size of the primary particle +- histogram #5 : projected range of the primary particle +- histogram #6 : true track length of charged secondaries +- histogram #7 : true track length of charged secondaries + +--------------------------------------------------------------------------- + +Should you have any enquiry, please do not hesitate to contact: +incerti@cenbg.in2p3.fr + diff --git a/examples/extended/medical/electronScattering/.README.txt b/examples/extended/medical/electronScattering/.README.txt new file mode 100644 index 0000000000..6c7286b3b7 --- /dev/null +++ b/examples/extended/medical/electronScattering/.README.txt @@ -0,0 +1,139 @@ + +///\file "medical/electronScattering/.README.txt" +///\brief Example electronScattering README page + +/*! \page ExampleelectronScattering Example electronScattering + + + Electron scattering benchmark (T. O'Shea and B. Faddegon) + +\section ExampleelectronScattering_s1 GEOMETRY DEFINITION + + The geometry is described in the enclosed documument : NRCC_electron_scat.pdf + + - A "World" volume contains a "Frame" made of Air. + - The Frame contains : ExitWindow, ScatterFoil, MonitorChbr, Bag. + - The Bag contains a Gas volume, which contains 2 aluminium Rings. + - The Scoring plane is the end-plane of the Frame + + The default geometry is constructed in DetectorConstruction class. + The parameters of the ScatterFoil (material and thickness) must be defined + via 2 UI commands : see the macro scatter.mac + +\section ExampleelectronScattering_s2 PHYSICS LIST + + Physics lists can be local (eg. in this example) or from G4 kernel + physics_lists subdirectory. + + Local physics lists: + - "local" standard EM physics with current 'best' options setting. + these options are explicited in PhysListEmStandard + - "standardSS" standard EM physics with single Coulomb scattering + instead of multiple scattering + + From geant4/source/physics_lists/builders: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" alternative models + - "emstandard_opt3" current state of art for EM physics + analog to "local"above + + Physics lists and options can be (re)set with UI commands + + Please, notice that options set through G4EmProcessOPtions are global, eg + for all particle types. In G4 builders, it is shown how to set options per + particle type. + + +\section ExampleelectronScattering_s3 PRIMARY GENERATOR : mono-enegetic pencil beam + + The primary kinematic consists of a single particle which hits the detector + perpendicular to the input face (ExitWindow). The type of the particle and its + energy are set in the PrimaryGeneratorAction class, and can be changed via + the G4 build-in commands of ParticleGun class. + (see the macros provided with this example) + + The incident beam has a Gaussian-shaped spatial distribution. The rms of the + Gaussian can be define with an UI command built in PrimaryGeneratorMessenger. + +\section ExampleelectronScattering_s4 VISUALIZATION + + The Visualization Manager is set in the main () (see eelectronScattering.cc). + The initialisation of the drawing is done via the commands in vis.mac + In interactive session: +\verbatim +PreInit or Idle > /control/execute vis.mac +\endverbatim + + The example has a default view which is a longitudinal view of the detector. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionaly one can choose to draw all particles, only the charged, or none. + This command is defined in EventActionMessenger class. + +\section ExampleelectronScattering_s5 TRACKING + + One can limit 'by hand' the step lenght of the particle. As an example, + this limitation is implemented as a 'full' process : see StepMax class and its + Messenger. The 'StepMax process' is registered in the Physics List. + +\section ExampleelectronScattering_s6 DETECTOR RESPONSE + + At the end of a run, from the histogram(s), one can study different + physics quantities, via the histograms defined below. + + An ascii file corresponding to histo 4 (see below) is automatically written. + + +\section ExampleelectronScattering_s7 List of the built-in histograms + + The test contains 4 built-in 1D histograms, which are managed by the + HistoManager class and its Messenger. The histos can be individually activated + with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + (see the macros xxxx.mac). + + - 1 "(charged particles): projected angle at Scoring plane" + - 2 "(charged particles): dN/dS at Scoring plane" + - 3 "(charged particles): d(N/cost)/dS at Scoring plane" + - 4 "(charged particles): normalized d(N/cost)/dS at Scoring plane" + - 5 "(charged particles); scattering angle theta" + - 6 "(charged particles); measured scattering angle theta" + + The histograms can be viewed using ROOT or PAW. + + One can control the name and format of the histograms file with the command: +\verbatim +/analysis/setFileName name (default nrccBenchmark) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default nrccBenchmark) + + +\section ExampleelectronScattering_s8 HOW TO START ? + + - Execute electronScattering in 'batch' mode from macro files e.g. +\verbatim +% electronScattering myMacro.mac +\endverbatim + + - Execute electronScattering in 'interactive' mode with visualization e.g. +\verbatim +% electronScattering +Then type your commands, for instance : +Idle> control/execute vis.mac +Idle> run/beamOn 5 +.... +\endverbatim + +*/ diff --git a/examples/extended/medical/electronScattering/EGS_13MeV/README b/examples/extended/medical/electronScattering/EGS_13MeV/README new file mode 100644 index 0000000000..7072e4a1f6 --- /dev/null +++ b/examples/extended/medical/electronScattering/EGS_13MeV/README @@ -0,0 +1,34 @@ +------------------ +EGSnrc Simulations +------------------ + +These results were computed with EGSnrc using tutorial codes. +For each geometry, 20E6 primaries were simulated and a phase +space was scored after the exit window. +Data analysis was performed using the beamdp program +by Ma and Rogers included in BEAMnrc distribution. + + + Yann Perrot (perrot@clermont.in2p3.fr) May 2011 + +Simulation parameters: +---------------------- + +Electron Stepping Algorithm : PRESTA-II +Boundary Crossing Algoritm : EXACT with skin parameter=3 +Electron tracking cut : 10keV +Photon tracking cut : 10keV + + +References: +---------- + +Rogers et al 2003 +NRC User Codes for EGSnrc +Technical Report PIRS-702(RevB) +National Research Council of Canada + +Ma and Rogers 2004 +BEAMDP as a General-Purpose Utility +Technical Report PIRS-509e(RevA) +National Research Council of Canada diff --git a/examples/extended/medical/electronScattering/README b/examples/extended/medical/electronScattering/README new file mode 100644 index 0000000000..fe00f65c3a --- /dev/null +++ b/examples/extended/medical/electronScattering/README @@ -0,0 +1,126 @@ +----------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + electronScattering + ------------------ + + Electron scattering benchmark (T. O'Shea and B. Faddegon) + + 1- GEOMETRY DEFINITION + + The geometry is described in the enclosed documument : NRCC_electron_scat.pdf + + A "World" volume contains a "Frame" made of Air. + The Frame contains : ExitWindow, ScatterFoil, MonitorChbr, Bag. + The Bag contains a Gas volume, which contains 2 aluminium Rings + The Scoring plane is the end-plane of the Frame + + The default geometry is constructed in DetectorConstruction class. + The parameters of the ScatterFoil (material and thickness) must be defined + via 2 UI commands : see the macro scatter.mac + + 2- PHYSICS LIST + + Physics lists can be local (eg. in this example) or from G4 kernel + physics_lists subdirectory. + + Local physics lists: + - "local" standard EM physics with current 'best' options setting. + these options are explicited in PhysListEmStandard + - "standardSS" standard EM physics with single Coulomb scattering + instead of multiple scattering + + From geant4/source/physics_lists/builders: + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" alternative models + - "emstandard_opt3" current state of art for EM physics + analog to "local"above + + Physics lists and options can be (re)set with UI commands + + Please, notice that options set through G4EmProcessOPtions are global, eg + for all particle types. In G4 builders, it is shown how to set options per + particle type. + + + 3- PRIMARY GENERATOR : mono-enegetic pencil beam + + The primary kinematic consists of a single particle which hits the detector + perpendicular to the input face (ExitWindow). The type of the particle and its + energy are set in the PrimaryGeneratorAction class, and can be changed via + the G4 build-in commands of ParticleGun class. + (see the macros provided with this example) + + The incident beam has a Gaussian-shaped spatial distribution. The rms of the + Gaussian can be define with an UI command built in PrimaryGeneratorMessenger. + + 4- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands in vis.mac + In interactive session: + PreInit or Idle > /control/execute vis.mac + + The example has a default view which is a longitudinal view of the detector. + + The tracks are drawn at the end of event, and erased at the end of run. + Optionaly one can choose to draw all particles, only the charged, or none. + This command is defined in EventActionMessenger class. + + 5- TRACKING + + One can limit 'by hand' the step lenght of the particle. As an example, + this limitation is implemented as a 'full' process : see StepMax class and its + Messenger. The 'StepMax process' is registered in the Physics List. + + 6- DETECTOR RESPONSE + + At the end of a run, from the histogram(s), one can study different + physics quantities, via the histograms defined below. + + An ascii file corresponding to histo 4 (see below) is automatically written. + + + 7- List of the built-in histograms + ---------------------------------- + + The test contains 4 built-in 1D histograms, which are managed by + G4AnalysisManager class and its Messenger. The histos can be individually activated + with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + (see the macros xxxx.mac). + + 1 "(charged particles): projected angle at Scoring plane" + 2 "(charged particles): dN/dS at Scoring plane" + 3 "(charged particles): d(N/cost)/dS at Scoring plane" + 4 "(charged particles): normalized d(N/cost)/dS at Scoring plane" + 5 "(charged particles); scattering angle theta" + 6 "(charged particles); measured scattering angle theta" + + The histograms can be viewed using ROOT or PAW. + + One can control the name and format of the histograms file with the command: + /analysis/setFileName name (default nrccBenchmark) + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default nrccBenchmark) + + + 8- HOW TO START ? + + - execute electronScattering in 'batch' mode from macro files e.g. + % electronScattering myMacro.mac + + - execute electronScattering in 'interactive' mode with visualization e.g. + % electronScattering + Then type your commands, for instance : + Idle> control/execute vis.mac + Idle> run/beamOn 5 + .... diff --git a/examples/extended/medical/electronScattering2/.README.txt b/examples/extended/medical/electronScattering2/.README.txt new file mode 100644 index 0000000000..08aa677316 --- /dev/null +++ b/examples/extended/medical/electronScattering2/.README.txt @@ -0,0 +1,182 @@ + +///\file "medical/electronScattering2/.README.txt" +///\brief Example electronScattering2 README page + +/*! \page ExampleelectronScattering2 Example electronScattering2 + + Electron scattering benchmark variant 2 (Joseph Perl) + +The two examples, electronScattering and electronScattering2 demonstrate how two alternate +approaches can be taken to simulating the same electron scattering benchmark experiment. + +ElectronScattering2 simulates the experiment with a minimum of user code, whereas the other +version of this example shows how to do more of the work directly as the user. + +In ElectronScattering2: +- Primary generation relies on the G4GeneralParticleSource. +- Material definitions are taken from the NIST database. +- Visualization uses the standard G4VisExective. +- Scoring is handled by the ready-made Geant4 scorer, G4PSCellFlux. + +Both electronScattering and electronScattering2 simulate a precision electron scattering benchmark +experiment performed at NRCC Canada and published as: +"Measurement of multiple scattering of 13 and 20 MeV electrons by thin foils," +by C. K. Ross, M. R. McEwen, A. F. McDonald, C. D. Cojocaru and B. A. Faddegon, +Med. Phys. Volume 35, Issue 9, pp. 4121-4131 (September 2008), DOI: 10.1118/1.2968095 + +The experiment represents the most accurate benchmark of its type. + +A schematic of the experimental setup is shown in NRCC_electron_scat.pdf + +The experimental data was itself published, as document number E-MPHYA6-35-034809 at http://www.aip.org/pubservs/epaps.html + +The testing of three Monte Carlo simulation codes against this experimental benchmark has been +publshed as: +"The accuracy of EGSnrc, Geant4 and PENELOPE Monte Carlo systems for the simulation of electron +scatter in external beam radiotherapy," +by Bruce A Faddegon, Iwan Kawrakow, Yuri Kubyshin, Joseph Perl, Josep Sempau and Laszlo Urban, +Phys. Med. Biol. 54 (2009) 6151-6163, DOI:10.1088/0031-9155/54/20/008 + +This present example, electronScattering2, was the Geant4 code used for this publication. + + +\section electronScattering2_s1 GEOMETRY DEFINITION + + The geometry is described in the enclosed documument: NRCC_electron_scat.pdf + - A "World" volume contains an Exit Window, Primary Foil, Monitor Chamber and Helium Bag. + - The Helium Bag contains a Gas volume, which in turn contains 2 aluminium Rings + - A scoring cylinder is defined near the end of the World. + + The default geometry is constructed in the DetectorConstruction class. + The parameters of the Primary Foil (material and thickness) are defined from macro commands. + + +\section electronScattering2_s2 PHYSICS LIST + + Physics lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + EM physics builders are from the G4 kernel physics_lists subdirectory. + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardSS" standard EM physics and single scattering model + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardGS" standard EM physics and Goudsmit-Saunderson multiple scatt. + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + Physics lists and options can be (re)set with UI commands + + Note that options set through G4EmProcessOptions are global, eg for all particle types. + In G4 builders, it is shown how to set options per particle type. + + +\section electronScattering2_s3 PRIMARY GENERATOR + + All of the work of the primary event generation is deferred to the G4GeneralParticleSource. + The specific characteristics of the source are configured from the macro file, using + /gps commands. + - Energy is set to either 13 or 20 MeV. + - Particle type is set to electron. + - Direction is set exactly orthogonal to the scattering foil. + - Source type is set to beam. + - Spatial distribution of the beam is set as a circle gassian sigma_r of 0.042 cm + + +\section electronScattering2_s4 VISUALIZATION + + Visualization is controlled by the standard G4VisExecutive. + The standard set of visualization options is supported. + Example macros use HepRepFile. + + +\section electronScattering2_s5 SCORING + + All of the work of the scoring is done by the standard Geant4 scorers, G4PSCellFlux and G4PSPopulation. + - Flux and population are scored in concentric rings at the scoring surface. + - Flux is corrected for ring area just before output (as PSCellFlux assumes the area is the complete + area of the face of the cylinder, not the area of the one ring). + + Because the geometry may need to be updated after various /primfoil commands, + ElectronBenchmarkDetector is written in such a way that the sensitive detector can have its scorer ring + logical volume updated after geometry changes. After any geometry change, ConstructSDandField is again + called, setting the sensitive detector to use the logical volume of the updated scorer ring. + The same sensitive detector is reused, but the manner in which the sensitive detector pointer + is stored for this reuse is complicated by the fact that this example may be run in multi-threaded mode + (in which each worker thread has its own sensitive detector). + We therefore store the sensitive detector pointer in a G4Cache rather than in a direct pointer. + +\section electronScattering2_s6 MACROS + + Macros are provided for all of the 37 different combinations of scattering foils and beam energies + that were used in the actual experiment. + Separate directories of these macros are provided for the different EM Physics options, Opt0, 1, 2 and 3. + + +\section electronScattering2_s7 HOW TO START + + - Execute electornScattering2 in 'batch' mode from macro files: +\verbatim +% electronScattering2 +\endverbatim + + for example, to run the Al1_13MeV case with physics option 2 and a starting random seed of 1: +\verbatim +% electronScattering2 macros/Opt2/Al1_13MeV.mac 1 output/Opt2/Al1_13MeV_1 +\endverbatim + + - If macro_file is not specfied, the job starts and then just waits for interactive commands + + - If starting_seed is not specified, it defaults to 1. + Precision benchmark studies often involve running multiple long batch jobs and then combining the results. + If you plan to combine more than one job with the same primary foil and energy, be sure to use different + random seeds for each of the jobs. + + - If output_file is not specified, it defaults to output.csv in the current directory + + - To simplify batch submission of large numbers of jobs, a shell script is given called run.csh. + The above submission could be done, for example, by: +\verbatim +run.csh Opt2/Al1_13MeV 1 +\endverbatim + + - To run a basic visualization job, producing output to a HepRep file, use vis.mac, as in: +\verbatim +% electronScattering2 macros/vis.mac +\endverbatim + +\section electronScattering2_s8 OUTPUT + + Results are given as comma-separated values (csv) files. + - The first column gives the CellFlux for all particles. + - The second column gives the CellFlux counting only electrons. + - The third column gives the population for all particles. + - The fourth column gives the populatin counting only electrons. + +\section electronScattering2_s9 MULTITHREADING + + This example supports multi-threading. + To run in multi-threaded mode, build your Geant4 with the cmake option:
+ -DGEANT4_BUILD_MULTITHREADED=ON + and then set the desired number of threads by inserting the /run/numberOfThreads command + into your macro file just before /run/initialize, as in: +\verbatim +/run/numberOfThreads 8 +\endverbatim + You may also find the output more readable if you use the following command to make output from + each thread be collected together: +\verbatim +/control/cout/useBuffer +\endverbatim + The visualization macro, /macros/vis.mac demonstrates use of the above two commands. + Output from the multiple worker threads is merged by the Merge method at the end of ElectronRun.cc + +*/ diff --git a/examples/extended/medical/electronScattering2/README b/examples/extended/medical/electronScattering2/README new file mode 100644 index 0000000000..57ea70e738 --- /dev/null +++ b/examples/extended/medical/electronScattering2/README @@ -0,0 +1,170 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + electronScattering2 + ------------------ + + Electron scattering benchmark variant 2 (Joseph Perl) + +The two examples, electronScattering and electronScattering2 demonstrate how two alternate +approaches can be taken to simulating the same electron scattering benchmark experiment. + +ElectronScattering2 simulates the experiment with a minimum of user code, whereas the other +version of this example shows how to do more of the work directly as the user. +In ElectronScattering2: +Primary generation relies on the G4GeneralParticleSource. +Material definitions are taken from the NIST database. +Visualization uses the standard G4VisExective. +Scoring is handled by the ready-made Geant4 scorer, G4PSCellFlux. + +Both electronScattering and electronScattering2 simulate a precision electron scattering benchmark +experiment performed at NRCC Canada and published as: +"Measurement of multiple scattering of 13 and 20 MeV electrons by thin foils," +by C. K. Ross, M. R. McEwen, A. F. McDonald, C. D. Cojocaru and B. A. Faddegon, +Med. Phys. Volume 35, Issue 9, pp. 4121-4131 (September 2008), DOI: 10.1118/1.2968095 + +The experiment represents the most accurate benchmark of its type. + +A schematic of the experimental setup is shown in NRCC_electron_scat.pdf + +The experimental data was itself published, as document number E-MPHYA6-35-034809 at http://www.aip.org/pubservs/epaps.html + +The testing of three Monte Carlo simulation codes against this experimental benchmark has been +published as: +"The accuracy of EGSnrc, Geant4 and PENELOPE Monte Carlo systems for the simulation of electron +scatter in external beam radiotherapy," +by Bruce A Faddegon, Iwan Kawrakow, Yuri Kubyshin, Joseph Perl, Josep Sempau and Laszlo Urban, +Phys. Med. Biol. 54 (2009) 6151-6163, DOI:10.1088/0031-9155/54/20/008 + +This present example, electronScattering2, was the Geant4 code used for this publication. + + + 1- GEOMETRY DEFINITION + + The geometry is described in the enclosed documument: NRCC_electron_scat.pdf + - A "World" volume contains an Exit Window, Primary Foil, Monitor Chamber and Helium Bag. + - The Helium Bag contains a Gas volume, which in turn contains 2 aluminium Rings + - A scoring cylinder is defined near the end of the World. + + The default geometry is constructed in the DetectorConstruction class. + The parameters of the Primary Foil (material and thickness) are defined from macro commands. + + + 2- PHYSICS LIST + + Physics lists are based on modular design. Several modules are instantiated: + 1. Transportation + 2. EM physics + 3. Decays + 4. StepMax - for step limitation + + EM physics builders are from the G4 kernel physics_lists subdirectory. + - "emstandard_opt0" recommended standard EM physics for LHC + - "emstandard_opt1" best CPU performance standard physics for LHC + - "emstandard_opt2" similar fast simulation + - "emstandard_opt3" best standard EM options - analog to "local" above + - "emstandard_opt4" best current advanced EM options standard + lowenergy + - "emstandardSS" standard EM physics and single scattering model + - "emstandardWVI" standard EM physics and WentzelVI multiple scattering + - "emstandardGS" standard EM physics and Goudsmit-Saunderson multiple scatt. + - "emlivermore" low-energy EM physics using Livermore data + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + low-energy models + + Physics lists and options can be (re)set with UI commands. + + 3- PRIMARY GENERATOR + + All of the work of the primary event generation is deferred to the G4GeneralParticleSource. + The specific characteristics of the source are configured from the macro file, using + /gps commands. + Energy is set to either 13 or 20 MeV. + Particle type is set to electron. + Direction is set exactly orthogonal to the scattering foil. + Source type is set to beam. + Spatial distribution of the beam is set as a circle gassian sigma_r of 0.042 cm + + + 4- VISUALIZATION + + Visualization is controlled by the standard G4VisExecutive. + The standard set of visualization options is supported. + Example macros use HepRepFile. + + + 5- SCORING + + All of the work of the scoring is done by the standard Geant4 scorers, G4PSCellFlux and G4PSPopulation. + Flux and population are scored in concentric rings at the scoring surface. + Flux is corrected for ring area just before output (as PSCellFlux assumes the area is the complete + area of the face of the cylinder, not the area of the one ring). + + Because the geometry may need to be updated after various /primfoil commands, + ElectronBenchmarkDetector is written in such a way that the sensitive detector can have its scorer ring + logical volume updated after geometry changes. After any geometry change, ConstructSDandField is again + called, setting the sensitive detector to use the logical volume of the updated scorer ring. + The same sensitive detector is reused, but the manner in which the sensitive detector pointer + is stored for this reuse is complicated by the fact that this example may be run in multi-threaded mode + (in which each worker thread has its own sensitive detector). + We therefore store the sensitive detector pointer in a G4Cache rather than in a direct pointer. + + + 6- MACROS + + Macros are provided for all of the 37 different combinations of scattering foils and beam energies + that were used in the actual experiment. + Separate directories of these macros are provided for the different EM Physics options, Opt0, 1, 2 and 3. + + + 7- HOW TO START + + - execute electornScattering2 in 'batch' mode from macro files: + % electronScattering2 + + - for example, to run the Al1_13MeV case with physics option 2 and a starting random seed of 1: + % electronScattering2 macros/Opt2/Al1_13MeV.mac 1 output/Opt2/Al1_13MeV_1 + + - if macro_file is not specfied, the job starts and then just waits for interactive commands + + - if starting_seed is not specified, it defaults to 1. + Precision benchmark studies often involve running multiple long batch jobs and then combining the results. + If you plan to combine more than one job with the same primary foil and energy, be sure to use different + random seeds for each of the jobs. + + - if output_file is not specified, it defaults to output.csv in the current directory + + - to simplify batch submission of large numbers of jobs, a shell script is given called run.csh. + The above submission could be done, for example, by: + run.csh Opt2/Al1_13MeV 1 + + - to run a basic visualization job, producing output to a HepRep file, use vis.mac, as in: + % electronScattering2 + then: + PreInit> /control/execute macros/vis.mac + + + 8- OUTPUT + + Results are given as comma-separated values (csv) files. + The first column gives the CellFlux for all particles. + The second column gives the CellFlux counting only electrons. + The third column gives the population for all particles. + The fourth column gives the population counting only electrons. + + +9 - MULTITHREADING + + This example supports multi-threading. + To run in multi-threaded mode, build your Geant4 with the cmake option: + -DGEANT4_BUILD_MULTITHREADED=ON + and then set the desired number of threads by inserting the /run/numberOfThreads command + into your macro file just before /run/initialize, as in: + /run/numberOfThreads 8 + You may also find the output more readable if you use the following command to make output from + each thread be collected together: + /control/cout/useBuffer + The visualization macro, /macros/vis.mac demonstrates use of the above two commands. + Output from the multiple worker threads is merged by the Merge method at the end of ElectronRun.cc diff --git a/examples/extended/medical/fanoCavity/.README.txt b/examples/extended/medical/fanoCavity/.README.txt new file mode 100644 index 0000000000..3fe58cc103 --- /dev/null +++ b/examples/extended/medical/fanoCavity/.README.txt @@ -0,0 +1,181 @@ + +///\file "medical/fanoCavity/.README.txt" +///\brief Example fanoCavity README page + +/*! \page ExamplefanoCavity Example fanoCavity + + This program computes the dose deposited in an ionization chamber by a + monoenergetic photon beam. + The geometry of the chamber satisfies the conditions of charged particle + equilibrium. Hence, under idealized conditions, the ratio of the dose + deposited over the beam energy fluence must be equal to the + mass_energy_transfer coefficient of the wall material. + + E.Poon and al, Phys. Med. Biol. 50 (2005) 681 \n + I.Kawrakow, Med. Phys. 27-3 (2000) 499 \n + +\section ExamplefanoCavity_s1 GEOMETRY + + The chamber is modelized as a cylinder with a cavity in it. + + 6 parameters define the geometry : + - the material of the wall of the chamber + - the radius of the chamber and the thickness of the wall + - the material of the cavity + - the radius and the thickness of the cavity + + Wall and cavity must be made of the same material, but with different + density + + All above parameters can be redifined via the UI commands built in + DetectorMessenger class +
+                    -----------------
+                    |               |
+                    | wall          |
+                    |     -----     |
+                    |     |   |     |
+                    |     | <-+-----+--- cavity
+         ------>    |     |   |     |
+         ------>    |     |   |     |
+   beam     -------------------------------- cylinder axis
+         ------>    |     |   |     |
+         ------>    |     |   |     |
+                    |     |   |     |
+                    |     |   |     |
+                    |     -----     |
+                    |               |
+                    |               |
+                    -----------------
+
+
+ +\section ExamplefanoCavity_s2 BEAM + + Monoenergetic incident photon beam is uniformly distribued, perpendicular + to the flat end of the chamber. The beam radius can be controled with an + UI command built in PrimaryGeneratorMessenger; the default is full wall + chamber radius. + + Beam regeneration : after each Compton interaction, the scattered photon is + reset to its initial state, energy and direction. Consequently, interaction + sites are uniformly distribued within the wall material. + + This modification must be done in the ParticleChange of the final state + of the Compton scattering interaction. Therefore, a specific model + (MyKleinNishinaCompton) is assigned to the ComptonScattering process in + PhysicsList. MyKleinNishinaCompton inherites from G4KleinNishinaCompton; + only the function SampleSecondaries() is overwritten. + +\section ExamplefanoCavity_s3 PURPOSE OF THE PROGRAM + + The program computes the dose deposited in the cavity and the ratio + Dose/Beam_energy_fluence. This ratio is compared to the mass_energy_transfer + coefficient of the wall material. + + The mass_energy_transfer coefficient needs : + - the photon total cross section, which is read from the PhysicsTables + by G4EmCalculator (see EndOfRunAction). + - the average kinetic energy of charged secondaries generated in the + wall during the run. + + The program needs high statistic to reach precision on the computed dose. + The UI command /testem/event/printModulo allows to survey the convergence of + the kineticEnergy and dose calculations. + + In addition, to increase the program efficiency, the secondary particles + which have no chance to reach the cavity are immediately killed (see + StackinAction). This feature can be switched off by an UI command (see + StackingMessenger). + + The simplest way to study the effect of e- tracking parameters on dose + deposition is to use the command /testem/stepMax. + +\section ExamplefanoCavity_s4 PHYSICS + + The physics lists contains the standard electromagnetic processes, with few + modifications listed here. + + - Compton scattering : as explained above, the final state is modified in + MyKleinNishinaCompton class. + \n\n + In order to make the program more efficient, one can increase the Compton + cross section via the function SetCSFactor(factor) and its + associated UI command. Default is factor=1000. + + - Bremsstrahlung : Fano conditions imply no energy transfer via + bremsstrahlung radiation. Therefore this process is not registered in the + physics list. However, it is always possible to include it. + See PhysListEmStandard class. + + - Ionisation : In order to have same stopping power in wall and cavity, one + must cancel the density correction term in the dedx formula. This is done in + a specific MollerBhabha model (MyMollerBhabhaModel) which inherites from + G4MollerBhabhaModel. + \n\n + To prevent explicit generation of delta-rays, the default production + threshold (i.e. cut) is set to 10 km (CSDA condition). + \n\n + The finalRange of the step function is set to 10 um, which more on less + correspond to a tracking cut in water of about 20 keV. See emOptions. + Once again, the above parameters can be controled via UI commands. + + - Multiple scattering : is switched in single Coulomb scattering mode near + boundaries. This is selected via EM options in PhysicsList, and can be + controled with UI commands. + + - All PhysicsTables are built with 100 bins per decade. + +\section ExamplefanoCavity_s5 HISTOGRAMS + + fanoCavity has several predefined 1D histograms : + - 1 : emission point of e+- + - 2 : energy spectrum of e+- + - 3 : theta distribution of e+- + - 4 : emission point of e+- hitting cavity + - 5 : energy spectrum of e+- when entering in cavity + - 6 : theta distribution of e+- before enter in cavity + - 7 : theta distribution of e+- at first step in cavity + - 8 : track segment of e+- in cavity + - 9 : step size of e+- in wall + - 10 : step size of e+- in cavity + - 11 : energy deposit in cavity per track + + The histograms are managed by G4AnalysisManager class and its messenger. + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default fanoCavity) +\endverbatim + + It is possible to choose the format of the histogram file : + root(default), xml, hbook. See HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default fanocavity) + +\section ExamplefanoCavity_s6 HOW TO START ? + + - Execute fanoCavity in 'batch' mode from macro files +\verbatim +% fanoCavity run01.mac +\endverbatim + + - Execute fanoCavity in 'interactive mode' with visualization +\verbatim +% fanoCavity +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + +*/ diff --git a/examples/extended/medical/fanoCavity/README b/examples/extended/medical/fanoCavity/README new file mode 100644 index 0000000000..abd15ff575 --- /dev/null +++ b/examples/extended/medical/fanoCavity/README @@ -0,0 +1,171 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + fanoCavity + ---------- + + This program computes the dose deposited in an ionization chamber by a + monoenergetic photon beam. + The geometry of the chamber satisfies the conditions of charged particle + equilibrium. Hence, under idealized conditions, the ratio of the dose + deposited over the beam energy fluence must be equal to the + mass_energy_transfer coefficient of the wall material. + + E.Poon and al, Phys. Med. Biol. 50 (2005) 681 + I.Kawrakow, Med. Phys. 27-3 (2000) 499 + + 1- GEOMETRY + + The chamber is modelized as a cylinder with a cavity in it. + + 6 parameters define the geometry : + - the material of the wall of the chamber + - the radius of the chamber and the thickness of the wall + - the material of the cavity + - the radius and the thickness of the cavity + + Wall and cavity must be made of the same material, but with different + density + + All above parameters can be redifined via the UI commands built in + DetectorMessenger class + + ----------------- + | | + | wall | + | ----- | + | | | | + | | <-+-----+--- cavity + ------> | | | | + ------> | | | | + beam -------------------------------- cylinder axis + ------> | | | | + ------> | | | | + | | | | + | | | | + | ----- | + | | + | | + ----------------- + + 2- BEAM + + Monoenergetic incident photon beam is uniformly distribued, perpendicular + to the flat end of the chamber. The beam radius can be controled with an + UI command built in PrimaryGeneratorMessenger; the default is full wall + chamber radius. + + Beam regeneration : after each Compton interaction, the scattered photon is + reset to its initial state, energy and direction. Consequently, interaction + sites are uniformly distribued within the wall material. + + This modification must be done in the ParticleChange of the final state + of the Compton scattering interaction. Therefore, a specific model + (MyKleinNishinaCompton) is assigned to the ComptonScattering process in + PhysicsList. MyKleinNishinaCompton inherites from G4KleinNishinaCompton; + only the function SampleSecondaries() is overwritten. + + 3- PURPOSE OF THE PROGRAM + + The program computes the dose deposited in the cavity and the ratio + Dose/Beam_energy_fluence. This ratio is compared to the mass_energy_transfer + coefficient of the wall material. + + The mass_energy_transfer coefficient needs : + - the photon total cross section, which is read from the PhysicsTables + by G4EmCalculator (see EndOfRunAction). + - the average kinetic energy of charged secondaries generated in the + wall during the run. + + The program needs high statistic to reach precision on the computed dose. + The UI command /run/printProgress allows to survey the convergence of + the kineticEnergy and dose calculations. + + In addition, to increase the program efficiency, the secondary particles + which have no chance to reach the cavity are immediately killed (see + StackinAction). This feature can be switched off by an UI command (see + StackingMessenger). + + The simplest way to study the effect of e- tracking parameters on dose + deposition is to use the command /testem/stepMax. + + 4- PHYSICS + + The physics lists contains the standard electromagnetic processes, with few + modifications listed here. + + - Compton scattering : as explained above, the final state is modified in + MyKleinNishinaCompton class. + + In order to make the program more efficient, one can increase the Compton + cross section via the function SetCSFactor(factor) and its + associated UI command. Default is factor=1000. + + - Bremsstrahlung : Fano conditions imply no energy transfer via + bremsstrahlung radiation. Therefore this process is not registered in the + physics list. However, it is always possible to include it. + See PhysListEmStandard class. + + - Ionisation : In order to have same stopping power in wall and cavity, one + must cancel the density correction term in the dedx formula. This is done in + a specific MollerBhabha model (MyMollerBhabhaModel) which inherites from + G4MollerBhabhaModel. + + To prevent explicit generation of delta-rays, the default production + threshold (i.e. cut) is set to 10 km (CSDA condition). + + The finalRange of the step function is set to 10 um, which more on less + correspond to a tracking cut in water of about 20 keV. See emOptions. + Once again, the above parameters can be controled via UI commands. + + - Multiple scattering : is switched in single Coulomb scattering mode near + boundaries. This is selected via EM options in PhysicsList, and can be + controled with UI commands. + + - All PhysicsTables are built with 100 bins per decade. + + 5- HISTOGRAMS + + fanoCavity has several predefined 1D histograms : + + 1 : emission point of e+- + 2 : energy spectrum of e+- + 3 : theta distribution of e+- + 4 : emission point of e+- hitting cavity + 5 : energy spectrum of e+- when entering in cavity + 6 : theta distribution of e+- before enter in cavity + 7 : theta distribution of e+- at first step in cavity + 8 : track segment of e+- in cavity + 9 : step size of e+- in wall + 10 : step size of e+- in cavity + 11 : energy deposit in cavity per track + + The histograms are managed by G4AnalysisManager class and its messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default fanoCavity) + + It is possible to choose the format of the histogram file : + root(default), xml, hbook. See HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default fanocavity) + + 6- HOW TO START ? + + - execute fanoCavity in 'batch' mode from macro files + % fanoCavity run01.mac + + - execute fanoCavity in 'interactive mode' with visualization + % fanoCavity + .... + Idle> type your commands + .... + Idle> exit diff --git a/examples/extended/medical/fanoCavity2/.README.txt b/examples/extended/medical/fanoCavity2/.README.txt new file mode 100644 index 0000000000..5f8b732500 --- /dev/null +++ b/examples/extended/medical/fanoCavity2/.README.txt @@ -0,0 +1,157 @@ + +///\file "medical/fanoCavity2/.README.txt" +///\brief Example fanoCavity2 README page + +/*! \page ExamplefanoCavity2 Example fanoCavity2 + + + This program computes the dose deposited in an ionization chamber by an + extended (one dimensional) monoenergetic electron source. + The geometry of the chamber satisfies the conditions of charged particle + equilibrium. Hence, under idealized conditions, the ratio of the dose + deposited over the beam energy fluence must be equal to 1. + This variante of the Fano cavity test make use of an reciprocity theorem. + + J.Sempau and P.Andreo, Phys. Med. Biol. 51 (2006) 3533 + +\section ExamplefanoCavity2_s1 GEOMETRY + + The chamber is modelized as a cylinder with a cavity in it. + + 5 parameters define the geometry : + - the radius of the chamber (must be big) + - the material of the wall + - the thickness of the wall + - the material of the cavity + - the thickness of the cavity + + Wall and cavity must be made of the same material, but with different + density. + Radius must be bigger than range of electrons in cavity. + + All above parameters can be redifined via the UI commands built in + DetectorMessenger class. + +
+                        _________________
+     radius (infinite)  |     |   |     |
+                        |     |   |     |
+                        |     |   |     |
+                        |     |   |     |
+                        |     | <-+-----+--- cavity
+                        |     |   |     |
+                        |     |   |     |
+                 ---------------------------- cylinder axis = e- source
+                        |     |   |     |
+                        |     |   |     |
+                        |     |   |     |
+                        |wall |   |wall |
+                        |     |   |     |
+                        |     |   |     |
+                        |     |   |     |
+                        -----------------
+
+ +\section ExamplefanoCavity2_s2 BEAM + + Monoenergetic (E0) incident electron source is uniformly distribued along + cylinder axis, within wall and cavity, with constant lineic density + per mass: I. + An effective wall thickness is defined from the range of e- at energy E0. + + Beam_energy_fluence is E0*I + +\section ExamplefanoCavity2_s3 PURPOSE OF THE PROGRAM + + The program computes the dose deposited in the cavity and the ratio + Dose/Beam_energy_fluence. This ratio must be 1. + + The program needs high statistic to reach precision on the computed dose. + The UI command /run/printProgress allows to survey the convergence of + the dose calculation. + + The simplest way to study the effect of e- tracking parameters on dose + deposition is to use the command /testem/stepMax. + +\section ExamplefanoCavity2_s4 PHYSICS + + The physics list contains the standard electromagnetic processes, with few + modifications listed here. + + - Bremsstrahlung : Fano conditions imply no energy transfer via + bremsstrahlung radiation. Therefore this process is not registered in the + physics list. However, it is always possible to include it. + See PhysListEm classes. + + - Ionization : In order to have same stopping power in wall and cavity, one + must cancel the density correction term in the dedx formula. This is done in + a specific MollerBhabha model (MyMollerBhabhaModel) which inherites from + G4MollerBhabhaModel. + \n\n + To prevent explicit generation of delta-rays, the default production + threshold (i.e. cut) is set to 10 km (CSDA condition). + \n\n + The finalRange of the step function is set to 10 um, which more on less + correspond to a tracking cut in water of about 20 keV. See emOptions. + Once again, the above parameters can be controled via UI commands. + + - Multiple scattering : is switched in single Coulomb scattering mode near + boundaries. This is selected via EM options in PhysicsList, and can be + controled with UI commands. + + - All PhysicsTables are built with 100 bins per decade. + +\section ExamplefanoCavity2_s5 HISTOGRAMS + + fanoCavity2 has several predefined 1D histograms : + - 1 : emission point of e+- + - 2 : energy spectrum of e+- + - 3 : theta distribution of e+- + - 4 : emission point of e+- hitting cavity + - 5 : energy spectrum of e+- when entering in cavity + - 6 : theta distribution of e+- before enter in cavity + - 7 : theta distribution of e+- at first step in cavity + - 8 : track segment of e+- in cavity + - 9 : step size of e+- in wall + - 10 : step size of e+- in cavity + - 11 : energy deposit in cavity per track + + The histograms are managed by G4AnalysisManager class and its Messenger. + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default fanocavity2) +\endverbatim + + It is possible to choose the format of the histogram file : + root(default), xml, hbook. See HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii + (default fanocavity2) + +\section ExamplefanoCavity2_s6 HOW TO START ? + + - Execute fanoCavity2 in 'batch' mode from macro files +\verbatim +% fanoCavity2 run01.mac +\endverbatim + + - Execute fanoCavity2 in 'interactive mode' with visualization +\verbatim +% fanoCavity2 +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + +*/ diff --git a/examples/extended/medical/fanoCavity2/README b/examples/extended/medical/fanoCavity2/README new file mode 100644 index 0000000000..4acbab62d9 --- /dev/null +++ b/examples/extended/medical/fanoCavity2/README @@ -0,0 +1,146 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + fanoCavity2 + ----------- + + This program computes the dose deposited in an ionization chamber by an + extended (one dimensional) monoenergetic electron source. + The geometry of the chamber satisfies the conditions of charged particle + equilibrium. Hence, under idealized conditions, the ratio of the dose + deposited over the beam energy fluence must be equal to 1. + This variante of the Fano cavity test make use of an reciprocity theorem. + + J.Sempau and P.Andreo, Phys. Med. Biol. 51 (2006) 3533 + + 1- GEOMETRY + + The chamber is modelized as a cylinder with a cavity in it. + + 5 parameters define the geometry : + - the radius of the chamber (must be big) + - the material of the wall + - the thickness of the wall + - the material of the cavity + - the thickness of the cavity + + Wall and cavity must be made of the same material, but with different + density. + Radius must be bigger than range of electrons in cavity. + + All above parameters can be redifined via the UI commands built in + DetectorMessenger class. + + _________________ + radius (infinite) | | | | + | | | | + | | | | + | | | | + | | <-+-----+--- cavity + | | | | + | | | | + ---------------------------- cylinder axis = e- source + | | | | + | | | | + | | | | + |wall | |wall | + | | | | + | | | | + | | | | + ----------------- + + 2- BEAM + + Monoenergetic (E0) incident electron source is uniformly distribued along + cylinder axis, within wall and cavity, with constant lineic density + per mass: I. + An effective wall thickness is defined from the range of e- at energy E0. + + Beam_energy_fluence is E0*I + + 3- PURPOSE OF THE PROGRAM + + The program computes the dose deposited in the cavity and the ratio + Dose/Beam_energy_fluence. This ratio must be 1. + + The program needs high statistic to reach precision on the computed dose. + The UI command /run/printProgress allows to survey the convergence of + the dose calculation. + + The simplest way to study the effect of e- tracking parameters on dose + deposition is to use the command /testem/stepMax. + + 4- PHYSICS + + The physics list contains the standard electromagnetic processes, with few + modifications listed here. + + - Bremsstrahlung : Fano conditions imply no energy transfer via + bremsstrahlung radiation. Therefore this process is not registered in the + physics list. However, it is always possible to include it. + See PhysListEm classes. + + - Ionization : In order to have same stopping power in wall and cavity, one + must cancel the density correction term in the dedx formula. This is done in + a specific MollerBhabha model (MyMollerBhabhaModel) which inherites from + G4MollerBhabhaModel. + + To prevent explicit generation of delta-rays, the default production + threshold (i.e. cut) is set to 10 km (CSDA condition). + + The finalRange of the step function is set to 10 um, which more on less + correspond to a tracking cut in water of about 20 keV. See emOptions. + Once again, the above parameters can be controled via UI commands. + + - Multiple scattering : is switched in single Coulomb scattering mode near + boundaries. This is selected via EM options in PhysicsList, and can be + controled with UI commands. + + - All PhysicsTables are built with 100 bins per decade. + + 5- HISTOGRAMS + + fanoCavity2 has several predefined 1D histograms : + + 1 : emission point of e+- + 2 : energy spectrum of e+- + 3 : theta distribution of e+- + 4 : emission point of e+- hitting cavity + 5 : energy spectrum of e+- when entering in cavity + 6 : theta distribution of e+- before enter in cavity + 7 : theta distribution of e+- at first step in cavity + 8 : track segment of e+- in cavity + 9 : step size of e+- in wall + 10 : step size of e+- in cavity + 11 : energy deposit in cavity per track + + The histograms are managed by G4AnalysisManager class and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default fanocavity2) + + It is possible to choose the format of the histogram file : + root(default), xml, hbook. See HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii + (default fanocavity2) + + 6- HOW TO START ? + + - execute fanoCavity2 in 'batch' mode from macro files + % fanoCavity2 run01.mac + + - execute fanoCavity2 in 'interactive mode' with visualization + % fanoCavity2 + .... + Idle> type your commands + .... + Idle> exit diff --git a/examples/extended/optical/.README.txt b/examples/extended/optical/.README.txt new file mode 100644 index 0000000000..8ef13327d3 --- /dev/null +++ b/examples/extended/optical/.README.txt @@ -0,0 +1,35 @@ + +///\file "optical/.README.txt" +///\brief Examples optical README page + +/*! \page Examples_optical Category "optical" + +This directory includes examples demonstrating the use of optical processes +in the simulation. + +\link ExampleOpNovice OpNovice \endlink + +Simulation of optical photons generation and transport. +Defines optical surfaces and exercises optical physics processes +(Cerenkov, Scintillation, Absorption, Rayleigh, ...). Uses stacking +mechanism to count the secondary particles generated. + +\link ExampleOpNovice2 OpNovice2 \endlink + +Investigate optical properties and parameters. Details of optical +photon boundary interactions on a surface are recorded. Details +of optical photon generation and transport are recorded. + +\link ExampleLXe LXe \endlink + +Multi-purpose detector setup implementing: +-# scintillation inside a bulk scintillator with PMTs +-# large wall of small PMTs opposite a Cerenkov slab to show the cone +-# plastic scintillator with wave-length-shifting fiber readout. + +\link Examplewls wls \endlink + +This application simulates the propagation of photons inside a Wave Length +Shifting (WLS) fiber. + +*/ diff --git a/examples/extended/optical/LXe/.README.txt b/examples/extended/optical/LXe/.README.txt new file mode 100644 index 0000000000..162014605b --- /dev/null +++ b/examples/extended/optical/LXe/.README.txt @@ -0,0 +1,385 @@ + +///\file "optical/LXe/.README.txt" +///\brief Example LXe README page + +/*! \page ExampleLXe Example LXe + +\section LXe_s1 Introduction + +This example demonstrates usage of optical physics. + +\section LXe_s2 Geometry and primary particle + +The main volume is a box of LXe. PMTs are placed around the outside. There +may be a reflective sphere placed inside the box, and a wavelength shifting +slab and fibers. + +The geometry implementation is different from many of the other examples. +See the discussion below. + +G4ParticleGun creates the primary particle. The type of particle is selectable +by the user. + +\section LXe_s3 Physics + +The physics list is FTFP_BERT, with G4EmStandard_option4 electromagnetic +physics and G4OpticalPhysics. + +\section LXe_s4 Physics Macro files + +cerenkov.mac disables scintillation, so the optical photons that are produced +are Cerenkov photons. + +wls.mac implements a scintillating slab and wavelength shifting fibers. + +\section LXe_s5 List of built-in histograms + + 1 "hits per event" + 2 "hits per event above threshold" + 3 "scintillation photons per event" + 4 "Cerenkov photons per event" + 5 "absorbed photons per event" + 6 "photons absorbed at boundary per event" + 7 "energy deposition in scintillator per event" + +\section LXe_s6 How to start? + + - execute LXe in 'batch' mode from macro files, e.g. + $ ./LXe cerenkov.mac + + - execute LXe in 'interactive' mode with visualization, e.g. + $ ./LXe + Then type commands, for instance + Session: /run/beamOn 1 + +\section LXe_s7 Macros included + +Several macros are include in the distribution: + +cerenkov.mac: Shoot a 200 MeV mu+ and only allow it to take one step. The + Cerenkov cone and PMTs hit are visible. (Reduce the number + of particles for visualization.) +LXe.mac: Shoot a 511 keV gamma with the default geometry. +photon.mac: Primary beam is an optical photon, with the default geometry. +wls.mac: Geometry includes 15 WLS fibers. A 511 keV electron is the + primary. + +- + +\section LXe_s8 Detailed Explanation of Geometry Implementation + +The way the geometry is constructed is an experiment for a new, more object +oriented, way to construct geometry. It separates the concept of how a volume +is built from where it is placed. Each major volume in the geometry is defined +as a class derived from G4PVPlacement. In this example, just the main LXe +volume, the WLS scintillator slab, and the WLS fibers were chosen. To place +one of these volumes, simply create an instance of it with the appropriate +rotation, translation, and mother volumes. + +\verbatim + LXeMainVolume(G4RotationMatrix *pRot, + const G4ThreeVector &tlate, + G4LogicalVolume *pMotherLogical, + G4bool pMany, + G4int pCopyNo, + LXeDetectorConstruction* c); +\endverbatim + +Also necessary are the pMany and pCopyNo variables with the same usage as in +G4PVPlacement. Additionally, the detector construction must be passed to the +main volume as a way to communicate the many parameters to the volume and its +sub-volumes. The communication is done from the CopyValues() function which +retrieves the information from the detector constructor. + +Notably, the name and logical volume parameters are no longer part of the +constructor. This is because they are both to be decided by the volume itself. +The volume must specify its own name and a temporary logical volume. The +constructor will then procede to define its logical volume in the normal way. +Once complete, the logical volume can be assigned to the physical volume using +the SetLogicalVolume() function. + +To handle instances of the same type of volume, a new logical volume should not +be defined for each one. Instead, the logical volume is kept as a static member +and defined only once. + +\verbatim + if (!housing_log || updated) { + //... + //Define logical volume + //... + } + SetLogicalVolume(housing_log); +\endverbatim + +The updated variable is to signal that the volume needs to be updated and a new +logical volume made. + +\section LXe_s9 Modifying the geometry at runtime + +This example allows the user to modify the geometry definition at runtime. This +is accomplished through LXeDetectorMessenger, a derived class of G4UImessenger. +The commands it adds change variables stored in LXeDetectorConstructor that +are used when constructing the geometry. + +\verbatim + void LXeDetectorConstruction::UpdateGeometry(){ + // clean-up previous geometry + G4SolidStore::GetInstance()->Clean(); + G4LogicalVolumeStore::GetInstance()->Clean(); + G4PhysicalVolumeStore::GetInstance()->Clean(); + + //define new one + G4RunManager::GetRunManager()->DefineWorldVolume(ConstructDetector()); + G4RunManager::GetRunManager()->GeometryHasBeenModified(); + } +\endverbatim + +\section LXe_s10 PMT sensitive detector + +The PMT sensitive detector cannot be triggered like a normal sensitive detector +because the sensitive volume does not allow photons to pass through it. Rather, +it detects them in the OpBoundary process based on an efficiency set on the +skin of the volume. + +\verbatim + G4OpticalSurface* photocath_opsurf= + new G4OpticalSurface("photocath_opsurf",glisur,polished, + dielectric_metal); + G4double photocath_EFF[num]={1.,1.}; + G4double photocath_REFL[num]={0.,0.}; + G4MaterialPropertiesTable* photocath_mt = new G4MaterialPropertiesTable(); + photocath_mt->AddProperty("EFFICIENCY",Ephoton,photocath_EFF,num); + photocath_mt->AddProperty("REFLECTIVITY",Ephoton,photocath_REFL,num); + photocath_opsurf->SetMaterialPropertiesTable(photocath_mt); + new G4LogicalSkinSurface("photocath_surf",photocath_log,photocath_opsurf); +\endverbatim + +A normal sensitive detector would have its ProcessHits +function called for each step by a particle inside the volume. So, to record +these hits with a sensitive detector we watched the status of the OpBoundary +process from the stepping manager whenever a photon hit the sensitive volume +of the pmt. If the status was 'Detection', we retrieve the sensitive detector +from G4SDManager and call its ProcessHits function. + +\verbatim + boundaryStatus=boundary->GetStatus(); + //Check to see if the particle was actually at a boundary + //Otherwise the boundary status may not be valid + //Prior to Geant4.6.0-p1 this would not have been enough to check + if(thePostPoint->GetStepStatus()==fGeomBoundary){ + switch(boundaryStatus){ + //... + case Detection: //Note, this assumes that the volume causing detection + //is the photocathode because it is the only one with + //non-zero efficiency + { + //Trigger sensitive detector manually since photon is + //absorbed but status was Detection + G4SDManager* SDman = G4SDManager::GetSDMpointer(); + G4String sdName="/LXeDet/pmtSD"; + LXePMTSD* pmtSD = (LXePMTSD*)SDman + ->FindSensitiveDetector(sdName); + if(pmtSD) + pmtSD->ProcessHits_constStep(theStep,NULL); + break; + } + //... + } +\endverbatim + +\section LXe_s11 Selectively drawing trajectories or highlighting volumes + +In a simulation such as this one, where an average of 6000 trajectories are +generated in a small space, there is little use in drawing all of them. There +are two ways to select which ones to draw. The first of which is to decide +while looping through the trajectory container which ones to draw and only call +DrawTrajectory on the important ones. However, trajectories only contain a +small portion of the information from the track it represents. This may not +be enough to decide if a trajectory is worth drawing. + +The alternative is to define your own trajectory class to store additional +information to help decide if it should be drawn. To use your custom trajectory +you must create it in the PreUserTrackingAction: + +\verbatim +fpTrackingManager->SetTrajectory(new LXeTrajectory(aTrack)); +\endverbatim + +Then at any point you can get access to the trajectory you can update the extra +information within it. When it comes to drawing, you can then use this to +decide if you want to call DrawTrajectory. Or you can call DrawTrajectory for +all trajectories and have the logic decide how and if a trajectory should +be drawn inside the DrawTrajectory function itself. + +Selectively highlighting volumes is useful to show which volumes were hit. To +do this, you simply need a pointer to the physical volume. With that, you can +modify its vis attributes and instruct the vis manager to redraw the volume +with the new vis attributes. + +\verbatim + G4VisAttributes attribs(G4Colour(1.,0.,0.)); + attribs.SetForceSolid(true); + G4RotationMatrix rot; + if(physVol->GetRotation())//If a rotation is defined use it + rot=*(physVol->GetRotation()); + G4Transform3D trans(rot,physVol->GetTranslation());//Create transform + pVVisManager->Draw(*physVol,attribs,trans);//Draw it +\endverbatim + +In this case, it is done in Draw function of a PMT hit but it can be placed +anywhere. The logic to decide if it should be drawn or not may be similar to +the logic used in choosing which trajectories to draw. + +See /LXe/detector/volumes/sphere in "UI commands" below for info on what +trajectories are drawn in this simulation. + +\section LXe_s12 Saving random engine seeds + +At times it may be necessary to review a particular event of interest. To do +this without redoing an entire run, which may take a long time, you must store +the random engine seed from the beginning of the event. The run manager +has some functions that help in this task. + +\verbatim +G4RunManager::SetRandomNumberStore(G4bool) +\endverbatim + +When set to true, this causes the run manager to write the seed for the +beginning of the current run to CurrentRun.rndm and the current event to +CurrentEvent.rndm. However, at the beginning of each event this file will be +overwritten with the new event. To keep a copy for a particular event there is +a function to copy this file to "run###evt###.rndm". + +\verbatim +G4RunManager::rndmSaveThisEvent() +\endverbatim + +This can be done for every event so you can review any event you like but this +may be awkward for runs with very large numbers of events. Instead, implement +some form of logic in EndOfEventAction to decide if the event is worth saving. +If it is, then call rndmSaveThisEvent(). By default, these files are stored in +the current working directory. There is a function to change this as well. +Typically you would call that at the same time SetRandomNumberStore. The +directory to save in must exist first. GEANT4 will not create it for you. + +\verbatim +G4RunManager::SetRandomNumberStoreDir(G4String) +\endverbatim + +\section LXe_s13 UI commands + +Directories: +\verbatim +/LXe/ - All custom commands belong below this directory +/LXe/detector/ - Geometry related commands +/LXe/detector/volumes/ - Commands to enable/disable volumes in the geometry +\endverbatim + +Commands: +\verbatim +/LXe/saveThreshold +\endverbatim +-Specifies a threshold for saving the random seed for an event. If the number +of photons generated in an event is below this number then the random seed is +saved to "./random/run###evt###.rndm". See "Saving random engine seeds". + +\verbatim +/LXe/eventVerbose +\endverbatim +-Enables end of event verbose data to be printed. This includes information +counted and calculated by the user action classes. + +\verbatim +/LXe/pmtThreshold +\endverbatim +-Sets the PMT threshold in # of photons being detected by the PMT. PMTs below +with fewer hits than the threshold will not count as being hit and will also +not be highlighted at the end of the event. + +\verbatim +/LXe/oneStepPrimaries +\endverbatim +-This causes primary particles to be killed after going only one step inside +the scintillator volume. This is useful to view the photons generated during +the initial conversion of the primary particle. + +\verbatim +/LXe/forceDrawPhotons +\endverbatim +-Forces all optical photon trajectories to be drawn at the end of the event +regardless of the scheme mentioned in /LXe/detector/volumes/sphere below. + +\verbatim +/LXe/forceDrawNoPhotons +\endverbatim +-Forces all optical photon trajectories to NOT be drawn at the end of the +event regardless of the scheme mentioned in /LXe/detector/volumes/sphere below. +-If /LXe/forceDrawPhotons is set to true, this has no effect. + +\verbatim +/LXe/detector/dimensions +\endverbatim +-Sets the dimensions of the main scintillator volume. + +\verbatim +/LXe/detector/housingThickness +\endverbatim +-Sets the thickness of the housing surrounding the main detector volume. + +\verbatim +/LXe/detector/pmtRadius +\endverbatim +-Sets the radius of the PMTs + +\verbatim +/LXe/detector/nx +/LXe/detector/ny +/LXe/detector/nz +\endverbatim +-Sets the number of PMTs placed in a row along each axis. + +\verbatim +/LXe/detector/reflectivity +\endverbatim +-Sets the reflectivity of the inside of the aluminum housing. The geometry +uses a default value of 1.00 for a fully reflective surface. + +\verbatim +/LXe/detector/nfibers +\endverbatim +-Sets the number of WLS fibers placed in the WLS scintillator slab. The +geometry uses a default value of 15 fibers. + +\verbatim +/LXe/detector/scintYieldFactor +\endverbatim +-Sets the yield factor for the scintillation process. This is cumulative with +the yield factor set on individual materials. Set to 0 to produce no +scintillation photons. + +\verbatim +/LXe/detector/defaults +\endverbatim +-Resets all detector values customizable with commands above to their defaults. + +\verbatim +/LXe/detector/volumes/sphere +\endverbatim +-Enables/disables the sphere placed inside the main scintillator volume. When +the sphere is enabled, only photons that hit the sphere and hit a PMT are +drawn. If it is disabled, then all photons that hit PMTs are drawn. + +\verbatim +/LXe/detector/volumes/wls +\endverbatim +-Enables/disables the WLS scintillator slab containing WLS fibers. By default +this is not part of the geometry. Enabling it will place it behind the LXe +scintillator volume. + +\verbatim +/LXe/detector/volumes/lxe +\endverbatim +-Enables/disables the main LXe scintillator volume. By default this is part of +the geometry. + +*/ diff --git a/examples/extended/optical/LXe/README b/examples/extended/optical/LXe/README new file mode 100644 index 0000000000..d3252bdace --- /dev/null +++ b/examples/extended/optical/LXe/README @@ -0,0 +1,356 @@ + + LXe Example + ----------- + +------------ +Introduction +------------ + +This example demonstrates usage of optical physics. + +----------------------------- +Geometry and primary particle +----------------------------- + +The main volume is a box of LXe. PMTs are placed around the outside. There +may be a reflective sphere placed inside the box, and a wavelength shifting +slab and fibers. + +The geometry implementation is different from many of the other examples. +See the discussion below. + +G4ParticleGun creates the primary particle. The type of particle is selectable +by the user. + +------- +Physics +------- + +The physics list is FTFP_BERT, with G4EmStandard_option4 electromagnetic +physics and G4OpticalPhysics. + +----------- +Macro files +----------- + +cerenkov.mac disables scintillation, so the optical photons that are produced +are Cerenkov photons. + +wls.mac implements a scintillating slab and wavelength shifting fibers. + + +--------------------------- +List of built-in histograms +--------------------------- + + 1 "hits per event" + 2 "hits per event above threshold" + 3 "scintillation photons per event" + 4 "Cerenkov photons per event" + 5 "absorbed photons per event" + 6 "photons absorbed at boundary per event" + 7 "energy deposition in scintillator per event" + + +------------- +How to start? +------------- + + - execute LXe in 'batch' mode from macro files, e.g. + $ ./LXe cerenkov.mac + + - execute LXe in 'interactive' mode with visualization, e.g. + $ ./LXe + Then type commands, for instance + Session: /run/beamOn 1 + +--------------- +Macros included +--------------- + +Several macros are include in the distribution: + +cerenkov.mac: Shoot a 200 MeV mu+ and only allow it to take one step. The + Cerenkov cone and PMTs hit are visible. (Reduce the number + of particles for visualization.) +LXe.mac: Shoot a 511 keV gamma with the default geometry. +photon.mac: Primary beam is an optical photon, with the default geometry. +wls.mac: Geometry includes 15 WLS fibers. A 511 keV electron is the + primary. + +----------------------------------------------- +Detailed Explanation of Geometry Implementation +----------------------------------------------- + +The way the geometry is constructed is an experiment for a new, more object +oriented, way to construct geometry. It separates the concept of how a volume +is built from where it is placed. Each major volume in the geometry is defined +as a class derived from G4PVPlacement. In this example, just the main LXe +volume, the WLS scintillator slab, and the WLS fibers were chosen. To place +one of these volumes, simply create an instance of it with the appropriate +rotation, translation, and mother volumes. + + LXeMainVolume(G4RotationMatrix *pRot, + const G4ThreeVector &tlate, + G4LogicalVolume *pMotherLogical, + G4bool pMany, + G4int pCopyNo, + LXeDetectorConstruction* c); + +Also necessary are the pMany and pCopyNo variables with the same usage as in +G4PVPlacement. Additionally, the detector construction must be passed to the +main volume as a way to communicate the many parameters to the volume and its +sub-volumes. The communication is done from the CopyValues() function which +retrieves the information from the detector constructor. + +Notably, the name and logical volume parameters are no longer part of the +constructor. This is because they are both to be decided by the volume itself. +The volume must specify its own name and a temporary logical volume. The +constructor will then procede to define its logical volume in the normal way. +Once complete, the logical volume can be assigned to the physical volume using +the SetLogicalVolume() function. + +To handle instances of the same type of volume, a new logical volume should not +be defined for each one. Instead, the logical volume is kept as a static member +and defined only once. + + if (!housing_log || updated) { + //... + //Define logical volume + //... + } + SetLogicalVolume(housing_log); + +The updated variable is to signal that the volume needs to be updated and a new +logical volume made. + +--------------------------------- +Modifying the geometry at runtime +--------------------------------- + +This example allows the user to modify the geometry definition at runtime. This +is accomplished through LXeDetectorMessenger, a derived class of G4UImessenger. +The commands it adds change variables stored in LXeDetectorConstructor that +are used when constructing the geometry. + + void LXeDetectorConstruction::UpdateGeometry(){ + // clean-up previous geometry + G4SolidStore::GetInstance()->Clean(); + G4LogicalVolumeStore::GetInstance()->Clean(); + G4PhysicalVolumeStore::GetInstance()->Clean(); + + //define new one + G4RunManager::GetRunManager()->DefineWorldVolume(ConstructDetector()); + G4RunManager::GetRunManager()->GeometryHasBeenModified(); + } + +---------------------- +PMT sensitive detector +---------------------- + +The PMT sensitive detector cannot be triggered like a normal sensitive detector +because the sensitive volume does not allow photons to pass through it. Rather, +it detects them in the OpBoundary process based on an efficiency set on the +skin of the volume. + + + G4OpticalSurface* photocath_opsurf= + new G4OpticalSurface("photocath_opsurf",glisur,polished, + dielectric_metal); + G4double photocath_EFF[num]={1.,1.}; + G4double photocath_REFL[num]={0.,0.}; + G4MaterialPropertiesTable* photocath_mt = new G4MaterialPropertiesTable(); + photocath_mt->AddProperty("EFFICIENCY",Ephoton,photocath_EFF,num); + photocath_mt->AddProperty("REFLECTIVITY",Ephoton,photocath_REFL,num); + photocath_opsurf->SetMaterialPropertiesTable(photocath_mt); + new G4LogicalSkinSurface("photocath_surf",photocath_log,photocath_opsurf); + + +A normal sensitive detector would have its ProcessHits +function called for each step by a particle inside the volume. So, to record +these hits with a sensitive detector we watched the status of the OpBoundary +process from the stepping manager whenever a photon hit the sensitive volume +of the pmt. If the status was 'Detection', we retrieve the sensitive detector +from G4SDManager and call its ProcessHits function. + + + boundaryStatus=boundary->GetStatus(); + //Check to see if the particle was actually at a boundary + //Otherwise the boundary status may not be valid + //Prior to Geant4.6.0-p1 this would not have been enough to check + if(thePostPoint->GetStepStatus()==fGeomBoundary){ + switch(boundaryStatus){ + //... + case Detection: //Note, this assumes that the volume causing detection + //is the photocathode because it is the only one with + //non-zero efficiency + { + //Trigger sensitive detector manually since photon is + //absorbed but status was Detection + G4SDManager* SDman = G4SDManager::GetSDMpointer(); + G4String sdName="/LXeDet/pmtSD"; + LXePMTSD* pmtSD = (LXePMTSD*)SDman + ->FindSensitiveDetector(sdName); + if(pmtSD) + pmtSD->ProcessHits_constStep(theStep,NULL); + break; + } + //... + } + + +-------------------------------------------------------- +Selectively drawing trajectories or highlighting volumes +-------------------------------------------------------- + +In a simulation such as this one, where an average of 6000 trajectories are +generated in a small space, there is little use in drawing all of them. There +are two ways to select which ones to draw. The first of which is to decide +while looping through the trajectory container which ones to draw and only call +DrawTrajectory on the important ones. However, trajectories only contain a +small portion of the information from the track it represents. This may not +be enough to decide if a trajectory is worth drawing. + +The alternative is to define your own trajectory class to store additional +information to help decide if it should be drawn. To use your custom trajectory +you must create it in the PreUserTrackingAction: + +fpTrackingManager->SetTrajectory(new LXeTrajectory(aTrack)); + +Then at any point you can get access to the trajectory you can update the extra +information within it. When it comes to drawing, you can then use this to +decide if you want to call DrawTrajectory. Or you can call DrawTrajectory for +all trajectories and have the logic decide how and if a trajectory should +be drawn inside the DrawTrajectory function itself. + +Selectively highlighting volumes is useful to show which volumes were hit. To +do this, you simply need a pointer to the physical volume. With that, you can +modify its vis attributes and instruct the vis manager to redraw the volume +with the new vis attributes. + + G4VisAttributes attribs(G4Colour(1.,0.,0.)); + attribs.SetForceSolid(true); + G4RotationMatrix rot; + if(physVol->GetRotation())//If a rotation is defined use it + rot=*(physVol->GetRotation()); + G4Transform3D trans(rot,physVol->GetTranslation());//Create transform + pVVisManager->Draw(*physVol,attribs,trans);//Draw it + +In this case, it is done in Draw function of a PMT hit but it can be placed +anywhere. The logic to decide if it should be drawn or not may be similar to +the logic used in choosing which trajectories to draw. + +See /LXe/detector/volumes/sphere in "UI commands" below for info on what +trajectories are drawn in this simulation. + +-------------------------- +Saving random engine seeds +-------------------------- + +At times it may be necessary to review a particular event of interest. To do +this without redoing an entire run, which may take a long time, you must store +the random engine seed from the beginning of the event. The run manager +has some functions that help in this task. + +G4RunManager::SetRandomNumberStore(G4bool) + +When set to true, this causes the run manager to write the seed for the +beginning of the current run to CurrentRun.rndm and the current event to +CurrentEvent.rndm. However, at the beginning of each event this file will be +overwritten with the new event. To keep a copy for a particular event there is +a function to copy this file to run###evt###.rndm. + +G4RunManager::rndmSaveThisEvent() + +This can be done for every event so you can review any event you like but this +may be awkward for runs with very large numbers of events. Instead, implement +some form of logic in EndOfEventAction to decide if the event is worth saving. +If it is, then call rndmSaveThisEvent(). By default, these files are stored in +the current working directory. There is a function to change this as well. +Typically you would call that at the same time SetRandomNumberStore. The +directory to save in must exist first. GEANT4 will not create it for you. + +G4RunManager::SetRandomNumberStoreDir(G4String) + +----------- +UI commands +----------- + +Directories: +/LXe/ - All custom commands belong below this directory +/LXe/detector/ - Geometry related commands +/LXe/detector/volumes/ - Commands to enable/disable volumes in the geometry + +Commands: +/LXe/saveThreshold +-Specifies a threshold for saving the random seed for an event. If the number +of photons generated in an event is below this number then the random seed is +saved to ./random/run###evt###.rndm. See "Saving random engine seeds". + +/LXe/eventVerbose +-Enables end of event verbose data to be printed. This includes information +counted and calculated by the user action classes. + +/LXe/pmtThreshold +-Sets the PMT threshold in # of photons being detected by the PMT. PMTs below +with fewer hits than the threshold will not count as being hit and will also +not be highlighted at the end of the event. + +/LXe/oneStepPrimaries +-This causes primary particles to be killed after going only one step inside +the scintillator volume. This is useful to view the photons generated during +the initial conversion of the primary particle. + +/LXe/forceDrawPhotons +-Forces all optical photon trajectories to be drawn at the end of the event +regardless of the scheme mentioned in /LXe/detector/volumes/sphere below. + +/LXe/forceDrawNoPhotons +-Forces all optical photon trajectories to NOT be drawn at the end of the +event regardless of the scheme mentioned in /LXe/detector/volumes/sphere below. +-If /LXe/forceDrawPhotons is set to true, this has no effect. + +/LXe/detector/dimensions +-Sets the dimensions of the main scintillator volume. + +/LXe/detector/housingThickness +-Sets the thickness of the housing surrounding the main detector volume. + +/LXe/detector/pmtRadius +-Sets the radius of the PMTs + +/LXe/detector/nx +/LXe/detector/ny +/LXe/detector/nz +-Sets the number of PMTs placed in a row along each axis. + +/LXe/detector/reflectivity +-Sets the reflectivity of the inside of the aluminum housing. The geometry +uses a default value of 1.00 for a fully reflective surface. + +/LXe/detector/nfibers +-Sets the number of WLS fibers placed in the WLS scintillator slab. The +geometry uses a default value of 15 fibers. + +/LXe/detector/scintYieldFactor +-Sets the yield factor for the scintillation process. This is cumulative with +the yield factor set on individual materials. Set to 0 to produce no +scintillation photons. + +/LXe/detector/defaults +-Resets all detector values customizable with commands above to their defaults. + +/LXe/detector/volumes/sphere +-Enables/disables the sphere placed inside the main scintillator volume. When +the sphere is enabled, only photons that hit the sphere and hit a PMT are +drawn. If it is disabled, then all photons that hit PMTs are drawn. + +/LXe/detector/volumes/wls +-Enables/disables the WLS scintillator slab containing WLS fibers. By default +this is not part of the geometry. Enabling it will place it behind the LXe +scintillator volume. + +/LXe/detector/volumes/lxe +-Enables/disables the main LXe scintillator volume. By default this is part of +the geometry. + diff --git a/examples/extended/optical/OpNovice/.README.txt b/examples/extended/optical/OpNovice/.README.txt new file mode 100644 index 0000000000..b51d530917 --- /dev/null +++ b/examples/extended/optical/OpNovice/.README.txt @@ -0,0 +1,124 @@ + +///\file "optical/OpNovice/.README.txt" +///\brief Example OpNovice README page + +/*! \page ExampleOpNovice Example OpNovice + +This example presently illustrates the following basic concepts, and in +particular (indicated with ***), how to use G4 for optical photon +generation and transport. Other extended example of what is possible +in Geant4 with optical photons can be found at +examples/extended/optical/LXe and wls + +\section ExampleOpNovice_s1 main() + + Define Random Number generator initial seed + +\section ExampleOpNovice_s2 G4OpticalPhysics + + The G4OpticalPhysics physics class is used. The messenger is the + G4OpticalParametersMessenger class. + + - Define particles; including - *** G4OpticalPhoton *** + - Define processes; including + - *** G4Cerenkov *** + - *** G4Scintillation *** + - *** G4OpAbsorption *** + - *** G4OpRayleigh *** + - *** G4OpBoundaryProcess *** + + A messenger command allows to define interactively the + verbose level and the maximum number of Cerenkov photons per step + (see for instance OpNovice.in) + +\section ExampleOpNovice_s3 G4VUserDetectorConstruction + + - Define material: Air and Water + - Define simple G4box geometry + - *** add G4MaterialPropertiesTable to G4Material *** + - *** define G4LogicalSurface(s) *** + - *** define G4OpticalSurface *** + - *** add G4MaterialPropertiesTable to G4OpticalSurface *** + +alternatively the Configuration can be read from a gdml file. +The provided gdml file NoviceExample.gdml corresponds to the detector +defined in OpNoviceDetectorConstruction. + + +\section ExampleOpNovice_s4 G4VUserPrimaryGeneratorAction + + Use G4ParticleGun to shoot a charge particle into a Cerenkov radiator + + A messenger command allows to define interactively the polarization of an + primary optical photon (see for instance optPhoton.mac) + +\section ExampleOpNovice_s5 G4UserRunAction and G4Run + + - Used to accumulate statistics. + +\section ExampleOpNovice_s6 G4UserStackingAction and G4UserEventAction + + Show how to count the number of secondary particles in an event + +\section ExampleOpNovice_s7 Visualisation + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main in case of interactive running mode. + + The detector has a default view which is a longitudinal view of the tank. + The tracks are drawn at the end of event, and erased at the end of run. + +\section ExampleOpNovice_s8 How to start + + - compile and link to generate an executable + + This example handles the program arguments in a new way. + It can be run with the following optional arguments: +\verbatim + $ OpNovice [-g gdmlfile] [-m macro ] [-u UIsession] [-t nThreads] +\endverbatim + + The -t option is available only in multi-threading mode + and it allows the user to override the Geant4 default number of + threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS + environment variable which has the top priority. + + - execute OpNovice in 'batch' mode from macro files +\verbatim + $ OpNovice -m OpNovice.in +\endverbatim + +- execute OpNovice in 'batch' mode from macro files using a gdml file + to define the geometry + $ OpNovice -g NoviceExample.gdml -m OpNovice.in + + - execute OpNovice in 'interactive mode' with visualization +\verbatim +$ OpNovice +.... +Idle> type your commands. For instance: +Idle> /control/execute optPhoton.mac +.... +Idle> exit +\endverbatim + +Macros +------ + + The following macros are provided: + + optPhoton.mac: Shoot optical photons with energy 3 eV + OpNovice.in: Shoot positrons with energy 500 keV. + gui.mac: Configure the graphical user interface. + vis.mac: Configure visualization. + + + +gdml files +---------- +NoviceExample.gdml: example gdml file corresponding to +OpNoviceDetectorConstruction + +*/ diff --git a/examples/extended/optical/OpNovice/README b/examples/extended/optical/OpNovice/README new file mode 100644 index 0000000000..8e82c2ace7 --- /dev/null +++ b/examples/extended/optical/OpNovice/README @@ -0,0 +1,124 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + OpNovice + -------- + +This example presently illustrates the following basic concepts, and in +particular (indicated with ***), how to use G4 for optical photon +generation and transport. Other extended example of what is possible +in Geant4 with optical photons can be found at +examples/extended/optical/LXe and wls. + +main() +------ + + ==> define Random Number generator initial seed + +G4Optical Physics +----------------- + + The G4OpticalPhysics physics class is used. The messenger is the + G4OpticalParametersMessenger class. + + ==> define particles; including *** G4OpticalPhoton *** + define processes; including *** G4Cerenkov *** + *** G4Scintillation *** + *** G4OpAbsorption *** + *** G4OpRayleigh *** + *** G4OpBoundaryProcess *** + + ==> A messenger command allows to define interactively the + verbose level and the maximum number of Cerenkov photons per step + (see for instance OpNovice.in) + +G4VUserDetectorConstruction +--------------------------- + + ==> define material: Air and Water + define simple G4box geometry + *** add G4MaterialPropertiesTable to G4Material *** + *** define G4LogicalSurface(s) *** + *** define G4OpticalSurface *** + *** add G4MaterialPropertiesTable to G4OpticalSurface *** + +alternatively the Configuration can be read from a gdml file. +The provided gdml file NoviceExample.gdml corresponds to the detector +defined in OpNoviceDetectorConstruction. + +G4VUserPrimaryGeneratorAction +----------------------------- + + ==> Use G4ParticleGun to shoot a charge particle into a Cerenkov radiator + + ==> A messenger command allows to define interactively the polarization of an + primary optical photon (see for instance optPhoton.mac) + +G4UserRunAction and G4Run +------------------------- + + Used to accumulate statistics. + +G4UserStackingAction and G4UserEventAction +------------------------------------------ + +==> show how to count the number of secondary particles in an event + +Visualisation +------------- + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main in case of interactive running mode. + + The detector has a default view which is a longitudinal view of the tank. + The tracks are drawn at the end of event, and erased at the end of run. + + HOW TO START + ------------ + + - compile and link to generate an executable + + This example handles the program arguments in a new way. + It can be run with the following optional optionaarguments: + $ OpNovice [-g gdmlfile] [-m macro ] [-u UIsession] [-t nThreads] + + The -t option is available only in multi-threading mode + and it allows the user to override the Geant4 default number of + threads. The number of threads can be also set via G4FORCENUMBEROFTHREADS + environment variable which has the top priority. + + - execute OpNovice in 'batch' mode from macro files + $ OpNovice -m OpNovice.in + + - execute OpNovice in 'batch' mode from macro files using a gdml file + to define the geometry + $ OpNovice -g NoviceExample.gdml -m OpNovice.in + + - execute OpNovice in 'interactive mode' with visualization + $ OpNovice + .... + Idle> type your commands. For instance: + Idle> /control/execute optPhoton.mac + .... + Idle> exit + +Macros +------ + + The following macros are provided: + + optPhoton.mac: Shoot optical photons with energy 3 eV + OpNovice.in: Shoot positrons with energy 500 keV. + gui.mac: Configure the graphical user interface. + vis.mac: Configure visualization.ls + + +gdml files +---------- +NoviceExample.gdml: example gdml file corresponding to +OpNoviceDetectorConstruction \ No newline at end of file diff --git a/examples/extended/optical/OpNovice2/.README.txt b/examples/extended/optical/OpNovice2/.README.txt new file mode 100644 index 0000000000..f0fcec9ed3 --- /dev/null +++ b/examples/extended/optical/OpNovice2/.README.txt @@ -0,0 +1,158 @@ + +///\file "optical/OpNovice2/.README.txt" +///\brief Example AnaEx01 README page + +/*! \page ExampleOpNovice2 Example OpNovice2 + +Investigate optical properties and parameters. Details of optical +photon boundary interactions on a surface are recorded. Details +of optical photon generation and transport are recorded. + + +\section OpNovice2_s1 GEOMETRY DEFINITION + + The geometry consists of a cube "box" with a side of 2 m inside + the world cube of side 20 m. Optical properties of the box, the world, + and the surface may be set interactively via the commands defined + in the DetectorMessenger class. + + Material properties may be added using the macro commands: + - for the box: +\verbatim +/opnovice2/boxProperty NAME EN1 V1 EN2 V2 [ .. ENn Vn] +/opnovice2/boxConstProperty NAME VALUE +\endverbatim + - for the world: +\verbatim + /opnovice2/worldProperty NAME EN1 V1 EN2 V2 [ .. ENn Vn] + /opnovice2/worldConstProperty NAME VALUE +\endverbatim + - for the surface: +\verbatim + /opnovice2/surfaceProperty NAME EN1 V1 EN2 V2 [ .. ENn Vn] +\endverbatim + + Multiple energy and value pairs may be specified for the energy-dependent + properties. + + Values are in Geant4 internal units. Energy is in MeV. + + Example: +\verbatim +/opnovice2/boxProperty RINDEX 0.000002 1.3 0.000005 1.32 0.000008 1.34 +\endverbatim + sets the refractive index of the box to 1.3 at 2 eV, 1.32 at 5 eV, and + 1.34 at 8 eV. + +\section OpNovice2_s2 PHYSICS LIST + + The FTFP_BERT physics list is used, with electromagnetic option + EMZ (option4) and G4OpticalPhysics for the optical physics. + +\section OpNovice2_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle. The type of + the particle, its energy, position, and direction, are set + in the PrimaryGeneratorAction class, and can be changed via the G4 + build-in commands of G4ParticleGun class (see the macros provided with + this example). + +\section OpNovice2_s4 VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + or run the program with no command line arguments: +\verbatim +$ ./OpNovice2 +\endverbatim + +\section OpNovice2_s5 HOW TO START ? + + - Execute OpNovice2 in 'batch' mode from macro files +\verbatim +% OpNovice2 electron.mac +\endverbatim + + - Execute OpNovice2 in 'interactive mode' with visualization +\verbatim +% OpNovice2 +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + +\section OpNovice2_s6 RESULTS + + A table of optical photon events is printed at the end of the run. + +\section OpNovice2_s7 HISTOGRAMS + + OpNovice2 has several predefined 1D histograms : + - 1 : Cerenkov spectrum + - 2 : scintillation spectrum + - 3 : scintillation time (global time) + - 4 : WLS absorption spectrum + - 5 : WLS emission spectrum + - 6 : WLS emission time + - 7 : WLS2 absorption spectrum + - 8 : WLS2 emission spectrum + - 9 : WLS2 emission time + - 10 : boundary process status + - 11 : X momentum dir of scattered photons with px < 0 + - 12 : Y momentum dir of scattered photons with px < 0 + - 13 : Z momentum dir of scattered photons with px < 0 + - 14 : X momentum dir of scattered photons with px >= 0 + - 15 : Y momentum dir of scattered photons with px >= 0 + - 16 : Z momentum dir of scattered photons with px >= 0 + - 17 : X momentum dir of Fresnel-refracted photons + - 18 : Y momentum dir of Fresnel-refracted photons + - 19 : Z momentum dir of Fresnel-refracted photons + - 20 : fraction of photons transmitted at surface + - 21 : fraction of photons reflected at surface + + Histograms 11-19 are recorded for photons scattered from the +X + surface of the cube. Only the first interaction is recorded. + + The histograms are managed by G4Analysis classes. + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax +\endverbatim + The unit is hardcoded to be eV for energy and ns for time. + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default opnovice2) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default opnovice2) + +\section OpNovice2_s8 MACROS + + Several macros are included. + boundary.mac: Set the surface to the various types and configurations of + model, type, etc., shoot optical photons, and record statistics + electron.mac: Shoot electrons and observe Cerenkov and scintillation radiation + fresnel.mac: Shoot optical photons of fixed polarization and random direction + at a surface, and plot reflectance/transmittance vs incident + angle. + OpNovice2.mac: Shoot an optical photon inside a box. + scint_by_particle.mac: Configure scintillation to have particle-specific + yields and yield ratios. Shoot different types of particles. + vis.mac: Configure visualization. + wls.mac: Configure two wavelength-shifting processes, and shoot optical + photons. + +*/ diff --git a/examples/extended/optical/OpNovice2/README b/examples/extended/optical/OpNovice2/README new file mode 100644 index 0000000000..1bc19f3f22 --- /dev/null +++ b/examples/extended/optical/OpNovice2/README @@ -0,0 +1,137 @@ +------------------------------------------------------------------- + + ================================================== + Geant4 - an Object-Oriented Toolkit for Simulation + ================================================== + + OpNovice2 + --------- + + Investigate optical properties and parameters. Details of optical + photon boundary interactions on a surface are recorded. Details + of optical photon generation and transport are recorded. + + + 1- GEOMETRY DEFINITION + + The geometry consists of a cube "box" with a side of 2 m inside + the world cube of side 20 m. Optical properties of the box, the world, + and the surface may be set interactively via the commands defined + in the DetectorMessenger class. + + Material properties may be added using the macro commands: + # for the box: + /opnovice2/boxProperty NAME EN1 V1 EN2 V2 [ .. ENn Vn] + /opnovice2/boxConstProperty NAME VALUE + # for the world: + /opnovice2/worldProperty NAME EN1 V1 EN2 V2 [ .. ENn Vn] + /opnovice2/worldConstProperty NAME VALUE + # for the surface: + /opnovice2/surfaceProperty NAME EN1 V1 EN2 V2 [ .. ENn Vn] + + Multiple energy and value pairs may be specified for the energy-dependent + properties. + + Values are in Geant4 internal units. Energy is in MeV. + + Example: + /opnovice2/boxProperty RINDEX 0.000002 1.3 0.000005 1.32 0.000008 1.34 + sets the refractive index of the box to 1.3 at 2 eV, 1.32 at 5 eV, and + 1.34 at 8 eV. + + 2- PHYSICS LIST + + The FTFP_BERT physics list is used, with electromagnetic option + EMZ (option4) and G4OpticalPhysics for the optical physics. + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle. The type of + the particle, its energy, position, and direction, are set + in the PrimaryGeneratorAction class, and can be changed via the G4 + build-in commands of G4ParticleGun class (see the macros provided with + this example). + + 4- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + or run the program with no command line arguments: + $ ./OpNovice2 + + 5- HOW TO START ? + + - Execute OpNovice2 in 'batch' mode from macro files + % OpNovice2 electron.mac + + - Execute OpNovice2 in 'interactive mode' with visualization + % OpNovice2 + .... + Idle> type your commands + .... + Idle> exit + + 6- RESULTS + + A table of optical photon events is printed at the end of the run. + + 7- HISTOGRAMS + + OpNovice2 has several predefined 1D histograms : + 1 : Cerenkov spectrum + 2 : scintillation spectrum + 3 : scintillation time (global time) + 4 : WLS absorption spectrum + 5 : WLS emission spectrum + 6 : WLS emission time + 7 : WLS2 absorption spectrum + 8 : WLS2 emission spectrum + 9 : WLS2 emission time + 10 : boundary process status + 11 : X momentum dir of scattered photons with px < 0 + 12 : Y momentum dir of scattered photons with px < 0 + 13 : Z momentum dir of scattered photons with px < 0 + 14 : X momentum dir of scattered photons with px >= 0 + 15 : Y momentum dir of scattered photons with px >= 0 + 16 : Z momentum dir of scattered photons with px >= 0 + 17 : X momentum dir of Fresnel-refracted photons + 18 : Y momentum dir of Fresnel-refracted photons + 19 : Z momentum dir of Fresnel-refracted photons + 20 : fraction of photons transmitted at surface + 21 : fraction of photons reflected at surface + + Histograms 11-19 are recorded for photons scattered from the +X + surface of the cube. Only the first interaction is recorded. + + The histograms are managed by G4Analysis classes. + The histos can be individually activated with the command: + /analysis/h1/set id nbBins valMin valMax + The unit is hardcoded to be eV for energy and ns for time. + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default opnovice2) + + It is possible to choose the format of the histogram file : root (default), + hbook, xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default opnovice2) + + 8- MACROS + + Several macros are included. + boundary.mac: Set the surface to the various types and configurations of + model, type, etc., shoot optical photons, and record statistics + electron.mac: Shoot electrons and observe Cerenkov and scintillation radiation + fresnel.mac: Shoot optical photons of fixed polarization and random direction + at a surface, and plot reflectance/transmittance vs incident + angle. + OpNovice2.mac: Shoot an optical photon inside a box. + scint_by_particle.mac: Configure scintillation to have particle-specific + yields and yield ratios. Shoot different types of particles. + vis.mac: Configure visualization. + wls.mac: Configure two wavelength-shifting processes, and shoot optical + photons. diff --git a/examples/extended/optical/README b/examples/extended/optical/README new file mode 100644 index 0000000000..3687f0ac5d --- /dev/null +++ b/examples/extended/optical/README @@ -0,0 +1,34 @@ + + Optical processes + ----------------- + +This directory includes examples demonstrating the use of optical processes +in the simulation. + +OpNovice +-------- +Simulation of optical photons generation and transport. +Defines optical surfaces and exercises optical physics processes +(Cerenkov, Scintillation, Absorption, Rayleigh, ...). Uses stacking +mechanism to count the secondary particles generated. +Via the command line one can select an option to define the detector via a +gdml file. An example gdml file is provided that corresponds +to the detector configuration defined in OpNoviceDetectorConstruction.cc. + +OpNovice2 +-------- +Investigate optical properties and parameters. Details of optical +photon boundary interactions on a surface are recorded. Details +of optical photon generation and transport are recorded. + +LXe +---- +Multi-purpose detector setup implementing: +(1) scintillation inside a bulk scintillator with PMTs +(2) large wall of small PMTs opposite a Cerenkov slab to show the cone +(3) plastic scintillator with wave-length-shifting fiber readout. + +WLS +---- +This application simulates the propagation of photons inside a Wave Length +Shifting (WLS) fiber. diff --git a/examples/extended/optical/wls/.README.txt b/examples/extended/optical/wls/.README.txt new file mode 100644 index 0000000000..d5d80814ae --- /dev/null +++ b/examples/extended/optical/wls/.README.txt @@ -0,0 +1,100 @@ + +///\file "optical/wls/.README.txt" +///\brief Example wls README page + +/*! \page Examplewls Example wls + +This application simulates the propagation of optical photons inside a +Wave Length Shifting (WLS) fiber. + + +\section Examplewls_s1 Geometry Definition + + The default geometry is as follow: + +- A perfect, bare (or clad), PMMA fiber: 0.5mm radius, 2m length at + center (0,0,0) of the World. +- A circular MPPC with 0.5mm radius at the +z end of the fiber +- World and coupling materials are G4_AIR +- Photons will always refracted out to coupling material before + reaching MPPC +- There are many flexible parameters that the user could specify. + They are under the /WLS directory of help. + + +\section Examplewls_s2 Material Choices + + There are several materials that the user can use for the fiber core, + world and coupling. + +They are: + +- Vacuum (G4_Galactic) +- Air (G4_AIR) +- PMMA, refractive index n = 1.60 +- Pethylene, n = 1.49 +- FPethylene, n = 1.42 +- Polystyrene, n = 1.60 +- Silicone, n = 1.46 + + +\section Examplewls_s3 Photon Source + + This program uses the General Particle Source (G4GeneralParticleSource) + provided by Geant4 for generating particles. The energy of a primary + optical photon must be within the range 2.00 eV to 3.47 eV. + + +\section Examplewls_s4 Hit + + A hit is registered when an optical photon is absorbed on the MPPC + surface. Information stored in a hit includes the local coordinate of the + location the optical photon is absorbed on the MPPC, the global coordinate + where the optical photon left the fiber, the transit time of the optical + photon, and the energy of the optical photon. + + +\section Examplewls_s5 Stepping Action + + The stepping action keeps track of the number of bounces an optical photon has + gone through. In order to prevent infinite loop and extremely skewed + rays taking up computing time, there is a limit of the number of + bounces that an optical photon can go through before it is artificially killed. + The default limit is 100,000. The user can set his/her own limit using + the /stepping/setBounceLimit command. A value of 0 will turn off the + limit. All optical photons artificially killed will have murderee flag turned + on in their UserTrackInformation. + + +\section Examplewls_s6 Visualization + + To visualize particle trajectories, simply use vis.mac macro in + interactive mode or in your own macro. + + +\section Examplewls_s7 main () + + - Execute wls in 'batch' mode from macro files; \n + you can enter an optional integer seed for batch mode +\verbatim +% wls electron.mac (optional: enter an integer seed here) +\endverbatim + + - wls in 'interactive mode' with visualization +\verbatim +% wls +.... +Idle> /control/execute vis.mac +Idle> /run/beamOn 1 +.... +Idle> exit +\endverbatim + +\section Examplewls_s8 Macros provided + + - electron.mac: Sets up the default geometry and configures the particle source. + Primary particle is a 10 MeV electron. + - vis.mac: macro for visualization; called automatically when no macro is + given on command line. + +*/ diff --git a/examples/extended/optical/wls/README b/examples/extended/optical/wls/README new file mode 100644 index 0000000000..5584ff40a1 --- /dev/null +++ b/examples/extended/optical/wls/README @@ -0,0 +1,95 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + WLS + ---------- + + This application simulates the propagation of optical photons inside a +Wave Length Shifting (WLS) fiber. + + +1- Geometry Definition + + The default geometry is as follow: + +- A perfect, bare (or clad), PMMA fiber: 0.5mm radius, 2m length at + center (0,0,0) of the World. +- A circular MPPC with 0.5mm radius at the +z end of the fiber +- World and coupling materials are G4_AIR +- Photons will always refracted out to coupling material before + reaching MPPC +- There are many flexible parameters that the user could specify. + They are under the /WLS directory of help. + + +2- Material Choices + + There are several materials that the user can use for the fiber core, + world and coupling. + +They are: + +- Vacuum (G4_Galactic) +- Air (G4_AIR) +- PMMA, refractive index n = 1.60 +- Pethylene, n = 1.49 +- FPethylene, n = 1.42 +- Polystyrene, n = 1.60 +- Silicone, n = 1.46 + + +3- Photon Source + + This program uses the General Particle Source (G4GeneralParticleSource) + provided by Geant4 for generating particles. The energy of a primary + optical photon must be within the range 2.00 eV to 3.47 eV. + + +4- Hit + + A hit is registered when an optical photon is absorbed on the MPPC + surface. Information stored in a hit includes the local coordinate of the + location the optical photon is absorbed on the MPPC, the global coordinate + where the optical photon left the fiber, the transit time of the optical + photon, and the energy of the optical photon. + + +5- Stepping Action + + The stepping action keeps track of the number of bounces an optical photon has + gone through. In order to prevent infinite loop and extremely skewed + rays taking up computing time, there is a limit of the number of + bounces that an optical photon can go through before it is artificially killed. + The default limit is 100,000. The user can set his/her own limit using + the /stepping/setBounceLimit command. A value of 0 will turn off the + limit. All optical photons artificially killed will have murderee flag turned + on in their UserTrackInformation. + + +6- Visualization + + To visualize particle trajectories, simply use vis.mac macro in + interactive mode or in your own macro. + + +7- main() + + - execute wls in 'batch' mode from macro files + - you can enter an optional integer seed for batch mode + % wls electron.mac (optional: enter an integer seed here) + + - wls in 'interactive mode' with visualization + % wls + .... + Idle> /control/execute + Idle> /run/beamOn 1 + .... + Idle> exit + +8- Macros provided + + - electron.mac: Sets up the geometry and configures the particle source. + Primary particle is a 10 MeV electron. + - vis.mac: macro for visualization; called automatically when no macro is + given on command line. diff --git a/examples/extended/parallel/.README.txt b/examples/extended/parallel/.README.txt new file mode 100644 index 0000000000..1ac2e9abdf --- /dev/null +++ b/examples/extended/parallel/.README.txt @@ -0,0 +1,29 @@ + +///\file "parallel/.README.txt" +///\brief Examples parallel README page + +/*! \page Examples_parallel Category "parallel" + +This directory includes example applications to demonstrate the usage of +different techniques for achieving event parallelism with Geant4. + +- \link Examples_MPI MPI \endlink is a native interface with MPI libraries. + The directory contains + a Geant4 UI library and a couple of parallelized examples. + Using this interface, users applications can be parllelized with + different MPI compliant libraries, such as LAM/MPI, MPICH2, OpenMPI, + and so on. +

+ +- \link Examples_tbb Examples TBB \endlink demonstrate how to + interface a simple application with the Intel Threading Building Blocks + library (TBB), and organise MT event-level parallelism as TBB tasks. +

+ +- TopC examples are Geant4 examples adapted to be run together with + the TOP-C communication layer application on either a cluster of systems + or multi-processor machines. They are based on N02 and N04 examples, + originally provided in novice examples (see more in \ref README_novice) +

+ +*/ diff --git a/examples/extended/parallel/MPI/.README.txt b/examples/extended/parallel/MPI/.README.txt new file mode 100644 index 0000000000..9e006aeccb --- /dev/null +++ b/examples/extended/parallel/MPI/.README.txt @@ -0,0 +1,238 @@ +/// @file "parallel/MPI/.README.txt" +/// @brief Examples MPI README + +/*! \page Examples_MPI Category : parallel/MPI + + +About the interface +=================== +G4MPI is a native interface with MPI libraries. The directory contains +a Geant4 UI library and a couple of parallelized examples. +Using this interface, users applications can be parallelized with +different MPI compliant libraries, such as OpenMPI, MPICH2 and so on. + +System Requirements: +-------------------- + +### MPI Library + +The MPI interface can work with MPI-compliant libraries, +such as Open MPI, MPICH, Intel MPI etc. + +For example, the information about Open MPI can be obtained from +http://www.open-mpi.org/ + +MPI support: +------------ +G4mpi has been tested with the following MPI flavors: + * OpenMPI 1.8.1 + * MPICH 3.2 + * Intel MPI 5.0.1 + +### CMake + +CMake is used to build G4MPI library, that co-works with Geant4 build system. + +### Optional (for exMPI02) + +ROOT for histogramming/analysis + +How to build G4MPI +================== +To build G4MPI library, use CMake on Geant4 library installed with CMake build. + +Follow these commands, + + > mkdir build + > cd build + > cmake -DGeant4_DIR=/lib[64]/Geant4-V.m.n \ + -DCMAKE_INSTALL_PREFIX= \ + /examples/extended/parallel/MPI/source + > make + > make install + +The cmake step will try to guess where MPI is installed, mpi executables should +be in PATH. You can specify CXX and CC environment variables to your specific +mpi wrappers if needed. + +The library and header files will be installed on the installation directory +specified in CMAKE_INSTALL_PREFIX +a CMake configuration file will also be installed +(see examples on how to compile an application using G4mpi) + +How to use +========== + +How to make parallel applications +--------------------------------- + +An example of a main program: + +\verbatim +#include "G4MPImanager.hh" +#include "G4MPIsession.hh" + +int main(int argc,char** argv) +{ + // At first, G4MPImanager/G4MPIsession should be created. + G4MPImanager* g4MPI= new G4MPImanager(argc,argv); + + // MPI session (G4MPIsession) instead of G4UIterminal + G4MPIsession* session= g4MPI-> GetMPIsession(); + + // user application setting + G4RunManager* runManager= new G4RunManager(); + + .... + + // After user application setting, just start a MPI session. + MPIsession treats both interactive and batch modes. + session-> SessionStart(); + + // Finally, terminate the program + delete g4MPI; + delete runManager; +} +``` +\endverbatim + +How to compile +--------------- + +Using cmake, assuming G4mpi library is installed in path _g4mpi-path_ and +Geant4 is installed in _g4-path_: + + > mkdir build + > cd build + > cmake -DGeant4_DIR=/lib[64]/Geant4-V.m.n \ + -DG4mpi_DIR=/lib[64]/G4mpi-V.m.n \ + + > make + +Check provided examples: under examples/extended/parallel/MPI/examples for an +example of CMakeLists.txt file to be used. + +### Notes about session shell + +LAM/MPI users can use "G4tcsh" as an interactive session shell. +For other users (Open MPI/MPICH2), plesae use G4csh (default). + +In case of OpenMPI, *LD_LIBRARY_PATH* for OpenMPI runtime libraries +should be set at run time. Alternatively, you can add this path +to the dynamic linker configuration using `ldconfig`. +(needs sys-admin authorization) + + +MPI runtime Environment +----------------------- +1. Make hosts/cluster configuration of your MPI environment. +2. Launch MPI runtime environment, typically executing + `lamboot` (LAM) / `mpdboot` (MPICH2) / `mpd` (Intel). + +How to run +---------- +For example, + + > mpiexec -n # +

Replace mpicxx with your MPI compiler wrapper if you need to specify which one to use.

+ +Instead, `mpirun` command is more convenient for LAM users. + + +MPI G4UI commands +----------------- +G4UI commands handling the G4MPI interface are placed in /mpi/. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Command directory path : /mpi/ + +Guidance : +MPI control commands + + Sub-directories : + Commands : + verbose * Set verbose level. + status * Show mpi status. + execute * Execute a macro file. (=/control/execute) + beamOn * Start a parallel run w/ thread. + .beamOn * Start a parallel run w/o thread. + masterWeight * Set weight for master node. + showSeeds * Show seeds of MPI nodes. + setMasterSeed * Set a master seed for the seed generator. + setSeed * Set a seed for a specified node. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### Notes: +While "/run/beamOn" and "/mpi/beamOn" commands invoke beam-on in background, +so you can input UI commands even while event processing. Note that drawing +tracks in OpenGL with these commands causes a crash. Please use /mpi/.beamOn +command instead. + +The original "/control/execute" and "/run/beamOn" are overwritten +with "/mpi/execute" and "/mpi/beamOn" commands respectively, +that are customized for the MPI interface. + +Examples +======== +There are a couple of examples for Geant4 MPI applications. + +For using ROOT libraries (exMPI02) + +- *ROOTSYS* : root path of the ROOT package + +\link exMPI01 exMPI01 \endlink + +A simple application. + +**Configuration:** + +- Geometry : chamber / calorimeter +- Primary : particle gun (200 MeV electron as default) +- Physics List : FTFP_BERT + +**Features:** +- Particles are transported in a geometry without any scoring. +- Learn how to parallelized your G4 session. + +\link exMPI02 exMPI02 (ROOT application) \endlink + +An example of dosimetry in a water phantom. +Note: due to limited MT support in ROOT, in this example + MT is disabled, but the code is migrated to MT, ready + for MT when ROOT will support MT. + For an example of MT+MPI take a look at exMPI03 + +**Configuration:** +- Geometry : water phantom +- Primary : broad beam (200 MeV proton) +- Physics List : FTFP_BERT +- Analysis : ROOT histogramming + +**Features:** +- Score dose distribution in a water phantom. +- Learn how to parallelized your applications. +- Create a ROOT file containing histograms/trees in each node. + +\link exMPI03 exMPI03 (merging of histograms via MPI) \endlink + +This example is the same as exMPI02 with the following +differences: +- It uses g4tools instead of ROOT for histogramming +- It shows how to merge, using g4tools, histograms via MPI + so that the entire statistics is accumulated in a single output file +- It also shows how to merge G4Run objects from different ranks and + how to merge scorers +- MT is enabled. + +\link exMPI04 exMPI04 (merging of ntuples via MPI) \endlink + +This example is the same as exMPI03 with added ntuple. +- It uses g4tools for histogramming and ntuples. +- It shows how to merge, using g4tools, ntuples via MPI in sequential mode, + so that the entire statistics is accumulated in a single output file. +- If MT is enabled, the ntuples are merged from threads to + files per ranks. +- Combined MT + MPI merging is not yet supported. +- Merging ntuples is actually supported only with Root output format. + +*/ diff --git a/examples/extended/parallel/MPI/README.md b/examples/extended/parallel/MPI/README.md new file mode 100644 index 0000000000..165010eefd --- /dev/null +++ b/examples/extended/parallel/MPI/README.md @@ -0,0 +1,253 @@ +Geant4 MPI Interface +==================== + +Author: +Koichi Murakami (KEK) / Koichi.Murakami@kek.jp +Andrea Dotti (SLAC) / adotti@slac.stanford.edu + + +About the interface +=================== +G4MPI is a native interface with MPI libraries. The directory contains +a Geant4 UI library and a couple of parallelized examples. +Using this interface, users applications can be parallelized with +different MPI compliant libraries, such as OpenMPI, MPICH2 and so on. + +System Requirements: +-------------------- + +### MPI Library + +The MPI interface can work with MPI-compliant libraries, +such as Open MPI, MPICH, Intel MPI etc. + +For example, the information about Open MPI can be obtained from +http://www.open-mpi.org/ + +MPI support: +------------ +G4mpi has been tested with the following MPI flavors: + * OpenMPI 1.8.1 + * MPICH 3.2 + * Intel MPI 5.0.1 + +### CMake + +CMake is used to build G4MPI library, that co-works with Geant4 build system. + +### Optional (for exMPI02) + +ROOT for histogramming/analysis + +How to build G4MPI +================== +To build G4MPI library, use CMake on Geant4 library installed with CMake build. + +Follow these commands, + + > mkdir build + > cd build + > cmake -DGeant4_DIR=/lib[64]/Geant4-V.m.n \ + -DCMAKE_INSTALL_PREFIX= \ + /examples/extended/parallel/MPI/source + > make + > make install + +The cmake step will try to guess where MPI is installed, mpi executables should +be in PATH. You can specify CXX and CC environment variables to your specific +mpi wrappers if needed. + +The library and header files will be installed on the installation directory +specified in CMAKE_INSTALL_PREFIX +a CMake configuration file will also be installed +(see examples on how to compile an application using G4mpi) + +How to use +========== + +How to make parallel applications +--------------------------------- + +An example of a main program: + +```c++ +#include "G4MPImanager.hh" +#include "G4MPIsession.hh" + +int main(int argc,char** argv) +{ + // At first, G4MPImanager/G4MPIsession should be created. + G4MPImanager* g4MPI= new G4MPImanager(argc,argv); + + // MPI session (G4MPIsession) instead of G4UIterminal + G4MPIsession* session= g4MPI-> GetMPIsession(); + + // user application setting + G4RunManager* runManager= new G4RunManager(); + + .... + + // After user application setting, just start a MPI session. + MPIsession treats both interactive and batch modes. + session-> SessionStart(); + + // Finally, terminate the program + delete g4MPI; + delete runManager; +} +``` + +How to compile +--------------- + +Using cmake, assuming G4mpi library is installed in path _g4mpi-path_ and +Geant4 is installed in _g4-path_: + + > mkdir build + > cd build + > cmake -DGeant4_DIR=/lib[64]/Geant4-V.m.n \ + -DG4mpi_DIR=/lib[64]/G4mpi-V.m.n \ + + > make + +Check provided examples: under examples/extended/parallel/MPI/examples for an +example of CMakeLists.txt file to be used. + +### Notes about session shell + +LAM/MPI users can use "G4tcsh" as an interactive session shell. +For other users (Open MPI/MPICH2), plesae use G4csh (default). + +In case of OpenMPI, *LD_LIBRARY_PATH* for OpenMPI runtime libraries +should be set at run time. Alternatively, you can add this path +to the dynamic linker configuration using `ldconfig`. +(needs sys-admin authorization) + + +MPI runtime Environment +----------------------- +1. Make hosts/cluster configuration of your MPI environment. +2. Launch MPI runtime environment, typically executing + `lamboot` (LAM) / `mpdboot` (MPICH2) / `mpd` (Intel). + +How to run +---------- +For example, + + > mpiexec -n # +

Replace mpicxx with your MPI compiler wrapper if you need to specify which one to use.

+ +Instead, `mpirun` command is more convenient for LAM users. + + +MPI G4UI commands +----------------- +G4UI commands handling the G4MPI interface are placed in /mpi/. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Command directory path : /mpi/ + +Guidance : +MPI control commands + + Sub-directories : + Commands : + verbose * Set verbose level. + status * Show mpi status. + execute * Execute a macro file. (=/control/execute) + beamOn * Start a parallel run w/ thread. + .beamOn * Start a parallel run w/o thread. + masterWeight * Set weight for master node. + showSeeds * Show seeds of MPI nodes. + setMasterSeed * Set a master seed for the seed generator. + setSeed * Set a seed for a specified node. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### Notes: +While "/run/beamOn" and "/mpi/beamOn" commands invoke beam-on in background, +so you can input UI commands even while event processing. Note that drawing +tracks in OpenGL with these commands causes a crash. Please use /mpi/.beamOn +command instead. + +The original "/control/execute" and "/run/beamOn" are overwritten +with "/mpi/execute" and "/mpi/beamOn" commands respectively, +that are customized for the MPI interface. + +Examples +======== +There are a couple of examples for Geant4 MPI applications. + +For using ROOT libraries (exMPI02) + +- *ROOTSYS* : root path of the ROOT package + +exMPI01 +------- +A simple application. + +**Configuration:** + +- Geometry : chamber / calorimeter +- Primary : particle gun (200 MeV electron as default) +- Physics List : FTFP_BERT + +**Features:** +- Particles are transported in a geometry without any scoring. +- Learn how to parallelized your G4 session. + +exMPI02 (ROOT application) +-------------------------- +An example of dosimetry in a water phantom. +Note: due to limited MT support in ROOT, in this example + MT is disabled, but the code is migrated to MT, ready + for MT when ROOT will support MT. + For an example of MT+MPI take a look at exMPI03 + +**Configuration:** +- Geometry : water phantom +- Primary : broad beam (200 MeV proton) +- Physics List : FTFP_BERT +- Analysis : ROOT histogramming + +**Features:** +- Score dose distribution in a water phantom. +- Learn how to parallelized your applications. +- Create a ROOT file containing histograms/trees in each node. + +exMPI03 (merging of histograms via MPI) +--------------------------------------- +This example is the same as exMPI02 with the following +differences: +- It uses Geant4 analysis instead of ROOT for histogramming +- It shows how to merge, using g4tools, histograms via MPI + so that the entire statistics is accumulated in a single output file +- It also shows how to merge G4Run objects from different ranks and + how to merge scorers +- MT is enabled. +- Root output files from application run with `mpiexec -n 3` + - dose-merged.root - merged histograms + - dose-rank0,1,2 - histograms data collected on rank 0, 1,2 before merge + +exMPI04 (merging of ntuples via MPI) +--------------------------------------- +This example is the same as exMPI03 with added ntuple. +- It uses Geant4 analysis for histogramming and ntuples. +- It shows how to merge, using g4tools, ntuples via MPI in sequential mode, + so that the entire statistics is accumulated in a single output file. +- If MT is enabled, the ntuples are merged from threads to + files per ranks. +- Combined MT + MPI merging is not yet supported. +- Merging ntuples is actually supported only with Root output format. + +- Root output files from application run with `mpiexec -n 4` + - Sequential application: + (3 working ranks, 1 rank dedicated for collecting ntuple data) + - dose-merged.root - merged histograms + - dose-rank0,1,2.root - histograms data collected on rank 0 before merge + - dose-rank3 - ntuples merged from ranks 0, 1 and 2 + - MT application: + (4 working ranks) + - dose-merged.root - merged histograms + - dose-rank0, 1, 2, 3.root - histograms data collected on rank N before merge; + ntuples merged on rank N from rank threads + diff --git a/examples/extended/parallel/MPI/ctests-definitions.cmake b/examples/extended/parallel/MPI/ctests-definitions.cmake new file mode 100644 index 0000000000..af182ee230 --- /dev/null +++ b/examples/extended/parallel/MPI/ctests-definitions.cmake @@ -0,0 +1,134 @@ +#Workaround: rely on executables build by cmake since it does not compile +#correctly because FindG4mpi.cmake is not found +find_package(MPI QUIET) +if(NOT MPI_CXX_FOUND) + message(STATUS "G4 Examples: MPI not found --> mpi based tests disabled") + return() +endif() +message(STATUS "G4 Examples: mpi examples will use mpi launcher: " ${MPIEXEC}) + +# Base output dir for MPI examples: +set(G4MPI_CTESTS_BASE_OUTPUT_DIR "${CMAKE_BINARY_DIR}/examples/extended/parallel/MPI") + +# Set G4mpi_DIR fo later pass-down to examples +set(G4mpi_DIR "${G4MPI_CTESTS_BASE_OUTPUT_DIR}/G4mpi") + +# - Build/Test G4mpi +geant4_add_test(mpi-libg4mpi + COMMAND ${CMAKE_COMMAND} -E echo "G4mpi build complete" + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/source + BINARY_DIR ${G4mpi_DIR} + PROJECT libG4mpi + BUILD G4mpi + ENVIRONMENT ${GEANT4_TEST_ENVIRONMENT} + LABELS MPI + ) + +# - Build/Test exMPI01 +# variable to simplify paths +set(G4MPI_EX01_BINDIR ${G4MPI_CTESTS_BASE_OUTPUT_DIR}/exMPI01) + +geant4_add_test(mpi-ex01-sequential + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/examples/exMPI01 + BINARY_DIR ${G4MPI_EX01_BINDIR} + PROJECT exMPI01 + BUILD exMPI01 + COMMAND ${G4MPI_EX01_BINDIR}/exMPI01 run.mac + WORKING_DIRECTORY ${G4MPI_EX01_BINDIR} + ENVIRONMENT ${GEANT4_TEST_ENVIRONMENT} + DEPENDS mpi-libg4mpi + LABELS MPI + ) +# Needs G4mpi +set_property(TEST mpi-ex01-sequential APPEND PROPERTY ENVIRONMENT G4mpi_DIR=${G4mpi_DIR}) + +geant4_add_test(mpi-ex01 + COMMAND ${MPIEXEC} -n 2 ${G4MPI_EX01_BINDIR}/exMPI01 run.mac + WORKING_DIRECTORY ${G4MPI_EX01_BINDIR} + ENVIRONMENT ${GEANT4_TEST_ENVIRONMENT} + DEPENDS mpi-ex01-sequential + LABELS MPI + ) + +# - Build/Test exMPI02 +# Needs ROOT +find_package(ROOT QUIET) +if(ROOT_FOUND) + set(G4MPI_EX02_BINDIR ${G4MPI_CTESTS_BASE_OUTPUT_DIR}/exMPI02) + + geant4_add_test(mpi-ex02-sequential + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/examples/exMPI02 + BINARY_DIR ${G4MPI_EX02_BINDIR} + PROJECT exMPI02 + BUILD exMPI02 + COMMAND ${G4MPI_EX02_BINDIR}/exMPI02 run.mac + WORKING_DIRECTORY ${G4MPI_EX02_BINDIR} + ENVIRONMENT ${GEANT4_TEST_ENVIRONMENT} + DEPENDS mpi-libg4mpi + LABELS MPI + ) + # Needs G4mpi + set_property(TEST mpi-ex02-sequential APPEND PROPERTY ENVIRONMENT G4mpi_DIR=${G4mpi_DIR}) + + geant4_add_test(mpi-ex02 + COMMAND ${MPIEXEC} -n 2 ${G4MPI_EX02_BINDIR}/exMPI02 run.mac + WORKING_DIRECTORY ${G4MPI_EX02_BINDIR} + ENVIRONMENT ${GEANT4_TEST_ENVIRONMENT} + DEPENDS mpi-ex02-sequential + LABELS MPI + ) +else() + message(STATUS "G4 Examples: MPI example exMPI02 disabled: ROOT not found") +endif() + +# - Build/Test exMPI03 +# variable to simplify paths +set(G4MPI_EX03_BINDIR ${G4MPI_CTESTS_BASE_OUTPUT_DIR}/exMPI03) + +geant4_add_test(mpi-ex03-sequential + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/examples/exMPI03 + BINARY_DIR ${G4MPI_EX03_BINDIR} + PROJECT exMPI03 + BUILD exMPI03 + COMMAND ${G4MPI_EX03_BINDIR}/exMPI03 run.mac + WORKING_DIRECTORY ${G4MPI_EX03_BINDIR} + ENVIRONMENT ${GEANT4_TEST_ENVIRONMENT} + DEPENDS mpi-libg4mpi + LABELS MPI + ) +# Needs G4mpi +set_property(TEST mpi-ex03-sequential APPEND PROPERTY ENVIRONMENT G4mpi_DIR=${G4mpi_DIR}) + +geant4_add_test(mpi-ex03 + COMMAND ${MPIEXEC} -n 2 ${G4MPI_EX03_BINDIR}/exMPI03 run.mac + WORKING_DIRECTORY ${G4MPI_EX03_BINDIR} + ENVIRONMENT ${GEANT4_TEST_ENVIRONMENT} + DEPENDS mpi-ex03-sequential + LABELS MPI + ) + +# - Build/Test exMPI04 +# variable to simplify paths +set(G4MPI_EX04_BINDIR ${G4MPI_CTESTS_BASE_OUTPUT_DIR}/exMPI04) + +geant4_add_test(mpi-ex04-sequential + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/examples/exMPI04 + BINARY_DIR ${G4MPI_EX04_BINDIR} + PROJECT exMPI04 + BUILD exMPI04 + COMMAND ${G4MPI_EX04_BINDIR}/exMPI04 run.mac + WORKING_DIRECTORY ${G4MPI_EX04_BINDIR} + ENVIRONMENT ${GEANT4_TEST_ENVIRONMENT} + DEPENDS mpi-libg4mpi + LABELS MPI + ) +# Needs G4mpi +set_property(TEST mpi-ex04-sequential APPEND PROPERTY ENVIRONMENT G4mpi_DIR=${G4mpi_DIR}) + +geant4_add_test(mpi-ex04 + COMMAND ${MPIEXEC} -n 3 ${G4MPI_EX04_BINDIR}/exMPI04 run.mac + WORKING_DIRECTORY ${G4MPI_EX04_BINDIR} + ENVIRONMENT ${GEANT4_TEST_ENVIRONMENT} + DEPENDS mpi-ex04-sequential + LABELS MPI + ) diff --git a/examples/extended/parallel/MPI/examples/exMPI01/.README.txt b/examples/extended/parallel/MPI/examples/exMPI01/.README.txt new file mode 100644 index 0000000000..21ed2bee73 --- /dev/null +++ b/examples/extended/parallel/MPI/examples/exMPI01/.README.txt @@ -0,0 +1,46 @@ +/// @file "MPI/examples/exMPI01/.README.txt" +/// @brief Example exMPI01 README + +/*! \page exMPI01 Example : exMPI01 + + +Description +=========== +A simple application + +### Configuration: + +- Geometry : chamber / calorimeter +- Primary : particle gun (200 MeV electron as default) +- Physics List : FTFP_BERT + +The environment variable *G4LEDATA* for low energy EM data is required. + +### Features: + +- Particles are transported in a geometry without any scoring. +- Learn how to parallelized your G4 session. + + +- - - + +How to build +============ +Use CMake on Geant4 library installed with CMake build. + +This example requires G4mpi library to be installed +(see examples/extended/parallel/MPI/source/REDME.md) + +Follow these commands, + + > mkdir build + > cd build + > cmake -DG4mpi_DIR=/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \ + -DGeant4_DIR=/lib[64]/Geant4-V.m.n + (V.m.n is the version of Geant4, eg. Geant4-9.6.0) + > make + > make install + +Replace mpicxx with your MPI-compiler wrapper. + +*/ diff --git a/examples/extended/parallel/MPI/examples/exMPI01/README.html b/examples/extended/parallel/MPI/examples/exMPI01/README.html new file mode 100644 index 0000000000..30caaf0056 --- /dev/null +++ b/examples/extended/parallel/MPI/examples/exMPI01/README.html @@ -0,0 +1,245 @@ + + + + + + + + +

MPI/Examples : exMPI01

+ +

Description

+ +

A simple application

+ +

Configuration:

+ +
    +
  • Geometry : chamber / calorimeter
  • +
  • Primary : particle gun (200 MeV electron as default)
  • +
  • Physics List : FTFP_BERT
  • +
+ +

Features:

+ +
    +
  • Particles are transported in a geometry without any scoring.
  • +
  • Learn how to parallelized your G4 session.
  • +
+ +

How to build

+ +

Use CMake on Geant4 library installed with CMake build.

+ +

This example requires G4mpi library to be installed +(see examples/extended/parallel/MPI/source/REDME.md)

+ +

Follow these commands,

+ + +
> mkdir build
+> cd build
+> cmake -DG4mpi_DIR=<where-G4mpi-wasintalled >/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \
+     -DGeant4_DIR=<your Geant4 install path
+>/lib[64]/Geant4-V.m.n <path-to-source><
+      (V.m.n is the version of Geant4, eg. Geant4-9.6.0)
+> make<
+> make install
+
+ + + \ No newline at end of file diff --git a/examples/extended/parallel/MPI/examples/exMPI01/README.md b/examples/extended/parallel/MPI/examples/exMPI01/README.md new file mode 100644 index 0000000000..b0f3cd261c --- /dev/null +++ b/examples/extended/parallel/MPI/examples/exMPI01/README.md @@ -0,0 +1,37 @@ +MPI/Examples : exMPI01 +====================== + +Description +----------- +A simple application + +### Configuration: + +- Geometry : chamber / calorimeter +- Primary : particle gun (200 MeV electron as default) +- Physics List : FTFP_BERT + +### Features: + +- Particles are transported in a geometry without any scoring. +- Learn how to parallelized your G4 session. + + +How to build +------------ +Use CMake on Geant4 library installed with CMake build. + +This example requires G4mpi library to be installed +(see examples/extended/parallel/MPI/source/REDME.md) + +Follow these commands, + + > mkdir build + > cd build + > cmake -DG4mpi_DIR=/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \ + -DGeant4_DIR=/lib[64]/Geant4-V.m.n + (V.m.n is the version of Geant4, eg. Geant4-9.6.0) + > make + > make install + +Replace mpicxx with your MPI-compiler wrapper. diff --git a/examples/extended/parallel/MPI/examples/exMPI02/.README.txt b/examples/extended/parallel/MPI/examples/exMPI02/.README.txt new file mode 100644 index 0000000000..5ec7ee61e8 --- /dev/null +++ b/examples/extended/parallel/MPI/examples/exMPI02/.README.txt @@ -0,0 +1,50 @@ +/// @file "MPI/examples/exMPI02/.README.txt" +/// @brief Example exMPI02 README + +/*! \page exMPI02 Example : exMPI02 + + +Description +=========== +An example of dosimetry in a water phantom. + +### Configuration: +- Geometry : water phantom +- Primary : broad beam (200 MeV proton) +- Physics List : FTFP_BERT +- Analysis : ROOT histogramming + +The environment variables, *G4LEDATA*, *G4LEVELGAMMADATA* and *G4SAIDXSDATA* +are required for data files. + +The enviromnet variable, *ROOTSYS*, is set to the root path of the ROOT package. + +### Features: +- Score dose distribution in a water phantom. +- Learn how to paralleized your applications. +- Create a ROOT file containing histograms/trees in each node. + Each slave node generate a ROOT file, whose file name is different + from each other. + +- - - + +How to build +============ +Use CMake on Geant4 library installed with CMake build. + +This example requires G4mpi library to be installed +(see examples/extended/parallel/MPI/source/REDME.md) + +Follow these commands, + + > mkdir build + > cd build + > cmake -DG4mpi_DIR=/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \ + -DGeant4_DIR=/lib[64]/Geant4-V.m.n + (V.m.n is the version of Geant4, eg. Geant4-9.6.0) + > make + > make install + +Replace mpicxx with your MPI-compiler wrapper. + +*/ diff --git a/examples/extended/parallel/MPI/examples/exMPI02/README.html b/examples/extended/parallel/MPI/examples/exMPI02/README.html new file mode 100644 index 0000000000..7ae30e0b7a --- /dev/null +++ b/examples/extended/parallel/MPI/examples/exMPI02/README.html @@ -0,0 +1,246 @@ + + + + + + + + +

MPI/Examples : exMPI02

+ +

Description

+ +

An example of dosimetry in a water phantom.

+ +

Configuration:

+ +
    +
  • Geometry : water phantom
  • +
  • Primary : broad beam (200 MeV proton)
  • +
  • Physics List : FTFP_BERT
  • +
  • Analysis : ROOT histogramming
  • +
+ +

The environment variables, G4LEDATA, G4LEVELGAMMADATA and G4SAIDXSDATA +are required for data files.

+ +

The enviromnet variable, ROOTSYS, is set to the root path of the ROOT package.

+ +

Features:

+ +
    +
  • Score dose distribution in a water phantom.
  • +
  • Learn how to paralleized your applications.
  • +
  • Create a ROOT file containing histograms/trees in each node. +Each slave node generate a ROOT file, whose file name is different +from each other.
  • +
+ +

How to build

+ +

Use CMake on Geant4 library installed with CMake build.

+ +

This example requires G4mpi library to be installed +(see examples/extended/parallel/MPI/source/REDME.md)

+ +

Follow these commands,

+ + +
> mkdir build
+> cd build
+> cmake -DG4mpi_DIR=<where-G4mpi-wasintalled >/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \
+     -DGeant4_DIR=<your Geant4 install path
+>/lib[64]/Geant4-V.m.n <path-to-source><
+      (V.m.n is the version of Geant4, eg. Geant4-9.6.0)
+> make<
+> make install
+
+ + + + \ No newline at end of file diff --git a/examples/extended/parallel/MPI/examples/exMPI02/README.md b/examples/extended/parallel/MPI/examples/exMPI02/README.md new file mode 100644 index 0000000000..535b7935c7 --- /dev/null +++ b/examples/extended/parallel/MPI/examples/exMPI02/README.md @@ -0,0 +1,44 @@ +MPI/Examples : exMPI02 +====================== + +Description +----------- +An example of dosimetry in a water phantom. + +### Configuration: +- Geometry : water phantom +- Primary : broad beam (200 MeV proton) +- Physics List : FTFP_BERT +- Analysis : ROOT histogramming + +The environment variables, *G4LEDATA*, *G4LEVELGAMMADATA* and *G4SAIDXSDATA* +are required for data files. + +The enviromnet variable, *ROOTSYS*, is set to the root path of the ROOT package. + +### Features: +- Score dose distribution in a water phantom. +- Learn how to paralleized your applications. +- Create a ROOT file containing histograms/trees in each node. + Each slave node generate a ROOT file, whose file name is different + from each other. + + +How to build +------------ +Use CMake on Geant4 library installed with CMake build. + +This example requires G4mpi library to be installed +(see examples/extended/parallel/MPI/source/REDME.md) + +Follow these commands, + + > mkdir build + > cd build + > cmake -DG4mpi_DIR=/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \ + -DGeant4_DIR=/lib[64]/Geant4-V.m.n + (V.m.n is the version of Geant4, eg. Geant4-9.6.0) + > make + > make install + +Replace mpicxx with your MPI-compiler wrapper. diff --git a/examples/extended/parallel/MPI/examples/exMPI03/.README.txt b/examples/extended/parallel/MPI/examples/exMPI03/.README.txt new file mode 100644 index 0000000000..c128ea26e6 --- /dev/null +++ b/examples/extended/parallel/MPI/examples/exMPI03/.README.txt @@ -0,0 +1,59 @@ +/// @file "MPI/examples/exMPI03/.README.txt" +/// @brief Example exMPI03 README + +/*! \page exMPI03 Example : exMPI03 + + +Description +=========== +An example of dosimetry in a water phantom. +The example has same geometry and physics as exMPI02, only the analysis part +is diffenrent. + +### Configuration: +- Geometry : water phantom +- Primary : broad beam (200 MeV proton) +- Physics List : FTFP_BERT +- Analysis : g4tools histogramming + +The environment variables, *G4LEDATA*, *G4LEVELGAMMADATA* and *G4SAIDXSDATA* +are required for data files. + +### Features: +- Score dose distribution in a water phantom. +- Learn how to paralleized your applications. +- Create a ROOT file containing histograms/trees in each node. + Each slave node generate a ROOT file, whose file name is different + from each other. +- MT is enabled. +- One of each object supported by g4tools is instantiated: 1D, 2D and 3D + histograms and 1D and 2D profiles. +- Histograms and profiles are merged first among threads of the same + MPI-rank and then across MPI-ranks. See RunActionMaster class for + an example on how to use the mergers. +- G4Run object and scorers (command line ones) are also merged via + MPI. +- Output: several root files are created: dose-rank*.root thread-merged + histograms for each rank; dose-merged.root, merged across threads and + across ranks. + +How to build +============ +Use CMake on Geant4 library installed with CMake build. + +This example requires G4mpi library to be installed +(see examples/extended/parallel/MPI/source/REDME.md) + +Follow these commands, + + > mkdir build + > cd build + > cmake -DG4mpi_DIR=/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \ + -DGeant4_DIR=/lib[64]/Geant4-V.m.n + (V.m.n is the version of Geant4, eg. Geant4-9.6.0) + > make + > make install + +Replace mpicxx with your MPI-compiler wrapper. + +*/ diff --git a/examples/extended/parallel/MPI/examples/exMPI03/README.html b/examples/extended/parallel/MPI/examples/exMPI03/README.html new file mode 100644 index 0000000000..8cfda85d69 --- /dev/null +++ b/examples/extended/parallel/MPI/examples/exMPI03/README.html @@ -0,0 +1,255 @@ + + + + + + + + +

MPI/Examples : exMPI03

+ +

Description

+ +

An example of dosimetry in a water phantom.

+ +

Configuration:

+ +
    +
  • Geometry : water phantom
  • +
  • Primary : broad beam (200 MeV proton)
  • +
  • Physics List : FTFP_BERT
  • +
  • Analysis : g4tools histogramming
  • +
+ +

The environment variables, G4LEDATA, G4LEVELGAMMADATA and G4SAIDXSDATA +are required for data files.

+ +

Features:

+ +
    +
  • Score dose distribution in a water phantom.
  • +
  • Learn how to paralleized your applications.
  • +
  • Create a ROOT file containing histograms/trees in each node. +Each slave node generate a ROOT file, whose file name is different +from each other.
  • +
  • MT is enabled.
  • +
  • One of each object supported by g4tools is instantiated: 1D, 2D and 3D + histograms and 1D and 2D profiles.
  • +
  • Histograms and profiles are merged first among threads of the same + MPI-rank and then across MPI-ranks. See RunActionMaster class for + an example on how to use the mergers.
  • +
  • G4Run object and scorers (command line ones) are also merged via + MPI.
  • +
  • Output: several root files are created: dose-rank*.root thread-merged + histograms for each rank; dose-merged.root, merged across threads and + across ranks.
  • +
+ +

How to build

+ +

Use CMake on Geant4 library installed with CMake build.

+ +

This example requires G4mpi library to be installed +(see examples/extended/parallel/MPI/source/REDME.md)

+ +

Follow these commands,

+ + +
> mkdir build
+> cd build
+> cmake -DG4mpi_DIR=<where-G4mpi-wasintalled >/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \
+     -DGeant4_DIR=<your Geant4 install path
+>/lib[64]/Geant4-V.m.n <path-to-source><
+      (V.m.n is the version of Geant4, eg. Geant4-9.6.0)
+> make<
+> make install
+
+ + + + diff --git a/examples/extended/parallel/MPI/examples/exMPI03/README.md b/examples/extended/parallel/MPI/examples/exMPI03/README.md new file mode 100644 index 0000000000..e8867a9cb6 --- /dev/null +++ b/examples/extended/parallel/MPI/examples/exMPI03/README.md @@ -0,0 +1,54 @@ +MPI/Examples : exMPI03 +====================== + +Description +----------- +An example of dosimetry in a water phantom. +The example has same geometry and physics as exMPI02, only the analysis part +is different. + +### Configuration: +- Geometry : water phantom +- Primary : broad beam (200 MeV proton) +- Physics List : FTFP_BERT +- Analysis : g4tools histogramming + +The environment variables, *G4LEDATA*, *G4LEVELGAMMADATA* and *G4SAIDXSDATA* +are required for data files. + +### Features: +- Score dose distribution in a water phantom. +- Learn how to paralleized your applications. +- Create a ROOT file containing histograms/trees in each node. + Each slave node generate a ROOT file, whose file name is different + from each other. +- MT is enabled. +- One of each object supported by g4tools is instantiated: 1D, 2D and 3D + histograms and 1D and 2D profiles. +- Histograms and profiles are merged first among threads of the same + MPI-rank and then across MPI-ranks. See RunActionMaster class for + an example on how to use the mergers. +- G4Run object and scorers (command line ones) are also merged via + MPI. +- Output: several root files are created: dose-rank*.root thread-merged + histograms for each rank; dose-merged.root, merged across threads and + across ranks. + +How to build +------------ +Use CMake on Geant4 library installed with CMake build. + +This example requires G4mpi library to be installed +(see examples/extended/parallel/MPI/source/REDME.md) + +Follow these commands, + + > mkdir build + > cd build + > cmake -DG4mpi_DIR=/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \ + -DGeant4_DIR=/lib[64]/Geant4-V.m.n + (V.m.n is the version of Geant4, eg. Geant4-9.6.0) + > make + > make install + +Replace mpicxx with your MPI-compiler wrapper. diff --git a/examples/extended/parallel/MPI/examples/exMPI04/.README.txt b/examples/extended/parallel/MPI/examples/exMPI04/.README.txt new file mode 100644 index 0000000000..b3e55b17d0 --- /dev/null +++ b/examples/extended/parallel/MPI/examples/exMPI04/.README.txt @@ -0,0 +1,58 @@ +/// @file "MPI/examples/exMPI04/.README.txt" +/// @brief Example exMPI04 README + +/*! \page exMPI04 Example : exMPI04 + + +Description +=========== +An example of dosimetry in a water phantom. +The example is as exMPI03, but adds output in G4analysis ntuple +and demonstrates ntuple merging. + +In difference from merging other data (G4Run, scorers, hitograms), +the ntuple data are not sent to the collecting rank(s) at the +end of run but during event processing. That's why (an) extra rank(s) +have to be reserved for this purpose. The number of extra workers requested +is set in G4MPImanager constructor in main(). While G4MPImanager +can be created with any number of extra workers (< total number), +the ntuple merging is at present supported only for one. + +The extra worker is connected to the run action class via G4MPIextraWorker +object which is set to G4MPImanager in main(). +The standard calls to G4AnalysisManager (creating ntuple, open, write and +close file) trigger creating all necessary analysis tools object +for merging ntuple data on flight. + +MPI ntuple merging can be activated in sequential mode only; +this activation is perfomed by creating the G4MPIntupleMerger +object in the RunActionMaster constructor. +The merger must be created before creating G4AnalysisManager +(= the first call to G4AnalysisManager::Instance()) +and deleted only at the end of program. + +If multithreading mode is enabled, the ntuples are merged from +threads to files per ranks. +Combined MT + MPI merging is not yet supported. +Merging ntuples is actually supported only with Root output format. + +How to build +============ +Use CMake on Geant4 library installed with CMake build. + +This example requires G4mpi library to be installed +(see examples/extended/parallel/MPI/source/REDME.md) + +Follow these commands, + + > mkdir build + > cd build + > cmake -DG4mpi_DIR=/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \ + -DGeant4_DIR=/lib[64]/Geant4-V.m.n + (V.m.n is the version of Geant4, eg. Geant4-9.6.0) + > make + > make install + +Replace mpicxx with your MPI-compiler wrapper. + +*/ diff --git a/examples/extended/parallel/MPI/examples/exMPI04/README.md b/examples/extended/parallel/MPI/examples/exMPI04/README.md new file mode 100644 index 0000000000..96ba27a1a4 --- /dev/null +++ b/examples/extended/parallel/MPI/examples/exMPI04/README.md @@ -0,0 +1,53 @@ +MPI/Examples : exMPI04 +====================== + +Description +----------- +An example of dosimetry in a water phantom. +The example is as exMPI03, but adds output in G4analysis ntuple +and demonstrates ntuple merging. + +In difference from merging other data (G4Run, scorers, hitograms), +the ntuple data are not sent to the collecting rank(s) at the +end of run but during event processing. That's why (an) extra rank(s) +have to be reserved for this purpose. The number of extra workers requested +is set in G4MPImanager constructor in main(). While G4MPImanager +can be created with any number of extra workers (< total number), +the ntuple merging is at present supported only for one. + +The extra worker is connected to the run action class via G4MPIextraWorker +object which is set to G4MPImanager in main(). +The standard calls to G4AnalysisManager (creating ntuple, open, write and +close file) trigger creating all necessary analysis tools object +for merging ntuple data on flight. + +MPI ntuple merging can be activated in sequential mode only; +this activation is perfomed by creating the G4MPIntupleMerger +object in the RunActionMaster constructor. +The merger must be created before creating G4AnalysisManager +(= the first call to G4AnalysisManager::Instance()) +and deleted only at the end of program. + +If multithreading mode is enabled, the ntuples are merged from +threads to files per ranks. +Combined MT + MPI merging is not yet supported. +Merging ntuples is actually supported only with Root output format. + +How to build +------------ +Use CMake on Geant4 library installed with CMake build. + +This example requires G4mpi library to be installed +(see examples/extended/parallel/MPI/source/REDME.md) + +Follow these commands, + + > mkdir build + > cd build + > cmake -DG4mpi_DIR=/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \ + -DGeant4_DIR=/lib[64]/Geant4-V.m.n + (V.m.n is the version of Geant4, eg. Geant4-9.6.0) + > make + > make install + +Replace mpicxx with your MPI-compiler wrapper. diff --git a/examples/extended/parallel/README b/examples/extended/parallel/README new file mode 100644 index 0000000000..1666e62a2a --- /dev/null +++ b/examples/extended/parallel/README @@ -0,0 +1,21 @@ + + Examples for event parallelism + ------------------------------ + +This directory includes example applications to demonstrate the usage of +different techniques for achieving event parallelism with Geant4. + +- MPI is a native interface with MPI libraries. The directory contains + a Geant4 UI library and a couple of parallelized examples. + Using this interface, users applications can be parllelized with + different MPI compliant libraries, such as LAM/MPI, MPICH2, OpenMPI, + and so on. + +- Example TBB is derived from original basic/B2 demonstrating how to + interface a simple application with the Intel Threading Building Blocks + library (TBB), and organise MT event-level parallelism as TBB tasks. + +- TopC examples are Geant4 examples adapted to be run together with + the TOP-C communication layer application on either a cluster of systems + or multi-processor machines. They are based on N02 and N04 examples, + originally provided in novice examples (see more in example/README) diff --git a/examples/extended/parallel/TBB/.README.txt b/examples/extended/parallel/TBB/.README.txt new file mode 100644 index 0000000000..904a7bd1f9 --- /dev/null +++ b/examples/extended/parallel/TBB/.README.txt @@ -0,0 +1,27 @@ + +///\file "parallel/TBB/.README.txt" +///\brief Examples TBB README page + +/*! \page Examples_tbb Category "parallel/TBB" + + +TBB directory shows how to integrate Intel Threading Building Block and Geant4 +to achieve event-level parallelism. + +\link ExampleTBB_B2b TBB/B2b \endlink + +Currently only a preliminary version of one example is provided: it replaces +the Geant4 Version 10.0 event-loop parallelism based on pthreads with TBB +task-based parallelism. It should not be considered a feature-complete example +and it present some limitations (no merging of output, no correct clean-up of +heap). + +It will be substantially improved in the future. +If you have interest in TBB please +refer to Geant4 Multi-threading user-forum (reachable from Geant4 website) +where updates on TBB will be communicated or contact example author at: +adotti@slac.stanford.edu. + +*/ + + diff --git a/examples/extended/parallel/TBB/B2b/.README.txt b/examples/extended/parallel/TBB/B2b/.README.txt new file mode 100644 index 0000000000..1584b2fee2 --- /dev/null +++ b/examples/extended/parallel/TBB/B2b/.README.txt @@ -0,0 +1,51 @@ + +///\file "parallel/TBB/B2b/.README.txt" +///\brief Example TBB/B2b README page + +/*! \page ExampleTBB_B2b Example TBB/B2b + +This example shows how to integrate Intel Threading Building Block and Geant4 +to achieve event-level parallelism. + + +Note that this is a preliminary version which should not be considered a +feature-complete example and which presents some limitations (no merging of +output, no correct clean-up of heap). It will be substantially improved +in 2014. + + +This example adds to B2b example, originally provided in basic example, +the TBB based classes: + +\section TBB_B2b_s1 tbbMasterRunManager + +tbbMasterRunManager class implements the master model run manager for TBB bases +application. + +It is instantiated by user main (or equivalent function) instead +of G4[MT]RunManager. It controls the creation of tbb::tasks. +See G4MTRunManager for documentation of methods relative to base +class. Only class specific methods are documented here. + +\section TBB_B2b_s2 tbbWorkerRunManager + +tbbWorkerRunManager class implements the worker model run manager for TBB based +application. + +It is instantiated by tbbUserWorkerInitialization and used by +tbbMasterRunManager. +See G4WorkerRunManager for documentation of methods relative to +base class. Only class specific methods are documented here. + +\section TBB_B2b_s3 tbbUserWorkerInitialization + +tbbUserWorkerInitialization class implements TBB specific worker initialization. +It is a sub-class of G4UserWorkerThreadInitialization. +Its role is to instantiate a tbbWorkerRunManager to be used by +tbb tasks. + +\section TBB_B2b_s4 tbbTask + +tbbTask class represents one TBB task. + +*/ diff --git a/examples/extended/parallel/TBB/B2b/README b/examples/extended/parallel/TBB/B2b/README new file mode 100644 index 0000000000..59474b35d0 --- /dev/null +++ b/examples/extended/parallel/TBB/B2b/README @@ -0,0 +1,47 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TBB/B2b + -------- + +This example shows how to integrate Intel Threading Building Block and Geant4 +to achieve event-level parallelism. + +Note that this is a preliminary version which should not be considered a +feature-complete example and which presents some limitations (no merging of +output, no correct clean-up of heap). It will be substantially improved +in 2014. + +This example adds to B2b example, originally provided in basic example, +the TBB based classes: + +tbbMasterRunManager: +-------------------- +This class implements the master model run manager for TBB bases +application. +It is instantiated by user main (or equivalent function) instead +of G4[MT]RunManager. It controls the creation of tbb::tasks. +See G4MTRunManager for documentation of methods relative to base +class. Only class specific methods are documented here. + +tbbWorkerRunManager +-------------------- +This class implements the worker model run manager for TBB based +application. +It is instantiated by tbbUserWorkerInitialization and used by +tbbMasterRunManager. +See G4WorkerRunManager for documentation of methods relative to +base class. Only class specific methods are documented here. + +tbbUserWorkerInitialization +--------------------------- +This class implements TBB specific worker initialization. +It is a sub-class of G4UserWorkerThreadInitialization. +Its role is to instantiate a tbbWorkerRunManager to be used by +tbb tasks. + +tbbTask +--------------------------- +This class represents one TBB task. diff --git a/examples/extended/parallel/TBB/README b/examples/extended/parallel/TBB/README new file mode 100644 index 0000000000..408869a95a --- /dev/null +++ b/examples/extended/parallel/TBB/README @@ -0,0 +1,22 @@ + + Geant4 extended examples - TBB + -------------------------------- + +TBB directory shows how to integrate Intel Threading Building Block and Geant4 +to achieve event-level parallelism. + +TBB/B2b + +Currently only a preliminary version of one example is provided: it replaces +the Geant4 Version 10.0 event-loop parallelism based on pthreads with TBB +task-based parallelism. It should not be considered a feature-complete example +and it present some limitations (no merging of output, no correct clean-up of +heap). + +It will be substantially improved in the future. +If you have interest in TBB please +refer to Geant4 Multi-threading user-forum (reachable from Geant4 website) +where updates on TBB will be communicated or contact example author at: +adotti@slac.stanford.edu. + + diff --git a/examples/extended/parallel/ThreadsafeScorers/.README.txt b/examples/extended/parallel/ThreadsafeScorers/.README.txt new file mode 100644 index 0000000000..9ea7f5f43a --- /dev/null +++ b/examples/extended/parallel/ThreadsafeScorers/.README.txt @@ -0,0 +1,202 @@ + +///\file "parallel/ThreadsafeScorers/.README.txt" +///\brief Threadsafe Scorers README page + +/*! \page ExampleThreadsafeScorers Example ThreadsafeScorers + + This example demonstrates a very simple application where an energy + deposit and # of steps is accounted in thread-local (i.e. one instance per + thread) hits maps with underlying types of plain-old data (POD) and global + (i.e. one instance) hits maps with underlying types of atomics. + The example uses a coarse mesh, extensive physics, and step limiters + to ensure that there is a higher degree of conflict between threads + when updating the scorers to test the robustness of the atomics + classes and maximize the compounding of thread-local round-off error. + + At the end of the simulation, the scorers are printed to + "mfd__.out", where DATA_TYPE is either + "tl" (thread-local) or "tg" (thread-global) and SCORER_TYPE is "EnergyDeposit" + or "NumberOfSteps". These values are then compared to a thread-global + sum of these scorers that were updated via mutex locking. If round-off + errors in thread-local EnergyDeposit are present, they can be viewed + in "mfd_diff.out" at the end of the simulation + + This example also provides a demonstration of the timemory (a performance + instrumentation toolkit) package provided in Geant4 -- for documentation of timemory + see https://github.com/NERSC/timemory and https://timemory.readthedocs.io. + +\section ThreadsafeScorers_s1 ATOMICS and the ATOMIC SCORERS + + atomics can ONLY handle plain-old data (POD) types, e.g. int, double, etc. + The implementation of atomics in compiler-dependent. At the very worst, + the performance of an atomic is the same mutex locking. + Atomics, in general, are not copy-constructable. This has to do with + thread safety (e.g. making a copy while another thread tries to update) + This is why atomics cannot be used in STL containers. The implementation + in atomic.hh has limited copy-construction and still cannot be used in + STL containers. Use these copy-constructors with extreme caution. See + opening comments of G4atomic.hh for more details. + + The newly provided classes in this example (G4atomic, G4TAtomicHitsMap, and + G4TAtomicHitsCollection) are intended for applications where memory is a + greater concern than performance. While atomics generally perform better than + mutex locking, the synchronization is not without a cost. However, since + the memory consumed by thread-local hits maps scales roughly linearly + with the number of threads, simulations with a large number of scoring + volumes can decrease simulation time by increasing the number of threads + beyond what was previously allowed due to the increase in memory consumption. + *************************************************************************** + *** These classes are intended to be included in the Geant4 source code *** + *** release next year *** + *************************************************************************** + + The G4TAtomicHitsMap and G4TAtomicHitsCollection work exactly the same way + as the standard G4THitsMap and G4THitsCollection, respectively, with the + exception(s) that you should only implement one instance and provide a + pointer/reference of that instance to the threads instead of having the + threads create them. Additionally, there is no need to include them + in the G4Run::Merge(). + +\section ThreadsafeScorers_s2 GEOMETRY DEFINITION + + The geometry is constructed in the TSDetectorConstruction class. + The setup consists of a box filling the world. The volume is divided into + subregions, where the outermost boxes are a different material. The materials + by default are water and boron as these have large scattering cross-sections + for neutrons (the default particle). + +\section ThreadsafeScorers_s3 PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set are built from a variety of physics constructors. + The chosen physics lists are extensive, primarily + The constructors are: + + - G4EmStandardPhysics_option4 + - G4DecayPhysics + - G4RadioactiveDecayPhysics + - G4HadronPhysicsQGSP_BERT_HP + - G4HadronElasticPhysicsHP + - G4StepLimiterPhysics + - G4IonElasticPhysics + - G4IonBinaryCascadePhysics + +\section ThreadsafeScorers_s4 ACTION INITALIZATION + + TSActionInitialization, instantiates and registers to Geant4 kernel + all user action classes. + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + TSActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + TSActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + +\section ThreadsafeScorers_s5 PRIMARY GENERATOR + + The primary generator is defined in the TSPrimaryGeneratorAction class. + The default kinematics is a 1 MeV neutron, randomly distributed in front + of the target across 100% of the transverse (X,Y) target size. + This default setting can be changed via the Geant4 built-in commands + of the G4ParticleGun class. + +\section ThreadsafeScorers_s6 DETECTOR RESPONSE + + This example demonstrates a scoring implemented + in the user action classes and TSRun object. + + The energy deposited is collected per event in the PrimitiveScorer + G4PSEnergyDeposit (as part of a MultiFunctionalDetector) + and the thread-local version are merged at the end of the run. + + The number of steps is collected per event in the PrimativeScorer + G4PSNoOfSteps and the thread-local version are merged at the end of the run. + + When the MFD is recording an event i.e. TSRun::RecordEvent(const G4Event*), + the global atomic hits map adds the same hits collections + + In multi-threading mode the energy accumulated in TSRun MFD object per + workers is merged to the master in TSRun::Merge(). + + Scoring is accumulated with thread-local doubles, thread-global atomics, + mutex-locking, G4StatAnalysis, and G4ConvergenceTester + + TSRun contains five hits collections types: + 1) a thread-local hits map, + 2) a global atomic hits map + 3) a global "mutex" hits map + 4) a global G4StatAnalysis hits deque + 5) a global G4ConvergenceTester hits deque + + The thread-local hits map is the same as you will find in many other + examples. + + The atomics hits map is the purpose of this example. Code-wise, the + implementation looks extremely similar to the thread-local version with + 3 primary exceptions: + (1) construction - there should only be one instance so it should be a + static member variable or a pointer/reference to a single instance + (2) It does not need to, nor should be, summed in G4Run::Merge() + (3) destruction -- it should only be cleared by the master thread since + there is only one instance. + + The "mutex" hits map is also included as reference for checking the results + accumulated by the thread-local hits maps and atomic hits maps. The + differences w.r.t. this hits maps are computed in + TSRunAction::EndOfRunAction + + The "G4StatAnalysis" and "G4ConvergenceTester" hits deques are + memory-efficient version of the standard G4THitsMap. While maps are + ideal for scoring at the G4Event-level, where sparsity w.r.t. indices + is common; at the G4Run-level, these data structures require much + less memory overhead. Due to a lack of + G4ConvergenceTester::operator+=(G4ConvergenceTester), the static version + of G4ConvergenceTester is the only valid way to use G4ConvergenceTester + in a scoring container. This is not the case for G4StatAnalysis, which + can be used in lieu of G4double. + +\section ThreadsafeScorers_s7 HOW TO RUN + + - Execute ts_scorers in the 'interactive mode' with visualization: + + % ./ts_scorers + + and type in the commands from run.mac line by line: + + Idle> /control/verbose 2 + Idle> /tracking/verbose 1 + Idle> /run/beamOn 10 + Idle> ... + Idle> exit + + or + + Idle> /control/execute run.mac + .... + Idle> exit + + - Execute ts_scorers in the 'batch' mode from macro files + (without visualization) + + % ./ts_scorers run.mac + % ./ts_scorers run.mac > run.out + +\section ThreadsafeScorers_s8 TIMEMORY USAGE + + This example demonstrates profiling analysis with timemory + (https://github.com/NERSC/timemory). + + - Compile Geant4 with timemory (-DGEANT4_USE_TIMEMORY=ON) + - timemory provide timing within the Geant4 source code + and within the example (TSRun::RecordEvent) + - Analysis is echoed to stdout and generates several output + files in a folder based on the name of the executable. In + general that folder will be "timemory-{name of executable}-output" + +*/ + diff --git a/examples/extended/parallel/ThreadsafeScorers/README b/examples/extended/parallel/ThreadsafeScorers/README new file mode 100644 index 0000000000..f66fe2c8d7 --- /dev/null +++ b/examples/extended/parallel/ThreadsafeScorers/README @@ -0,0 +1,188 @@ + +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example ThreadsafeScorers + ---------------------------- + + This example demonstrates a very simple application where an energy + deposit and # of steps is accounted in thread-local (i.e. one instance per + thread) hits maps with underlying types of plain-old data (POD) and global + (i.e. one instance) hits maps with underlying types of atomics. + The example uses a coarse mesh, extensive physics, and step limiters + to ensure that there is a higher degree of conflict between threads + when updating the scorers to test the robustness of the atomics + classes and maximize the compounding of thread-local round-off error. + At the end of the simulation, the scorers are printed to + "mfd__.out", where DATA_TYPE is either + "tl" (thread-local) or "tg" (thread-global) and SCORER_TYPE is "EnergyDeposit" + or "NumberOfSteps". These values are then compared to a thread-global + sum of these scorers that were updated via mutex locking. If round-off + errors in thread-local EnergyDeposit are present, they can be viewed + in "mfd_diff.out" at the end of the simulation + This example also provides a demonstration of the timemory (a performance + instrumentation toolkit) package provided in Geant4 -- for documentation of timemory + see https://github.com/NERSC/timemory and https://timemory.readthedocs.io. + + 1- ATOMICS and the ATOMIC SCORERS + + atomics can ONLY handle plain-old data (POD) types, e.g. int, double, etc. + The implementation of atomics in compiler-dependent. At the very worst, + the performance of an atomic is the same mutex locking. + Atomics, in general, are not copy-constructable. This has to do with + thread safety (e.g. making a copy while another thread tries to update) + This is why atomics cannot be used in STL containers. The implementation + in atomic.hh has limited copy-construction and still cannot be used in + STL containers. Use these copy-constructors with extreme caution. See + opening comments of G4atomic.hh for more details. + + The newly provided classes in this example (G4atomic, G4TAtomicHitsMap, and + G4TAtomicHitsCollection) are intended for applications where memory is a + greater concern than performance. While atomics generally perform better than + mutex locking, the synchronization is not without a cost. However, since + the memory consumed by thread-local hits maps scales roughly linearly + with the number of threads, simulations with a large number of scoring + volumes can decrease simulation time by increasing the number of threads + beyond what was previously allowed due to the increase in memory consumption. + + The G4TAtomicHitsMap and G4TAtomicHitsCollection work exactly the same way + as the standard G4THitsMap and G4THitsCollection, respectively, with the + exception(s) that you should only implement one instance and provide a + pointer/reference of that instance to the threads instead of having the + threads create them. Additionally, there is no need to include them + in the G4Run::Merge(). + + 2- GEOMETRY DEFINITION + + The geometry is constructed in the TSDetectorConstruction class. + The setup consists of a box filling the world. The volume is divided into + subregions, where the outermost boxes are a different material. The materials + by default are water and boron as these have large scattering cross-sections + for neutrons (the default particle). + + 3- PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set are built from a variety of physics constructors. + The chosen physics lists are extensive, primarily + The constructors are: + + G4EmStandardPhysics_option4 + G4DecayPhysics + G4RadioactiveDecayPhysics + G4HadronPhysicsQGSP_BERT_HP + G4HadronElasticPhysicsHP + G4StepLimiterPhysics + G4IonElasticPhysics + G4IonBinaryCascadePhysics + + 4- ACTION INITALIZATION + + TSActionInitialization, instantiates and registers to Geant4 kernel + all user action classes. + + While in sequential mode the action classes are instatiated just once, + via invoking the method: + TSActionInitialization::Build() + in multi-threading mode the same method is invoked for each thread worker + and so all user action classes are defined thread-local. + + A run action class is instantiated both thread-local + and global that's why its instance is created also in the method + TSActionInitialization::BuildForMaster() + which is invoked only in multi-threading mode. + + 5- PRIMARY GENERATOR + + The primary generator is defined in the TSPrimaryGeneratorAction class. + The default kinematics is a 1 MeV neutron, randomly distributed in front + of the target across 100% of the transverse (X,Y) target size. + This default setting can be changed via the Geant4 built-in commands + of the G4ParticleGun class. + + 6- DETECTOR RESPONSE + + This example demonstrates a scoring implemented + in the user action classes and TSRun object. + + The energy deposited is collected per event in the PrimitiveScorer + G4PSEnergyDeposit (as part of a MultiFunctionalDetector) + and the thread-local version are merged at the end of the run. + + The number of steps is collected per event in the PrimativeScorer + G4PSNoOfSteps and the thread-local version are merged at the end of the run. + + When the MFD is recording an event i.e. TSRun::RecordEvent(const G4Event*), + the global atomic hits map adds the same hits collections + + In multi-threading mode the energy accumulated in TSRun MFD object per + workers is merged to the master in TSRun::Merge(). + + TSRun contains five hits collections types: + 1) a thread-local hits map, + 2) a global atomic hits map + 3) a global "mutex" hits map + 4) a global G4StatAnalysis hits deque + 5) a global G4ConvergenceTester hits deque + + The thread-local hits map is the same as you will find in many other + examples. + + The atomics hits map is the purpose of this example. Code-wise, the + implementation looks extremely similar to the thread-local version with + 3 primary exceptions: + (1) construction - there should only be one instance so it should be a + static member variable or a pointer/reference to a single instance + (2) It does not need to, nor should be, summed in G4Run::Merge() + (3) destruction -- it should only be cleared by the master thread since + there is only one instance. + + The "mutex" hits map is also included as reference for checking the results + accumulated by the thread-local hits maps and atomic hits maps. The + differences w.r.t. this hits maps are computed in + TSRunAction::EndOfRunAction + + The "G4StatAnalysis" and "G4ConvergenceTester" hits deques are + memory-efficient version of the standard G4THitsMap. While maps are + ideal for scoring at the G4Event-level, where sparsity w.r.t. indices + is common; at the G4Run-level, these data structures require much + less memory overhead. Due to a lack of + G4ConvergenceTester::operator+=(G4ConvergenceTester), the static version + of G4ConvergenceTester is the only valid way to use G4ConvergenceTester + in a scoring container. This is not the case for G4StatAnalysis, which + can be used in lieu of G4double. + +7- HOW TO RUN + + - Execute ts_scorers in the 'interactive mode' with visualization: + % ./ts_scorers + and type in the commands from run.mac line by line: + Idle> /control/verbose 2 + Idle> /tracking/verbose 1 + Idle> /run/beamOn 10 + Idle> ... + Idle> exit + or + Idle> /control/execute run.mac + .... + Idle> exit + + - Execute ts_scorers in the 'batch' mode from macro files + (without visualization) + % ./ts_scorers run.mac + % ./ts_scorers run.mac > run.out + +8- TIMEMORY USAGE + + This example demonstrates profiling analysis with timemory + (https://github.com/NERSC/timemory). + + - Compile Geant4 with timemory (-DGEANT4_USE_TIMEMORY=ON) + - timemory provide timing within the Geant4 source code + and within the example (TSRun::RecordEvent) + - Analysis is echoed to stdout and generates several output + files in a folder based on the name of the executable. In + general that folder will be "timemory-{name of executable}-output" diff --git a/examples/extended/parallel/TopC/ParN02/.README.N02.txt b/examples/extended/parallel/TopC/ParN02/.README.N02.txt new file mode 100644 index 0000000000..6d0bf5cd93 --- /dev/null +++ b/examples/extended/parallel/TopC/ParN02/.README.N02.txt @@ -0,0 +1,124 @@ + +///\file "parallel/TopC/ParN02/.README.N02.txt" +///\brief Example N02 (in ParN02) README page + +/*! \page ExampleN02InParN02 Example N02 in ParN02 + + + This example simulates a simplified fixe target experiment. + Read \link ExampleParN02 Example ParN02 \endlink for a description + of how to run it in parallel. + +\section ExampleN02InParN02_s1 GEOMETRY DEFINITION + + The setup consists of a target followed by six chambers of increasing + transverse size. These chambers are located in a region called Tracker + region. Their shape are boxes, constructed as parametrised volumes + (ChamberParametrisation class). + + The default geometry is constructed in DetectorConstruction class. + One can change the material of the target and of the chambers + interactively via the commands defined in the DetectorMessenger class. + + In addition a transverse uniform magnetic field can be applied (see + N02MagneticField and DetectorMessenger classes). + + +\section ExampleN02InParN02_s2 PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in PhysicsList class. + + In this example, all the so called 'electromagnetic processes' are + introduced for gamma, charged leptons, and charged hadrons (see the + method PhysicsList::ConstructEM()). + + An important data member of this class is the defaultCutValue which + defines the production threshold of secondary particles + (mainly Ionisation and Bremsstrahlung processes are concerned by this + CutValue). + Notice that the CutValue must be given in unit of length, corresponding + to the stopping range of the particle. It is automatically converted + in energy for each material, and a table is printed in the method + PhysicsList::SetCuts() + + In addition the build-in interactive command: +\verbatim +/process/(in)activate processName +\endverbatim + allows to activate/inactivate the processes one by one. + + +\section ExampleN02InParN02_s3 RUNS and EVENTS + + The primary kinematic consists of a single particle which hits the + target perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of ParticleGun class. + + A RUN is a set of events. + + The user has control: + -at Begin and End of each run (class RunAction) + -at Begin and End of each event (class EventAction) + -at Begin and End of each track (class TrackingAction, not used here) + -at End of each step (class SteppingAction) + + The class SteppingVerbose prints some informations step per step, + under the control of the command: /tracking/verbose 1 + It inherits from G4SteppingVerbose, and has been setup here in order + to illustrate how to extract informations from the G4 kernel during + the tracking of a particle. + + +\section ExampleN02InParN02_s4 DETECTOR RESPONSE + + A HIT is a record, track per track (even step per step), of all the + informations needed to simulate and analyse the detector response. + + In this example the Tracker chambers are considered as the detector. + Therefore the chambers are declared 'sensitive detectors' (SD) in + the DetectorConstruction class. + + Then, a Hit is defined as a set of 4 informations per step, inside + the chambers, namely: + - the track identifier (an integer), + - the chamber number, + - the total energy deposit in this step, + - the position of the deposit. + + A given hit is an instance of the class TrackerHit which is created + during the tracking of a particle, step by step, in the method + TrackerSD::ProcessHits(). This hit is inserted in a HitsCollection. + + The HitsCollection is printed at the end of event (via the method + TrackerSD::EndOfEvent()), under the control of the command: /hits/verbose 1 + + +\section ExampleN02InParN02_s5 VISUALIZATION + + The Visualization Manager is set in the main () (see exampleN02.cc). + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main when running in interactive mode. + + The tracks are automatically drawn at the end of event and erased at + the beginning of the next run. + + The visualization (with OpenGL driver) assumes two things: + 1- the visualisation & interfaces categories have been compiled + with the environment variable G4VIS_BUILD_OPENGLX_DRIVER. + 2- ParN02.cc has been compiled with G4VIS_USE_OPENGLX. + + (The same with DAWNFILE instead of OPENGLX) + + +\section ExampleN02InParN02_s6 USER INTERFACES + + The default command interface, called G4UIterminal, is done via + standart cin/G4cout. + On Linux and Sun-cc on can use a smarter command interface G4UItcsh. + It is enough to set the environment variable G4UI_USE_TCSH before + compiling ParN02.cc + +*/ diff --git a/examples/extended/parallel/TopC/ParN02/.README.txt b/examples/extended/parallel/TopC/ParN02/.README.txt new file mode 100644 index 0000000000..2eebbaa9a7 --- /dev/null +++ b/examples/extended/parallel/TopC/ParN02/.README.txt @@ -0,0 +1,199 @@ + +///\file "parallel/TopC/ParN02/.README.txt" +///\brief Example ParN02 README page + +/*! \page ExampleParN02 Example ParN02 + + ParGeant4: Geant4/TOP-C, a parallelization of Geant4 + (event-level parallelism) + +\author Gene Cooperman, + Northeastern University, + gene@ccs.neu.edu + +For the latest information on ParGeant4, see: \n + http://www.ccs.neu.edu/home/gene/pargeant4.html + +Note that a version now exists that runs Geant4 over the Grid. +Please write to gene@ccs.neu.edu for further information. +To port other applications to a parallel version, read the +files ../../info/PAR_INSTALL and ../../info/PAR_README. + +
+ +See the beginning of GNUmakefile for reasonable `make' targets to run it. +To run it: \n +-# + - a. Follow the standard Geant4 installation procedure. + - b. Download and install TOP-C. \n + The TOP-C home page is at http://www.ccs.neu.edu/home/gene/topc.html +\verbatim +cd +gzip -dc topc.tar.gz | tar -xvf - +cd topc +./configure +make +make check +[ Copy bin/topc-config to your path ] +\endverbatim + - c. Verify that the Geant4 example installs: +\verbatim +cd $G4INSTALL/examples/extended/parallel/ParN02 +make +$G4WORKDIR/bin/$G4SYSTEM/ParN02 ParN02.in +\endverbatim +\n +-# +\verbatim +make run +\endverbatim + [ By default, the included `procgroup' file creates two slave processes + on localhost. ] \n + [ Note that in addition to output on master, + $G4WORKDIR/bin/$G4SYSTEM/slave*.out contains slave output. ]\n + [ To remove intermediate files and start over: make parclean ] +\n +-# +\n + Try running it with slave processes on remote processes. + First, test that your local environment is set up correctly. + Try: +\verbatim +ssh $G4WORKDIR/bin/$G4SYSTEM/ParN02 `pwd`/ParN02.in +\endverbatim + The above command needs to work without asking for a password. + [ If you use dynamic libraries (*.so), make sure the LD_LIBRARY_PATH + in your shell startup file (e.g. ~.tcshrc) includes both: + $G4INSTALL/lib/$G4SYSTEM and $CLHEP_BASE_DIR/lib + If you use AFS, you may need to type 'klog' to renew your AFS token. ] + In `procgroup' file, replace `localhost' by desired remote hosts; + Add additional remote hosts (additional slaves) if you like. + Then: +\verbatim +make run +\endverbatim + +
+ +If you read ParGNUmakefile, you'll find other things that you can +modify. +- For example, all TOP-C additions are in conditionals: +remove -DG4USE_TOPC from ParGNUmakefile and: +\verbatim +make parclean; make run +\endverbatim + in order to re-compile and rerun without TOP-C. + +- Define REMOTE_SHELL differently if you don't use `ssh' for a remote shell. + (If undefined, ParGNUmakefile defines it to be `ssh') + +- Define MACROFILE diferently to use a different set of input commands. + +- Define MEM_MODEL=--seq + to run with TOP-C, but using a single (sequential) process, suitable + for easy debugging (via gdb, for example). + +- Try: pushd $G4WORKDIR/bin/$G4SYSTEM/; ./ParN02 --TOPC-help + to see TOP-C run-time options that can be invoked, such as + pushd $G4WORKDIR/bin/$G4SYSTEM/; ./ParN02 --TOPC-num-slaves=5 ParN02.in + +- Alternatively, modify TOPC_OPTIONS in ParGNUmakefile for the same effect. + +You can also try other targets: make run-debug + This will run it under gdb, so you can single step to see what happens. +make parclean - Start over with clean set of files. + +
+ +New or modified files: +\verbatim +- ParN02.cc - Adds one line: #include "ParN02.icc" + ParExample.icc inserts: #include "topc.h" + and causes main to calls TOPC_init, TOPC_finalize, + and to use: `new ParRunManager' instead of `new G4RunManager' + +- GNUmakefile - Adds one line at beginning: include ParGNUmakefile + ParGNUmakefile defines EXTRALIBS and CPPFLAGS so as to + modify behavior of config/binmake.gmk + in order to use TOP-C libraries and includes + +- procgroup - Specifies which slave hosts to use, and where to put output + For example: localhost 1 - > slave1.out + host=`localhost', executable=`same as master', + params of slave=`> slave1.out' (redirect output) + If output not redirected, it goes to stdout on master. + +- src/ParRunManager.cc - ParRunManger derived from G4RunManager + replaces Gr4RunManager::DoEventLoop w/ TOP-C parallel loop, + Adds certain local vars of DoEventLoop as ParRunManager members + +- include/MarshaledObj.h - run-time utilities for marshalling +- include/MarshaledEx*Hit.h - marshals N02 hits (calorimeter hits) +- include/MarshaledG4*.h - marshaling routines for Geant4 data structures + +- ~/slave*.out - Contains outputs of slave1, slave2, etc. + Generated each time parallel ParN02 is executed. + These files are specified in the file procgroup. +\endverbatim + +This version passes an event number to the slave and lets the +slave generate the event. The slave passes back marshaled hits to +the master. + +I will integrate the track level parallelism into this scenario at +a later date. For the track level, I will generate several +secondary tracks on the master, and then convert the secondary tracks +to new events that can be passed to slaves. I will do this only if +I detect that there are not enough initial events to fully occupy all +the slaves. This scheme has the drawback that we are splitting an event +into many events, which may make the summarization, histogram, and so +on more difficult. However, track level parallelism will be triggered +only when a very small number of events are generated. + +I also want to support postponing +a track to the next event ( G4ClassificationOfNewTrack::fPostpone . +To do this, each slave will wait to retire an event until it knows that +the previous event has been retired. + +In addition, I plan to have only the master read commands and pass +them to the slaves. Currently, the master and slaves each read +identical commands. + +
+ +If you are curious about some of the layers, the following +stack trace [somewhat out of date now] gives some idea. +- G4RunManager::BeamOn calls ParRunManager::DoEventLoop +(since G4RunManager::DoEventLoop is virtual) +- ParRunManager::DoEventLoop calls TOPC_master_slave +- TOPC_master_slave calls submit_task_input +- submit_task_input eventually calls COMM_send_msg which calls MPI_Send +(COMM_send_msg is the communication layer of TOPC; + ParN02.cc was linked with the TOP-C MPI communication layer. + The same source could have been linked with a POSIX threads layer, + a communication layer, or some other communication layer. +) +- MPI_send calls send +(where send is the socket system call of libc.so) +
+(gdb) where
+#0  0x41946c62 in send () from /lib/libc.so.6
+#1  0x400839c1 in send () at wrapsyscall.c:186
+#2  0x805c547 in MPI_Send (buf=0x82690fc, count=4, datatype=3, dest=2, tag=1, comm=0) at sendrecv.c:236
+#3  0x805a0b5 in COMM_send_msg (msg=0x82690fc, msg_size=4, dst=2, tag=TASK_INPUT_TAG) at comm-mpi.c:224
+#4  0x805774e in send_task_input (slave=2, input={data = 0x82690fc, data_size = 4}, tag=TASK_INPUT_TAG) at topc.c:560
+#5  0x8057aa8 in submit_task_input (input={data = 0x82690fc, data_size = 4}) at topc.c:659
+#6  0x805813c in TOPC_master_slave (generate_task_input_=0x4003d2e4 , 
+    do_task_=0x4003d350 , check_task_result_=0x4003d420 , 
+    update_shared_data_=0) at topc.c:922
+#7  0x4003d18c in ParRunManager::DoEventLoop (this=0x80c0bf0, n_event=1, macroFile=0x0, n_select=-1) at src/ParRunManager.cc:51
+#8  0x400b14d1 in G4RunManager::BeamOn () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4run.so
+#9  0x400b870a in G4RunMessenger::SetNewValue () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4run.so
+#10 0x4167157b in G4UIcommand::DoIt () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4intercoms.so
+#11 0x416810a3 in G4UImanager::ApplyCommand () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4intercoms.so
+#12 0x805db7e in G4UIterminal::ExecuteCommand () at /afs/cern.ch/sw/lhcxx/specific/redhat61/3.2.0/include/CLHEP/Random/Randomize.h:64
+#13 0x805d42d in G4UIterminal::SessionStart () at /afs/cern.ch/sw/lhcxx/specific/redhat61/3.2.0/include/CLHEP/Random/Randomize.h:64
+#14 0x8056a3d in main (argc=1, argv=0x80bfa00) at ParN02.cc:98
+
+ +*/ diff --git a/examples/extended/parallel/TopC/ParN02/AnnotatedFiles/000README b/examples/extended/parallel/TopC/ParN02/AnnotatedFiles/000README new file mode 100644 index 0000000000..9b85a08bd4 --- /dev/null +++ b/examples/extended/parallel/TopC/ParN02/AnnotatedFiles/000README @@ -0,0 +1,47 @@ +The files in this directory are the files that were used to build + ../include/Marshaled*.hh . The files ../include/Marshaled*.hh contain +marshaling (serialization) routines that are used by Parallel Geantr4. + +Marshalgen is a package that allows one to add a small number of annotations +to the original sequential code, in order to create marshalling or +serialization routines. Those marshalling routines are then used +by ParGeant4 to pass data between slave processes and the master process. + +INPUT FILES: +1. G4*.hh : The files *.hh are taken from Geant4. They include annotations + (comments) that describe how to marshal individual fields of the + given classes. These files have additional annotations that describe + how to marshal individual fields of the given classes. For a new + application, you have to change any references to Ex* to your + own example/application include files. These files are then reused + in the new Geant4 parallel application. +2. ../include/Ex*Hit.hh : These files are the original sequential Geant4 + application files that describe the application-defined hits. + They remain in the application include directory because they may + depend on other files in the include directory. + For most new parallel Geant4 applications, these files are sufficiently + simple, that one needs only to add Marshalgen begin and end comments + bracketing the class that needs to be marshalled, and a small number + of annotations specifying accessor functions to get and set fields + in the class. It may also be necessary to include marshalling + include files, if it is necessary to marshal other Geant4 data + structures. + Information on how to marshal the fields, etc., is in the Marshalgen + manual, along with the Marshalgen package: + http://www.ccs.neu.edu/home/gene/marshalgen + + +Marshalgen was then called on the above input files. One calls: + ./marshalgen *.hh + ./marshalgen ../include/Ex*Hit.hh + +OUTPUT FILES: +3. *.msh : These files are intermediate files generated automatically + by marshalgen ( http://www.ccs.neu.edu/home/gene/marshalgen ) + These files can be deleted if desired. +4. Marshaled*.h : These files are generated by Marshalgen. They + include of type both MarshaledEx*.h and MarshaledG4*.h . + (In addition, the file MarshaledObj.h is copied directly from + the Marshalgen distribution.) These files are all copied to + the include directory of the Geant4 parallel application. + They provide the marshalling functions that are then used by Geant4. diff --git a/examples/extended/parallel/TopC/ParN02/README b/examples/extended/parallel/TopC/ParN02/README new file mode 100644 index 0000000000..ce6ec5033a --- /dev/null +++ b/examples/extended/parallel/TopC/ParN02/README @@ -0,0 +1,155 @@ + + ParGeant4: Geant4/TOP-C, a parallelization of Geant4 + (event-level parallelism) + + Gene Cooperman + Northeastern University + gene@ccs.neu.edu, + +For the latest information on ParGeant4, see: + http://www.ccs.neu.edu/home/gene/pargeant4.html +Note that a version now exists that runs Geant4 over the Grid. +Please write to gene@ccs.neu.edu for further information. +To port other applications to a parallel version, read the + files ../../info/PAR_INSTALL and ../../info/PAR_README. + +See the beginning of GNUmakefile for reasonable `make' targets to run it. +To run it: +0. a. Follow the standard Geant4 installation procedure. + b. Download and install TOP-C + The TOP-C home page is at http://www.ccs.neu.edu/home/gene/topc.html + cd + gzip -dc topc.tar.gz | tar -xvf - + cd topc + ./configure + make + make check + [ Copy bin/topc-config to your path ] + c. Verify that the Geant4 example installs: + cd $G4INSTALL/examples/extended/parallel/ParN02 + make + $G4WORKDIR/bin/$G4SYSTEM/ParN02 ParN02.in +2. make run + [ By default, the included `procgroup' file creates two slave processes + on localhost. ] + [ Note that in addition to output on master, + $G4WORKDIR/bin/$G4SYSTEM/slave*.out contains slave output. ] + [ To remove intermediate files and start over: make parclean ] +3. Try running it with slave processes on remote processes. + First, test that your local environment is set up correctly. + Try: + ssh $G4WORKDIR/bin/$G4SYSTEM/ParN02 `pwd`/ParN02.in + The above command needs to work without asking for a password. + [ If you use dynamic libraries (*.so), make sure the LD_LIBRARY_PATH + in your shell startup file (e.g. ~.tcshrc) includes both: + $G4INSTALL/lib/$G4SYSTEM and $CLHEP_BASE_DIR/lib + If you use AFS, you may need to type 'klog' to renew your AFS token. ] + In `procgroup' file, replace `localhost' by desired remote hosts; + Add additional remote hosts (additional slaves) if you like. + Then: make run + +============================================================================ +If you read ParGNUmakefile, you'll find other things that you can +modify. For example, all TOP-C additions are in conditionals: + remove -DG4USE_TOPC from ParGNUmakefile and: + make parclean; make run + in order to re-compile and rerun without TOP-C. +Define REMOTE_SHELL differently if you don't use `ssh' for a remote shell. + (If undefined, ParGNUmakefile defines it to be `ssh') +Define MACROFILE diferently to use a different set of input commands. +Define MEM_MODEL=--seq + to run with TOP-C, but using a single (sequential) process, suitable + for easy debugging (via gdb, for example). +Try: pushd $G4WORKDIR/bin/$G4SYSTEM/; ./ParN02 --TOPC-help + to see TOP-C run-time options that can be invoked, such as + pushd $G4WORKDIR/bin/$G4SYSTEM/; ./ParN02 --TOPC-num-slaves=5 ParN02.in + Alternatively, modify TOPC_OPTIONS in ParGNUmakefile for the same effect. + +You can also try other targets: make run-debug + This will run it under gdb, so you can single step to see what happens. +make parclean - Start over with clean set of files. + +============================================================================ +New or modified files: + ParN02.cc - Adds one line: #include "ParN02.icc" + ParExample.icc inserts: #include "topc.h" + and causes main to calls TOPC_init, TOPC_finalize, + and to use: `new ParRunManager' instead of `new G4RunManager' + GNUmakefile - Adds one line at beginning: include ParGNUmakefile + ParGNUmakefile defines EXTRALIBS and CPPFLAGS so as to + modify behavior of config/binmake.gmk + in order to use TOP-C libraries and includes + procgroup - Specifies which slave hosts to use, and where to put output + For example: localhost 1 - > slave1.out + host=`localhost', executable=`same as master', + params of slave=`> slave1.out' (redirect output) + If output not redirected, it goes to stdout on master. + src/ParRunManager.cc - ParRunManger derived from G4RunManager + replaces Gr4RunManager::DoEventLoop w/ TOP-C parallel loop, + Adds certain local vars of DoEventLoop as ParRunManager members + include/MarshaledObj.h - run-time utilities for marshalling + include/MarshaledEx*Hit.h - marshals N02 hits (calorimeter hits) + include/MarshaledG4*.h - marshaling routines for Geant4 data structures + + ~/slave*.out - Contains outputs of slave1, slave2, etc. + Generated each time parallel ParN02 is executed. + These files are specified in the file procgroup. + +==================================================================== +This version passes an event number to the slave and lets the +slave generate the event. The slave passes back marshaled hits to +the master. + +I will integrate the track level parallelism into this scenario at +a later date. For the track level, I will generate several +secondary tracks on the master, and then convert the secondary tracks +to new events that can be passed to slaves. I will do this only if +I detect that there are not enough initial events to fully occupy all +the slaves. This scheme has the drawback that we are splitting an event +into many events, which may make the summarization, histogram, and so +on more difficult. However, track level parallelism will be triggered +only when a very small number of events are generated. + +I also want to support postponing +a track to the next event ( G4ClassificationOfNewTrack::fPostpone . +To do this, each slave will wait to retire an event until it knows that +the previous event has been retired. + +In addition, I plan to have only the master read commands and pass +them to the slaves. Currently, the master and slaves each read +identical commands. + +==================================================================== +If you are curious about some of the layers, the following +stack trace [somewhat out of date now] gives some idea. + G4RunManager::BeamOn calls ParRunManager::DoEventLoop +(since G4RunManager::DoEventLoop is virtual) + ParRunManager::DoEventLoop calls TOPC_master_slave + TOPC_master_slave calls submit_task_input + submit_task_input eventually calls COMM_send_msg which calls MPI_Send +(COMM_send_msg is the communication layer of TOPC; + ParN02.cc was linked with the TOP-C MPI communication layer. + The same source could have been linked with a POSIX threads layer, + a communication layer, or some other communication layer. +) + MPI_send calls send +(where send is the socket system call of libc.so) + +(gdb) where +#0 0x41946c62 in send () from /lib/libc.so.6 +#1 0x400839c1 in send () at wrapsyscall.c:186 +#2 0x805c547 in MPI_Send (buf=0x82690fc, count=4, datatype=3, dest=2, tag=1, comm=0) at sendrecv.c:236 +#3 0x805a0b5 in COMM_send_msg (msg=0x82690fc, msg_size=4, dst=2, tag=TASK_INPUT_TAG) at comm-mpi.c:224 +#4 0x805774e in send_task_input (slave=2, input={data = 0x82690fc, data_size = 4}, tag=TASK_INPUT_TAG) at topc.c:560 +#5 0x8057aa8 in submit_task_input (input={data = 0x82690fc, data_size = 4}) at topc.c:659 +#6 0x805813c in TOPC_master_slave (generate_task_input_=0x4003d2e4 , + do_task_=0x4003d350 , check_task_result_=0x4003d420 , + update_shared_data_=0) at topc.c:922 +#7 0x4003d18c in ParRunManager::DoEventLoop (this=0x80c0bf0, n_event=1, macroFile=0x0, n_select=-1) at src/ParRunManager.cc:51 +#8 0x400b14d1 in G4RunManager::BeamOn () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4run.so +#9 0x400b870a in G4RunMessenger::SetNewValue () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4run.so +#10 0x4167157b in G4UIcommand::DoIt () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4intercoms.so +#11 0x416810a3 in G4UImanager::ApplyCommand () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4intercoms.so +#12 0x805db7e in G4UIterminal::ExecuteCommand () at /afs/cern.ch/sw/lhcxx/specific/redhat61/3.2.0/include/CLHEP/Random/Randomize.h:64 +#13 0x805d42d in G4UIterminal::SessionStart () at /afs/cern.ch/sw/lhcxx/specific/redhat61/3.2.0/include/CLHEP/Random/Randomize.h:64 +#14 0x8056a3d in main (argc=1, argv=0x80bfa00) at ParN02.cc:98 diff --git a/examples/extended/parallel/TopC/ParN02/README.N02 b/examples/extended/parallel/TopC/ParN02/README.N02 new file mode 100644 index 0000000000..1e9561985a --- /dev/null +++ b/examples/extended/parallel/TopC/ParN02/README.N02 @@ -0,0 +1,123 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + ParN02 + ------ + + + This example simulates a simplified fixe target experiment. + Read README for a description of how to run it in parallel. + + 1- GEOMETRY DEFINITION + + The setup consists of a target followed by six chambers of increasing + transverse size. These chambers are located in a region called Tracker + region. Their shape are boxes, constructed as parametrised volumes + (ChamberParametrisation class). + + The default geometry is constructed in DetectorConstruction class. + One can change the material of the target and of the chambers + interactively via the commands defined in the DetectorMessenger class. + + In addition a transverse uniform magnetic field can be applied (see + N02MagneticField and DetectorMessenger classes). + + + 2- PHYSICS LIST + + The particle's type and the physic processes which will be available + in this example are set in PhysicsList class. + + In this example, all the so called 'electromagnetic processes' are + introduced for gamma, charged leptons, and charged hadrons (see the + method PhysicsList::ConstructEM()). + + An important data member of this class is the defaultCutValue which + defines the production threshold of secondary particles + (mainly Ionisation and Bremsstrahlung processes are concerned by this + CutValue). + Notice that the CutValue must be given in unit of length, corresponding + to the stopping range of the particle. It is automatically converted + in energy for each material, and a table is printed in the method + PhysicsList::SetCuts() + + In addition the build-in interactive command: + /process/(in)activate processName + allows to activate/inactivate the processes one by one. + + + 3- RUNS and EVENTS + + The primary kinematic consists of a single particle which hits the + target perpendicular to the input face. The type of the particle + and its energy are set in the PrimaryGeneratorAction class, and can + be changed via the G4 build-in commands of ParticleGun class. + + A RUN is a set of events. + + The user has control: + -at Begin and End of each run (class RunAction) + -at Begin and End of each event (class EventAction) + -at Begin and End of each track (class TrackingAction, not used here) + -at End of each step (class SteppingAction) + + The class SteppingVerbose prints some informations step per step, + under the control of the command: /tracking/verbose 1 + It inherits from G4SteppingVerbose, and has been setup here in order + to illustrate how to extract informations from the G4 kernel during + the tracking of a particle. + + + 4- DETECTOR RESPONSE + + A HIT is a record, track per track (even step per step), of all the + informations needed to simulate and analyse the detector response. + + In this example the Tracker chambers are considered as the detector. + Therefore the chambers are declared 'sensitive detectors' (SD) in + the DetectorConstruction class. + + Then, a Hit is defined as a set of 4 informations per step, inside + the chambers, namely: + - the track identifier (an integer), + - the chamber number, + - the total energy deposit in this step, + - the position of the deposit. + + A given hit is an instance of the class TrackerHit which is created + during the tracking of a particle, step by step, in the method + TrackerSD::ProcessHits(). This hit is inserted in a HitsCollection. + + The HitsCollection is printed at the end of event (via the method + TrackerSD::EndOfEvent()), under the control of the command: /hits/verbose 1 + + + 5- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main when running in interactive mode. + + The tracks are automatically drawn at the end of event and erased at + the beginning of the next run. + + The visualization (with OpenGL driver) assumes two things: + 1- the visualisation & interfaces categories have been compiled + with the environment variable G4VIS_BUILD_OPENGLX_DRIVER. + 2- ParN02.cc has been compiled with G4VIS_USE_OPENGLX. + + (The same with DAWNFILE instead of OPENGLX) + + + 6- USER INTERFACES + + The default command interface, called G4UIterminal, is done via + standart cin/G4cout. + On Linux and Sun-cc on can use a smarter command interface G4UItcsh. + It is enough to set the environment variable G4UI_USE_TCSH before + compiling ParN02.cc + diff --git a/examples/extended/parallel/TopC/ParN04/.README.N04 b/examples/extended/parallel/TopC/ParN04/.README.N04 new file mode 100644 index 0000000000..ee53a1978c --- /dev/null +++ b/examples/extended/parallel/TopC/ParN04/.README.N04 @@ -0,0 +1,47 @@ + +///\file "parallel/TopC/ParN04/.README.N04" +///\brief Example N04 (in ParN04) README page + +/*! \page ExampleN04InParN04 Example N04 in ParN04 + + ParN04 has a simplified collider detector geometry. + This example demonstrates the following features. + [ Read \link ExampleParN02 Example ParN02 \endlink for a description + of how to run it in parallel. ] + +\section ExampleN04InParN04_s1 PYTHIA primary events. + + ExN04PrimaryGeneratorAction has G4HEPEvtInterface as the generator. +G4HEPEvtInterface accesses to "pythia_event.data", which contains three +events of Higgs generation produced by PYTHIA. "pythia_main.f" is an +example FORTRAN code of PYTHIA for generating this event sample. + +\section ExampleN04InParN04_s2 Readout geometry + + ExN04DetectorConstruction defines a simplified collider detecor +geometry, tracker made of cylindrical tubes, calorimeter made of +cylindrical tubes, and muon trackers made of planes. + Cylindrical calorimeter is made of tubes of lead and scintirator +without cut in phi nor z direction. Energy deposition in scintirator +is accumurated by ExN04CalorimeterSD sensitive detector, which has +a readout geometry to find the phi-z cell. + +\section ExampleN04InParN04_s3 Full set of "ordinary" physics processes + + ExN04PhysicsList defines almost all of leptons and hadrons which +Geant4 has dedicated classes for. Also almost all physics processes +Geant4 has are defined. + +\section ExampleN04InParN04_s4 Event filtering by the stacking mechanism. + + Higgs events in "pythia_event.data" have two lepton pairs produced +by the Higgs decay via Z0. At the first stage of each event, only the +primary muons are tracked without tracking secondaries. then the number +of hits on the muon trackers are examined. At the next stage, only +the primary charged particles are tracked only inside the barrel +tracking area and the isolation of the primary muons are examined. +At the third stage, all particles in the RoI (Region of Interest) along +the isolated muons are tracked. All these examinations are applied in +ExN04StackingAction. + +*/ diff --git a/examples/extended/parallel/TopC/ParN04/.README.N04.txt b/examples/extended/parallel/TopC/ParN04/.README.N04.txt new file mode 100644 index 0000000000..a7936c9be8 --- /dev/null +++ b/examples/extended/parallel/TopC/ParN04/.README.N04.txt @@ -0,0 +1,47 @@ + +///\file "parallel/TopC/ParN04/.README.N04.txt" +///\brief Example N04 (in ParN04) README page + +/*! \page ExampleN04InParN04 Example N04 in ParN04 + + ParN04 has a simplified collider detector geometry. + This example demonstrates the following features. + [ Read \link ExampleParN04 Example ParN02 \endlink for a description + of how to run it in parallel. ] + +\section ExampleN04InParN04_s1 PYTHIA primary events. + + ExN04PrimaryGeneratorAction has G4HEPEvtInterface as the generator. +G4HEPEvtInterface accesses to "pythia_event.data", which contains three +events of Higgs generation produced by PYTHIA. "pythia_main.f" is an +example FORTRAN code of PYTHIA for generating this event sample. + +\section ExampleN04InParN04_s2 Readout geometry + + ExN04DetectorConstruction defines a simplified collider detecor +geometry, tracker made of cylindrical tubes, calorimeter made of +cylindrical tubes, and muon trackers made of planes. + Cylindrical calorimeter is made of tubes of lead and scintirator +without cut in phi nor z direction. Energy deposition in scintirator +is accumurated by ExN04CalorimeterSD sensitive detector, which has +a readout geometry to find the phi-z cell. + +\section ExampleN04InParN04_s3 Full set of "ordinary" physics processes + + ExN04PhysicsList defines almost all of leptons and hadrons which +Geant4 has dedicated classes for. Also almost all physics processes +Geant4 has are defined. + +\section ExampleN04InParN04_s4 Event filtering by the stacking mechanism. + + Higgs events in "pythia_event.data" have two lepton pairs produced +by the Higgs decay via Z0. At the first stage of each event, only the +primary muons are tracked without tracking secondaries. then the number +of hits on the muon trackers are examined. At the next stage, only +the primary charged particles are tracked only inside the barrel +tracking area and the isolation of the primary muons are examined. +At the third stage, all particles in the RoI (Region of Interest) along +the isolated muons are tracked. All these examinations are applied in +ExN04StackingAction. + +*/ diff --git a/examples/extended/parallel/TopC/ParN04/.README.txt b/examples/extended/parallel/TopC/ParN04/.README.txt new file mode 100644 index 0000000000..a71be0aaed --- /dev/null +++ b/examples/extended/parallel/TopC/ParN04/.README.txt @@ -0,0 +1,200 @@ + +///\file "parallel/TopC/ParN04/.README.txt" +///\brief Example ParN04 README page + +/*! \page ExampleParN04 Example ParN04 + + ParGeant4: Geant4/TOP-C, a parallelization of Geant4 + (event-level parallelism) + +\author Gene Cooperman, + Northeastern University, + gene@ccs.neu.edu + +For the latest information on ParGeant4, see: \n + http://www.ccs.neu.edu/home/gene/pargeant4.html + +Note that a version now exists that runs Geant4 over the Grid. +Please write to gene@ccs.neu.edu for further information. +To port other applications to a parallel version, read the +files ../../info/PAR_INSTALL and ../../info/PAR_README. + +
+ +See the beginning of GNUmakefile for reasonable `make' targets to run it. +To run it: \n +-# + - a. Follow the standard Geant4 installation procedure. + - b. Download and install TOP-C. \n + The TOP-C home page is at http://www.ccs.neu.edu/home/gene/topc.html +\verbatim +cd +gzip -dc topc.tar.gz | tar -xvf - +cd topc +./configure +make +make check +[ Copy bin/topc-config to your path ] +\endverbatim + - c. Verify that the Geant4 example installs: +\verbatim +cd $G4INSTALL/examples/extended/parallel/ParN04 +make +$G4WORKDIR/bin/$G4SYSTEM/ParN04 ParN04.in +\endverbatim +\n +-# +\verbatim +make run +\endverbatim + [ By default, the included `procgroup' file creates two slave processes + on localhost. ] \n + [ Note that in addition to output on master, + $G4WORKDIR/bin/$G4SYSTEM/slave*.out contains slave output. ]\n + [ To remove intermediate files and start over: make parclean ] +\n +-# +\n + Try running it with slave processes on remote processes. + First, test that your local environment is set up correctly. + Try: +\verbatim +ssh $G4WORKDIR/bin/$G4SYSTEM/ParN04 `pwd`/ParN04.in +\endverbatim + The above command needs to work without asking for a password. + [ If you use dynamic libraries (*.so), make sure the LD_LIBRARY_PATH + in your shell startup file (e.g. ~.tcshrc) includes both: + $G4INSTALL/lib/$G4SYSTEM and $CLHEP_BASE_DIR/lib + If you use AFS, you may need to type 'klog' to renew your AFS token. ] + In `procgroup' file, replace `localhost' by desired remote hosts; + Add additional remote hosts (additional slaves) if you like. + Then: +\verbatim +make run +\endverbatim + +
+ +If you read ParGNUmakefile, you'll find other things that you can +modify. +- For example, all TOP-C additions are in conditionals: +remove -DG4USE_TOPC from ParGNUmakefile and: +\verbatim +make parclean; make run +\endverbatim + in order to re-compile and rerun without TOP-C. + +- Define REMOTE_SHELL differently if you don't use `ssh' for a remote shell. + (If undefined, ParGNUmakefile defines it to be `ssh') + +- Define MACROFILE diferently to use a different set of input commands. + +- Define MEM_MODEL=--seq + to run with TOP-C, but using a single (sequential) process, suitable + for easy debugging (via gdb, for example). + +- Try: pushd $G4WORKDIR/bin/$G4SYSTEM/; ./ParN04 --TOPC-help + to see TOP-C run-time options that can be invoked, such as + pushd $G4WORKDIR/bin/$G4SYSTEM/; ./ParN04 --TOPC-num-slaves=5 ParN04.in + +- Alternatively, modify TOPC_OPTIONS in ParGNUmakefile for the same effect. + +You can also try other targets: make run-debug + This will run it under gdb, so you can single step to see what happens. +make parclean - Start over with clean set of files. + +
+ +New or modified files: +\verbatim +- ParN04.cc - Adds one line: #include "ParN04.icc" + ParExample.icc inserts: #include "topc.h" + and causes main to calls TOPC_init, TOPC_finalize, + and to use: `new ParRunManager' instead of `new G4RunManager' + +- GNUmakefile - Adds one line at beginning: include ParGNUmakefile + ParGNUmakefile defines EXTRALIBS and CPPFLAGS so as to + modify behavior of config/binmake.gmk + in order to use TOP-C libraries and includes + +- procgroup - Specifies which slave hosts to use, and where to put output + For example: localhost 1 - > slave1.out + host=`localhost', executable=`same as master', + params of slave=`> slave1.out' (redirect output) + If output not redirected, it goes to stdout on master. + +- src/ParRunManager.cc - ParRunManger derived from G4RunManager + replaces Gr4RunManager::DoEventLoop w/ TOP-C parallel loop, + Adds certain local vars of DoEventLoop as ParRunManager members + +- include/MarshaledObj.h - run-time utilities for marshalling +- include/MarshaledEx*Hit.h - marshals N04 hits (calorimeter hits) +- include/MarshaledG4*.h - marshaling routines for Geant4 data structures + +- ~/slave*.out - Contains outputs of slave1, slave2, etc. + Generated each time parallel ParN04 is executed. + These files are specified in the file procgroup. + +\endverbatim + +This version passes an event number to the slave and lets the +slave generate the event. The slave passes back marshaled hits to +the master. + +I will integrate the track level parallelism into this scenario at +a later date. For the track level, I will generate several +secondary tracks on the master, and then convert the secondary tracks +to new events that can be passed to slaves. I will do this only if +I detect that there are not enough initial events to fully occupy all +the slaves. This scheme has the drawback that we are splitting an event +into many events, which may make the summarization, histogram, and so +on more difficult. However, track level parallelism will be triggered +only when a very small number of events are generated. + +I also want to support postponing +a track to the next event ( G4ClassificationOfNewTrack::fPostpone . +To do this, each slave will wait to retire an event until it knows that +the previous event has been retired. + +In addition, I plan to have only the master read commands and pass +them to the slaves. Currently, the master and slaves each read +identical commands. + +
+ +If you are curious about some of the layers, the following +stack trace [somewhat out of date now] gives some idea. +- G4RunManager::BeamOn calls ParRunManager::DoEventLoop +(since G4RunManager::DoEventLoop is virtual) +- ParRunManager::DoEventLoop calls TOPC_master_slave +- TOPC_master_slave calls submit_task_input +- submit_task_input eventually calls COMM_send_msg which calls MPI_Send +(COMM_send_msg is the communication layer of TOPC; + ParN04.cc was linked with the TOP-C MPI communication layer. + The same source could have been linked with a POSIX threads layer, + a communication layer, or some other communication layer. +) +- MPI_send calls send +(where send is the socket system call of libc.so) +
+(gdb) where
+#0  0x41946c62 in send () from /lib/libc.so.6
+#1  0x400839c1 in send () at wrapsyscall.c:186
+#2  0x805c547 in MPI_Send (buf=0x82690fc, count=4, datatype=3, dest=2, tag=1, comm=0) at sendrecv.c:236
+#3  0x805a0b5 in COMM_send_msg (msg=0x82690fc, msg_size=4, dst=2, tag=TASK_INPUT_TAG) at comm-mpi.c:224
+#4  0x805774e in send_task_input (slave=2, input={data = 0x82690fc, data_size = 4}, tag=TASK_INPUT_TAG) at topc.c:560
+#5  0x8057aa8 in submit_task_input (input={data = 0x82690fc, data_size = 4}) at topc.c:659
+#6  0x805813c in TOPC_master_slave (generate_task_input_=0x4003d2e4 , 
+    do_task_=0x4003d350 , check_task_result_=0x4003d420 , 
+    update_shared_data_=0) at topc.c:922
+#7  0x4003d18c in ParRunManager::DoEventLoop (this=0x80c0bf0, n_event=1, macroFile=0x0, n_select=-1) at src/ParRunManager.cc:51
+#8  0x400b14d1 in G4RunManager::BeamOn () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4run.so
+#9  0x400b870a in G4RunMessenger::SetNewValue () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4run.so
+#10 0x4167157b in G4UIcommand::DoIt () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4intercoms.so
+#11 0x416810a3 in G4UImanager::ApplyCommand () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4intercoms.so
+#12 0x805db7e in G4UIterminal::ExecuteCommand () at /afs/cern.ch/sw/lhcxx/specific/redhat61/3.2.0/include/CLHEP/Random/Randomize.h:64
+#13 0x805d42d in G4UIterminal::SessionStart () at /afs/cern.ch/sw/lhcxx/specific/redhat61/3.2.0/include/CLHEP/Random/Randomize.h:64
+#14 0x8056a3d in main (argc=1, argv=0x80bfa00) at ParN02.cc:98
+
+ +*/ diff --git a/examples/extended/parallel/TopC/ParN04/AnnotatedFiles/000README b/examples/extended/parallel/TopC/ParN04/AnnotatedFiles/000README new file mode 100644 index 0000000000..9b85a08bd4 --- /dev/null +++ b/examples/extended/parallel/TopC/ParN04/AnnotatedFiles/000README @@ -0,0 +1,47 @@ +The files in this directory are the files that were used to build + ../include/Marshaled*.hh . The files ../include/Marshaled*.hh contain +marshaling (serialization) routines that are used by Parallel Geantr4. + +Marshalgen is a package that allows one to add a small number of annotations +to the original sequential code, in order to create marshalling or +serialization routines. Those marshalling routines are then used +by ParGeant4 to pass data between slave processes and the master process. + +INPUT FILES: +1. G4*.hh : The files *.hh are taken from Geant4. They include annotations + (comments) that describe how to marshal individual fields of the + given classes. These files have additional annotations that describe + how to marshal individual fields of the given classes. For a new + application, you have to change any references to Ex* to your + own example/application include files. These files are then reused + in the new Geant4 parallel application. +2. ../include/Ex*Hit.hh : These files are the original sequential Geant4 + application files that describe the application-defined hits. + They remain in the application include directory because they may + depend on other files in the include directory. + For most new parallel Geant4 applications, these files are sufficiently + simple, that one needs only to add Marshalgen begin and end comments + bracketing the class that needs to be marshalled, and a small number + of annotations specifying accessor functions to get and set fields + in the class. It may also be necessary to include marshalling + include files, if it is necessary to marshal other Geant4 data + structures. + Information on how to marshal the fields, etc., is in the Marshalgen + manual, along with the Marshalgen package: + http://www.ccs.neu.edu/home/gene/marshalgen + + +Marshalgen was then called on the above input files. One calls: + ./marshalgen *.hh + ./marshalgen ../include/Ex*Hit.hh + +OUTPUT FILES: +3. *.msh : These files are intermediate files generated automatically + by marshalgen ( http://www.ccs.neu.edu/home/gene/marshalgen ) + These files can be deleted if desired. +4. Marshaled*.h : These files are generated by Marshalgen. They + include of type both MarshaledEx*.h and MarshaledG4*.h . + (In addition, the file MarshaledObj.h is copied directly from + the Marshalgen distribution.) These files are all copied to + the include directory of the Geant4 parallel application. + They provide the marshalling functions that are then used by Geant4. diff --git a/examples/extended/parallel/TopC/ParN04/README b/examples/extended/parallel/TopC/ParN04/README new file mode 100644 index 0000000000..27c08ff008 --- /dev/null +++ b/examples/extended/parallel/TopC/ParN04/README @@ -0,0 +1,157 @@ + + ParGeant4: Geant4/TOP-C, a parallelization of Geant4 + (event-level parallelism) + + Gene Cooperman + Northeastern University + gene@ccs.neu.edu, + +For the latest information on ParGeant4, see: + http://www.ccs.neu.edu/home/gene/pargeant4.html +Note that a version now exists that runs Geant4 over the Grid. +Please write to gene@ccs.neu.edu for further information. +To port other applications to a parallel version, read the + files ../../info/PAR_INSTALL and ../../info/PAR_README. + +See the beginning of GNUmakefile for reasonable `make' targets to run it. +To run it: +0. a. Follow the standard Geant4 installation procedure. + b. Download and install TOP-C + The TOP-C home page is at http://www.ccs.neu.edu/home/gene/topc.html + cd + gzip -dc topc.tar.gz | tar -xvf - + cd topc + ./configure + make + make check + [ Copy bin/topc-config to your path ] + c. Verify that the Geant4 example installs: + cd $G4INSTALL/examples/extended/parallel/ParN04 + make + $G4WORKDIR/bin/$G4SYSTEM/ParN04 ParN04.in +2. make run + [ By default, the included `procgroup' file creates two slave processes + on localhost. ] + [ Note that in addition to output on master, + $G4WORKDIR/bin/$G4SYSTEM/slave*.out contains slave output. ] + [ To remove intermediate files and start over: make parclean ] +3. Try running it with slave processes on remote processes. + First, test that your local environment is set up correctly. + Try: + ssh $G4WORKDIR/bin/$G4SYSTEM/ParN04 `pwd`/ParN04.in + The above command needs to work without asking for a password. + [ If you use dynamic libraries (*.so), make sure the LD_LIBRARY_PATH + in your shell startup file (e.g. ~.tcshrc) includes both: + $G4INSTALL/lib/$G4SYSTEM and $CLHEP_BASE_DIR/lib + If you use AFS, you may need to type 'klog' to renew your AFS token. ] + In `procgroup' file, replace `localhost' by desired remote hosts; + Add additional remote hosts (additional slaves) if you like. + Then: make run + +============================================================================ +If you read ParGNUmakefile, you'll find other things that you can +modify. For example, all TOP-C additions are in conditionals: + remove -DG4USE_TOPC from ParGNUmakefile and: + make parclean; make run + in order to re-compile and rerun without TOP-C. +Define REMOTE_SHELL differently if you don't use `ssh' for a remote shell. + (If undefined, ParGNUmakefile defines it to be `ssh') +Define MACROFILE diferently to use a different set of input commands. +Define MEM_MODEL=--seq + to run with TOP-C, but using a single (sequential) process, suitable + for easy debugging (via gdb, for example). +Try: pushd $G4WORKDIR/bin/$G4SYSTEM/; ./ParN04 --TOPC-help + to see TOP-C run-time options that can be invoked, such as + pushd $G4WORKDIR/bin/$G4SYSTEM/; ./ParN04 --TOPC-num-slaves=5 ParN04.in + Alternatively, modify TOPC_OPTIONS in ParGNUmakefile for the same effect. + +You can also try other targets: make run-debug + This will run it under gdb, so you can single step to see what happens. +make parclean - Start over with clean set of files. + +============================================================================ +New or modified files: + ParN04.cc - Adds one line: #include "ParN04.icc" + ParExample.icc inserts: #include "topc.h" + and causes main to calls TOPC_init, TOPC_finalize, + and to use: `new ParRunManager' instead of `new G4RunManager' + GNUmakefile - Adds one line at beginning: include ParGNUmakefile + ParGNUmakefile defines EXTRALIBS and CPPFLAGS so as to + modify behavior of config/binmake.gmk + in order to use TOP-C libraries and includes + procgroup - Specifies which slave hosts to use, and where to put output + For example: localhost 1 - > slave1.out + host=`localhost', executable=`same as master', + params of slave=`> slave1.out' (redirect output) + If output not redirected, it goes to stdout on master. + src/ParRunManager.cc - ParRunManger derived from G4RunManager + replaces Gr4RunManager::DoEventLoop w/ TOP-C parallel loop, + Adds certain local vars of DoEventLoop as ParRunManager members + include/MarshaledObj.h - run-time utilities for marshalling + include/MarshaledEx*Hit.h - marshals N04 hits (calorimeter hits) + include/MarshaledG4*.h - marshaling routines for Geant4 data structures + + ~/slave*.out - Contains outputs of slave1, slave2, etc. + Generated each time parallel ParN04 is executed. + These files are specified in the file procgroup. + +==================================================================== +This version passes an event number to the slave and lets the +slave generate the event. The slave passes back marshaled hits to +the master. + +I will integrate the track level parallelism into this scenario at +a later date. For the track level, I will generate several +secondary tracks on the master, and then convert the secondary tracks +to new events that can be passed to slaves. I will do this only if +I detect that there are not enough initial events to fully occupy all +the slaves. This scheme has the drawback that we are splitting an event +into many events, which may make the summarization, histogram, and so +on more difficult. However, track level parallelism will be triggered +only when a very small number of events are generated. + +I also want to support postponing +a track to the next event ( G4ClassificationOfNewTrack::fPostpone . +To do this, each slave will wait to retire an event until it knows that +the previous event has been retired. + +In addition, I plan to have only the master read commands and pass +them to the slaves. Currently, the master and slaves each read +identical commands. + +==================================================================== +If you are curious about some of the layers, the following +stack trace [somewhat out of date now] gives some idea. +[ This stack trace is from a run based on ParN02.] + + G4RunManager::BeamOn calls ParRunManager::DoEventLoop +(since G4RunManager::DoEventLoop is virtual) + ParRunManager::DoEventLoop calls TOPC_master_slave + TOPC_master_slave calls submit_task_input + submit_task_input eventually calls COMM_send_msg which calls MPI_Send +(COMM_send_msg is the communication layer of TOPC; + ParN04.cc was linked with the TOP-C MPI communication layer. + The same source could have been linked with a POSIX threads layer, + a communication layer, or some other communication layer. +) + MPI_send calls send +(where send is the socket system call of libc.so) + +(gdb) where +#0 0x41946c62 in send () from /lib/libc.so.6 +#1 0x400839c1 in send () at wrapsyscall.c:186 +#2 0x805c547 in MPI_Send (buf=0x82690fc, count=4, datatype=3, dest=2, tag=1, comm=0) at sendrecv.c:236 +#3 0x805a0b5 in COMM_send_msg (msg=0x82690fc, msg_size=4, dst=2, tag=TASK_INPUT_TAG) at comm-mpi.c:224 +#4 0x805774e in send_task_input (slave=2, input={data = 0x82690fc, data_size = 4}, tag=TASK_INPUT_TAG) at topc.c:560 +#5 0x8057aa8 in submit_task_input (input={data = 0x82690fc, data_size = 4}) at topc.c:659 +#6 0x805813c in TOPC_master_slave (generate_task_input_=0x4003d2e4 , + do_task_=0x4003d350 , check_task_result_=0x4003d420 , + update_shared_data_=0) at topc.c:922 +#7 0x4003d18c in ParRunManager::DoEventLoop (this=0x80c0bf0, n_event=1, macroFile=0x0, n_select=-1) at src/ParRunManager.cc:51 +#8 0x400b14d1 in G4RunManager::BeamOn () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4run.so +#9 0x400b870a in G4RunMessenger::SetNewValue () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4run.so +#10 0x4167157b in G4UIcommand::DoIt () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4intercoms.so +#11 0x416810a3 in G4UImanager::ApplyCommand () from /afs/cern.ch/user/c/cooperma/scratch-pcitapi07/geant4/lib/libG4intercoms.so +#12 0x805db7e in G4UIterminal::ExecuteCommand () at /afs/cern.ch/sw/lhcxx/specific/redhat61/3.2.0/include/CLHEP/Random/Randomize.h:64 +#13 0x805d42d in G4UIterminal::SessionStart () at /afs/cern.ch/sw/lhcxx/specific/redhat61/3.2.0/include/CLHEP/Random/Randomize.h:64 +#14 0x8056a3d in main (argc=1, argv=0x80bfa00) at ParN02.cc:98 diff --git a/examples/extended/parallel/TopC/ParN04/README.N04 b/examples/extended/parallel/TopC/ParN04/README.N04 new file mode 100644 index 0000000000..6436c3e5c9 --- /dev/null +++ b/examples/extended/parallel/TopC/ParN04/README.N04 @@ -0,0 +1,47 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + ParN04 + ------ + + ParN04 has a simplified collider detector geometry. + This example demonstrates the following features. + [ Read README for a description of how to run it in parallel. ] + +1. PYTHIA primary events. + + ExN04PrimaryGeneratorAction has G4HEPEvtInterface as the generator. +G4HEPEvtInterface accesses to "pythia_event.data", which contains three +events of Higgs generation produced by PYTHIA. "pythia_main.f" is an +example FORTRAN code of PYTHIA for generating this event sample. + +2. Readout geometry + + ExN04DetectorConstruction defines a simplified collider detecor +geometry, tracker made of cylindrical tubes, calorimeter made of +cylindrical tubes, and muon trackers made of planes. + Cylindrical calorimeter is made of tubes of lead and scintirator +without cut in phi nor z direction. Energy deposition in scintirator +is accumurated by ExN04CalorimeterSD sensitive detector, which has +a readout geometry to find the phi-z cell. + +3. Full set of "ordinary" physics processes + + ExN04PhysicsList defines almost all of leptons and hadrons which +Geant4 has dedicated classes for. Also almost all physics processes +Geant4 has are defined. + +4. Event filtering by the stacking mechanism. + + Higgs events in "pythia_event.data" have two lepton pairs produced +by the Higgs decay via Z0. At the first stage of each event, only the +primary muons are tracked without tracking secondaries. then the number +of hits on the muon trackers are examined. At the next stage, only +the primary charged particles are tracked only inside the barrel +tracking area and the isolation of the primary muons are examined. +At the third stage, all particles in the RoI (Region of Interest) along +the isolated muons are tracked. All these examinations are applied in +ExN04StackingAction. diff --git a/examples/extended/parallel/TopC/info/NEW_APP_README b/examples/extended/parallel/TopC/info/NEW_APP_README new file mode 100644 index 0000000000..30e50ce4e9 --- /dev/null +++ b/examples/extended/parallel/TopC/info/NEW_APP_README @@ -0,0 +1,46 @@ +------------------------------------------------------------------------------ +This file and NEW_APP_INSTALL describe important information if you are + planning to create a new parallel Geant4 application, similarly + to the examples ParN02 and ParN04. +This package implements event-level parallelism for Geant4 + using the free TOP-C distribution. (TOP-C = Task Oriented Parallel C/C++) + +To parallelize an existing sequential Geant4 application, read NEW_APP_INSTALL. + +The design goals are: +1. No modification of the Geant4 kernel libraries. +2. Application sessions should be efficient and reproducible + (independently of the number of slave processes and the + order in which they are called by TOP-C) +3. Setting deterministic random seeds on each slave + [ This code assumes that each slave will initialize its random state + based on either the event number or a random seed selected + on the master.] + +This assumes that you have already installed CLHEP, Geant4, and TOP-C + TOP-C can be downloaded via its home page: + http://www.ccs.neu.edu/home/gene/topc.html + +Other qualifications are: +1. It has only been tested under Linux, although it should be + portable to any other UNIX supported by Geant4. +2. Since Geant4 does not currently support a uniform format for + tracker hits, calorimeter hits, etc., on new applications, + you may have to write marshalling code for your hits, based + on the examples in ParN02 and ParN04. +3. This should support histograms as long as AnalysisManager::Step() is + is trivial. However, I have not had the opportunity + for careful testing. Please write to gene@ccs.neu.edu if you + are including histograms, and especially if you define + AnalysisManager::Step(). +4. Currently, this distribution does not support: + trajectory stores, n-tuples, track parallelism, + interactive input commands (no macrofile) + I plan to add those features according to demand. + Probably: a. allowing interactive input + b. track-level parallelism + c. other (trajectory store, PostponeOneEvent(), ...) + +Some design assumptions in this ParGeant4 implementation: +1. A collectionName for a G4HitsCollection uniquely identifies the + G4HitsCollection within a G4HCofThisEvent. diff --git a/examples/extended/parallel/TopC/info/README.html b/examples/extended/parallel/TopC/info/README.html new file mode 100644 index 0000000000..fed9e17c38 --- /dev/null +++ b/examples/extended/parallel/TopC/info/README.html @@ -0,0 +1,114 @@ + + + +ParGeant4 README + + + + + + + + + +

ParGeant4 README

+
+by Gene Cooperman + (gene@ccs.neu.edu) +
+There is also a +ParGeant4 Home Page, which will be updated more frequently than +this page. + +

+This distribution implements event-level parallelism for + Geant4 + using the free TOP-C distribution. + (TOP-C + = Task Oriented Parallel C/C++) + +

+These are example parallelizations that parallelize examples/novice/N02 +and examples/novice/N04 of the Geant4 distribution. +The files also contain information on how to write new parallel +Geant4 applications or parallelize existing sequential Geant4 +applications. + +

+

+The design goals are:
+1.  No modification of the Geant4 kernel libraries.
+2.  Application sessions should be efficient and reproducible
+     (independently of the number of slave processes and the
+      order in which they are called by TOP-C)
+3.  Setting deterministic random seeds on each slave
+    [ This code assumes that each slave will initialize its random state
+      based on either the event number or a random seed selected
+      on the master.]
+
+This assumes that you have already installed CLHEP, Geant4, and TOP-C
+  TOP-C can be downloaded via its home page:
+                          http://www.ccs.neu.edu/home/gene/topc.html
+
+Other qualifications are:
+1.  `topc-config' is already in your path.
+2.  It has only been tested under Linux, although it should be
+       portable to any other UNIX supported by Geant4.
+3.  Currently, this distribution does not support:
+      histograms, trajectory stores, n-tuples, track parallelism,
+      interactive input commands (no macrofile)
+    I plan to add those features according to demand.
+       Probably:  a. histograms (I believe histograms work now, but I don't
+                        have a ready test application.  If someone does, could
+                        you either check yourself if the parallelization works
+                        for histograms, or tell me, and I'll parallelize it.)
+                  b. track-level parallelism
+                  c. allowing interactive input
+                  d. other
+
+ + +

+ParGeant4 has been demonstrated to run over the Computational Grid +using a new TOP-C communication layer, with support for the Grid, +based on Ampic. See related paper: +
+ G. Cooperman, H. Casanova, J. Hayes and T. Witzel, +``Using TOP-C and AMPIC to Port Large Parallel Applications + to the Computational Grid'', + Proc. of 2nd IEEC/ACM Interantional Symposium + on Cluster Computing and the Grid (CCGrid), 2002, + to appear + + +

+(This material is based in part upon work supported by the National Science +Foundation under Grants No. 9732330 and 9872114. Any opinions, findings, and +conclusions or recommendations expressed in this material are those of +the author(s) and do not necessarily reflect the views of the National +Science Foundation.) +

+

+Gene Cooperman
+College of Computer Science, 215CN
+Northeastern University
+Boston, MA 02115
+e-mail: gene@ccs.neu.edu
+Phone: (617) 373-8686
+Fax: (617) 373-5121 +
+ + + + diff --git a/examples/extended/parameterisations/.README.txt b/examples/extended/parameterisations/.README.txt new file mode 100644 index 0000000000..aedf341a02 --- /dev/null +++ b/examples/extended/parameterisations/.README.txt @@ -0,0 +1,39 @@ + +///\file "parameterisations/.README.txt" +///\brief Examples parameterisations README page + +/*! \page Examples_parameterisations Category "parameterisations" + + Examples in this directory demonstrate use of parameterisation libraries. + Currently, two examples are provided: + +\link ExamplePar01 Par01 \endlink + +This example demonstrates the use of parameterisation facilities. +It was moved in extended examples from novice/N05 with removal of +novice examples. + +\link ExamplePar02 Par02 \endlink + +This example shows how to do "track and energy smearing" in Geant4, +in order to have a very fast simulation based on assumed detector +resolutions. + +\link ExamplePar03 Par03 \endlink + +This example demonstrates how to create multiple energy deposits +from the fast simulation model and store it alongside deposits created +in full/detailed simulation. + +\link ExamplePar04 Par04 \endlink + +This example demonstrates how to use machine-learning aided fast simulation +of electromagnetic showers. It runs inference using an external library: +either ONNX Runtime, or LWTNN. + +\link Examples_gflash gflash \endlink + +Set of examples demonstrating the use of the GFLASH parameterisation library. + +*/ + diff --git a/examples/extended/parameterisations/Par01/.README.txt b/examples/extended/parameterisations/Par01/.README.txt new file mode 100644 index 0000000000..936fb54aa2 --- /dev/null +++ b/examples/extended/parameterisations/Par01/.README.txt @@ -0,0 +1,76 @@ + +///\file "parameterisations/Par01/.README.txt" +///\brief Example Par01 README page + +/*! \page ExamplePar01 Example Par01 + +Example Par01 provides examples of the use of parameterisation facilities. +It was moved in extended examples from novice/N05 with removal of +novice examples. + +Geometry, sensitive detector, hits, processes are defined respectively in: +- Par01DetectorConstruction +- Par01CalorimeterSD +- Par01CalorimeterHit + +The particularities are: + +- The parameterisation models: + + - Par01EMShowerModel which provides a crude + parameterisation for e+/e-/gamma. This model + is bound to the EM calorimeter. \n\n + + - Par01PionShowerModel: an even more crude + parameterisation for pi+/pi-. This model + is bound to a ghost volume. \n\n + + Those two models produces "hits": ie the energy + of the incident particle is distributed into + the volume of the envelope throught energy spots + (class Par01EnergySpot), those energy spots being + recorded in the sensitive detector at this point + if any. \n\n + + They are rather similar from a technical point of vue. + They both make use of a private G4Navigator to set + their energy spots into the sensitive volumes. + However, we don't take care of putting every spot into + a sensitive (which is recommended in a "serious" + parameterisation !). \n\n + + Those two models trigger their parameterisation + on the first step the particle does in the envelope, + but it would be perfectly possible to wait that the + particle is far enough from the boundary of the envelope + for example. \n\n + + - Par01PiModel: just there to show how a parameterisation + can create secondaries, but not used. \n\n + +- Par01PhysicsList::AddParameterisation(). A method which + sets the G4FastSimulationManagerProcess in the process + manager of all the particles. This process provides + the INTERFACE between the tracking and the parameterisation + models. \n\n + +- In Par01DetectorConstruction::Construct(): the parameterisation + models are built and bound to envelopes: \n\n + + - Par01EMShowerModel is bound to the electromagnetic + calorimeter \n\n + + - Par01PionShowerModel is bound to a ghost volume + which encompasses the electromagnetic and + hadronic calorimters \n\n + +- The Physics list used is FTFP_BERT which is augmented using the + G4FastSimulationPhysics physics constructor to insert the + G4FastSimulationManagerProcess that is making the interface + between the fast simulation and the tracking. + The configuration is shown in examlePar01.cc. + +*/ + + + diff --git a/examples/extended/parameterisations/Par01/README b/examples/extended/parameterisations/Par01/README new file mode 100644 index 0000000000..4a846dbc75 --- /dev/null +++ b/examples/extended/parameterisations/Par01/README @@ -0,0 +1,72 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example Par01 + ------------- + +Example Par01 provides examples of the use of parameterisation facilities. +It was moved in extended examples from novice/N05 with removal of +novice examples. + +Geometry, sensitive detector, hits, processes are defined respectively in: + + Par01DetectorConstruction + Par01CalorimeterSD + Par01CalorimeterHit + +The particularities are: + + o The parameterisation models: + + o Par01EMShowerModel which provides a crude + parameterisation for e+/e-/gamma. This model + is bound to the EM calorimeter. + + o Par01PionShowerModel: an even more crude + parameterisation for pi+/pi-. This model + is bound to a ghost volume. + + Those two models produces "hits": ie the energy + of the incident particle is distributed into + the volume of the envelope throught energy spots + (class Par01EnergySpot), those energy spots being + recorded in the sensitive detector at this point + if any. + + They are rather similar from a technical point of vue. + They both make use of a private G4Navigator to set + their energy spots into the sensitive volumes. + However, we don't take care of putting every spot into + a sensitive (which is recommended in a "serious" + parameterisation !). + + Those two models trigger their parameterisation + on the first step the particle does in the envelope, + but it would be perfectly possible to wait that the + particle is far enough from the boundary of the envelope + for example. + + o Par01PiModel: just there to show how a parameterisation + can create secondaries, but not used. + + o Par01DetectorConstruction::Construct: in this method, the parameterisation + models are built and bound to envelopes: + + o Par01EMShowerModel is bound to the electromagnetic + calorimeter + + o Par01PionShowerModel is bound to a ghost volume + which encompasses the electromagnetic and + hadronic calorimters + + o The Physics list used is FTFP_BERT which is augmented using the + G4FastSimulationPhysics physics constructor to insert the + G4FastSimulationManagerProcess that is making the interface + between the fast simulation and the tracking. + The configuration is shown in examlePar01.cc. + + + diff --git a/examples/extended/parameterisations/Par02/.README.txt b/examples/extended/parameterisations/Par02/.README.txt new file mode 100644 index 0000000000..aa39273ae7 --- /dev/null +++ b/examples/extended/parameterisations/Par02/.README.txt @@ -0,0 +1,250 @@ + +///\file "parameterisations/Par02/.README.txt" +///\brief Example Par02 README page + +/*! \page ExamplePar02 Example Par02 + + This example is a simplified version of a Geant4-based fast simulation + program written by Anna Zaborowska for Future Circular Collider (FCC) + studies. + + This example shows how to do "track and energy smearing" in Geant4, + in order to have a very fast simulation based on assumed detector + resolutions. + + The geometry which is considered is a simplified collider detector set-up, + inspired by ALEPH/ATLAS/CMS detectors. Although it is much simpler than + a realistic detector, it is anyhow fairly complex and therefore build up + from a GDML file, Par02FullDetector.gdml . + + In this example: + - Particles with transverse momentum less than 1 MeV or pseudorapidity + larger (in module) than 5.5 are neglected (i.e. the corresponding + Geant4 track is killed as soon as it is created). + - Any primary charged particle is smeared in the tracker as follows: + its momentum is smeared according to a gaussian, with mean equal to 1.0 + and sigma taken from the momentum resolution of the CMS tracker + (with ALEPH or ATLAS tracker as a possible alternative), and then placed + at the end of the tracker, at the position that it would reach if + normally transported (i.e. without smearing). + - Any primary electron, or positron, or gamma is smeared in the + electromagnetic calorimeter as follows: it is killed at the entrance + of the electromagnetic calorimeter, with a deposited energy equal to + the gaussian smearing (with mean equal to 1.0 and sigma taken from the + energy resolution of the CMS electromagnetic calorimeter - with ALEPH or + ATLAS electromagnetic calorimeter as a possible alternative) of its + kinetic energy (at the entrance of the electromagnetic calorimeter). + - Any primary hadron is smeared in the hadronic calorimeter as follows: + it is killed at the entrance of the hadronic calorimeter, with a + deposited energy equal to the gaussian smearing (with mean equal to 1.0 + and sigma taken from the energy resolution of the CMS hadronic + calorimeter - with ALEPH or ATLAS hadronic calorimeter as a possible + alternative) of its kinetic energy (at the entrance of the hadronic + calorimeter). + - The only competing physical processes with respect to the above physics + parametrisations are the decays. + Note: no electromagnetic processes; + no momentum smearing in the tracker for secondary particles; + secondary electrons, positrons, gammas in the electromagnetic + calorimeter are killed (at the entrance) but without any + energy deposition; + secondary hadrons in the hadronic calorimeter are killed (at the + entrance) but without any energy deposition. + + + Below some details. + + + \section Par02_s1 Detector description + + The geometry is read in from a GDML file, Par02FullDetector.gdml . + + The geometry is a simplified collider detector set-up used for the + first FCC studies, inspired by ALEPH/ATLAS/CMS detectors. + It is made of 4 main parts: + - Tracker + - Electromagnetic calorimeter + - Hadronic calorimeter + - Muon subdetector + + In this example, fast simulation parametrisation models exist for the + first three subdetectors, but not for the Muon subdetector. + The three parametrisation models: + - Par02FastSimModelTracker : in the tracker + - Par02FastSimModelEMCal : in the electromagnetic calorimeter + - Par02FastSimModelHCal : in the hadronic calorimeter + are build and bound to the respective subdetector (i.e. Geant4 regions) + in the method: Par02DetectorConstruction::Construct() . + + Three configurations are possible for those parametrisation models: + CMS-like, ALEPH-like, ATLAS-like. + By default, the CMS configuration is used. + + + \section Par02_s2 Primary generation + + In this example we use a very simple primary generation action, + Par02PrimaryGeneratorAction, that uses the G4ParticleGun. + One single particle type, with a well defined energy, and in one fixed + direction is used for each run: the corresponding values can be set via + macro commands. See examplePar02.in as an example. + + For the FCC studies, Pythia8 events in HepMC format were used for the + generation of the primary particles. + + + \section Par02_s3 Physics List + + A special, ad-hoc physics list is used in this example, in order to have + an ultra-fast parametrised simulation: for all particles, the only two + physics processes that are assigned are the decay process and the fast + simulation process. + The following three fast simulation models are defined: + + - Par02FastSimModelTracker : + - bound to the tracker + (see the method Par02DetectorConstruction::Construct ) + - applicable to all charged particles + (see the method Par02FastSimModelTracker::IsApplicable ) + - triggered in all cases (i.e. no kinematic constraints) + (see the method Par02FastSimModelTracker::ModelTrigger ) + - does the following: place the particle at the tracking detector exit + (at the place the particle would reach without smearing), and, only + if the particle is a primary, it smears the momentum of the particle + according to a gaussian, with mean equal to 1.0 and sigma taken from + the momentum resolution of the CMS tracker (with ALEPH or ATLAS tracker + as a possible alternative) + (see the method Par02FastSimModelTracker::DoIt ) + + - Par02FastSimModelEMCal : + - bound to the electromagnetic calorimeter + (see the method Par02DetectorConstruction::Construct ) + - applicable to electrons, positrons, gammas + (see the method Par02FastSimModelEMCal::IsApplicable ) + - triggered in all cases (i.e. no kinematic constraints) + (see the method Par02FastSimModelEMCal::ModelTrigger ) + - does the following: kill the particle at the entrance of the + electromagnetic calorimeter, and, only if the particle is a primary, + it deposits in the electromagnetic calorimeter an energy obtained + by a gaussian smearing (with mean equal to 1.0 and sigma taken from the + energy resolution of the CMS electromagnetic calorimeter - with ALEPH + or ATLAS electromagnetic calorimeter as a possible alternative) of the + particle kinetic energy (at the entrance of the electromagnetic + calorimeter) + (see the method Par02FastSimModelEMCal::DoIt ) + + - Par02FastSimModelHCal : + - bound to the hadronic calorimeter + (see the method Par02DetectorConstruction::Construct ) + - applicable to all hadrons (i.e. particles made of quarks) + (see the method Par02FastSimModelHCal::IsApplicable ) + - triggered in all cases (i.e. no kinematic constraints) + (see the method Par02FastSimModelHCal::ModelTrigger ) + - does the following: kill the particle at the entrance of the + hadronic calorimeter, and, only if the particle is a primary, + it deposits in the hadronic calorimeter an energy obtained by a + gaussian smearing (with mean equal to 1.0 and sigma taken from the + energy resolution of the CMS hadronic calorimeter - with ALEPH + or ATLAS hadronic calorimeter as a possible alternative) of the + particle kinetic energy (at the entrance of the hadronic + calorimeter) + (see the method Par02FastSimModelHCal::DoIt ) + + + \section Par02_s4 User actions, user information and user utility classes + + - Par02RunAction : run action used for initialization and termination + of the run. + + - Par02EventAction : event action used for initialization and termination + of the event. + + - Par02TrackingAction : tracking action used for killing particles with + transverse momentum less than 1 MeV or + pseudorapidity larger (in module) than 5.5 + (see method Par02TrackingAction::PreUserTrackingAction ) + and to store the information about the track at + the end of the simulation of such a track + (see method Par02TrackingAction::PostUserTrackingAction ). + + - Par02ActionInitialization : initialization of the primary generator class + and all user-defined actions (i.e. the three + classes above). + + - Par02PrimaryParticleInformation : utility class to store information + associated with a primary particle. + + - Par02EventInformation : utility class to store information associated + with a Geant4 event. + + - Par02DetectorParametrisation : a simple class used to provide the detector + resolution and efficiency, according to the + type of detector: tracker, electromagnetic + calorimeter, hadronic calorimeter. + There are 3 choices: CMS-like (default), + ALEPH-like and ATLAS-like. + The efficiency is currently set to 1.0 in + all cases and not used. + + - Par02Smearer : a simple class that does the gaussian smearing, either + of the momentum (in the tracker detector) or in energy + (in the electromagnetic or hadronic calorimeter). + + + \section Par02_s5 Output + + The execution of the program (examplePar02) produces in output, at the end + of a run, a Root file, by default named DefaultOutput.root, which contains + 3 histograms and one ntuple. + + The macro file examplePar02.in specifies one run made of 1000 events + each consisting of one 50 GeV electron. + By editing the file, one could select alternatively a run made of 1000 + events each consisting of one 100 GeV muon, or a run made of 1000 events + each consisting of one 20 GeV pion- . + + See the class Par02Output for the definition of the 3 histograms and the + ntuples. Here is a quick summary: + - histogram of the ratio of the momentum smeared and the original momentum + in the tracker (for primary charged particles); + - histogram of the ratio of the smeared energy deposited and the original + energy at the entrance in the electromagnetic calorimeter (for primary + electrons, positrons and gammas); + - histogram of the ratio of the smeared energy deposited and the original + energy at the entrance in the hadronic calorimeter (for primary hadrons); + - ntuple containing the "Monte-Carlo true" information regarding the + primary, and the resolution, efficiency, smeared momentum (tracker), + smeared energy (calorimeter) and impact position (calorimeter) of each + subdetector (tracker, electromagnetic calorimeter, hadronic calorimeter) + where the primary is parametrised (tracker and electromagnetic calorimeter + in the case of primary electrons, positrons and gammas; tracker and + hadronic calorimeter in the case of primary hadrons; tracker only for + all other primary charged particles, e.g. muons). + + Note: + - you do not need to have the Root package available to run this example, + but you need it if you want to look at the histograms and the ntuple + contained in the Root output file; + - because the class Par02Output is a singleton, this example must be run + in sequential mode, not in multi-threaded mode; + - sensitive detectors and hits are not used in this example. + + + \section Par02_s6 How to build and run the example + +- You need to have built the Geant4 persistency/gdml module by having set + the -DGEANT4_USE_GDML=ON flag during the CMAKE configuration step, + as well as the -DXERCESC_ROOT_DIR=path_to_xercesc flag pointing to + the path where the XercesC XML parser package is installed in your system. + +- Compile and link to generate the executable (in your CMAKE build directory): +\verbatim + % make +\endverbatim +- Execute the application: +\verbatim + % examplePar02 examplePar02.in +\endverbatim + which produces one Root file: DefaultOutput.root . + +*/ diff --git a/examples/extended/parameterisations/Par02/README b/examples/extended/parameterisations/Par02/README new file mode 100644 index 0000000000..c59af89f06 --- /dev/null +++ b/examples/extended/parameterisations/Par02/README @@ -0,0 +1,254 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example Par02 + ------------- + + This example is a simplified version of a Geant4-based fast simulation + program written by Anna Zaborowska for Future Circular Collider (FCC) + studies. + + This example shows how to do "track and energy smearing" in Geant4, + in order to have a very fast simulation based on assumed detector + resolutions. + + The geometry which is considered is a simplified collider detector set-up, + inspired by ALEPH/ATLAS/CMS detectors. Although it is much simpler than + a realistic detector, it is anyhow fairly complex and therefore build up + from a GDML file, Par02FullDetector.gdml . + + In this example: + - Particles with transverse momentum less than 1 MeV or pseudorapidity + larger (in module) than 5.5 are neglected (i.e. the corresponding + Geant4 track is killed as soon as it is created). + - Any primary charged particle is smeared in the tracker as follows: + its momentum is smeared according to a gaussian, with mean equal to 1.0 + and sigma taken from the momentum resolution of the CMS tracker + (with ALEPH or ATLAS tracker as a possible alternative), and then placed + at the end of the tracker, at the position that it would reach if + normally transported (i.e. without smearing). + - Any primary electron, or positron, or gamma is smeared in the + electromagnetic calorimeter as follows: it is killed at the entrance + of the electromagnetic calorimeter, with a deposited energy equal to + the gaussian smearing (with mean equal to 1.0 and sigma taken from the + energy resolution of the CMS electromagnetic calorimeter - with ALEPH or + ATLAS electromagnetic calorimeter as a possible alternative) of its + kinetic energy (at the entrance of the electromagnetic calorimeter). + - Any primary hadron is smeared in the hadronic calorimeter as follows: + it is killed at the entrance of the hadronic calorimeter, with a + deposited energy equal to the gaussian smearing (with mean equal to 1.0 + and sigma taken from the energy resolution of the CMS hadronic + calorimeter - with ALEPH or ATLAS hadronic calorimeter as a possible + alternative) of its kinetic energy (at the entrance of the hadronic + calorimeter). + - The only competing physical processes with respect to the above physics + parametrisations are the decays. + Note: no electromagnetic processes; + no momentum smearing in the tracker for secondary particles; + secondary electrons, positrons, gammas in the electromagnetic + calorimeter are killed (at the entrance) but without any + energy deposition; + secondary hadrons in the hadronic calorimeter are killed (at the + entrance) but without any energy deposition. + + + Below some details. + + + 1. Detector description + ----------------------- + + The geometry is read in from a GDML file, Par02FullDetector.gdml . + + The geometry is a simplified collider detector set-up used for the + first FCC studies, inspired by ALEPH/ATLAS/CMS detectors. + It is made of 4 main parts: + - Tracker + - Electromagnetic calorimeter + - Hadronic calorimeter + - Muon subdetector + + In this example, fast simulation parametrisation models exist for the + first three subdetectors, but not for the Muon subdetector. + The three parametrisation models: + - Par02FastSimModelTracker : in the tracker + - Par02FastSimModelEMCal : in the electromagnetic calorimeter + - Par02FastSimModelHCal : in the hadronic calorimeter + are build and bound to the respective subdetector (i.e. Geant4 regions) + in the method: Par02DetectorConstruction::Construct() . + + Three configurations are possible for those parametrisation models: + CMS-like, ALEPH-like, ATLAS-like. + By default, the CMS configuration is used. + + + 2. Primary generation + --------------------- + + In this example we use a very simple primary generation action, + Par02PrimaryGeneratorAction, that uses the G4ParticleGun. + One single particle type, with a well defined energy, and in one fixed + direction is used for each run: the corresponding values can be set via + macro commands. See examplePar02.in as an example. + + For the FCC studies, Pythia8 events in HepMC format were used for the + generation of the primary particles. + + + 3. Physics List + --------------- + + A special, ad-hoc physics list is used in this example, in order to have + an ultra-fast parametrised simulation: for all particles, the only two + physics processes that are assigned are the decay process and the fast + simulation process. + The following three fast simulation models are defined: + + - Par02FastSimModelTracker : + - bound to the tracker + (see the method Par02DetectorConstruction::Construct ) + - applicable to all charged particles + (see the method Par02FastSimModelTracker::IsApplicable ) + - triggered in all cases (i.e. no kinematic constraints) + (see the method Par02FastSimModelTracker::ModelTrigger ) + - does the following: place the particle at the tracking detector exit + (at the place the particle would reach without smearing), and, only + if the particle is a primary, it smears the momentum of the particle + according to a gaussian, with mean equal to 1.0 and sigma taken from + the momentum resolution of the CMS tracker (with ALEPH or ATLAS tracker + as a possible alternative) + (see the method Par02FastSimModelTracker::DoIt ) + + - Par02FastSimModelEMCal : + - bound to the electromagnetic calorimeter + (see the method Par02DetectorConstruction::Construct ) + - applicable to electrons, positrons, gammas + (see the method Par02FastSimModelEMCal::IsApplicable ) + - triggered in all cases (i.e. no kinematic constraints) + (see the method Par02FastSimModelEMCal::ModelTrigger ) + - does the following: kill the particle at the entrance of the + electromagnetic calorimeter, and, only if the particle is a primary, + it deposits in the electromagnetic calorimeter an energy obtained + by a gaussian smearing (with mean equal to 1.0 and sigma taken from the + energy resolution of the CMS electromagnetic calorimeter - with ALEPH + or ATLAS electromagnetic calorimeter as a possible alternative) of the + particle kinetic energy (at the entrance of the electromagnetic + calorimeter) + (see the method Par02FastSimModelEMCal::DoIt ) + + - Par02FastSimModelHCal : + - bound to the hadronic calorimeter + (see the method Par02DetectorConstruction::Construct ) + - applicable to all hadrons (i.e. particles made of quarks) + (see the method Par02FastSimModelHCal::IsApplicable ) + - triggered in all cases (i.e. no kinematic constraints) + (see the method Par02FastSimModelHCal::ModelTrigger ) + - does the following: kill the particle at the entrance of the + hadronic calorimeter, and, only if the particle is a primary, + it deposits in the hadronic calorimeter an energy obtained by a + gaussian smearing (with mean equal to 1.0 and sigma taken from the + energy resolution of the CMS hadronic calorimeter - with ALEPH + or ATLAS hadronic calorimeter as a possible alternative) of the + particle kinetic energy (at the entrance of the hadronic + calorimeter) + (see the method Par02FastSimModelHCal::DoIt ) + + + 4. User actions, user information and user utility classes + ---------------------------------------------------------- + + - Par02RunAction : run action used for initialization and termination + of the run. + + - Par02EventAction : event action used for initialization and termination + of the event. + + - Par02TrackingAction : tracking action used for killing particles with + transverse momentum less than 1 MeV or + pseudorapidity larger (in module) than 5.5 + (see method Par02TrackingAction::PreUserTrackingAction ) + and to store the information about the track at + the end of the simulation of such a track + (see method Par02TrackingAction::PostUserTrackingAction ). + + - Par02ActionInitialization : initialization of the primary generator class + and all user-defined actions (i.e. the three + classes above). + + - Par02PrimaryParticleInformation : utility class to store information + associated with a primary particle. + + - Par02EventInformation : utility class to store information associated + with a Geant4 event. + + - Par02DetectorParametrisation : a simple class used to provide the detector + resolution and efficiency, according to the + type of detector: tracker, electromagnetic + calorimeter, hadronic calorimeter. + There are 3 choices: CMS-like (default), + ALEPH-like and ATLAS-like. + The efficiency is currently set to 1.0 in + all cases and not used. + + - Par02Smearer : a simple class that does the gaussian smearing, either + of the momentum (in the tracker detector) or in energy + (in the electromagnetic or hadronic calorimeter). + + + 5. Output + --------- + + The execution of the program (examplePar02) produces in output, at the end + of a run, a Root file, by default named DefaultOutput.root, which contains + 3 histograms and one ntuple. + + The macro file examplePar02.in specifies one run made of 1000 events + each consisting of one 50 GeV electron. + By editing the file, one could select alternatively a run made of 1000 + events each consisting of one 100 GeV muon, or a run made of 1000 events + each consisting of one 20 GeV pion- . + + See the class Par02Output for the definition of the 3 histograms and the + ntuples. Here is a quick summary: + - histogram of the ratio of the momentum smeared and the original momentum + in the tracker (for primary charged particles); + - histogram of the ratio of the smeared energy deposited and the original + energy at the entrance in the electromagnetic calorimeter (for primary + electrons, positrons and gammas); + - histogram of the ratio of the smeared energy deposited and the original + energy at the entrance in the hadronic calorimeter (for primary hadrons); + - ntuple containing the "Monte-Carlo true" information regarding the + primary, and the resolution, efficiency, smeared momentum (tracker), + smeared energy (calorimeter) and impact position (calorimeter) of each + subdetector (tracker, electromagnetic calorimeter, hadronic calorimeter) + where the primary is parametrised (tracker and electromagnetic calorimeter + in the case of primary electrons, positrons and gammas; tracker and + hadronic calorimeter in the case of primary hadrons; tracker only for + all other primary charged particles, e.g. muons). + + Note: + - you do not need to have the Root package available to run this example, + but you need it if you want to look at the histograms and the ntuple + contained in the Root output file; + - sensitive detectors and hits are not used in this example. + + + 6. How to build and run the example + ----------------------------------- + +- You need to have built the Geant4 persistency/gdml module by having set + the -DGEANT4_USE_GDML=ON flag during the CMAKE configuration step, + as well as the -DXERCESC_ROOT_DIR= flag pointing to + the path where the XercesC XML parser package is installed in your system. + +- Compile and link to generate the executable (in your CMAKE build directory): + % make + +- Execute the application: + % examplePar02 examplePar02.in + + which produces one Root file: DefaultOutput.root . + diff --git a/examples/extended/parameterisations/Par03/.README.txt b/examples/extended/parameterisations/Par03/.README.txt new file mode 100644 index 0000000000..3ffbc7bbb6 --- /dev/null +++ b/examples/extended/parameterisations/Par03/.README.txt @@ -0,0 +1,134 @@ +///\file "parameterisations/Par03/.README.txt" +///\brief Example Par03 README page + +/*! \page ExamplePar03 Example Par03 + + This example demonstrates how to use G4FastSimHitMaker helper class + to create multiple energy deposits from the fast simulation model. + + It requires sensitive detector class to inherit from both base classes: + - G4VSensitiveDetector: for processing of detailed/non-fast simulation hits + - G4VFastSimSensitiveDetector: for processing of fast sim (G4FastSim) hits + Hits are placed in the same hit collection, so they can be used to + compare between the full and the fast simulation. + + The geometry used in the example is a homogeneous cylinder of lead, with + 3D readout geometry (cylindrical). Analysis of energy deposits is done + in the event action. + +\section Par03_s1 Detector description + + The detector is a homogeneous cylinder of lead. It is segmented along + z, R and phi to create a readout geometry in the cylindrical coordinates. + + Fast simulation is attached to the region of the detector. + + +\section Par03_s2 Sensitive detector + + Sensitive detector inherits from both base classes: + - G4VSensitiveDetector: for processing of detailed/non-fast simulation hits + - G4VFastSimSensitiveDetector: for processing of fast sim (G4FastSim) hits. + Hits are placed in the same hit collection, with a different flag to distinguish + between those originated in the full simulation, and those from the fast + simulation. + During visualisation, hits are represented as volumes of different colour: + green for full simulation and red for fast simulation. + +\section Par03_s3 Primary generation + + Particle gun is used as a primary generator. The direction of particles is along + the axis of symmetry of the detector (cylinder). It is positioned 10 cm in front + of the entrance to the detector. 10 GeV electron is used by default. Those values + can be changed using /gun/ UI commands. + +\section Par03_s4 Physics List + + FTFP_BERT modular physics list is used. On top of it, fast simulation physics + is registered for selected particles (electrons, positrons, and photons). + + +\section Par03_s5 User actions + + - Par03RunAction : run action used for initialization and termination + of the run. Histograms for analysis of shower development + in the detector are created. + + - Par03EventAction : event action used for initialization and termination + of the event. Analysis of shower development is performed + on event-by-event basis. + +\section Par03_s6 Output + + The execution of the program (examplePar03) produces an output with histograms. + + The macro file examplePar03.in specifies three runs. Each run is made of 100 + events, for single 10 GeV electron beams. The first run is executed with fast + simulation model activated with defualt parameters. The second run executes fast + simulation with modified parameters. For the third run the fast simulation model + is disactivated. + Three output files are produced: two with shower development from the fast + simulation (with different parameters), and from the full simulation. + +\section Par03_s7 How to build and run the example + +- Compile and link to generate the executable (in your CMAKE build directory): +\verbatim +% cmake +% make +\endverbatim + +- Execute the application (in batch mode): +\verbatim +% ./examplePar03 -m examplePar03.in +\endverbatim + which produces three root files: Par03_fastsim_100events.root, + Par03_fastsimModified_100events.root, and Par03_fullsim_100events.root. + +- Execute the application (in interactive mode): +\verbatim +% ./examplePar03 +\endverbatim + which allows to visualize hits. + +\section Par03_s8 UI commands + +UI commands useful in this example: + +- activation/disactivation of the fast simulation model: +\verbatim +/param/ActivateModel model +/param/InActivateModel model +\endverbatim + +- particle gun commands +\verbatim +/gun/particle e+ +/gun/energy 50 GeV +/gun/direction 0 0.2 1 +/gun/position 0 0 0 +\endverbatim + +UI commands defined in this example: +- detector settings +\verbatim +/Par03/detector/print +/Par03/detector/setDetectorRadius 10 cm +/Par03/detector/setDetectorLength 30 cm +/Par03/detector/setDetectorMaterial G4_Pb +/Par03/detector/setNbOfLayers 100 +/Par03/detector/setNbOfPhiCells 20 +/Par03/detector/setNbOfRhoCells 100 +\endverbatim + +- fast simulation settings +\verbatim +/Par03/fastSim/print +/Par03/fastSim/transverseProfile/sigma 20 mm +/Par03/fastSim/longitudinalProfile/beta 0.6 +/Par03/fastSim/longitudinalProfile/alpha 2. +/Par03/fastSim/longitudinalProfile/maxDepth 20 +/Par03/fastSim/numberOfHits 500 +\endverbatim + +*/ diff --git a/examples/extended/parameterisations/Par03/README b/examples/extended/parameterisations/Par03/README new file mode 100644 index 0000000000..e304420cca --- /dev/null +++ b/examples/extended/parameterisations/Par03/README @@ -0,0 +1,130 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example Par03 + ------------- + + This example demonstrates how to use G4FastSimHitMaker helper class + to create multiple energy deposits from the fast simulation model. + + It requires sensitive detector class to inherit from both base classes: + - G4VSensitiveDetector: for processing of detailed/non-fast simulation hits + - G4VFastSimSensitiveDetector: for processing of fast sim (G4FastSim) hits + Hits are placed in the same hit collection, so they can be used to + compare between the full and the fast simulation. + + The geometry used in the example is a homogeneous cylinder of lead, with + 3D readout geometry (cylindrical). Analysis of energy deposits is done + in the event action. + + 1. Detector description + ----------------------- + + The detector is a homogeneous cylinder of lead. It is segmented along + z, R and phi to create a readout geometry in the cylindrical coordinates. + + Fast simulation is attached to the region of the detector. + + + 2. Sensitive detector + ----------------------- + + Sensitive detector inherits from both base classes: + - G4VSensitiveDetector: for processing of detailed/non-fast simulation hits + - G4VFastSimSensitiveDetector: for processing of fast sim (G4FastSim) hits. + Hits are placed in the same hit collection, with a different flag to distinguish + between those originated in the full simulation, and those from the fast + simulation. + During visualisation, hits are represented as volumes of different colour: + green for full simulation and red for fast simulation. + + 3. Primary generation + --------------------- + + Particle gun is used as a primary generator. The direction of particles is along + the axis of symmetry of the detector (cylinder). It is positioned 10 cm in front + of the entrance to the detector. 10 GeV electron is used by default. Those values + can be changed using /gun/ UI commands. + + 4. Physics List + --------------- + + FTFP_BERT modular physics list is used. On top of it, fast simulation physics + is registered for selected particles (electrons, positrons, and photons). + + + 5. User actions + ---------------------------------------------------------- + + - Par03RunAction : run action used for initialization and termination + of the run. Histograms for analysis of shower development + in the detector are created. + + - Par03EventAction : event action used for initialization and termination + of the event. Analysis of shower development is performed + on event-by-event basis. + + 6. Output + --------- + + The execution of the program (examplePar03) produces an output with histograms. + + The macro file examplePar03.in specifies three runs. Each run is made of 100 + events, for single 10 GeV electron beams. The first run is executed with fast + simulation model activated with defualt parameters. The second run executes fast + simulation with modified parameters. For the third run the fast simulation model + is disactivated. + Three output files are produced: two with shower development from the fast + simulation (with different parameters), and from the full simulation. + + 7. How to build and run the example + ----------------------------------- + +- Compile and link to generate the executable (in your CMAKE build directory): + % cmake + % make + +- Execute the application (in batch mode): + % ./examplePar03 -m examplePar03.in + which produces three root files: Par03_fastsim_100events.root, + Par03_fastsimModified_100events.root, and Par03_fullsim_100events.root. + +- Execute the application (in interactive mode): + % ./examplePar03 + which allows to visualize hits. + + 8. UI commands + -------------- + + UI commands useful in this example: + +- activation/disactivation of the fast simulation model: + /param/ActivateModel model + /param/InActivateModel model + +- particle gun commands + /gun/particle e+ + /gun/energy 50 GeV + /gun/direction 0 0.2 1 + /gun/position 0 0 0 + + UI commands defined in this example: + - detector settings + /Par03/detector/print + /Par03/detector/setDetectorRadius 10 cm + /Par03/detector/setDetectorLength 30 cm + /Par03/detector/setDetectorMaterial G4_Pb + /Par03/detector/setNbOfLayers 100 + /Par03/detector/setNbOfPhiCells 20 + /Par03/detector/setNbOfRhoCells 100 + + - fast simulation settings + /Par03/fastSim/print + /Par03/fastSim/transverseProfile/sigma 20 mm + /Par03/fastSim/longitudinalProfile/beta 0.6 + /Par03/fastSim/longitudinalProfile/alpha 2. + /Par03/fastSim/longitudinalProfile/maxDepth 20 + /Par03/fastSim/numberOfHits 500 \ No newline at end of file diff --git a/examples/extended/parameterisations/Par04/.README.txt b/examples/extended/parameterisations/Par04/.README.txt new file mode 100644 index 0000000000..ad9cd48b47 --- /dev/null +++ b/examples/extended/parameterisations/Par04/.README.txt @@ -0,0 +1,191 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example Par04 + ------------- + + This example demonstrates how to use the Machine Learning (ML) inference + to create energy deposits as a fast simulation model using +ONNX runtime + and LWTNN libraries. + + The model used in this example was trained externally (in Python) on data + from this examples' full simulation and can be applied to perform fast simulation + + The geometry used in the example is a cylindrical setup of layers: tungsten + absorber and silicon as the active material. 3D readout geometry (cylindrical) + is defined dynamically, based on the particle direction at the entrance to the + calorimeter. This is set using a fast simulation model that is triggered at + detector entrance. Analysis of energy deposits is done in the event action, + ntuple with hits is stored. + + ## 1. Detector description + + The detector consists of cylindrical layers of passive and active material, + tungsten and silicon, respectively. + + Fast simulation is attached to the region of the detector. + + Input macro can specify which layer is considered an active layer (sensitive + detector is attached to it). For fast simulation both layers should be marked + as sensitive. It is connected to the wway the deposits are created: position is + centre of the layer, which may often fall within the absorber (which is thicker + than the active material). In a realistic detector setup, the positions used in + fast simulation would be calculated properly, to deposit energy within the active + material. + + ## 2. Sensitive detector + + Sensitive detector inherits from both base classes: + - G4VSensitiveDetector: for processing of detailed/non-fast simulation hits + - G4VFastSimSensitiveDetector: for processing of fast sim (G4FastSim) hits. + Hits are placed in the same hit collection, with a different flag to distinguish + between those originated in the full simulation, and those from the fast + simulation. + During visualisation, hits are represented as volumes of different colour: + green for full simulation and red for fast simulation. + + ## 3. Primary generation + + Particle gun is used as a primary generator. 10 GeV electron is used by default. + By default particles are generated along y axis. Those values + can be changed using /gun/ UI commands. + + ## 4. Physics List + + FTFP_BERT modular physics list is used. On top of it, fast simulation physics + is registered for selected particles (electrons, positrons). + + + ## 5. User actions + + - Par04RunAction : run action used for initialization and termination + of the run. Histograms for analysis of shower development + in the detector are created. + + - Par04EventAction : event action used for initialization and termination + of the event. Analysis of shower development is performed + on event-by-event basis. + + ## 6. ML Inference + + - Par04MLFastSimModel : model used for parametrisation of źelectrons, positrons, + and gammas. Energy is deposited and + distributed according to inferred values from the ML model. + This class triggers the inference setup, asks for values, + and deposits energies at given positions. + + - Par04InferenceSetup : this class is used to initialize the inference parameters + (user application specific) such as the inference library, + the path and name of the inference model and the size of + the input inference vector(latent dimension and and condition size). + This class constructs this vector and triggers the interface + corresponding to the specified input inference library. + After the inference, the post processing step consists of + scaling back inferred values to the original range. + + - Par04InferenceInterface : is a base class that allows to read in the ML model, configure + and execute inference. + + - Par04OnnxInference and Par04LWTNNInference : inference library specific classes that inherit + from the base class Par04InferenceInterface. + + + ## 7. Output + + The execution of the program (examplePar04) produces an output with histograms. + Ntuples are also stored. They are not merged if the application is run on multiple threads. + + The macro file examplePar04.in is used to run full simulation. It will simulate 100 + events, for single 10 GeV electron beams. + If CMake is able to find inference libraries (lwtnn and/or ONNX Runtime), a configuration + macro will be available for that library (examplePar04_lwtnn.in and/or examplePar04_onnx.in). + It will use a trained model to run inference and create showers in the detector by directly + depositing energy. + + ## 8. How to build and run the example + +- LWTNN and ONNX Runtime are available on LCG. In order to use them, one can setup the envirnment: + % source /cvmfs/sft.cern.ch/lcg/views/LCG_100/x86_64-centos7-gcc10-opt/setup.sh + +- Compile and link to generate the executable (in your CMAKE build directory): + % cmake + % make + +- Execute the application (in batch mode): + % ./examplePar04 -m examplePar04.in + which produces two root file for full simulation. + +- Execute the application (in interactive mode): + % ./examplePar04 + which allows to visualize hits. + +- If ONNX Runtime is available: + % ./examplePar04 -m examplePar04_onnx.in + +- If LWTNN is available: + % ./examplePar04 -m examplePar04_lwtnn.in + + By default, CMake will attempt to build fast simulation with ONNX Runtime and LWTNN. However, if none + of those libraries is found, it will proceed with full simulation only. The search can be switched + off manually switching CMake flag INFERENCE_LIB to OFF (-DINFERENCE_LIB=OFF) + + ## 9. Macros + + vis.mac - Allows to run visualization. It will be automatically run in interactive mode, if no + argument is passed to the executable (examplePar04) + + examplePar04.in - Runs full simulation. It will run 100 events with single electrons, 10 GeV and + along y axis. + + examplePar04_onnx.in - Available only if ONNX Runtime is found by CMake. Runs fast simulation with + a NN stored in onnx file. + + examplePar04_lwtnn.in - Available only if LWTNN is found by CMake. Runs fast simulation with + a NN stored in json file. + + ## 10. UI commands + + UI commands useful in this example: + +- activation/disactivation of the fast simulation model: + /param/ActivateModel inferenceModel + /param/InActivateModel inferenceModel + +- particle gun commands + /gun/particle e- + /gun/energy 10 GeV + /gun/direction 0 1 0 + /gun/position 0 0 0 + + UI commands defined in this example: + - detector settings + /Par04/detector/setDetectorInnerRadius 80 cm + /Par04/detector/setDetectorLength 2 m + /Par04/detector/setNbOfLayers 90 + /Par04/detector/setAbsorber 0 G4_W 1.4 mm false + /Par04/detector/setAbsorber 1 G4_Si 0.3 mm true + + - readout mesh + /Par04/mesh/setSizeOfRhoCells 2.325 mm + /Par04/mesh/setSizeOfZCells 3.4 mm + /Par04/mesh/setNbOfRhoCells 18 + /Par04/mesh/setNbOfPhiCells 50 + /Par04/mesh/setNbOfZCells 45 + + - inference setup + /Par04/inference/setSizeLatentVector 10 + /Par04/inference/setSizeConditionVector 4 + /Par04/inference/setModelPathName MLModels/Generator.onnx + /Par04/inference/setProfileFlag 0 + /Par04/inference/setOptimizationFlag 0 + /Par04/inference/setInferenceLibrary ONNX + /Par04/inference/setSizeOfRhoCells 2.325 mm + /Par04/inference/setSizeOfZCells 3.4 mm + /Par04/inference/setNbOfRhoCells 18 + /Par04/inference/setNbOfPhiCells 50 + /Par04/inference/setNbOfZCells 45 + diff --git a/examples/extended/parameterisations/Par04/README b/examples/extended/parameterisations/Par04/README new file mode 100644 index 0000000000..c673055eeb --- /dev/null +++ b/examples/extended/parameterisations/Par04/README @@ -0,0 +1,200 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example Par04 + ------------- + + This example demonstrates how to use the Machine Learning (ML) inference + to create energy deposits as a fast simulation model using ONNX runtime [1] + and LWTNN [2] libraries. + + The model used in this example was trained externally (in Python) on data + from this examples' full simulation and can be applied to perform fast simulation + + The geometry used in the example is a cylindrical setup of layers: tungsten + absorber and silicon as the active material. 3D readout geometry (cylindrical) + is defined dynamically, based on the particle direction at the entrance to the + calorimeter. This is set using a fast simulation model that is triggered at + detector entrance. Analysis of energy deposits is done in the event action, + ntuple with hits is stored. + + [1]: https://github.com/microsoft/onnxruntime + [2]: https://github.com/lwtnn/lwtnn + + 1. Detector description + ----------------------- + + The detector consists of cylindrical layers of passive and active material, + tungsten and silicon, respectively. + + Fast simulation is attached to the region of the detector. + + Input macro can specify which layer is considered an active layer (sensitive + detector is attached to it). For fast simulation both layers should be marked + as sensitive. It is connected to the wway the deposits are created: position is + centre of the layer, which may often fall within the absorber (which is thicker + than the active material). In a realistic detector setup, the positions used in + fast simulation would be calculated properly, to deposit energy within the active + material. + + 2. Sensitive detector + ----------------------- + + Sensitive detector inherits from both base classes: + - G4VSensitiveDetector: for processing of detailed/non-fast simulation hits + - G4VFastSimSensitiveDetector: for processing of fast sim (G4FastSim) hits. + Hits are placed in the same hit collection, with a different flag to distinguish + between those originated in the full simulation, and those from the fast + simulation. + During visualisation, hits are represented as volumes of different colour: + green for full simulation and red for fast simulation. + + 3. Primary generation + --------------------- + + Particle gun is used as a primary generator. 10 GeV electron is used by default. + By default particles are generated along y axis. Those values + can be changed using /gun/ UI commands. + + 4. Physics List + --------------- + + FTFP_BERT modular physics list is used. On top of it, fast simulation physics + is registered for selected particles (electrons, positrons). + + + 5. User actions + ---------------------------------------------------------- + + - Par04RunAction : run action used for initialization and termination + of the run. Histograms for analysis of shower development + in the detector are created. + + - Par04EventAction : event action used for initialization and termination + of the event. Analysis of shower development is performed + on event-by-event basis. + + 6. ML Inference + ---------------------------------------------------------- + - Par04MLFastSimModel : model used for parametrisation of źelectrons, positrons, + and gammas. Energy is deposited and + distributed according to inferred values from the ML model. + This class triggers the inference setup, asks for values, + and deposits energies at given positions. + + - Par04InferenceSetup : this class is used to initialize the inference parameters + (user application specific) such as the inference library, + the path and name of the inference model and the size of + the input inference vector(latent dimension and and condition size). + This class constructs this vector and triggers the interface + corresponding to the specified input inference library. + After the inference, the post processing step consists of + scaling back inferred values to the original range. + + - Par04InferenceInterface : is a base class that allows to read in the ML model, configure + and execute inference. + + - Par04OnnxInference and Par04LWTNNInference : inference library specific classes that inherit + from the base class Par04InferenceInterface. + + + 7. Output + --------- + + The execution of the program (examplePar04) produces an output with histograms. + Ntuples are also stored. They are not merged if the application is run on multiple threads. + + The macro file examplePar04.in is used to run full simulation. It will simulate 100 + events, for single 10 GeV electron beams. + If CMake is able to find inference libraries (lwtnn and/or ONNX Runtime), a configuration + macro will be available for that library (examplePar04_lwtnn.in and/or examplePar04_onnx.in). + It will use a trained model to run inference and create showers in the detector by directly + depositing energy. + + 8. How to build and run the example + ----------------------------------- +- LWTNN and ONNX Runtime are available on LCG. In order to use them, one can setup the envirnment: + % source /cvmfs/sft.cern.ch/lcg/views/LCG_100/x86_64-centos7-gcc10-opt/setup.sh + +- Compile and link to generate the executable (in your CMAKE build directory): + % cmake + % make + +- Execute the application (in batch mode): + % ./examplePar04 -m examplePar04.in + which produces two root file for full simulation. + +- Execute the application (in interactive mode): + % ./examplePar04 + which allows to visualize hits. + +- If ONNX Runtime is available: + % ./examplePar04 -m examplePar04_onnx.in + +- If LWTNN is available: + % ./examplePar04 -m examplePar04_lwtnn.in + + By default, CMake will attempt to build fast simulation with ONNX Runtime and LWTNN. However, if none + of those libraries is found, it will proceed with full simulation only. The search can be switched + off manually switching CMake flag INFERENCE_LIB to OFF (-DINFERENCE_LIB=OFF) + + 9. Macros + --------- + + vis.mac - Allows to run visualization. It will be automatically run in interactive mode, if no + argument is passed to the executable (examplePar04) + + examplePar04.in - Runs full simulation. It will run 100 events with single electrons, 10 GeV and + along y axis. + + examplePar04_onnx.in - Available only if ONNX Runtime is found by CMake. Runs fast simulation with + a NN stored in onnx file. + + examplePar04_lwtnn.in - Available only if LWTNN is found by CMake. Runs fast simulation with + a NN stored in json file. + + 10. UI commands + -------------- + + UI commands useful in this example: + +- activation/disactivation of the fast simulation model: + /param/ActivateModel inferenceModel + /param/InActivateModel inferenceModel + +- particle gun commands + /gun/particle e- + /gun/energy 10 GeV + /gun/direction 0 1 0 + /gun/position 0 0 0 + + UI commands defined in this example: + - detector settings + /Par04/detector/setDetectorInnerRadius 80 cm + /Par04/detector/setDetectorLength 2 m + /Par04/detector/setNbOfLayers 90 + /Par04/detector/setAbsorber 0 G4_W 1.4 mm false + /Par04/detector/setAbsorber 1 G4_Si 0.3 mm true + + - readout mesh + /Par04/mesh/setSizeOfRhoCells 2.325 mm + /Par04/mesh/setSizeOfZCells 3.4 mm + /Par04/mesh/setNbOfRhoCells 18 + /Par04/mesh/setNbOfPhiCells 50 + /Par04/mesh/setNbOfZCells 45 + + - inference setup + /Par04/inference/setSizeLatentVector 10 + /Par04/inference/setSizeConditionVector 4 + /Par04/inference/setModelPathName MLModels/Generator.onnx + /Par04/inference/setProfileFlag 0 + /Par04/inference/setOptimizationFlag 0 + /Par04/inference/setInferenceLibrary ONNX + /Par04/inference/setSizeOfRhoCells 2.325 mm + /Par04/inference/setSizeOfZCells 3.4 mm + /Par04/inference/setNbOfRhoCells 18 + /Par04/inference/setNbOfPhiCells 50 + /Par04/inference/setNbOfZCells 45 diff --git a/examples/extended/parameterisations/README b/examples/extended/parameterisations/README new file mode 100644 index 0000000000..3317ac902e --- /dev/null +++ b/examples/extended/parameterisations/README @@ -0,0 +1,39 @@ + + Geant4 extended examples - parameterisations + ---------------------------------------------- + + Examples in this directory demonstrate use of parameterisation libraries. + Currently, two examples are provided: + + Par01 + ------- + + This example demonstrates the use of parameterisation facilities. + It was moved in extended examples from novice/N05 with removal of + novice examples. + + Par02 + ------- + + This example shows how to do "track and energy smearing" in Geant4, + in order to have a very fast simulation based on assumed detector + resolutions. + + Par03 + ------- + + This example demonstrates how to create multiple energy deposits + from the fast simulation model and store it alongside deposits created + in full/detailed simulation. + + Par04 + ------- + This example demonstrates how to use machine-learning aided fast simulation + of electromagnetic showers. It runs inference using an external library: + either ONNX Runtime, or LWTNN. + + gflash + ------- + + Set of examples demonstrating the use of the GFLASH parameterisation library. + diff --git a/examples/extended/parameterisations/gflash/.README.txt b/examples/extended/parameterisations/gflash/.README.txt new file mode 100644 index 0000000000..e582dec264 --- /dev/null +++ b/examples/extended/parameterisations/gflash/.README.txt @@ -0,0 +1,165 @@ +///\file "parameterisations/gflash/.README.txt" +///\brief Examples gflash README page + +/*! \page Examples_gflash Category "parameterisations/gflash" + +These examples demonstrate the use of the GFLASH parameterisation library. +They use the GFLASH equations (hep-ex/0001020, Grindhammer & Peters) +to parametrise electromagnetic showers in matter. +In these examples the calorimeter is a simple cube, +which consists of 10 x 10 crystals of PbWO4 (CMS like). + +Briefly, whenever a e-/e+ enters the calorimeter, it is parametrised if it +has a minimum energy and the shower is expected to be contained +in the calorimeter (so called " parameterisation envelope"). +If this is fullfilled the particle is killed, as well as all secondaries, +and the energy is deposited according to the GFLASH equations. + +The examples show how to interface GFLASH to your application. +The simulation time is measured, so the user can see immediately +the speed up by using GFLASH. + +Geometry and parametrisation is defined in different ways in the set of three equivalent +(in terms of produced showers) examples: gflash1, gflash2 and gflash3, to demonstrate +how to use the parametrisation, sensitive detectors and parallel geometry. +The classes which are the same in all three examples have the names with ExGflash prefix while +the names of classes specific to each example have the prexix ExGflash[1,2,3]. + +The gflasha +example - allow histogramming of show profiles and fine tuning +of gflash parametrization for homogeneous medium. + +Note: Instead of particle gun the gps class is used here for particle generation. + +\section Examples_gflash_s1 Briefly + + Table below presents in which world/geometry (mass or parallel) each of the elements is defined. + + +| Example | gflash1 | gflash2 | gflash3 | +|------------------------------|----------|--------------|--------------| +| Block of material | mass geo | mass geo | mass geo | +| Crystals (readout geometry) | mass geo | mass geo | parallel geo | +| Sensitive detector | mass geo | mass geo | parallel geo | +| Envelope for parametrisation | mass geo | parallel geo | mass geo | + + +\subsection Examples_gflash_s1_sub1 Example gflash1: + +Uses only the mass geometry, with each crystal defined as a volume, +with parametrisation attached to the envelope in the mass geometry. +Geometry and sensitive detector are defined in: +- ExGflash1DetectorConstruction +- ExGflash1SensitiveDetector + +\subsection Examples_gflash_s1_sub2 Example gflash2: + +Uses mass geometry to create volumes and to create a sensitive detector +for storing hits, but parametrisation is attached to the envelope +in the parallel geometry (see also examples/extended/parametrisations/Par01). +Geometry and sensitive detector are defined in: +- ExGflash2DetectorConstruction +- ExGflash2ParallelWorld +- ExGflash2SensitiveDetector + +\subsection Examples_gflash_s1_sub3 Example gflash3: + +Uses mass geometry to create the main volume (homogeneous material) and use it +as an envelope for the parametrisation, but the readout geometry (crystals) +are defined in the parallel geometry, together with the sensitive detector +to store the hits. +Geometry and sensitive detector are defined in: +- ExGflash3DetectorConstruction +- ExGflash3ParallelWorld +- ExGflash3SensitiveDetector + +\section Examples_gflash_s2 Details of implementation: + +\subsection Examples_gflash_s2_sub1 Example gflash1: + +To use GFLASH the user has to implement the following: + + - ExGflash1DetectorConstruction::ConstructSDandField() : \n + Here GFLASH has to be initialized and assigend to the envelope, + where it should be active (here our calorimeter = caloLog ) +\code{.cpp} +// ********************************************** +// * Initializing shower modell +// *********************************************** +G4cout << "Creating shower parameterization models" << G4endl; +fFastShowerModel = new GFlashShowerModel("fFastShowerModel", fRegion); +fParameterisation = new GFlashHomoShowerParameterisation(pbWO4); +fFastShowerModel->SetParameterisation(*fParameterisation); +fParticleBounds = new GFlashParticleBounds(); +fFastShowerModel->SetParticleBounds(*fParticleBounds); +fHitMaker = new GFlashHitMaker(); +fFastShowerModel->SetHitMaker(*fHitMaker); +G4cout<<"end shower parameterization."<SetParameterisation(*fParameterisation); + fParticleBounds = new GFlashParticleBounds(); + fFastShowerModel->SetParticleBounds(*fParticleBounds); + fHitMaker = new GFlashHitMaker(); + fFastShowerModel->SetHitMaker(*fHitMaker); + G4cout<<"end shower parameterization."< 20 slices of 1. radl +/exgflash/det/setRbin 5 0.25 ---> 5 rings of 0.25 radl + (MaxBin = 500 in both directions) +\endverbatim + +In ExGflashEventAction class the arrays corresponded slices and rings was +created and filled with hists information. This arrays was use to fill +histograms later. + +\section gflasha_s3 Visualization + +The Visualization Manager is set in the main(). +The initialization of the drawing is done via the commands /vis/... +in the macro vis.mac. To get visualization: +\verbatim +/control/execute vis.mac +\endverbatim + +\section gflasha_s4 How to start ? + +- Execute ExGflasha in 'batch' mode from macro files +\verbatim + % ExGflasha test.mac +\endverbatim + +- Execute ExGflasha in 'interactive mode' with visualization +\verbatim + % ExGflasha + .... + Idle> type your commands + .... + Idle> exit +\endverbatim + +The GFLASH activated via: +\verbatim +/GFlash/flag 1 +\endverbatim + +\section gflasha_s5 Histograms + +ExGflasha produces several histograms: +The histograms defined in ExGflashHistoManager class + +Content of these histo: + +- h0 : energy deposit per event +- h1 : the number of hits per event +- h2 : the energy per hit ( in MeV ) + +- p0 : longitudinal energy profile +- p1 : radial energy profile + +- p2 : cumulated longitudinal energy profile +- p3 : cumulated radial energy profile + +To define the output file name with histograms, use the UI command : +\verbatim +/analysys/setFileName name +\endverbatim + +\section gflasha_s6 Macros + +The macros to run in batch mode: + +- test.mac - default macro for example testing + +- run01.mac - show how redefine the histograms + +- csi1.mac - macro which produce profiles in CsI Material + +- test0.mac - profile caparison, long run without GFLASH +- test1.mac - profile comprising, long run with GFLASH on + +*/ diff --git a/examples/extended/parameterisations/gflash/gflasha/README b/examples/extended/parameterisations/gflash/gflasha/README new file mode 100644 index 0000000000..36baeee3c3 --- /dev/null +++ b/examples/extended/parameterisations/gflash/gflasha/README @@ -0,0 +1,110 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + GFLASHa Example + --------------- + +The Example demonstrating usage 'gflash' shower parameterisation +in homogeneous calorimeter.Compare with glash1,2,3 in this +example histograms was added. This makes it possible to use this +example for fine tuning of GFLASH parameters. + This example allow compare the shower profiles from fast simulation +with full simulation by histograming of longitudinal (slice) +and radial profiles with different "binning". +Then GFlash fast simulation can be "tuned" via modification +of the model parameters file: + +include/ExGflashHomoShowerTuning.hh + +in this example. + +GEOMETRY DEFINITION +------------------- + +In this example the calorimeter is a simple cube, +which consists of 10 x 10 crystals of PbWO4 (CMS like). + +Geometry, sensitive detector and hits are defined respectively in: + ExGflashDetectorConstruction + ExGflashSensitiveDetector + ExGflashHit + +Materials can be choosen from Nist Materials: G4_Air G4_WATER ... +eg: /exgflash/det/setMat G4_PbWO4 see also: csi1.mac + +HIT SCORING +----------- + +The virtual cylinder sliced longitudinally (slice) and radially (ring) was used. +The size of the slices and rings are expressed in radiation +length units and can be changed. +eg: /exgflash/det/setLbin 20 1. ---> 20 slices of 1. radl + /exgflash/det/setRbin 5 0.25 ---> 5 rings of 0.25 radl + + (MaxBin = 500 in both directions) + +In ExGflashEventAction class the arrays corresponded slices and rings was +created and filled with hists information. This arrays was use to fill +histograms later. + +VISUALIZATION +------------- + +The Visualization Manager is set in the main(). +The initialization of the drawing is done via the commands /vis/... +in the macro vis.mac. To get visualization: + /control/execute vis.mac + + +HOW TO START ? +-------------- + +- Execute ExGflasha in 'batch' mode from macro files + % ExGflasha test.mac + +- Execute ExGflasha in 'interactive mode' with visualization + % ExGflasha + .... + Idle> type your commands + .... + Idle> exit + +The GFLASH activated via: + +/GFlash/flag 1 + +HISTOGRAMS +---------- + + ExGflasha produces several histograms: + The histograms defined in ExGflashHistoManager class + + Content of these histo: + + h0 : energy deposit per event + h1 : the number of hits per event + h2 : the energy per hit ( in MeV ) + + p0 : longitudinal energy profile + p1 : radial energy profile + + p2 : cumulated longitudinal energy profile + p3 : cumulated radial energy profile + + To define the output file name with histograms, use the UI command : + + "/analysys/setFileName name" + +MACROS +------ +The macros to run in batch mode: + +test.mac - default macro for example testing + +run01.mac - show how redefine the histograms + +csi1.mac - macro which produce profiles in CsI Material + +test0.mac - profile comparison, long run without GFLASH +test1.mac - profile comparison, long run with GFLASH on diff --git a/examples/extended/persistency/.README.txt b/examples/extended/persistency/.README.txt new file mode 100644 index 0000000000..51287c1537 --- /dev/null +++ b/examples/extended/persistency/.README.txt @@ -0,0 +1,17 @@ + +///\file "persistency/.README.txt" +///\brief Examples persistency README page + +/*! \page Examples_persistency Category "persistency" + +This directory contains a set of persistency examples. + + - \link ExampleP01 P01 \endlink Root I/O example for storing and retrieving calorimeter hits. + - \link ExampleP02 P02 \endlink Root I/O example for storing and reading geometry objects. + - \link ExampleP03 P03 \endlink Example of detector geometry persistency in ASCII text format. + + - \link Examples_gdml gdml \endlink Set of examples showing usage of the GDML plugin module in Geant4. + +See the README page inside each example for more detail. + +*/ diff --git a/examples/extended/persistency/P01/.README.txt b/examples/extended/persistency/P01/.README.txt new file mode 100644 index 0000000000..2a3c832bb7 --- /dev/null +++ b/examples/extended/persistency/P01/.README.txt @@ -0,0 +1,83 @@ + +///\file "persistency/P01/.README.txt" +///\brief Example P01 README page + +/*! \page ExampleP01 Example P01 + + +\section P01_s1 General description + +This example shows how to store produced hits in a file using +the 'reflection' technique for persistency provided by the Reflex tool +included in ROOT. The Reflex tool allows to create a dictionary +for the hit class, making then possible to save hit objects in a .root +file. The general simulation setup (geometry, physics list, user +actions, etc...) is taken from ExampleN02. + +The provided makefile produces two executables: 'exampleP01' and +'readHits'. The first one is the actual Geant4 simulation application +with hits persistency. The second one, is just a simple 'reader' for +the produced .root file (you need to specify the name of the .root +file as argument). + + +\section P01_s2 Building and running the example + +This examples requires the ROOT toolkit of version 6 to be installed. The +provided CMake file checks for the existence of the package and its version. +Once the CMake configuration has been succesfully done, the two executables +for this example (exampleP01, readHits) should be built using make +(in your CMake build directory): +\verbatim +make +\endverbatim + +When the example is run (using the provided run.mac macro file) ten +events are generated and the produced hits will be stored in +the hits.root file. In addition, the hits will be printed out on the +screen so one can then compare them with the 'reader' output. + +In order to read the persistified hits, a small 'reader' application +has been implemented. It can be run in the following way: + +\verbatim +/readHits hits.root +\endverbatim + +where the argument is the name of the file to be read. All the hits +saved in that file will be then read and printed on the screen. + +In addition to that the readHits.C ROOT macro file is provides, which +illustrates how one can read the hits file directly from the ROOT +prompt. + +\section P01_s3 Remark on dictionary generation + +The dictionary is generated by ${ROOTSYS}/bin/genreflex +tool. The header file including headers for all the classes we want to +generate the dictionary for should be given as argument. Additionally, +a so called selection file (xml) should be provided (with -s flag) to +the genreflex tool (see the GNUmakefile). The role of this file is to +specify which classes we want to generate the dictionary for. The +selection file for our dictionary is in xml/ directory. Please refer +to genreflex manual for more details concerning the usage of that +tool. + +Concerning generating dictionary for the Geant4 objects, there are +also two technical remarks that need to be made here. +The Reflex tool requires all the templated classes to be +explicitely used somewhere in the included header files in order for +the generation of the dictionary to be possible. For those templated +classes for which it is not the case, the problem can be very easily +solved by instaciating them in the headerfile which is given to +genreflex (see includes/ExP01Classes.hh) as argument. +The second remark is that there is an unfortunate clash of names as +far as G4String class is concerned. The header of G4String class +defines __G4String which happens to be the name of a variable used +within the generated dictionary code. The solution for that is to do +\verbatim +#undef __G4String +\endverbatim +in include/ExP01Classes.hh file. + +*/ diff --git a/examples/extended/persistency/P01/README b/examples/extended/persistency/P01/README new file mode 100644 index 0000000000..f1d52ea0a2 --- /dev/null +++ b/examples/extended/persistency/P01/README @@ -0,0 +1,82 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + ExampleP01 + ---------- + +General description +------------------- + +This example shows how to store produced hits in a file using +the 'reflection' technique for persistency provided by the Reflex tool +included in ROOT. The Reflex tool allows to create a dictionary +for the hit class, making then possible to save hit objects in a .root +file. The general simulation setup (geometry, physics list, user +actions, etc...) is taken from ExampleN02. + +The provided makefile produces two executables: 'exampleP01' and +'readHits'. The first one is the actual Geant4 simulation application +with hits persistency. The second one, is just a simple 'reader' for +the produced .root file (you need to specify the name of the .root +file as argument). + + +Building and running the example +-------------------------------- + +This examples requires the ROOT toolkit of version 6 to be installed. The +provided CMake file checks for the existence of the package and its version. +Once the CMake configuration has been succesfully done, the two executables +for this example (exampleP01, readHits) should be built using make +(in your CMake build directory): + + make + +When the example is run (using the provided run.mac macro file) ten +events are generated and the produced hits will be stored in +the hits.root file. In addition, the hits will be printed out on the +screen so one can then compare them with the 'reader' output. + +In order to read the persistified hits, a small 'reader' application +has been implemented. It can be run in the following way: + +/readHits hits.root + +where the argument is the name of the file to be read. All the hits +saved in that file will be then read and printed on the screen. + +In addition to that the readHits.C ROOT macro file is provides, which +illustrates how one can read the hits file directly from the ROOT +prompt. + + +Remark on dictionary generation +------------------------------- + +The dictionary is generated by ${ROOTSYS}/bin/genreflex +tool. The header file including headers for all the classes we want to +generate the dictionary for should be given as argument. Additionally, +a so called selection file (xml) should be provided (with -s flag) to +the genreflex tool (see the GNUmakefile). The role of this file is to +specify which classes we want to generate the dictionary for. The +selection file for our dictionary is in xml/ directory. Please refer +to genreflex manual for more details concerning the usage of that +tool. + +Concerning generating dictionary for the Geant4 objects, there are +also two technical remarks that need to be made here. +The Reflex tool requires all the templated classes to be +explicitely used somewhere in the included header files in order for +the generation of the dictionary to be possible. For those templated +classes for which it is not the case, the problem can be very easily +solved by instaciating them in the headerfile which is given to +genreflex (see includes/ExP01Classes.hh) as argument. +The second remark is that there is an unfortunate clash of names as +far as G4String class is concerned. The header of G4String class +defines __G4String which happens to be the name of a variable used +within the generated dictionary code. The solution for that is to do +#undef __G4String in include/ExP01Classes.hh file. + + diff --git a/examples/extended/persistency/P02/.README.txt b/examples/extended/persistency/P02/.README.txt new file mode 100644 index 0000000000..536da70095 --- /dev/null +++ b/examples/extended/persistency/P02/.README.txt @@ -0,0 +1,64 @@ + +///\file "persistency/P02/.README.txt" +///\brief Example P02 README page + +/*! \page ExampleP02 Example P02 + +\section P02_s1 General description + + +This example shows how to store in a binary file and how to +read back the geometry tree using the 'reflection' technique for +persistency provided by the Reflex tool also included in ROOT. The +Reflex tool allows to create a dictionary for the geometry classes, +making then possible to save the entire tree in a .root file. + +The provided makefile produces the executable: 'exampleP02'. In order +to run it one has to specify the argument, either 'write' or +'read'. In the first case the geometry is instaciated in the standard +way and then saved into the root file (geo.root). In the second case, +the geometry is read from geo.root file. + + +\section P02_s2 Building and running the example + +This examples requires the ROOT toolkit of version 6 to be installed. The +provided CMake file checks for the existence of the package and its version. +Once the CMake configuration has been succesfully done, the executable +for this example should be built using make +(in your CMake build directory): +\verbatim +make +\endverbatim + +\section P02_s3 Remark on dictionary generation + +The dictionary is generated by ${ROOTSYS}/bin/genreflex +tool. The header file including headers for all the classes we want to +generate the dictionary for should be given as argument. Additionally, +a so called selection file (xml) should be provided (with -s flag) to +the genreflex tool (see the GNUmakefile). The role of this file is to +specify which classes we want to generate the dictionary for. The +selection file for our dictionary is in xml/ directory. Please refer +to genreflex manual for more details concerning the usage of that +tool. + +Concerning generating dictionary for the Geant4 objects, there are +also two technical remarks that need to be made here. +The Reflex tool requires all the templated classes to be +explicitely used somewhere in the included header files in order for +the generation of the dictionary to be possible. For those templated +classes for which it is not the case, the problem can be very easily +solved by instaciating them in the headerfile which is given to +genreflex (see includes/ExP02Classes.hh) as argument. +The second remark is that there is an unfortunate clash of names as +far as G4String class is concerned. The header of G4String class +defines __G4String which happens to be the name of a variable used +within the generated dictionary code. The solution for that is to do +\verbatim +#undef __G4String +\endverbatim +in include/ExP02Classes.hh file. + + +*/ diff --git a/examples/extended/persistency/P02/README b/examples/extended/persistency/P02/README new file mode 100644 index 0000000000..17746474bb --- /dev/null +++ b/examples/extended/persistency/P02/README @@ -0,0 +1,61 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + ExampleP02 + ---------- + +General description +------------------- + +This example shows how to store in a binary file and how to +read back the geometry tree using the 'reflection' technique for +persistency provided by the Reflex tool also included in ROOT. The +Reflex tool allows to create a dictionary for the geometry classes, +making then possible to save the entire tree in a .root file. + +The provided makefile produces the executable: 'exampleP02'. In order +to run it one has to specify the argument, either 'write' or +'read'. In the first case the geometry is instaciated in the standard +way and then saved into the root file (geo.root). In the second case, +the geometry is read from geo.root file. + + +Building and running the example +-------------------------------- + +This examples requires the ROOT toolkit of version 6 to be installed. The +provided CMake file checks for the existence of the package and its version. +Once the CMake configuration has been succesfully done, the executable +for this example should be built using make +(in your CMake build directory): + + make + +Remark on dictionary generation +------------------------------- + +The dictionary is generated by ${ROOTSYS}/bin/genreflex +tool. The header file including headers for all the classes we want to +generate the dictionary for should be given as argument. Additionally, +a so called selection file (xml) should be provided (with -s flag) to +the genreflex tool (see the GNUmakefile). The role of this file is to +specify which classes we want to generate the dictionary for. The +selection file for our dictionary is in xml/ directory. Please refer +to genreflex manual for more details concerning the usage of that +tool. + +Concerning generating dictionary for the Geant4 objects, there are +also two technical remarks that need to be made here. +The Reflex tool requires all the templated classes to be +explicitely used somewhere in the included header files in order for +the generation of the dictionary to be possible. For those templated +classes for which it is not the case, the problem can be very easily +solved by instaciating them in the headerfile which is given to +genreflex (see includes/ExP02Classes.hh) as argument. +The second remark is that there is an unfortunate clash of names as +far as G4String class is concerned. The header of G4String class +defines __G4String which happens to be the name of a variable used +within the generated dictionary code. The solution for that is to do +#undef __G4String in include/ExP02Classes.hh file. diff --git a/examples/extended/persistency/P03/.README.txt b/examples/extended/persistency/P03/.README.txt new file mode 100644 index 0000000000..2163e74d45 --- /dev/null +++ b/examples/extended/persistency/P03/.README.txt @@ -0,0 +1,133 @@ + +///\file "persistency/P03/.README.txt" +///\brief ExampleP03 README page + +/*! \page ExampleP03 Example P03 + +This example illustrates the use of the text geometry. + +\section P03_s1 GEOMETRY EXAMPLES + +Several examples of text geometries are provided: + +g4geom_simple.txt : +- Simple construction of materials and single placements + +g4geom_matemixt.txt : +- Isotopes, elements and materials + +g4geom_boolean.txt : +- Boolean solids + +g4geom_reflections.txt : +- Reflections + +g4geom_replicas.txt : +- Replicas + +g4geom_divisions.txt : +- Divisions + +g4geom_paramLinear.txt : +- Linear parameterisations + +g4geom_paramSquare.txt : +- Square parameterisations + +g4geom_assembly.txt : +- Assembly placements + + +\section P03_s2 HOW TO START ? + +Execute textGeom in 'batch' mode from macro file +\verbatim +% textGeom run.mac +\endverbatim + +It will read the geometry from a file named 'g4geom.txt', and it will create a +VRML2 file to visualise the geometry. +Therefore if you want to try any of the above-mentioned files, copy it to a +file with this name, + + +\section P03_s3 DEFINING A SENSITIVE DETECTOR + +The detector construction class ExTGDetectorConstructionWithSD shows how to +access a volume of the text geometry and assign to it a sensitive detector. +To use it, replace at exampleTextGeom.cc the line + +\verbatim +runManager->SetUserInitialization(new ExTGDetectorConstruction); +\endverbatim + +by + +\verbatim +runManager->SetUserInitialization(new ExTGDetectorConstructionWithSD); +\endverbatim + +and recompile. + +It will use the geometry from the file 'g4geom_SD.txt' + + +\section P03_s4 MIXING TEXT AND C++ GEOMETRIES + +The detector construction class ExTGDetectorConstructionWithCpp shows how to +create a volume with C++ and place it in the world or inside a volume defined +in the text geometry. +To use it, replace at exampleTextGeom.cc the line + +\verbatim +runManager->SetUserInitialization(new ExTGDetectorConstruction); +\endverbatim + +by + +\verbatim +runManager->SetUserInitialization(new ExTGDetectorConstructionWithCpp); +\endverbatim + +and recompile. + +It will use the geometry from the file 'g4geom_simple.txt' + + +\section P03_s5 CREATING NEW TAGS IN THE TEXT GEOMETRY: DEFINING CUTS PER REGION + +The detector construction class ExTGDetectorConstructionWithCuts, together with +ExTGRCLineProcessor, ExTGRCDetectorBuilder, ExTGRCRegionCutsMgr and +ExTGRCRegionData show how to add a couple of tags, ':REGION' and ':CUT', that +allow to define cuts per region in your input geometry text file. +To use it, replace at exampleTextGeom.cc the line + +\verbatim +runManager->SetUserInitialization(new ExTGDetectorConstruction); +\endverbatim + +by + +\verbatim +runManager->SetUserInitialization(new ExTGDetectorConstructionWithCuts); +\endverbatim + +and recompile. + +It will use the geometry from the file 'g4geom_cutsPerRegion.txt' + + +\section P03_s6 DUMP THE IN-MEMORY GEOMETRY TO TEXT FILE + +The run action, ExTGRunAction, triggers the writing of the in-memory Geant4 +geometry to a text file. +To use it you just have to uncomment in exampleTextGeom.cc the line + +\verbatim +runManager->SetUserAction(new ExTGRunAction); +\endverbatim + +and it will read the geometry from the file 'g4geom.txt' and will write the +geometry in a file named 'geom.txt' + +*/ diff --git a/examples/extended/persistency/P03/README b/examples/extended/persistency/P03/README new file mode 100644 index 0000000000..7f5e111d83 --- /dev/null +++ b/examples/extended/persistency/P03/README @@ -0,0 +1,117 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example TextGeom + ---------------- + +This example illustrates the use of the text geometry. + +1.- GEOMETRY EXAMPLES + +Several examples of text geometries are provided: + +g4geom_simple.txt : +- Simple construction of materials and single placements + +g4geom_matemixt.txt : +- Isotopes, elements and materials + +g4geom_boolean.txt : +- Boolean solids + +g4geom_reflections.txt : +- Reflections + +g4geom_replicas.txt : +- Replicas + +g4geom_divisions.txt : +- Divisions + +g4geom_paramLinear.txt : +- Linear parameterisations + +g4geom_paramSquare.txt : +- Square parameterisations + +g4geom_assembly.txt : +- Assembly placements + + +2.- HOW TO START ? + + - execute textGeom in 'batch' mode from macro file + % textGeom run.mac + +It will read the geometry from a file named 'g4geom.txt', and it will create a +VRML2 file to visualise the geometry. +Therefore if you want to try any of the above-mentioned files, copy it to a +file with this name, + + +3.- DEFINING A SENSITIVE DETECTOR + +The detector construction class ExTGDetectorConstructionWithSD shows how to +access a volume of the text geometry and assign to it a sensitive detector. +To use it, replace at exampleTextGeom.cc the line + + runManager->SetUserInitialization(new ExTGDetectorConstruction); + +by + + runManager->SetUserInitialization(new ExTGDetectorConstructionWithSD); + +and recompile. + +It will use the geometry from the file 'g4geom_SD.txt' + + +4.- MIXING TEXT AND C++ GEOMETRIES + +The detector construction class ExTGDetectorConstructionWithCpp shows how to +create a volume with C++ and place it in the world or inside a volume defined +in the text geometry. +To use it, replace at exampleTextGeom.cc the line + + runManager->SetUserInitialization(new ExTGDetectorConstruction); + +by + + runManager->SetUserInitialization(new ExTGDetectorConstructionWithCpp); + +and recompile. + +It will use the geometry from the file 'g4geom_simple.txt' + + +5.- CREATING NEW TAGS IN THE TEXT GEOMETRY: DEFINING CUTS PER REGION + +The detector construction class ExTGDetectorConstructionWithCuts, together with +ExTGRCLineProcessor, ExTGRCDetectorBuilder, ExTGRCRegionCutsMgr and +ExTGRCRegionData show how to add a couple of tags, ':REGION' and ':CUT', that +allow to define cuts per region in your input geometry text file. +To use it, replace at exampleTextGeom.cc the line + + runManager->SetUserInitialization(new ExTGDetectorConstruction); + +by + + runManager->SetUserInitialization(new ExTGDetectorConstructionWithCuts); + +and recompile. + +It will use the geometry from the file 'g4geom_cutsPerRegion.txt' + + +6.- DUMP THE IN-MEMORY GEOMETRY TO TEXT FILE + +The run action 'ExTGRunAction' triggers the writing of the in-memory Geant4 +geometry to a text file. +To use it you just have to uncomment in exampleTextGeom.cc the line + + runManager->SetUserAction(new ExTGRunAction); + +and it will read the geometry from the file 'g4geom.txt' and will write the +geometry in a file named 'geom.txt' diff --git a/examples/extended/persistency/README b/examples/extended/persistency/README new file mode 100644 index 0000000000..b0ab92085a --- /dev/null +++ b/examples/extended/persistency/README @@ -0,0 +1,13 @@ + + Geant4 Persistency Examples + =========================== + +This directory contains a set of persistency examples. + + P01 Root I/O example for storing and retrieving calorimeter hits. + P02 Root I/O example for storing and reading geometry objects. + P03 Example of detector geometry persistency in ASCII text format. + + gdml Set of examples showing usage of the GDML plugin module in Geant4. + +See the README file inside each example for more detail. diff --git a/examples/extended/persistency/gdml/.README.txt b/examples/extended/persistency/gdml/.README.txt new file mode 100644 index 0000000000..bc22842c3b --- /dev/null +++ b/examples/extended/persistency/gdml/.README.txt @@ -0,0 +1,24 @@ + +///\file "persistency/gdml/.README.txt" +///\brief Examples gdml README page + +/*! \page Examples_gdml Category "persistency/gdml" + +This directory contains a set of examples showing the usage of the GDML +plugin module in Geant4. + + - \link ExampleG01 G01 \endlink Simple example for importing and exporting simple GDML files. + + - \link ExampleG02 G02 \endlink Sample application showing how to import/export different + geometry setups, including STEP Tools files and structures + integrating them in a real simulation application. + + - \link ExampleG03 G03 \endlink Simple example showing how to import extensions to the GDML + schema. + + - \link ExampleG04 G04 \endlink Simple example showing how to associate detector sensitivity + to a logical-volume, making use of the auxiliary-information. + +See the README file inside each example for more detail. + +*/ diff --git a/examples/extended/persistency/gdml/G01/.README.txt b/examples/extended/persistency/gdml/G01/.README.txt new file mode 100644 index 0000000000..754e8d1534 --- /dev/null +++ b/examples/extended/persistency/gdml/G01/.README.txt @@ -0,0 +1,58 @@ + +///\file "persistency/gdml/G01/.README.txt" +///\brief Example G01 README page + +/*! \page ExampleG01 Example G01 + +\section G01_s1 GDML READ/WRITE + +This example demonstrates the usage of the GDML reader and writer. It allows +to export geometry descriptions in an application independent format (GDML, +Geometry Description Markup Language). +The GDML files can be then used to interchange geometries between different +applications and users. + +The detector construction consists of a call to GDMLProcessor which parses a +GDML file and returns the pointer to the world volume. The user can also write +her/his own GDML file and use it as the primary input format for her/his Geant4 +application. + +Several simple GDML files are provided: +- axes.gdml, showing loading and orientation of Cartesian axes; +- solids.gdml, list of all supported solids with placement; +- scale.gdml, a simple diamond structure made of extruded solids; +- divisionvol.gdml, a divided box; +- parameterized.gdml, a parameterised box; +- pTube.gdml, a parameterised tube; +- auxiliary.gdml, showing association of volume with auxiliary information; +- etc... + +\section G01_s2 HOW TO BUILD THE EXAMPLE ? + +- You need to have built the persistency/gdml module by having + set the -DGEANT4_USE_GDML=ON flag during the CMAKE configuration step, + as well as the -DXERCESC_ROOT_DIR=path_to_xercesc flag pointing to + the path where the XercesC XML parser package is installed in your system. + +- Compile and link to generate the executable (in your CMAKE build directory): +\verbatim +make +\endverbatim + + +- Execute the application. + - For reading and visualize interactively a GDML file: +\verbatim +load_gdml [GDML-file-in].gdml +\endverbatim + + - For reading, writing and visualize interactively a GDML file: +\verbatim +load_gdml [GDML-file-in].gdml [GDML-file-out].gdml +\endverbatim + + - For reading, writing a GDML file and running in batch a macro: +\verbatim +load_gdml [GDML-file-in].gdml [GDML-file-out].gdml [macro].in +\endverbatim +*/ diff --git a/examples/extended/persistency/gdml/G01/README b/examples/extended/persistency/gdml/G01/README new file mode 100644 index 0000000000..7dc34d376c --- /dev/null +++ b/examples/extended/persistency/gdml/G01/README @@ -0,0 +1,49 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + GDML read/write + --------------- + +This example demonstrates the usage of the GDML reader and writer. It allows +to export geometry descriptions in an application independent format (GDML, +Geometry Description Markup Language). +The GDML files can be then used to interchange geometries between different +applications and users. + +The detector construction consists of a call to GDMLProcessor which parses a +GDML file and returns the pointer to the world volume. The user can also write +her/his own GDML file and use it as the primary input format for her/his Geant4 +application. + +Several simple GDML files are provided: +- axes.gdml, showing loading and orientation of Cartesian axes; +- solids.gdml, list of all supported solids with placement; +- scale.gdml, a simple diamond structure made of extruded solids; +- divisionvol.gdml, a divided box; +- parameterized.gdml, a parameterised box; +- pTube.gdml, a parameterised tube; +- auxiliary.gdml, showing association of volume with auxiliary information; +- etc... + +HOW TO BUILD THE EXAMPLE ? + +- You need to have built the persistency/gdml module by having + set the -DGEANT4_USE_GDML=ON flag during the CMAKE configuration step, + as well as the -DXERCESC_ROOT_DIR= flag pointing to + the path where the XercesC XML parser package is installed in your system. + +- Compile and link to generate the executable (in your CMAKE build directory): + % make + +- Execute the application. + o For reading and visualize interactively a GDML file: + % load_gdml [GDML-file-in].gdml + + o For reading, writing and visualize interactively a GDML file: + % load_gdml [GDML-file-in].gdml [GDML-file-out].gdml + + o For reading, writing a GDML file and running in batch a macro: + % load_gdml [GDML-file-in].gdml [GDML-file-out].gdml [macro].in diff --git a/examples/extended/persistency/gdml/G02/.README.txt b/examples/extended/persistency/gdml/G02/.README.txt new file mode 100644 index 0000000000..20f0331d07 --- /dev/null +++ b/examples/extended/persistency/gdml/G02/.README.txt @@ -0,0 +1,57 @@ + +///\file "persistency/gdml/G02/.README.txt" +///\brief Example G02 README page + +/*! \page ExampleG02 Example G02 + + +\section G02_s1 EXAMPLE OF USE GDML READER/WRITER IN DETECTOR CONSTRUCTION + + In this directory you can find a example showing how to use GDML module for + reading and writing. It is also shown how to Read STEP Tools files. + In this example the DetectorConstruction consists of a Simple Detector, then + this Detector is filled/written in GDML. + The different options for writing and reading GDML files are shown in the + Detector Construction: writing modular files, using different schema location, + setting parameters for names in GDML file, etc. + For more information, please, refer to the GDML Documentation. + + The Geometry is a Simple Detector Box with 4 Subdetectors. + This setup shows how to use Reflection Factory, Assembly of Volumes and + Parameterisation. + Using commands or macros it possible to read or write GDML file. + +\section G02_s2 HOW TO BUILD THE EXAMPLE ? + + + - You need to have built the persistency/gdml module by having + set the -DGEANT4_USE_GDML=ON flag during the CMAKE configuration step, + as well as the -DXERCESC_ROOT_DIR=path_to_xercesc flag pointing to + the path where the XercesC XML parser package is installed in your system. + + - Compile and link to generate the executable (in your CMAKE build directory): +\verbatim +% make +\endverbatim + + - Execute the application: +\verbatim +% geotest [macro-file].mac +\endverbatim + + You can run this application with the following macro file: + + - write_gdml.mac : This macro will write the Geometry defined in file + "test.gdml" and output to a new file wtest.gdml + To change this name you can use command : + /mydet/writeFile FileName.gdml + + - read_gdml.mac : This macro will read the Geometry from file "test.gdml" + To change this name you can use command : + /mydet/readFile FileName.gdml + + - read_step.mac : This macro will read the STEP Tool files "mbb.geom" and + "mbb.tree" and load them in memory. + To change this name you can use command : + /mydet/StepFile FileName +*/ diff --git a/examples/extended/persistency/gdml/G02/README b/examples/extended/persistency/gdml/G02/README new file mode 100644 index 0000000000..2651746022 --- /dev/null +++ b/examples/extended/persistency/gdml/G02/README @@ -0,0 +1,47 @@ +------------------------------------------------------------------- + + Example of use GDML reader/writer in Detector Construction + ----------------------------------------------------------- + + In this directory you can find a example showing how to use GDML module for + reading and writing. It is also shown how to Read STEP Tools files. + In this example the DetectorConstruction consists of a Simple Detector, then + this Detector is filled/written in GDML. + The different options for writing and reading GDML files are shown in the + Detector Construction: writing modular files, using different schema location, + setting parameters for names in GDML file, etc. + For more information, please, refer to the GDML Documentation. + + The Geometry is a Simple Detector Box with 4 Subdetectors. + This setup shows how to use Reflection Factory, Assembly of Volumes and + Parameterisation. + Using commands or macros it possible to read or write GDML file. + + HOW TO BUILD THE EXAMPLE ? + + - You need to have built the persistency/gdml module by having + set the -DGEANT4_USE_GDML=ON flag during the CMAKE configuration step, + as well as the -DXERCESC_ROOT_DIR= flag pointing to + the path where the XercesC XML parser package is installed in your system. + + - Compile and link to generate the executable (in your CMAKE build directory): + % make + + - Execute the application: + % geotest [macro-file].mac + + You can run this application with the following macro file: + + write_gdml.mac : This macro will write the Geometry defined in file + "test.gdml" and output to a new file wtest.gdml + To change this name you can use command : + /mydet/writeFile FileName.gdml + + read_gdml.mac : This macro will read the Geometry from file "test.gdml" + To change this name you can use command : + /mydet/readFile FileName.gdml + + read_step.mac : This macro will read the STEP Tool files "mbb.geom" and + "mbb.tree" and load them in memory. + To change this name you can use command : + /mydet/StepFile FileName diff --git a/examples/extended/persistency/gdml/G03/.README.txt b/examples/extended/persistency/gdml/G03/.README.txt new file mode 100644 index 0000000000..c099bed8a9 --- /dev/null +++ b/examples/extended/persistency/gdml/G03/.README.txt @@ -0,0 +1,49 @@ + +///\file "persistency/gdml/G03/.README.txt" +///\brief Example G03 README page + +/*! \page ExampleG03 Example G03 + +\section G03_s1 EXAMPLE OF DEFINITION OF A GDML EXTENSION WITH ASSOCIATED READER AND WRITER + + + In this directory you can find an example showing how to extend the GDML + schema and plug-in a custom reader and writer to the system for handling + the extension. + For more information, please, refer to the GDML Documentation. + + The Geometry is a Simple Box to which it is assigned a color as + visualization attribute. + The entity "color" is defined as part of the "extension" tag and properly + implemented in the GDML schema extension placed inside the directory + SimpleExtensionSchema. + The GDML file implenting the geometry with colors extension is + color_extension.gdml, in which the standard "gdml" tag has been replaced + by the "gdml_simple_extension" tag, with relative location for the new schema. + The GDML file is automatically loaded by the program. + It is also possible to use UI commands or macros as arguments to read any + standard GDML file. + +\section G03_s2 HOW TO BUILD THE EXAMPLE ? + + - You need to have built the persistency/gdml module by having + set the -DGEANT4_USE_GDML=ON flag during the CMAKE configuration step, + as well as the -DXERCESC_ROOT_DIR=path_to_xercesc flag pointing to + the path where the XercesC XML parser package is installed in your system. + + - Compile and link to generate the executable (in your CMAKE build directory): +\verbatim +% make +\endverbatim + + - Execute the application for reading and visualizing the setup: +\verbatim +% gdml_ext read_ext.mac +\endverbatim + + - Execute the application for also writing the setup: +\verbatim +% gdml_ext [write_ext.mac] +\endverbatim + +*/ diff --git a/examples/extended/persistency/gdml/G03/README b/examples/extended/persistency/gdml/G03/README new file mode 100644 index 0000000000..1982096cc2 --- /dev/null +++ b/examples/extended/persistency/gdml/G03/README @@ -0,0 +1,37 @@ +------------------------------------------------------------------- + + Example of definition of a GDML extension with associated reader and writer + --------------------------------------------------------------------------- + + In this directory you can find an example showing how to extend the GDML + schema and plug-in a custom reader and writer to the system for handling + the extension. + For more information, please, refer to the GDML Documentation. + + The Geometry is a Simple Box to which it is assigned a color as + visualization attribute. + The entity "color" is defined as part of the "extension" tag and properly + implemented in the GDML schema extension placed inside the directory + SimpleExtensionSchema. + The GDML file implenting the geometry with colors extension is + color_extension.gdml, in which the standard "gdml" tag has been replaced + by the "gdml_simple_extension" tag, with relative location for the new schema. + The GDML file is automatically loaded by the program. + It is also possible to use UI commands or macros as arguments to read any + standard GDML file. + + HOW TO BUILD THE EXAMPLE ? + + - You need to have built the persistency/gdml module by having + set the -DGEANT4_USE_GDML=ON flag during the CMAKE configuration step, + as well as the -DXERCESC_ROOT_DIR= flag pointing to + the path where the XercesC XML parser package is installed in your system. + + - Compile and link to generate the executable (in your CMAKE build directory): + % make + + - Execute the application for reading and visualizing the setup: + % gdml_ext read_ext.mac + + - Execute the application for also writing the setup: + % gdml_ext [write_ext.mac] diff --git a/examples/extended/persistency/gdml/G04/.README.txt b/examples/extended/persistency/gdml/G04/.README.txt new file mode 100644 index 0000000000..81a1ba98a8 --- /dev/null +++ b/examples/extended/persistency/gdml/G04/.README.txt @@ -0,0 +1,39 @@ + +///\file "persistency/gdml/G04/.README.txt" +///\brief Example G04 README page + +/*! \page ExampleG04 Example G04 + + +\section G04_s1 GDML DETECTOR SENSITIVITY + +This example demonstrates the usage of the GDML auxiliary information for +associating a sensitive detector to a volume. + +The detector construction consists of a call to GDMLProcessor which parses a +GDML file and returns the pointer to the world volume. The user can also write +her/his own GDML file and use it as the primary input format for her/his Geant4 +application. + +A simple GDML files is provided: +- auxiliary.gdml, showing association of a volume with the auxiliary + information, related to the sensitive detector. + +\section G04_s2 HOW TO BUILD THE EXAMPLE ? + +- You need to have built the persistency/gdml module by having + set the -DGEANT4_USE_GDML=ON flag during the CMAKE configuration step, + as well as the -DXERCESC_ROOT_DIR=path_to_xercesc flag pointing to + the path where the XercesC XML parser package is installed in your system. + +- Compile and link to generate the executable (in your CMAKE build directory): +\verbatim +% make +\endverbatim + +- Execute the application for parsing interactively the GDML file: +\verbatim +% gdml_det auxiliary.gdml +\endverbatim + +*/ diff --git a/examples/extended/persistency/gdml/G04/README b/examples/extended/persistency/gdml/G04/README new file mode 100644 index 0000000000..116ed74a0b --- /dev/null +++ b/examples/extended/persistency/gdml/G04/README @@ -0,0 +1,34 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + GDML detector sensitivity + ------------------------- + +This example demonstrates the usage of the GDML auxiliary information for +associating a sensitive detector to a volume. + +The detector construction consists of a call to GDMLProcessor which parses a +GDML file and returns the pointer to the world volume. The user can also write +her/his own GDML file and use it as the primary input format for her/his Geant4 +application. + +A simple GDML files is provided: +- auxiliary.gdml, showing association of a volume with the auxiliary + information, related to the sensitive detector. + +HOW TO BUILD THE EXAMPLE ? + +- You need to have built the persistency/gdml module by having + set the -DGEANT4_USE_GDML=ON flag during the CMAKE configuration step, + as well as the -DXERCESC_ROOT_DIR= flag pointing to + the path where the XercesC XML parser package is installed in your system. + +- Compile and link to generate the executable (in your CMAKE build directory): + % make + +- Execute the application. + o For parsing interactively the GDML file: + % gdml_det auxiliary.gdml diff --git a/examples/extended/persistency/gdml/README b/examples/extended/persistency/gdml/README new file mode 100644 index 0000000000..d207c81979 --- /dev/null +++ b/examples/extended/persistency/gdml/README @@ -0,0 +1,17 @@ + + Geant4 GDML Examples + ==================== + +This directory contains a set of examples showing the usage of the GDML +plugin module in Geant4. + + G01 Simple example for importing and exporting simple GDML files. + G02 Sample application showing how to import/export different + geometry setups, including STEP Tools files and structures + integrating them in a real simulation application. + G03 Simple example showing how to import extensions to the GDML + schema. + G04 Simple example showing how to associate detector sensitivity + to a logical-volume, making use of the auxiliary-information. + +See the README file inside each example for more detail. diff --git a/examples/extended/physicslists/.README.txt b/examples/extended/physicslists/.README.txt new file mode 100644 index 0000000000..73ff6f566e --- /dev/null +++ b/examples/extended/physicslists/.README.txt @@ -0,0 +1,26 @@ + +///\file "physicslists/.README.txt" +///\brief Examples physicslists README page + +/*! \page Examples_physicslists Category "physicslists" + + Examples in this directory demonstrate usage of Geant4 reference physics lists + and physics builders. + +\link Examplefactory factory \endlink + +Demonstrates the usage of G4PhysListFactory to build the concrete physics list + +\link ExampleextensibleFactory extensibleFactory \endlink + + Demonstrates the usage of extensible g4alt::G4PhysListFactory to build a + concrete physics list. It also demonstrates the setting of an alternative + "default" physics list; extending existing lists by adding/replacing physics + constructors; and extending the factory with user supplied physics lists. + +\link ExamplegenericPL genericPL \endlink + + Demonstrates the usage of G4GenericPhysicsList to build the concrete physics + list at the run time. + +*/ diff --git a/examples/extended/physicslists/README b/examples/extended/physicslists/README new file mode 100644 index 0000000000..90697e81a6 --- /dev/null +++ b/examples/extended/physicslists/README @@ -0,0 +1,26 @@ + + Geant4 extended examples - physicslists + ---------------------------------------- + + Examples in this directory demonstrate usage of Geant4 reference physics lists + and physics builders. + + factory + -------- + + Demonstrates the usage of G4PhysListFactory to build the concrete physics list + + extensibleFactory + ----------------- + + Demonstrates the usage of extensible g4alt::G4PhysListFactory to build a + concrete physics list. It also demonstrates the setting of an alternative + "default" physics list; extending existing lists by adding/replacing physics + constructors; and extending the factory with user supplied physics lists. + + + genericPL + --------- + + Demonstrates the usage of G4GenericPhysicsList to build the concrete physics + list at the run time. diff --git a/examples/extended/physicslists/extensibleFactory/.README.txt b/examples/extended/physicslists/extensibleFactory/.README.txt new file mode 100644 index 0000000000..c6671b17b2 --- /dev/null +++ b/examples/extended/physicslists/extensibleFactory/.README.txt @@ -0,0 +1,95 @@ + +///\file "physicslists/extensibleFactory/.README.txt" +///\brief Example extensibleFactory README page + +/*! \page ExampleextensibleFactory Example extensibleFactory + +\author R. Hatcher \n +Fermilab \n +(based on Hadr00 by V. Ivantchenko, CERN) + +Examples in the physicslist category show the possible ways how to define +a physics list from Geant4 physics constructors. This example demonstrates +the usage of g4alt::G4PhysListFactory to build a concrete physics list. + +Physics List can be defined by its name given by the -p argument of the of the +run command or by the PHYSLIST environment variable. + +\verbatim + ./extensibleFactory -m my.macro [ -p QGSP_BERT ] \ + [ -v | --verbose ] [ -h | --help ] +\endverbatim + +By default, FTFP_BERT Physics List will be instantiated if +-p argument is not set and the PHYSLIST environment variable is not defined. +This is the system default, but can be overridden using the +SetDefaultReferencePhysList() method on the factory (see the code). + +The extensible factory allows users to define and register their own physics +lists. This example shows the addtional a new list "MySpecialPhysList". + +\verbatim + ./extensibleFactory -m run.mac -p MySpecialPhysList +\endverbatim + +The extensible factory also allows for the extension of lists by adding +(using "+" as a separator) or replacing (using "_" as a separator) +specific physics constructors. These can be specified by +pre-defining a short name (e.g. RADIO for G4RadioactiveDecayPhysics) or +providing the full class name. + +\verbatim + ./extensibleFactory -m run.mac -p FTFP_BERT_EMX+G4OpticalPhysics+RADIO +\endverbatim + +uses the FTFP_BERT physics list as a base + - replaces the list's standard EM portion with + G4EmStandardPhysics_option2 ( standard EMX extension ) + - adds G4OpticalPhysics + - adds G4RadioactiveDecayPhysics (RADIO defined in code to map to this) + +The same experimental setup is used for all examples in the physicslist category: + +\section extensibleFactory_s1 Detector description + +The geometry (defined in the DetectorConstruction class) consists in a box of scintillator material (CsI) followed by a thin box of air (screen) which is used to simplify scoring. + +\section extensibleFactory_s2 Primary generator + +The primary generator is defined with usage of G4ParticleGun. +The default particle is proton which hits the box perpendicular to the input face. +The type of the particle and its energy are set in the PrimaryGeneratorAction class, and can +be changed via the G4 built-in commands of the G4ParticleGun class. + + +\section extensibleFactory_s3 Scoring (ntuples) + +The screen volume is associated with a sensitive detector, ScreenSD, +which accounts the following particle properties: +- trackID +- particle PDG encoding +- particle kinetic energy +- particle X,Y position +- particle time + +The scored quantities are filled in the Screen ntuple, which is defined using G4AnalysisManager +in RunAction class. The ntuple is saved in a Root file, which name is set to be equal to the +example name in main () function. + +\section extensibleFactory_s4 How to build + +An additional step is needed when building the example with GNUmake +due to using the extra shared directory: +\verbatim + % cd path_to_example/example + % gmake setup + % gmake +\endverbatim + +This will copy the files from shared in the example include and src; +to remove these files: +\verbatim + % gmake clean_setup +\endverbatim + +*/ diff --git a/examples/extended/physicslists/extensibleFactory/README b/examples/extended/physicslists/extensibleFactory/README new file mode 100644 index 0000000000..ed764b8cfd --- /dev/null +++ b/examples/extended/physicslists/extensibleFactory/README @@ -0,0 +1,93 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + + Example extensibleFactory + +R. Hatcher +Fermilab +(based on Hadr00 by V. Ivantchenko, CERN) + +Examples in the physicslist category show the possible ways how to define +a physics list from Geant4 physics constructors. This example demonstrates +the usage of g4alt::G4PhysListFactory to build the concrete physics list. + +Physics List can be defined by its name given by the -p argument of the of the +run command or by the PHYSLIST environment variable. + + ./extensibleFactory -m my.macro [ -p QGSP_BERT ] \ + [ -v | --verbose ] [ -h | --help ] + +By default, FTFP_BERT Physics List will be instantiated if +-p argument is not set and the PHYSLIST environment variable is not defined. +This is the system default, but can be overridden using the +SetDefaultReferencePhysList() method on the factory (see the code). + +The extensible factory allows users to define and register their own physics +lists. This example shows the addtional a new list "MySpecialPhysList". + + ./extensibleFactory -m run.mac -p MySpecialPhysList + +The extensible factory also allows for the extension of lists by adding +(using "+" as a separator) or replacing (using "_" as a separator) +specific physics constructors. These can be specified by +pre-defining a short name (e.g. RADIO for G4RadioactiveDecayPhysics) or +providing the full class name. + + ./extensibleFactory -m run.mac -p FTFP_BERT_EMX+G4OpticalPhysics+RADIO + +uses the FTFP_BERT physics list as a base + * replaces the list's standard EM portion with + G4EmStandardPhysics_option2 ( standard EMX extension ) + * adds G4OpticalPhysics + * adds G4RadioactiveDecayPhysics (RADIO defined in code to map to this) + +The same experimental setup is used for all examples in the physicslist +category: + +1- Detector description +----------------------- + +The geometry (defined in the DetectorConstruction class) consists in a box of +scintillator material (CsI) followed by a thin box of air (screen) which is used +to simplify scoring. + + +2- Primary generator +-------------------- + +The primary generator is defined with usage of G4ParticleGun. +The default particle is proton which hits the box perpendicular to the input face. +The type of the particle and its energy are set in the PrimaryGeneratorAction class, and can +be changed via the G4 built-in commands of the G4ParticleGun class. + + +3- Scoring (ntuples) +-------------------- + +The screen volume is associated with a sensitive detector, ScreenSD, +which accounts the following particle properties: +- trackID +- particle PDG encoding +- particle kinetic energy +- particle X,Y position +- particle time + +The scored quantities are filled in the Screen ntuple, which is defined using G4AnalysisManager +in RunAction class. The ntuple is saved in a Root file, which name is set to be equal to the +example name in main () function. + +4- How to build +---------------- + +An additional step is needed when building the example with GNUmake +due to using the extra shared directory: + % cd path_to_example/example + % gmake setup + % gmake + +This will copy the files from shared in the example include and src; +to remove these files: + % gmake clean_setup + diff --git a/examples/extended/physicslists/factory/.README.txt b/examples/extended/physicslists/factory/.README.txt new file mode 100644 index 0000000000..8c06fe0bef --- /dev/null +++ b/examples/extended/physicslists/factory/.README.txt @@ -0,0 +1,69 @@ + +///\file "physicslists/factory/.README.txt" +///\brief Example factory README page + +/*! \page Examplefactory Example factory + +\author I. Hrivnacova \n +Institut de Physique Nucléaire (IPNO), Université Paris-Sud, CNRS-IN2P3 \n +(Based on Hadr00 by V. Ivantchenko, CERN) + +Examples in the physicslist category show the possible ways how to define +a physics list from Geant4 physics constructors. This example demonstrates +the usage of G4PhysListFactory to build the concrete physics list. + +Physics List can be defined by its name given by the -p argument of the of the +run command or by the PHYSLIST environment variable. + +\verbatim +./factory -m my.macro [ -p QGSP_BERT ] +\endverbatim + +By default, FTFP_BERT Physics List will be instantiated if +-p argument is not set and the PHYSLIST environment variable is not defined. + +The same experimental setup is used for all examples in the physicslist category: + +\section factory_s1 Detector description + +The geometry (defined in the DetectorConstruction class) consists in a box of scintillator material (CsI) followed by a thin box of air (screen) which is used to simplify scoring. + +\section factory_s2 Primary generator + +The primary generator is defined with usage of G4ParticleGun. +The default particle is proton which hits the box perpendicular to the input face. +The type of the particle and its energy are set in the PrimaryGeneratorAction class, and can +be changed via the G4 built-in commands of the G4ParticleGun class. + + +\section factory_s3 Scoring (ntuples) + +The screen volume is associated with a sensitive detector, ScreenSD, +which accounts the following particle properties: +- trackID +- particle PDG encoding +- particle kinetic energy +- particle X,Y position +- particle time + +The scored quantities are filled in the Screen ntuple, which is defined using G4AnalysisManager +in RunAction class. The ntuple is saved in a Root file, which name is set to be equal to the +example name in main () function. + +\section factory_s4 How to build + +An additional step is needed when building the example with GNUmake +due to using the extra shared directory: +\verbatim + % cd path_to_example/example + % gmake setup + % gmake +\endverbatim + +This will copy the files from shared in the example include and src; +to remove these files: +\verbatim + % gmake clean_setup +\endverbatim + +*/ diff --git a/examples/extended/physicslists/factory/README b/examples/extended/physicslists/factory/README new file mode 100644 index 0000000000..ef56796eec --- /dev/null +++ b/examples/extended/physicslists/factory/README @@ -0,0 +1,69 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + + Example factory + + I. Hrivnacova, +Institut de Physique Nucléaire (IPNO), Université Paris-Sud, CNRS-IN2P3 + Based on Hadr00 by V. Ivantchenko, CERN + + +Examples in the physicslist category show the possible ways how to define +a physics list from Geant4 physics constructors. This example demonstrates +the usage of G4PhysListFactory to build the concrete physics list. + +Physics List can be defined by its name given by the -p argument of the of the +run command or by the PHYSLIST environment variable. + +./factory -m my.macro [ -p QGSP_BERT ] + +By default, FTFP_BERT Physics List will be instantiated if +-p argument is not set and the PHYSLIST environment variable is not defined. + +The same experimental setup is used for all examples in the physicslist category: + +1- Detector description +----------------------- + +The geometry (defined in the DetectorConstruction class) consists in a box of scintillator material (CsI) followed by a thin box of air (screen) which is used to simplify scoring. + + +2- Primary generator +-------------------- + +The primary generator is defined with usage of G4ParticleGun. +The default particle is proton which hits the box perpendicular to the input face. +The type of the particle and its energy are set in the PrimaryGeneratorAction class, and can +be changed via the G4 built-in commands of the G4ParticleGun class. + + +3- Scoring (ntuples) +-------------------- + +The screen volume is associated with a sensitive detector, ScreenSD, +which accounts the following particle properties: +- trackID +- particle PDG encoding +- particle kinetic energy +- particle X,Y position +- particle time + +The scored quantities are filled in the Screen ntuple, which is defined using G4AnalysisManager +in RunAction class. The ntuple is saved in a Root file, which name is set to be equal to the +example name in main () function. + +4- How to build +---------------- + +An additional step is needed when building the example with GNUmake +due to using the extra shared directory: + % cd path_to_example/example + % gmake setup + % gmake + +This will copy the files from shared in the example include and src; +to remove these files: + % gmake clean_setup + diff --git a/examples/extended/physicslists/genericPL/.README.txt b/examples/extended/physicslists/genericPL/.README.txt new file mode 100644 index 0000000000..681df6bac2 --- /dev/null +++ b/examples/extended/physicslists/genericPL/.README.txt @@ -0,0 +1,86 @@ + +///\file "physicslists/genericPL/.README.txt" +///\brief Example genericPL README page + +/*! \page ExamplegenericPL Example genericPL + +\author W. Pokorski(1), I. Hrivnacova(2) \n +(1) CERN \n +(2) Institut de Physique Nucléaire (IPNO), Université Paris-Sud, CNRS-IN2P3 \n + +Examples in the physicslist category show the possible ways how to define +a physics list from Geant4 physics constructors. This example demonstrates +the usage of G4GenericPhysicsList to build the concrete physics list at +the run time. + +In Geant4 versions < 10.4, the generic physics list was demonstrated in the +extended/hadronic/Hadr05 example. + +The G4GenericPhysicsList class allows to build the physics list at the run +time in two possible ways, either by processing a macro file +containing the 'physics list' or by passing a vector of 'physics +constructors' names to the constructor of the class. + +To run the example you can call + +\verbatim +./genericPL -m run.mac [ -p FTFP_BERT.mac ] +\endverbatim + +where FTFP_BERT.mac is the macro file containing the 'physics list'. + +If you run this example by calling + +\verbatim +./genericPL -m run.mac +\endverbatim + +the physics list will be constructed by using a vector of the names of +the different physics constructor defined in the genericPL.cc file. + +The same experimental setup is used for all examples in the physicslist category: + +\section genericPL_s1 Detector description + +The geometry (defined in the DetectorConstruction class) consists in a box of scintillator material (CsI) followed by a thin box of air (screen) which is used to simplify scoring. + +\section genericPL_s2 Primary generator + +The primary generator is defined with usage of G4ParticleGun. +The default particle is proton which hits the box perpendicular to the input face. +The type of the particle and its energy are set in the PrimaryGeneratorAction class, and can +be changed via the G4 built-in commands of the G4ParticleGun class. + + +\section genericPL_s3 Scoring (ntuples) + +The screen volume is associated with a sensitive detector, ScreenSD, +which accounts the following particle properties: +- trackID +- particle PDG encoding +- particle kinetic energy +- particle X,Y position +- particle time + +The scored quantities are filled in the Screen ntuple, which is defined using G4AnalysisManager +in RunAction class. The ntuple is saved in a Root file, which name is set to be equal to the +example name in main () function. + +\section genericPL_s4 How to build + +An additional step is needed when building the example with GNUmake +due to using the extra shared directory: +\verbatim + % cd path_to_example/example + % gmake setup + % gmake +\endverbatim + +This will copy the files from shared in the example include and src; +to remove these files: +\verbatim + % gmake clean_setup +\endverbatim + + +*/ diff --git a/examples/extended/physicslists/genericPL/README b/examples/extended/physicslists/genericPL/README new file mode 100644 index 0000000000..237adf5ef9 --- /dev/null +++ b/examples/extended/physicslists/genericPL/README @@ -0,0 +1,85 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + + Example genericPL + + W. Pokorski (1) + I. Hrivnacova (2) + + (1) CERN + (2) Institut de Physique Nucléaire (IPNO), Université Paris-Su + + +Examples in the physicslist category show the possible ways how to define +a physics list from Geant4 physics constructors. This example demonstrates +the usage of G4GenericPhysicsList to build the concrete physics list at +the run time. + +In Geant4 versions < 10.4, the generic physics list was demonstrated in the +extended/hadronic/Hadr05 example. + +The G4GenericPhysicsList class allows to build the physics list at the run +time in two possible ways, either by processing a macro file +containing the 'physics list' or by passing a vector of 'physics +constructors' names to the constructor of the class. + +To run the example you can call + +./genericPL -m run.mac [ -p FTFP_BERT.mac ] + +where FTFP_BERT.mac is the macro file containing the 'physics list'. + +If you run this example by calling + +./genericPL -m run.mac + +the physics list will be constructed by using a vector of the names of +the different physics constructor defined in the genericPL.cc file. + +The same experimental setup is used for all examples in the physicslist category: + +1- Detector description +----------------------- + +The geometry (defined in the DetectorConstruction class) consists in a box of scintillator material (CsI) followed by a thin box of air (screen) which is used to simplify scoring. + + +2- Primary generator +-------------------- + +The primary generator is defined with usage of G4ParticleGun. +The default particle is proton which hits the box perpendicular to the input face. +The type of the particle and its energy are set in the PrimaryGeneratorAction class, and can +be changed via the G4 built-in commands of the G4ParticleGun class. + + +3- Scoring (ntuples) +-------------------- + +The screen volume is associated with a sensitive detector, ScreenSD, +which accounts the following particle properties: +- trackID +- particle PDG encoding +- particle kinetic energy +- particle X,Y position +- particle time + +The scored quantities are filled in the Screen ntuple, which is defined using G4AnalysisManager +in RunAction class. The ntuple is saved in a Root file, which name is set to be equal to the +example name in main () function. + +4- How to build +---------------- + +An additional step is needed when building the example with GNUmake +due to using the extra shared directory: + % cd path_to_example/example + % gmake setup + % gmake + +This will copy the files from shared in the example include and src; +to remove these files: + % gmake clean_setup + diff --git a/examples/extended/polarisation/.README.txt b/examples/extended/polarisation/.README.txt new file mode 100644 index 0000000000..6d3624aa53 --- /dev/null +++ b/examples/extended/polarisation/.README.txt @@ -0,0 +1,16 @@ + +///\file "polarisation/.README.txt" +///\brief Examples polarisation README page + +/*! \page Examples_polarisation Category "polarisation" + + Examples in this directory demonstrate use of physics processes including + polarization: + +\link ExamplePol01 Pol01 \endlink + +This example demonstrates how to compute and plot the QED processes including +polarization. + +*/ + diff --git a/examples/extended/polarisation/Pol01/.README.txt b/examples/extended/polarisation/Pol01/.README.txt new file mode 100644 index 0000000000..ed0c579874 --- /dev/null +++ b/examples/extended/polarisation/Pol01/.README.txt @@ -0,0 +1,140 @@ + +///\file "polarisation/Pol01/.README.txt" +///\brief Example Pol01 README page + +/*! \page ExamplePol01 Example Pol01 + + How to compute and plot the QED processes including + polarization. + Two possible scenarios are available: + - Polarization transfer of an incoming beam to final state particles + - Material dependent transmission of a polarized beams. + The method is explained below : see item Physics. + +\section Pol01_s1 GEOMETRY DEFINITION + + The geometry consists of a single block of a homogeneous material, + placed in a world. + + Three parameters define the geometry : + - the material of the box, + - the thickness of the box (sizeZ), + - the transverse dimension of the box (sizeXY). + + The default geometry (5mm of Iron, G4_Fe) is constructed in + DetectorConstruction, but the above parameters can be changed + interactively via the commands defined in DetectorMessenger. + Its polarization can be accessed via the G4PolarizationMessenger + (see example macro file), and is given in the global coordinate + system. + +\section Pol01_s2 PHYSICS LIST + + The Physics List contains QED particle definitions (electrons, + positrons and photons) and a general transportation process. + In addition the user can add one of the two process modules: + - 1. "standard" - standard (unpolarized) EM physics + - 2. "polarized" - polarized EM physics + + These physics list contain the standard electromagnetic processes. + +\section Pol01_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting + at the edge of the box. The type of the particle and its + energy are set in PrimaryGeneratorAction (10 MeV electron). + By default the G4ParticleGun polarization is zero. + All parameter can be changed via the G4 build-in commands of + ParticleGun class (see the macros provided with this example). + +\section Pol01_s4 PHYSICS + + This example uses the following physics processes: + - electromagnetic: + - photo-electric effect + - Compton scattering + - pair production + - bremsstrahlung + - ionization + - multiple scattering + - annihilation + + or + - polarized electromagnetic: + (incl. simulation of polarization transfer, and + asymmetries for longitudinally polarized leptons, and + circularly polarized photons) + - polarized photo-electric effect + - polarized Compton scattering + - polarized pair production + - polarized bremsstrahlung + - polarized ionization + - multiple scattering + - polarized annihilation + + and + - transportation + + and defines the following particles: + + electron, positron, photon + + +\section Pol01_s5 HISTOGRAMS + + The test contains 12 built-in 1D histograms, which are managed by the + HistoManager class and its messenger, HistoMessenger. The histos can be individually + activated with the command : +\verbatim +/testem/histo/setHisto id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macro histos.mac). + + - 1 gamma energy + - 2 gamma cos(theta) + - 3 gamma phi + - 4 gamma polarization + - 5 electron energy + - 6 electron cos(theta) + - 7 electron phi + - 8 electron polarization + - 9 positron energy + - 10 positron cos(theta) + - 11 positron phi + - 12 positron polarization + +\verbatim +% gmake plots +\endverbatim + +\section Pol01_s6 VISUALIZATION + + Simulated events can be displayed on top of a representation of + the geometry, see vis.mac for an example. + +\section Pol01_s7- HOW TO START ? + + - Execute Pol01 in 'batch' mode from the default macro file : +\verbatim +% Pol01 pol01.in +\endverbatim + + - Execute Pol01 in 'batch' mode including analysis output : +\verbatim +% Pol01 histos.mac +\endverbatim + + - If available use JAIDA to display the results via +\verbatim +% gmake plots +\endverbatim + + - A visualisation example is available by calling +\verbatim +% Pol01 +[...] +PreInit> /control/execute vis.mac +\endverbatim + +*/ diff --git a/examples/extended/polarisation/Pol01/README b/examples/extended/polarisation/Pol01/README new file mode 100644 index 0000000000..9ac64243d6 --- /dev/null +++ b/examples/extended/polarisation/Pol01/README @@ -0,0 +1,128 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + TestPolarization + ---------------- + + How to compute and plot the QED processes including + polarization. + Two possible scenarios are available: + - Polarization transfer of an incoming beam to final state particles + - Material dependent transmission of a polarized beams. + The method is explained below : see item Physics. + + 1- GEOMETRY DEFINITION + + The geometry consists of a single block of a homogeneous material, + placed in a world. + + Three parameters define the geometry : + - the material of the box, + - the thickness of the box (sizeZ), + - the transverse dimension of the box (sizeXY). + + The default geometry (5mm of Iron, G4_Fe) is constructed in + DetectorConstruction, but the above parameters can be changed + interactively via the commands defined in DetectorMessenger. + Its polarization can be accessed via the PolarizationMessenger + (see example macro file), and is given in the global coordinate + system. + + 2- PHYSICS LIST + + The Physics List contains QED particle definitions (electrons, + positrons and photons) and a general transportation process. + In addition the user can add one of the two process modules: + 1. "standard" - standard (unpolarized) EM physics + 2. "polarized" - polarized EM physics + These physics list contain the standard electromagnetic processes. + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic consists of a single particle starting + at the edge of the box. The type of the particle and its + energy are set in PrimaryGeneratorAction (10 MeV electron). + By default the ParticleGun polarization is zero. + All parameter can be changed via the G4 build-in commands of + ParticleGun class (see the macros provided with this example). + + 4- PHYSICS + + This example uses the following physics processes: + + - electromagnetic: + photo-electric effect + Compton scattering + pair production + bremsstrahlung + ionization + multiple scattering + annihilation + or + - polarized electromagnetic: + (incl. simulation of polarization transfer, and + asymmetries for longitudinally polarized leptons, and + circularly polarized photons) + + polarized photo-electric effect + polarized Compton scattering + polarized pair production + polarized bremsstrahlung + polarized ionization + multiple scattering + polarized annihilation + and + - transportation + + and defines the following particles: + electron, positron, photon + + + 5- HISTOGRAMS + + The test contains 12 built-in 1D histograms, which are managed by the + HistoManager class and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macro histos.mac). + + 1 gamma energy + 2 gamma cos(theta) + 3 gamma phi + 4 gamma polarization + 5 electron energy + 6 electron cos(theta) + 7 electron phi + 8 electron polarization + 9 positron energy + 10 positron cos(theta) + 11 positron phi + 12 positron polarization + + 6- VISUALIZATION + + Simulated events can be displayed on top of a representation of + the geometry, see vis.mac for an example. + + 7- HOW TO START ? + + compile and link to generate an executable + % gmake + + execute Pol01 in 'batch' mode from the default macro file : + % Pol01 pol01.in + + or execute Pol01 in 'batch' mode including analysis output : + % Pol01 histos.mac + + if available use JAIDA to display the results via + % gmake plots + + a visualisation example is available by calling + % Pol01 + [...] + PreInit> /control/execute vis.mac diff --git a/examples/extended/polarisation/README b/examples/extended/polarisation/README new file mode 100644 index 0000000000..166615446a --- /dev/null +++ b/examples/extended/polarisation/README @@ -0,0 +1,13 @@ + + Geant4 extended examples - polarisation + ---------------------------------------- + + Examples in this directory demonstrate use of physics processes including + polarization. + Currently, only one example is provided: + +Pol01 +------ + +This example demonstrates how to compute and plot the QED processes including +polarization. diff --git a/examples/extended/radioactivedecay/.README.txt b/examples/extended/radioactivedecay/.README.txt new file mode 100644 index 0000000000..e6e3dc639e --- /dev/null +++ b/examples/extended/radioactivedecay/.README.txt @@ -0,0 +1,25 @@ + +///\file "radioactivedecay/.README.txt" +///\brief Examples radioactivedecay README page + +/*! \page Examples_radioactivedecay Category "radioactivedecay" + + Examples in this directory demonstrate the use of some features of the + Radioactive-Decay hadronic model in Geant4. + + \link Examplerdecay01 rdecay01 \endlink + + This example allows to display basic features of the radioactive decay + of a nuclei: energy spectrum of emitted particles, time of life, activity. + + \link Examplerdecay02 rdecay02 \endlink + + This example illustrates more advanced features of the package: + selected decay channels, time window, bias and variance reduction technique. + + \link ExampleActivation Activation \endlink + + Compute and plot time evolution of each nuclide in an hadronic cascade. + Compute and plot activity of emerging particles. + +*/ diff --git a/examples/extended/radioactivedecay/Activation/.README.txt b/examples/extended/radioactivedecay/Activation/.README.txt new file mode 100644 index 0000000000..1f24fe2089 --- /dev/null +++ b/examples/extended/radioactivedecay/Activation/.README.txt @@ -0,0 +1,183 @@ + + +///\file "radioactivedecay/Activation/.README.txt" +///\brief Example Activation README page + +/*! \page ExampleActivation Example Activation + + Survey energy deposition and particle's flux from an hadronic cascade, + including radioactive decays. + The main purpose of the example is to plot evolution of each metastable isomer + as a function of time, taking into account the time of exposure in the beam. + Also plot the activity of emerging particles. + Use PhysicsConstructor objects rather than predefined G4 PhysicsLists. + +\section Activation_s1 MATERIALS AND GEOMETRY DEFINITION + + The "absorber" is a box made of a given material. + + Three parameters define the absorber : + - the material of the absorber + - the thickness of an absorber + - the transverse size of the absorber (the input face is a square) + + The volume "World" contains the "absorber". + + A function, and its associated UI command, allows to build a material + directly from a single isotope. + + To be identified by the ThermalScattering module, the elements composing a + material must have a specific name (see G4ParticleHPThermalScatteringNames.cc) + Examples of such materials are build in DetectorConstruction::DefineMaterials(). + +\section Activation_s2 PHYSICS LIST + + The physics list contains a "full" set of physics processes. It is defined in + the PhysicsList class as a Geant4 modular physics list with registered physics + constructors (builders). + + Physics constructors are either constructors provided in Geant4 (with G4 prefix) + or 'local'. They include : HadronElastic, HadronInelastic, IonsInelastic, GammaNuclear, + RadioactiveDecay and Electomagnetic. + (see geant4/source/physics_lists/constructors) + + HadronElasticPhysicsHP include a model for thermalized neutrons, under the control of a command + defined in NeutronHPMesseger. + + GammmaNuclearPhysics is a subset of G4BertiniElectroNuclearBuilder. + + ElectromagneticPhysics is a simplified version of G4EmStandardPhysics. + + Several hadronic physics options are controlled by environment variables. + To select them, see Activation.cc + +\section Activation_s3 AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic is a single particle which hits the absorber + perpendicular to the input face. The type of particle and its energy are + set in the PrimaryGeneratorAction class, and can be changed via the G4 + build-in commands of G4ParticleGun class + (see the macros provided with this example). + + One can control the transverse size of the beam. + The command +\verbatim +/testhadr/gun/beamSize +\endverbatim + is built in PrimaryGeneratorMessenger class. + + The time of exposure in the beam may be finite. It is controled by the command +\verbatim +/testhadr/gun/beamTime. +\endverbatim + Then the time zero of each event is randomly chosen within this interval. + +\section Activation_s4 PHYSICS + + The program computes and plots energy deposited in the interaction volume + (absorber), energy spectrum and activity of particles leaving the absorber, + and evolution of population of metastable isomers within the absorber + (see below : histograms). + Processes invoked and particles generated during interactions are listed. + +\section Activation_s5 HISTOGRAMS + + The test contains 43 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + 1 "total energy deposit" + 2 "Edep (MeV/mm) profile along beam direction" + 3 "total kinetic energy emerging" + 4 "energy spectrum of emerging gamma" + 5 "energy spectrum of emerging e+-" + 6 "energy spectrum of emerging neutrons" + 7 "energy spectrum of emerging protons" + 8 "energy spectrum of emerging deuterons" + 9 "energy spectrum of emerging alphas" + 10 "energy spectrum of all others emerging ions" + 11 "energy spectrum of all others emerging baryons" + 12 "energy spectrum of all others emerging mesons" + 13 "energy spectrum of all others emerging leptons (neutrinos)" + 14 "dN/dt (becquerel) of emerging gamma" + 15 "dN/dt (becquerel) of emerging e+-" + 16 "dN/dt (becquerel) of emerging neutrons" + 17 "dN/dt (becquerel) of emerging protons" + 18 "dN/dt (becquerel) of emerging deuterons" + 19 "dN/dt (becquerel) of emerging alphas" + 20 "dN/dt (becquerel) of all others emerging ions" + 21 "dN/dt (becquerel) of all others emerging baryons" + 22 "dN/dt (becquerel) of all others emerging mesons" + 23 "dN/dt (becquerel) of all others emerging leptons (neutrinos)" + + Histograms 24 to 43 are assigned to population of metastable isomer. + Here, ´metastable' means time life > 0. + + The type and number of isomers created in a run cannot be predicted in advance. + Therefore the assignation : isomer <--> histo_Id is done on fly + and printed at end of run. A lock mechanism is necessary in MT mode; see Run.cc + + Activation and binning control of histograms is done with the usual command +\verbatim +/analysis/h1/set +\endverbatim + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default Activation) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default Activation) + +\section Activation_s6 VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim +> /control/execute vis.mac +\endverbatim + + The tracks are drawn at the end of event, and erased at the end of run. + gamma green + neutron yellow + negative particles (e-, ...) red + positive particles (e+, ions, ...) blue + +\section Activation_s7 HOW TO START ? + + Execute Activation in 'batch' mode from macro files : +\verbatim +% ./Activation run1.mac +\endverbatim + + Execute Activation in 'interactive mode' with visualization : +\verbatim +% ./Activation +Idle> control/execute vis.mac +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + + Macros provided in this example: + - Bi209.mac: neutron (25 meV) on 10 cm of Bi209 + - Co60.mac: neutron (25 meV) on 1 cm of Cobalt. + + Macros to be run interactively: + - debug.mac: neutron (25 meV) on Cobalt + - vis.mac: To activate visualization +*/ diff --git a/examples/extended/radioactivedecay/Activation/README b/examples/extended/radioactivedecay/Activation/README new file mode 100644 index 0000000000..15e5114b3d --- /dev/null +++ b/examples/extended/radioactivedecay/Activation/README @@ -0,0 +1,163 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Activation + ---------- + + Survey energy deposition and particle's flux from an hadronic cascade, + including radioactive decays. + The main purpose of the example is to plot evolution of each metastable isomer + as a function of time, taking into account the time of exposure in the beam. + Also plot the activity of emerging particles. + Use PhysicsConstructor objects rather than predefined G4 PhysicsLists. + + 1- MATERIALS AND GEOMETRY DEFINITION + + The "absorber" is a box made of a given material. + + Three parameters define the absorber : + - the material of the absorber + - the thickness of an absorber + - the transverse size of the absorber (the input face is a square) + + The volume "World" contains the "absorber". + + A function, and its associated UI command, allows to build a material + directly from a single isotope. + + To be identified by the ThermalScattering module, the elements composing a + material must have a specific name (see G4ParticleHPThermalScatteringNames.cc) + Examples of such materials are build in DetectorConstruction::DefineMaterials(). + + 2- PHYSICS LIST + + The physics list contains a "full" set of physics processes. It is defined in + the PhysicsList class as a Geant4 modular physics list with registered physics + constructors (builders). + + Physics constructors are either constructors provided in Geant4 (with G4 prefix) + or 'local'. They include : HadronElastic, HadronInelastic, IonsInelastic, GammaNuclear, + RadioactiveDecay and Electomagnetic. + (see geant4/source/physics_lists/constructors) + + HadronElasticPhysicsHP include a model for thermalized neutrons, under the control of a command + defined in NeutronHPMesseger. + + GammmaNuclearPhysics is a subset of G4BertiniElectroNuclearBuilder. + + ElectromagneticPhysics is a simplified version of G4EmStandardPhysics. + + Several hadronic physics options are controlled by environment variables. + To select them, see Activation.cc + + 3- AN EVENT : THE PRIMARY GENERATOR + + The primary kinematic is a single particle which hits the absorber + perpendicular to the input face. The type of particle and its energy are + set in the PrimaryGeneratorAction class, and can be changed via the G4 + build-in commands of G4ParticleGun class + (see the macros provided with this example). + + One can control the transverse size of the beam. + The command /testhadr/gun/beamSize is built in PrimaryGeneratorMessenger class. + + The time of exposure in the beam may be finite. It is controled by the command + /testhadr/gun/beamTime. + Then the time zero of each event is randomly chosen within this interval. + + 4- PHYSICS + + The program computes and plots energy deposited in the interaction volume + (absorber), energy spectrum and activity of particles leaving the absorber, + and evolution of population of metastable isomers within the absorber + (see below : histograms). + Processes invoked and particles generated during interactions are listed. + + 5- HISTOGRAMS + + The test contains 43 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + 1 "total energy deposit" + 2 "Edep (MeV/mm) profile along beam direction" + 3 "total kinetic energy emerging" + 4 "energy spectrum of emerging gamma" + 5 "energy spectrum of emerging e+-" + 6 "energy spectrum of emerging neutrons" + 7 "energy spectrum of emerging protons" + 8 "energy spectrum of emerging deuterons" + 9 "energy spectrum of emerging alphas" + 10 "energy spectrum of all others emerging ions" + 11 "energy spectrum of all others emerging baryons" + 12 "energy spectrum of all others emerging mesons" + 13 "energy spectrum of all others emerging leptons (neutrinos)" + 14 "dN/dt (becquerel) of emerging gamma" + 15 "dN/dt (becquerel) of emerging e+-" + 16 "dN/dt (becquerel) of emerging neutrons" + 17 "dN/dt (becquerel) of emerging protons" + 18 "dN/dt (becquerel) of emerging deuterons" + 19 "dN/dt (becquerel) of emerging alphas" + 20 "dN/dt (becquerel) of all others emerging ions" + 21 "dN/dt (becquerel) of all others emerging baryons" + 22 "dN/dt (becquerel) of all others emerging mesons" + 23 "dN/dt (becquerel) of all others emerging leptons (neutrinos)" + + Histograms 24 to 43 are assigned to population of metastable isomer. + Here, ´metastable' means time life > 0. + + The type and number of isomers created in a run cannot be predicted in advance. + Therefore the assignation : isomer <--> histo_Id is done on fly + and printed at end of run. A lock mechanism is necessary in MT mode; see Run.cc + + Activation and binning control of histograms is done with the usual command + /analysis/h1/set + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default Activation) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default Activation) + + 6- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The tracks are drawn at the end of event, and erased at the end of run. + gamma green + neutron yellow + negative particles (e-, ...) red + positive particles (e+, ions, ...) blue + + 7- HOW TO START ? + + Execute Activation in 'batch' mode from macro files : + % ./Activation run1.mac + + Execute Activation in 'interactive mode' with visualization : + % ./Activation + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit + + Macros provided in this example: + - Bi209.mac: neutron (25 meV) on 10 cm of Bi209 + - Co60.mac: neutron (25 meV) on 1 cm of Cobalt. + + Macros to be run interactively: + - debug.mac: neutron (25 meV) on Cobalt + - vis.mac: To activate visualization diff --git a/examples/extended/radioactivedecay/README b/examples/extended/radioactivedecay/README new file mode 100644 index 0000000000..428d8b794e --- /dev/null +++ b/examples/extended/radioactivedecay/README @@ -0,0 +1,24 @@ + + Geant4 extended examples - radioactive decay + -------------------------------------------- + + Examples in this directory demonstrate the use of some features of the + Radioactive-Decay hadronic model in Geant4. + +rdecay01 +-------- + + This example allows to display basic features of the radioactive decay + of a nuclei: energy spectrum of emitted particles, time of life, activity. + +rdecay02 +-------- + + This example illustrates more advanced features of the package: + selected decay channels, time window, bias and variance reduction technique. + +Activation +---------- + + Compute and plot time evolution of each nuclide in an hadronic cascade. + Compute and plot activity of emerging particles. diff --git a/examples/extended/radioactivedecay/rdecay01/.README.txt b/examples/extended/radioactivedecay/rdecay01/.README.txt new file mode 100644 index 0000000000..886267423a --- /dev/null +++ b/examples/extended/radioactivedecay/rdecay01/.README.txt @@ -0,0 +1,163 @@ + +///\file "radioactivedecay/rdecay01/.README.txt" +///\brief Example rdecay01 README page + +/*! \page Examplerdecay01 Example rdecay01 + + Survey G4RadioactiveDecay process. See Physics Reference Manual, chapter 36. + See also http://ie.lbl.gov/decay.html + +\section rdecay01_s1 Geometry construction + + It is a simple box which represente an 'infinite' homogeneous medium. + +\section rdecay01_s2 Physics list + + PhysicsList.cc defines only G4RadioactiveDecay, G4Transportation processes, + and relevant particle definitions. + Therefore, once created, particles or ions travel as geantino. + +\section rdecay01_s3 Primary generator + + Default kinematic is an ion (Ne24), at rest, at coordinate origin. + Can be changed with particleGun commands. + +\section rdecay01_s4 Physics + + As said above, all particles and ions behave as geantino, eg. no energy loss. + + A flag: +\verbatim +/rdecay01/fullChain (true or false) +\endverbatim +allows to limit to single decay or full decay chain (default). + In case of full decay chain, G4TrackStatus of ions is set to fStopButAlive + in order to force decay at rest. + In case of single decay, G4TrackStatus of secondary ion is set to fStopAndKill. + + At each decay, one counts and plots energy spectrum of created particles and + ions, and energy-momentum balance of that decay. + + Total time of life of decay chain is plotted. Activity is computed. + + The command + \verbatim + /rdecay01/timeWindow + \endverbatim + allows to survey activity of each nuclide in a specified + time window [t1,t2] : population at t1 and t2, nb of decays within [t1,t2], mean activity. + See timeWindow.mac + + Few macros are given in example. Debug.mac is to be run in interactive mode. + +\section rdecay01_s5 User data files + + Users can redefine RadioactiveDecay and PhotonEvaporation data, via commands: +\verbatim +/grdm/setRadioactiveDecayFile +/grdm/setPhotoEvaporationFile +\endverbatim + Examples of such files are given in subdirectory UserData. \n + Formats are described in readme \n + Examples in macros Cf238.mac and No252.mac + + \section rdecay01_s6 example of biasing + + macro timeWindowBiased.mac illustrates one of the biasing capabilities of the + radioactiveDecay package. Ca47 is forced to decay within 20 days + (eg. 1728000 seconds in data file). + It is instructive to plot time of life (histo 8) with and without the weight of the track: + see line 189/190 of TrackingAction.cc + And also to compare with analog decay mode : comment out /grdm/ commands in the macro. +\section rdecay01_s7 Visualisation + + Visualization Manager is set in the main () (see rdecay01.cc). + Initialisation of the drawing is done via the commands + /vis/.. in the macro vis.mac. This macro is automatically read from the main + in case of interactive running mode. + + - e- red + - e+ blue + - nu_e white + - anti_nu_e white + - gamma green + - alpha yellow + - GenericIon grey + +\section rdecay01_s8 How to start ? + + - Execute rdecay01 in 'batch' mode from macro files +\verbatim +% rdecay01 singleDecay.mac +\endverbatim + + - Execute rdecay01 in 'interactive mode' with visualization +\verbatim +% rdecay01 +.... +Idle> ---> type your commands. For instance: +Idle> /control/execute debug.mac +.... +Idle> /run/beamOn 1 +.... +Idle> exit +\endverbatim + + Macros provided in this example: + - Co60.mac: Co60 + - Gd158.mac: Gd158 excited state + - No158.mac: read user data file + - Po212.mac: Po212 excited state + - Ra228.mac: Ra228 excited state + - alpha.mac: Po212 alpha decay + - atomicDeexcitation.mac: plot Auger cascade + - fullChain.mac: U238 + - neutron.mac: Li10 neutron emission + - proton.mac: Co53 proton emission + - singleDecay.mac: Ne10 + - timeWindow.mac: print activity within a given time window + - timeWindowBiased.mac: force decay within a given time window + + Macros to be run interactively: + - Cf238.mac: read user data file + - debug.mac: Pb210 + - electronicCapture.mac: Fe55 electronic capture + - vis.mac: To activate visualization + +\section rdecay01_s9 Histograms + + rdecay01 produces several 1D histograms which are saved as + rdecay01.root by default. + + - 1 : energy spectrum: e+ e- + - 2 : energy spectrum: nu_e anti_nu_ev + - 3 : energy spectrum: gamma + - 4 : energy spectrum: alpha + - 5 : energy spectrum: ions + - 6 : total kinetic energy (Q) + - 7 : momentum balance + - 8 : total time of life of decay chain + - 9 : total visible energy + + The histograms are managed by G4AnalysiManager and its Messenger. + The histos can be individually activated with the command : +\verbatim +/analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: +\verbatim +/analysis/setFileName name (default rdecay1) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim +/analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default rdecay1) + +*/ diff --git a/examples/extended/radioactivedecay/rdecay01/README b/examples/extended/radioactivedecay/rdecay01/README new file mode 100644 index 0000000000..54ee42fbaf --- /dev/null +++ b/examples/extended/radioactivedecay/rdecay01/README @@ -0,0 +1,153 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + rdecay01 + -------- + + Survey G4RadioactiveDecay process. See Physics Reference Manual, chapter 36. + See also http://ie.lbl.gov/decay.html + + 1- Geometry construction + --------------------- + + It is a simple box which represente an 'infinite' homogeneous medium. + + 2- Physics list + ------------ + + PhysicsList.cc defines only G4RadioactiveDecay, G4Transportation processes, + and relevant particle definitions. + Therefore, once created, particles or ions travel as geantino. + + 3- Primary generator + ----------------- + + Default kinematic is an ion (Ne24), at rest, at coordinate origin. + Can be changed with particleGun commands. + + 4- Physics + ------- + As said above, all particles and ions behave as geantino, eg. no energy loss. + + A flag, /rdecay01/fullChain (true or false), allows to limit to + single decay or full decay chain (default). + In case of full decay chain, G4TrackStatus of ions is set to fStopButAlive + in order to force decay at rest. + In case of single decay, G4TrackStatus of secondary ion is set to fStopAndKill. + + At each decay, one counts and plots energy spectrum of created particles and + ions, and energy-momentum balance of that decay. + + Total time of life of decay chain is plotted. Activity is computed. + + The command /rdecay01/timeWindow allows to survey activity of each nuclide in a specified + time window [t1,t2] : population at t1 and t2, nb of decays within [t1,t2], mean activity. + See timeWindow.mac + + Few macros are given in example. Debug.mac is to be run in interactive mode. + + 4-a User data files + ------------------- + Users can redefine RadioactiveDecay and PhotonEvaporation data, via commands: + /grdm/setRadioactiveDecayFile + /grdm/setPhotoEvaporationFile + Examples of such files are given in subdirectory UserData. + Formats are described in readme + Examples in macros Cf238.mac and No252.mac + + 4-b example of biasing + ---------------------- + macro timeWindowBiased.mac illustrates one of the biasing capabilities of the + radioactiveDecay package. Ca47 is "forced" to decay within 20 days + (eg. 1728000 seconds in data file). + It is instructive to plot time of life (histo 8) with and without the weight of the track: + see lines 189/190 of TrackingAction.cc + And also to compare with analog decay mode : comment out /grdm/ commands in the macro. + + 5- Visualisation + ------------- + + Visualization Manager is set in the main(). + Initialisation of the drawing is done via the commands + /vis/.. in the macro vis.mac. This macro is automatically read from the main + in case of interactive running mode. + + e- red + e+ blue + nu_e white + anti_nu_e white + gamma green + alpha yellow + GenericIon grey + + 6- How to start ? + -------------- + + - Execute rdecay01 in 'batch' mode from macro files + % rdecay01 singleDecay.mac + + - Execute rdecay01 in 'interactive mode' with visualization + % rdecay01 + .... + Idle> ---> type your commands. For instance: + Idle> /control/execute debug.mac + .... + Idle> /run/beamOn 1 + .... + Idle> exit + + Macros provided in this example: + - Co60.mac: Co60 + - Gd158.mac: Gd158 excited state + - No158.mac: read user data file + - Po212.mac: Po212 excited state + - Ra228.mac: Ra228 excited state + - alpha.mac: Po212 alpha decay + - atomicDeexcitation.mac: plot Auger cascade + - fullChain.mac: U238 + - neutron.mac: Li10 neutron emission + - proton.mac: Co53 proton emission + - singleDecay.mac: Ne10 + - timeWindow.mac: print activity within a given time window + - timeWindowBiased.mac: force decay within a given time window + + Macros to be run interactively: + - Cf238.mac: read user data file + - debug.mac: Pb210 + - electronicCapture.mac: Fe55 electronic capture + - vis.mac: To activate visualization + + 7- Histograms + ---------- + + rdecay01 produces several 1D histograms which are saved as + rdecay01.root by default. + + 1 : energy spectrum: e+ e- + 2 : energy spectrum: nu_e anti_nu_ev + 3 : energy spectrum: gamma + 4 : energy spectrum: alpha + 5 : energy spectrum: ions + 6 : total kinetic energy (Q) + 7 : momentum balance + 8 : total time of life of decay chain + 9 : total visible energy + + The histograms are managed by G4AnalysisManager and its Messenger. + The histos can be individually activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) + + One can control the name of the histograms file with the command: + /analysis/setFileName name (default rdecay1) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default rdecay1) + diff --git a/examples/extended/radioactivedecay/rdecay02/.README.txt b/examples/extended/radioactivedecay/rdecay02/.README.txt new file mode 100644 index 0000000000..4331d092eb --- /dev/null +++ b/examples/extended/radioactivedecay/rdecay02/.README.txt @@ -0,0 +1,211 @@ + +///\file "radioactivedecay/rdecay02/.README.txt" +///\brief Example rdecay02 README page + +/*! \page Examplerdecay02 Example rdecay02 + + Rdecay02 is created to show how to use the G4RadioactiveDecay process to + simulate the decays of radioactive isotopes as well as the induced + radioactivity resulted from nuclear interactions. + + In this example a simple geometry consists of a cylindric target placed + in the centre of a tube detector. Various primary event generation and + tallying options are available. + +\section rdecay02_s1 GEOMETRY + + The world is filled with "Air" and there are two components in it: + + - Target: A cylinder placed at the origin along the z-axis. The default + size of the cylinder is 0.5 cm radius and 1 cm length, and its default + material is "CsI". + + - Detector: A tube centered at the origin along the z-axis, with inner + radius matching the radius of the target. The default thickness of the + tube is 2 cm and it is 5 cm long. The default material is "Germanium". + + The user can change the target/detector size and material, using the + commands in the directory +\verbatim +/rdecay02/det +\endverbatim + +\section rdecay02_s2 PHYSICS + + The following physics processes are included by default: + + - Standard electromagnetic + - Decay + - Radioactive Decay + By default radioactive decay is applied through out the geometry. + The user can limit it to just the target by commands : + /process/had/rdm/noVolumes + /process/had/rdm/selectVolume Target + + - Hadronic processes + +\section rdecay02_s3 EVENT: THE PRIMARY GENERATOR + + The primary kinematic is a single particle or ion shooted at the + centre of the target. The type of the particle and its energy are set in + PrimaryGeneratorAction, and can be changed via the G4 build-in commands of + ParticleGun class (see the macros provided with this example). + Default is Ne24, at rest. + +\section rdecay02_s4 DETECTOR RESPONSE + + The relevant informations are collected in TrackingAction or + SteppingAction. These include: + + - Emission particles in the RadioactiveDecay process: + particle PDGcode, + particle kinetic energy, + particle creation time, + particle weight. + + Note: the residual nuclei is not considered as an emitted particle. + + - Radio-Isotopes. All the radioactive isotopes produced in the simulation: + isotope PDGcode, + isotope creation time, + isotope weight. + + - Energy depositions in the target and detector by prodicts of the + RadioactiveDecay process: + energy depostion (positive value for target and negative for detector), + time, + weight. + + +\section rdecay02_s5 HISTOGRAMS + + The test contains 7 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : +\verbatim + /analysis/h1/set id nbBins valMin valMax unit +\endverbatim + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + histogram 0: The Pulse Height Spectrum (PHS) of the target. + histogram 1: The PHS of the detector. + histogram 2: The combined PHS of the target and detector. + histogram 3: The anti-coincidece PHS of the target. + histogram 4: The anti-coincidece PHS of the detector. + histogram 5: The coincidece PHS between the target and detector. + histogram 6: The emitted particle energy spectrum. + + It is assumed the detector and target pulses both have an integration time + of 1 microsecond, and the gate is 2 microsecond for the coincidence spectrum. + The target and detctor have a threshold of 10 keV in the anti-/coincidence + modes. + + HistoManager includes also 4 ntuples whose contents are described in the above paragraphe + (detector response) + The ntuples can be activated with the command +\verbatim + /analysis/ntuple/setActivation +\endverbatim + + One can control the name of the analysis file with the command: +\verbatim + /analysis/setFileName name (default rdecay02) +\endverbatim + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: +\verbatim + /analysis/h1/setAscii id +\endverbatim + All selected histos will be written on a file name.ascii (default rdecay02) + +\section rdecay02_s6 VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: +\verbatim + > /control/execute vis.mac +\endverbatim + The tracks are drawn at the end of event, and erased at the end of run. + + gamma green + neutron yellow + negative particles (e-, ...) red + positive particles (e+, ions, ...) blue + +\section rdecay02_s7 HOW TO START ? + + Execute rdecay02 in 'batch' mode from macro files : +\verbatim + % rdecay02 run1.mac +\endverbatim + + Execute rdecay02 in 'interactive mode' with visualization : +\verbatim + % rdecay02 + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit +\endverbatim + +\section rdecay02_s8 FURTHER EXAMPLES + + There are a number of g4mac files in the ./macros subdirectory, to show + the features of the G4RadioactiveDecay process. Most of them will lead to + the creation of an root file in the same name of the macro file. + + u238c.mac: shows the decays of the U238 chain in analogue MC mode. + + th234c-b.mac: shows the decays of Th234 in variance reduction MC mode. + All its secondaies in along the decay chains are generated. The default + source profile and decay biasing schemes are used to determine the decay + times and weights of the secondaries. + + proton.mac: simulation of 1 GeV protons incident on a lead target. + The decays of the radio-siotopes created in the proton-lead interactions + are simulated with RadioactiveDecay in analogue MC mode. + + proton-beam.mac: same as proton.mac, but the decays of the radio-siotopes + created in the proton-lead interactions are simulated with + RadioactiveDecay in variance reduction MC mode. The isotopes and those + along the decay chains are forced to decay in the time windows specified + by the user in file measures.data, and the weights of the decay products + are determined by the beam profile as defined in the beam.data file and + their decay times. + + neutron.mac: macrofile to show the incident of low energy neutrons on an + user specified NaI target and the decays of the induced radio-isotopes. + + ne24.mac: this shows the decays of Ne-24 to Na-24 in variance reduction MC + mode. Further decays of Na-24 are not simulated by applying the + nucleuslimits in RadioactiveDecay. Two runs are carried out. + One with the bracjing ratio biasing applied and one without. + + isotopes.mac: to show the decays of a number of different isotopes in a + single macro file. + + f24.mac: to show the different treatments one can apply to the decays of F24. + i) the complete decay chain from F24 to Mg24, in analogue mode; + ii) the complete chain, but in variance reduction mode; + iii) restrict to the decay of F24 only in analogue mode; iv) restrict to + the decay of F24 only but in variance reduction mode. + + as74.mac: The decays of As74 which has a rather complicated decay scheme. + i) in analogue MC mode; + ii) in variance reduction MC mode. + + UserRadDataPb210Test.mac: show how the user can define its own radioactive + decay datafile + + UserEvapDataBiTest.mac: show how the user can define its own + photo-evaporation datafile + + No252.mac: show how to simulate Radoactive decay for nuclei with Z>100 + based on user datafile +*/ diff --git a/examples/extended/radioactivedecay/rdecay02/README b/examples/extended/radioactivedecay/rdecay02/README new file mode 100644 index 0000000000..f641f45995 --- /dev/null +++ b/examples/extended/radioactivedecay/rdecay02/README @@ -0,0 +1,208 @@ + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + rdecay02 + -------- + + Rdecay02 is created to show how to use the G4RadioactiveDecay process to + simulate the decays of radioactive isotopes as well as the induced + radioactivity resulted from nuclear interactions. + + In this example a simple geometry consists of a cylindric target placed + in the centre of a tube detector. Various primary event generation and + tallying options are available. + + 1. GEOMETRY + + The world is filled with "Air" and there are two components in it: + + - Target: A cylinder placed at the origin along the z-axis. The default + size of the cylinder is 0.5 cm radius and 1 cm length, and its default + material is "CsI". + + - Detector: A tube centered at the origin along the z-axis, with inner + radius matching the radius of the target. The default thickness of the + tube is 2 cm and it is 5 cm long. The default material is "Germanium". + + The user can change the target/detector size and material, using the + commands in the directory /rdecay02/det + + 2. PHYSICS + + The following physics processes are included by default: + + - Standard electromagnetic + - Decay + - Radioactive Decay + By default radioactive decay is applied through out the geometry. + The user can limit it to just the target by commands : + /process/had/rdm/noVolumes + /process/had/rdm/selectVolume Target + + - Hadronic processes + + 3. AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic is a single particle or ion shooted at the + centre of the target. The type of the particle and its energy are set in + PrimaryGeneratorAction, and can be changed via the G4 build-in commands of + ParticleGun class (see the macros provided with this example). + Default is Ne24, at rest. + + 4. DETECTOR RESPONSE + + The relevant informations are collected in TrackingAction or + SteppingAction. These include: + + - Emission particles in the RadioactiveDecay process: + particle PDGcode, + particle kinetic energy, + particle creation time, + particle weight. + + Note: the residual nuclei is not considered as an emitted particle. + + - Radio-Isotopes. All the radioactive isotopes produced in the simulation: + isotope PDGcode, + isotope creation time, + isotope weight. + + - Energy depositions in the target and detector by prodicts of the + RadioactiveDecay process: + energy depostion (positive value for target and negative for detector), + time, + weight. + + + 5. HISTOGRAMS + + The test contains 7 built-in 1D histograms, which are managed by + G4AnalysisManager and its Messenger. The histos can be individually + activated with the command : + /analysis/h1/set id nbBins valMin valMax unit + where unit is the desired unit for the histo (MeV or keV, etc..) + (see the macros xxxx.mac). + + histogram 0: The Pulse Height Spectrum (PHS) of the target. + histogram 1: The PHS of the detector. + histogram 2: The combined PHS of the target and detector. + histogram 3: The anti-coincidece PHS of the target. + histogram 4: The anti-coincidece PHS of the detector. + histogram 5: The coincidece PHS between the target and detector. + histogram 6: The emitted particle energy spectrum. + + It is assumed the detector and target pulses both have an integration time + of 1 microsecond, and the gate is 2 microsecond for the coincidence spectrum. + The target and detctor have a threshold of 10 keV in the anti-/coincidence + modes. + + Initially, all histograms but histogram 6 are inactive. They can all be turned on + with the command + + /analysis/h1/setActivationToAll true + + or specific histograms can be turned on with the command + + /analysis/h1/setActivation i true + + where i is the histogram index (0,... n). + To turn off, set the final argument to false + + + HistoManager includes also 4 ntuples whose contents are described in the above paragraphe + (detector response) + The ntuples can be activated with the command /analysis/ntuple/setActivation + + One can control the name of the analysis file with the command: + /analysis/setFileName name (default rdecay02) + + It is possible to choose the format of the histogram file : root (default), + xml, csv, by using namespace in HistoManager.hh + + It is also possible to print selected histograms on an ascii file: + /analysis/h1/setAscii id + All selected histos will be written on a file name.ascii (default rdecay02) + + 6. VISUALIZATION + + The Visualization Manager is set in the main(). + The initialisation of the drawing is done via the commands + /vis/... in the macro vis.mac. To get visualisation: + > /control/execute vis.mac + + The tracks are drawn at the end of event, and erased at the end of run. + + gamma green + neutron yellow + negative particles (e-, ...) red + positive particles (e+, ions, ...) blue + + 7. HOW TO START ? + + Execute rdecay02 in 'batch' mode from macro files : + % rdecay02 run1.mac + + Execute rdecay02 in 'interactive mode' with visualization : + % rdecay02 + Idle> control/execute vis.mac + .... + Idle> type your commands + .... + Idle> exit + + 8. FURTHER EXAMPLES + + There are a number of g4mac files in the ./macros subdirectory, to show + the features of the G4RadioactiveDecay process. Most of them will lead to + the creation of an root file in the same name of the macro file. + + u238c.mac: shows the decays of the U238 chain in analogue MC mode. + + th234c-b.mac: shows the decays of Th234 in variance reduction MC mode. + All its secondaies in along the decay chains are generated. The default + source profile and decay biasing schemes are used to determine the decay + times and weights of the secondaries. + + proton.mac: simulation of 1 GeV protons incident on a lead target. + The decays of the radio-siotopes created in the proton-lead interactions + are simulated with RadioactiveDecay in analogue MC mode. + + proton-beam.mac: same as proton.mac, but the decays of the radio-siotopes + created in the proton-lead interactions are simulated with + RadioactiveDecay in variance reduction MC mode. The isotopes and those + along the decay chains are forced to decay in the time windows specified + by the user in file measures.data, and the weights of the decay products + are determined by the beam profile as defined in the beam.data file and + their decay times. + + neutron.mac: macrofile to show the incident of low energy neutrons on an + user specified NaI target and the decays of the induced radio-isotopes. + + ne24.mac: this shows the decays of Ne-24 to Na-24 in variance reduction MC + mode. Further decays of Na-24 are not simulated by applying the + nucleuslimits in RadioactiveDecay. Two runs are carried out. + One with the bracjing ratio biasing applied and one without. + + isotopes.mac: to show the decays of a number of different isotopes in a + single macro file. + + f24.mac: to show the different treatments one can apply to the decays of F24. + i) the complete decay chain from F24 to Mg24, in analogue mode; + ii) the complete chain, but in variance reduction mode; + iii) restrict to the decay of F24 only in analogue mode; iv) restrict to + the decay of F24 only but in variance reduction mode. + + as74.mac: The decays of As74 which has a rather complicated decay scheme. + i) in analogue MC mode; + ii) in variance reduction MC mode. + + UserRadDataPb210Test.mac: show how the user can define its own radioactive + decay datafile + + UserEvapDataBiTest.mac: show how the user can define its own + photo-evaporation datafile + + No252.mac: show how to simulate Radoactive decay for nuclei with Z>100 + based on user datafile diff --git a/examples/extended/runAndEvent/.README.txt b/examples/extended/runAndEvent/.README.txt new file mode 100644 index 0000000000..e5cd752e37 --- /dev/null +++ b/examples/extended/runAndEvent/.README.txt @@ -0,0 +1,63 @@ + +///\file "runAndEvent/.README.txt" +///\brief Examples runAndEvent README page + +/*! \page Examples_runAndEvent Category "runAndEvent" + + Examples in this directory demonstrate the use of some features in +Run and Event categories. Since these categories are on the top of +hierarchy of Geant4 structure to control the full functionarities of +Geant4, some examples contain features in other categories such as +Tracking, Track, Particles, Detector responces, and even some cases +Geometry and Processes. + +\link ExampleRE01 RE01 \endlink + + This example demonstrates how to connect the information between +primary particles and hits. It also utilizes some user-information +classes. + +\link ExampleRE02 RE02 \endlink + + This example demonstrates how to accumulate the physics quantities +such as energy deposition and dose for a run. It also demonstrates +the use of primitive scorers. + +\link ExampleRE03 RE03 \endlink + + This example demonstrates how to use UI-command base scoring. +It create parallel world(s) for defining scoring mesh(es). + +\link ExampleRE04 RE04 \endlink + + This example demonstrates how to define layered mass geometry in +a parallel world and use it in a simulation. + +\link ExampleRE05 RE05 \endlink + +Defines a simplified collider detector setup. +Demonstrates interfacing to the PYTHIA primary generator. Includes +the definition of a 'readout' geometry. Exercises event filtering using +the stacking mechanism. Includes visualization. \n +It was moved in extended examples from novice/N04 with removal of +novice examples. + +\link ExampleRE06 RE06 \endlink + +Implements three simplified sandwitch calorimeters. +Shows how to modify part of the geometry setup at run-time. Includes +detector description parameterisation by materials. Demonstrates +sharing of a sensitive detector definition for different sub-detectors. +Defines different geometrical regions with different production +thresholds. Shows customization of the G4Run. \n +It was moved in extended examples from novice/N07 with removal of +novice examples. + +\link ExampleRE07 RE07 \endlink + +Based on extended/electromagnetic/TestEm3, this example demonstrates +how to register specialized tracking managers for a particle or a set +of particles. + +*/ + diff --git a/examples/extended/runAndEvent/RE01/.README.txt b/examples/extended/runAndEvent/RE01/.README.txt new file mode 100644 index 0000000000..8abcedf960 --- /dev/null +++ b/examples/extended/runAndEvent/RE01/.README.txt @@ -0,0 +1,70 @@ + +///\file "runAndEvent/RE01/.README.txt" +///\brief Example RE01 README page + +/*! \page ExampleRE01 Example RE01 + + + Contact : M.Asai (SLAC) + +\section RE01_s1 Introduction + + This example demonstrates how to connect the information between +primary particles and hits. It also utilize some user-information +classes. + +\subsection RE01_s11 Geometry and region information + + It has a quite simple cylindrical tracker of 5 layers and a +cylindrical calorimeter of lead and scintillator. Dedicated regions +are assigned to both tracker and calorimeter mother volumes not +for setting additional production thresholds but for adding some +more information to these regions. RE01RegionInformation is the +class for this purpose. + A "readout geometry" is attached to the calorimeter to define +its cells. + +\subsection RE01_s12 Physics + + This example basically uses QGSP_BERT physics list. In addition +to this, RE01UnknownDecayPhysics is used for adding decay process to +G4UnknownParticle. + +\subsection RE01_s13 Event generator + + An event sample is attached. This event has a Higgs particle +which decays into e+e- and mu+mu- pairs through two Z bosons. +It uses G4HEPEvtInterface. + In this example, by utilizing G4UnknownParticle, all particles +appear in the primary event are converted to G4Track and then +to RE01Trajectory. Relation between primary particles and track +IDs are shown at the end of event execution. + +\section RE01_s2 "Source track" information + + "Source track" is meant for a track that is either a primary +particle or a track born is the tracking region. This information +is stored in RE01TrackInformation class object and copied from +a parent track to its daughters. + +\subsection RE01_s21 Track suspension + + All source tracks are suspended for their tracking when they are +getting into the calorimeter region. Thus, all tracks in the tracker +region are tracked before generating any shower in the calorimeter. + +\subsection RE01_s22 Tracker hits associated with primary particle information + + Information kept in RE01TrackInformation is used to connect each +tracker hit to the primary particle. + +\subsection RE01_s23 Energy deposition of each source track + + Utilizing RE01StackingAction, shower generation is done for each +souorce track separately, and thus energy deposition in calorimeter +cells are shown for each individual source track. With the trajectory +information, energy deposition for each primary particle can also +be gotten. + +*/ + diff --git a/examples/extended/runAndEvent/RE01/README b/examples/extended/runAndEvent/RE01/README new file mode 100644 index 0000000000..f463c78101 --- /dev/null +++ b/examples/extended/runAndEvent/RE01/README @@ -0,0 +1,66 @@ + + RE01 - An extended example for run and event + -------------------------------------------- + + Contact : M.Asai (SLAC) + +1. Introduction + + This example demonstrates how to connect the information between +primary particles and hits. It also utilize some user-information +classes. + +1.1 Geometry and region information + + It has a quite simple cylindrical tracker of 5 layers and a +cylindrical calorimeter of lead and scintillator. Dedicated regions +are assigned to both tracker and calorimeter mother volumes not +for setting additional production thresholds but for adding some +more information to these regions. RE01RegionInformation is the +class for this purpose. + A "readout geometry" is attached to the calorimeter to define +its cells. + +1.2 Physics + + This example basically uses QGSP_BERT physics list. In addition +to this, RE01UnknownDecayPhysics is used for adding decay process to +G4UnknownParticle. + +1.3 Event generator + + An event sample is attached. This event has a Higgs particle +which decays into e+e- and mu+mu- pairs through two Z bosons. +It uses G4HEPEvtInterface. + In this example, by utilizing G4UnknownParticle, all particles +appear in the primary event are converted to G4Track and then +to RE01Trajectory. Relation between primary particles and track +IDs are shown at the end of event execution. + +2. "Source track" information + + "Source track" is meant for a track that is either a primary +particle or a track born is the tracking region. This information +is stored in RE01TrackInformation class object and copied from +a parent track to its daughters. + +2.1 Track suspension + + All source tracks are suspended for their tracking when they are +getting into the calorimeter region. Thus, all tracks in the tracker +region are tracked before generating any shower in the calorimeter. + +2.2 Tracker hits associated with primary particle information + + Information kept in RE01TrackInformation is used to connect each +tracker hit to the primary particle. + +2.3 Energy deposition of each source track + + Utilizing RE01StackingAction, shower generation is done for each +souorce track separately, and thus energy deposition in calorimeter +cells are shown for each individual source track. With the trajectory +information, energy deposition for each primary particle can also +be gotten. + + diff --git a/examples/extended/runAndEvent/RE02/.README.txt b/examples/extended/runAndEvent/RE02/.README.txt new file mode 100644 index 0000000000..1af2af4477 --- /dev/null +++ b/examples/extended/runAndEvent/RE02/.README.txt @@ -0,0 +1,250 @@ + +///\file "runAndEvent/RE02/.README.txt" +///\brief Example RE02 README page + +/*! \page ExampleRE02 Example RE02 + + This example simulates a simplified water phantom measurement + in medical application with demonstration of primitive scorers. + This example also demonstrates nested parameterised volume which + realizes segmented boxes using a combination of replicated volumes + and a parameterised volume. + + ---- (Tips) + + This example creates 100 x 100 x 200 boxes using Nested Parameterised + Volume for realistic situation of medical application. + This is very memory consumption if normal Parameterised Volume is used, + and needs roughly more than 1 GB memory for execution. However, + NestedParameterised volume effectively works to reduce the memory consumption, + and it only needs less than 100 MB memory for execution. + +\section RE02_s1- GEOMETRY DEFINITION + + The setup contains a water phantom as target by default. The world volume + is 200 cm x 200 cm x 200 cm box filled with air. The water phantom is box shape + and the size of 200 mm x 200 mm x 400 mm. The volume of water phantom is divided + into 100 x 100 x 1 towers using replicated volume,(RE02DetectorConstruction), + and then those towers are segmented into 200 boxes with respect to z axis + using nested parameterized volume,(RE02NestedPhantomParameterisation). + e.g. The volume of water phantom is divided into 100 x 100 x 200 boxes, + and a voxel size is 2.0 mm x 2.0 mm x 2.0 mm. + + For demonstration purpose of the nested parameterised volume, + (RE02NestedPhantomParameterisation), materials are assigned as water (lead) + in even (odd) order segments, alternately. + The simulation for homogeneous water phantom is also possible using an option. + + ---- Tips(1) + + If you want to reduce number of segments of water phantom, + please change following numbers which represent number of segments + in x, y, z axis, respectively.The following code can be found in + exampleRE02.cc. +\verbatim + RE02DetectorConstruction* detector = new RE02DetectorConstruction; + detector->SetNumberOfSegmentsInPhantom(100,100,200); + Nx, Ny, Nz +\endverbatim + ---- Tips(2) + + If you want to set all materials to water, + please use the following method. The following code can be found in + exampleRE02.cc. +\verbatim + detector->SetLeadSegment(FALSE); // Homogeneous water phantom + +\endverbatim + + The geometry and sensitive detector are constructed in + RE02DetectorConstruction class. + (See \ref RE02_s4 "SCORER " for detail descriptions about sensitive detector.) + +\section RE02_s2 PHYSICS LIST + + The particle's type and the physic processes which is available + in this example are set in PhysicsList class. + + The PhysicsList is originally copied from extended example, + (example/extended/analysis/A01). + Full set of particles (baryons, bosons and mesons) are created, and + Standard EM Physics and Low/High Energy parameterized models + for hadrons are applied. The detail description will be found in + example/extended/analysis/A01/README. + Specially, the PhysicsList was modified in this example, + to use Binary cascade model for hadron physics at low energy (<4GeV) + and inelastic process for generic ions with BinaryLightIonReaction. + The data files for physics processes have to be assigned using + environment variables. + + RE02PhysicsList is optimized for robustness and is not optimized for + any particular cases. If you will do precise calculation for your + use-case, please consider utilizing hadronic_lists, and defines the + production cut properly. + The default CutValue defines the production threshold of secondary + particles (mainly Ionisation and Bremsstrahlung processes are + concerned by this CutValue). + +\section RE02_s3 RUNS and EVENTS + +\subsection RE02_s31 Primary particles + + The primary kinematics consists of a single particle which hits the + target perpendicular to the input face. The default type of the particle + and its energy are set in the RE02PrimaryGeneratorAction class. + However it can be changed via the G4 build-in commands of ParticleGun + class. + The RE02PrimaryGeneratorAction class introduces a beam spot size + that makes initial particle position of x,y randomized using a Gaussian + random function, where the center position is fixed to (0,0). + The standard deviation of the beam spot size is given in + RE02PrimaryGeneratorAction as 10 mm. + + \subsection RE02_s32 Event + + An EVENT represents a simulation of one primary particle. + A RUN is a set of events. + + The user has control: + - at Begin and End of each run (class RunAction) + - at Begin and End of each event (class EventAction) + - at Begin and End of each track (class TrackingAction, not used here) + - at End of each step (class SteppingAction, not used here) + +\section RE02_s4 SCORER + +\subsection RE02_s41 Concrete Scorer + + This example introduces concrete primitive scorer (PS) and filter + classes for easy scoring. Those primitive scorers are registered to + MultiFunctionalDetector which is a concrete class of sensitive + detector(SD). Then the MultiFunctionalDetector is attached to + the logical volume of sensitive geometry. + A MultiFunctionalDetector, PrimitiveScorers, and SDFilters are + created and assigned to the logical volume of water phantom in + DetectorConstruction. + + A primitive scorer can score one kind of physical quantity, and + creates one hits collection per event. The quantity is collected in + G4THitsMap with the copy number of geometry. Here collection name is + given as "MultiFunctionalDetector Name"/"PrimitiveScorer Name". + A primitive scorer can have one filter (SDFilter) for selecting hits + to be used for the quantity. + + Since the geometry is constructed using nested parameterisation, + the copy number of geometry is defined as follows, +\verbatim + copy number of geometry = iy*Nx*Ny+ix*Nz+iz, +\endverbatim + + where Nx,Ny,Nz is total number of segmentation in x, y, and z axis,respectively, + and ix,iy,iz is a copy number of the mother volume, the grand mother volume, + and this volume, respectively. + This conversion is described in GetIndex() method in PrimitiveScorer. + + \subsection RE02_s42 The physical quantities scored in this example are: + + - Total energy deposit \n + - unit: Energy, collName: totalEDep + - Energy deposit by protons \n + - unit: Energy, collName: protonEDep + - Number of steps of protons \n + - unit: - , collName: protonNStep + - Cell Flux of charged tracks which pass through the geometry\n + - unit: Length/Volume, collName: chargedPassCellFlux + - Cell Flux of all charged tracks\n + - unit: Length/Volume, collName: chargedCellFlux + - Flux of charged particle at -Z surface of the BOX geometry, + where incident angle at the surface is taken into account.\n + - unit: Surface^(-1), collName: chargedSurfFlux + - Surface current of gamma at -Z surface of the BOX geometry. + The energy of gammas are from 1. keV to 10. keV. + The incident angle is not taken into account.\n + - unit: Surface^(-1), collName: gammaSurfCurr000 + - Same as previous one, but different energy bin. + The energy of gammas are from 10. keV to 100. keV.\n + - unit: Surface^(-1), collName: gammaSurfCurr001 + - Same as previous one, but different energy bin. + The energy of gammas are from 100. keV to 1. MeV. \n + - unit: Surface^(-1), collName: gammaSurfCurr002 + - Same as previous one, except for energy bin. + The energy of gammas are from 1. MeV to 10. MeV. \n + - unit: Surface^(-1), collName: gammaSurfCurr003 + +\subsection RE02_s43 Accumulating quantities during a RUN + + A PrimitiveScorer creates one hits collection per event. + The physical quantity in the hits collection need to be accumulated + into another G4THitsMap object during a RUN, in order to obtain + integrated flux or dose in a RUN. The accumulation of quantities + are done at RE02Run class. + + RE02Run class can automatically generate G4THitsMap objects for a RUN, + and accumulate physical quantities of an event into it. The accumulation + is done at RE02Run::RecordEvent(G4Event* aEvent). + + \subsection RE02_s44 Generate a Run object, and print results + + The RE02Run object is generated at RE02RunAction::GenerateRun(). + The accumulated physical quantities are printed at the end of RUN + ( RE02RunAction::EndOfEvent() ). This example prints only selected + physical quantities. + + +\section RE02_s5 VISUALIZATION + + The Visualization Manager is set in the main () (see RE02.cc). + The initialization of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main when running in interactive mode. + + The tracks are automatically drawn at the end of event and erased at + the beginning of the next run. + + The visualization (with OpenGL driver) assumes two things: + -# the visualization & interfaces categories have been compiled + with the environment variable G4VIS_BUILD_OPENGLX_DRIVER. + -# exampleRE02.cc has been compiled with G4VIS_USE_OPENGLX. + + (The same with DAWNFILE instead of OPENGLX) + + +\section RE02_s6 USER INTERFACES + + The default command interface, called G4UIterminal, is done via + standard G4cin/G4cout. + On Linux and Sun-cc on can use a smarter command interface G4UItcsh. + It is enough to set the environment variable G4UI_USE_TCSH before + compiling exampleRE02.cc + + + \section RE02_s7 HOW TO START ? + + - Execute RE02 in 'batch' mode from macro files (without visualization) +\verbatim +% exampleRE02 run1.mac +\endverbatim + + - Execute RE02 in 'interactive mode' with visualization +\verbatim +% exampleRE02 +.... +Idle> type your commands. For instance: +Idle> /run/beamOn 10 +.... +Idle> /control/execute run2.mac +.... +Idle> exit +\endverbatim + + - Macros are for different primary particles. + - vis.mac : 200 MeV proton with visualization + - run1.mac : 150 MeV proton + - run2.mac : 195 MeV/u Carbon ion + - run3.mac : 30 MeV electron + - run4.mac : 60 keV gamma + +*/ + + + diff --git a/examples/extended/runAndEvent/RE02/README b/examples/extended/runAndEvent/RE02/README new file mode 100644 index 0000000000..adf5808e17 --- /dev/null +++ b/examples/extended/runAndEvent/RE02/README @@ -0,0 +1,238 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + ExampleRE02 + ----------- + + + This example simulates a simplified water phantom measurement + in medical application with demonstration of primitive scorers. + This example also demonstrates nested parameterised volume which + realizes segmented boxes using a combination of replicated volumes + and a parameterised volume. + + (Tips) + This example creates 100 x 100 x 200 boxes using Nested Parameterised + Volume for realistic situation of medical application. + This is very memory consumption if normal Parameterised Volume is used, + and needs roughly more than 1 GB memory for execution. However, + NestedParameterised volume effectively works to reduce the memory consumption, + and it only needs less than 100 MB memory for execution. + + 1- GEOMETRY DEFINITION + + The setup contains a water phantom as target by default. The world volume + is 200 cm x 200 cm x 200 cm box filled with air. The water phantom is box shape + and the size of 200 mm x 200 mm x 400 mm. The volume of water phantom is divided + into 100 x 100 x 1 towers using replicated volume,(RE02DetectorConstruction), + and then those towers are segmented into 200 boxes with respect to z axis + using nested parameterized volume,(RE02NestedPhantomParameterisation). + e.g. The volume of water phantom is divided into 100 x 100 x 200 boxes, + and a voxel size is 2.0 mm x 2.0 mm x 2.0 mm. + + For demonstration purpose of the nested parameterised volume, + (RE02NestedPhantomParameterisation), materials are assigned as water (lead) + in even (odd) order segments, alternately. + The simulation for homogeneous water phantom is also possible using an option. + + ---- Tips(1) + *If you want to reduce number of segments of water phantom, + please change following numbers which represent number of segments + in x, y, z axis, respectively.The following code can be found in + exampleRE02.cc. + + RE02DetectorConstruction* detector = new RE02DetectorConstruction; + detector->SetNumberOfSegmentsInPhantom(100,100,200); + Nx, Ny, Nz + ---- Tips(2) + *If you want to set all materials to water, + please use the following method. The following code can be found in + exampleRE02.cc. + + detector->SetLeadSegment(FALSE); // Homogeneous water phantom + ---- + + The geometry and sensitive detector are constructed in + RE02DetectorConstruction class. + (See "4- SCORER " for detail descriptions about sensitive detector.) + + 2- PHYSICS LIST + + The particle's type and the physic processes which is available + in this example are set in PhysicsList class. + + The PhysicsList is originally copied from extended example, + (example/extended/analysis/A01). + Full set of particles (baryons, bosons and mesons) are created, and + Standard EM Physics and Low/High Energy parameterized models + for hadrons are applied. The detail description will be found in + example/extended/analysis/A01/README. + Specially, the PhysicsList was modified in this example, + to use Binary cascade model for hadron physics at low energy (<4GeV) + and inelastic process for generic ions with BinaryLightIonReaction. + The data files for physics processes have to be assigned using + environment variables. + + RE02PhysicsList is optimized for robustness and is not optimized for + any particular cases. If you will do precise calculation for your + use-case, please consider utilizing hadronic_lists, and defines the + production cut properly. + The default CutValue defines the production threshold of secondary + particles (mainly Ionisation and Bremsstrahlung processes are + concerned by this CutValue). + + 3- RUNS and EVENTS + + - Primary particles. + The primary kinematics consists of a single particle which hits the + target perpendicular to the input face. The default type of the particle + and its energy are set in the RE02PrimaryGeneratorAction class. + However it can be changed via the G4 build-in commands of ParticleGun + class. + The RE02PrimaryGeneratorAction class introduces a beam spot size + that makes initial particle position of x,y randomized using a Gaussian + random function, where the center position is fixed to (0,0). + The standard deviation of the beam spot size is given in + RE02PrimaryGeneratorAction as 10 mm. + + An EVENT represents a simulation of one primary particle. + A RUN is a set of events. + + The user has control: + -at Begin and End of each run (class RunAction) + -at Begin and End of each event (class EventAction) + -at Begin and End of each track (class TrackingAction, not used here) + -at End of each step (class SteppingAction, not used here) + + 4- SCORER + + - Concrete Scorer + This example introduces concrete primitive scorer (PS) and filter + classes for easy scoring. Those primitive scorers are registered to + MultiFunctionalDetector which is a concrete class of sensitive + detector(SD). Then the MultiFunctionalDetector is attached to + the logical volume of sensitive geometry. + A MultiFunctionalDetector, PrimitiveScorers, and SDFilters are + created and assigned to the logical volume of water phantom in + DetectorConstruction. + + A primitive scorer can score one kind of physical quantity, and + creates one hits collection per event. The quantity is collected in + G4THitsMap with the copy number of geometry. Here collection name is + given as /. + A primitive scorer can have one filter (SDFilter) for selecting hits + to be used for the quantity. + + Since the geometry is constructed using nested parameterisation, + the copy number of geometry is defined as follows, + + copy number of geometry = iy*Nx*Ny+ix*Nz+iz, + + where Nx,Ny,Nz is total number of segmentation in x, y, and z axis,respectively, + and ix,iy,iz is a copy number of the mother volume, the grand mother volume, + and this volume, respectively. + This conversion is described in GetIndex() method in PrimitiveScorer. + + The physical quantities scored in this example are: + ---------------------------------------------------- + - Total energy deposit + unit: Energy, collName: totalEDep + - Energy deposit by protons + unit: Energy, collName: protonEDep + - Number of steps of protons + unit: - , collName: protonNStep + - Cell Flux of charged tracks which pass through the geometry + unit: Length/Volume, collName: chargedPassCellFlux + - Cell Flux of all charged tracks + unit: Length/Volume, collName: chargedCellFlux + - Flux of charged particle at -Z surface of the BOX geometry, + where incident angle at the surface is taken into account. + unit: Surface^(-1), collName: chargedSurfFlux + - Surface current of gamma at -Z surface of the BOX geometry. + The energy of gammas are from 1. keV to 10. keV. + The incident angle is not taken into account. + unit: Surface^(-1), collName: gammaSurfCurr000 + - Same as previous one, but different energy bin. + The energy of gammas are from 10. keV to 100. keV. + unit: Surface^(-1), collName: gammaSurfCurr001 + - Same as previous one, but different energy bin. + The energy of gammas are from 100. keV to 1. MeV. + unit: Surface^(-1), collName: gammaSurfCurr002 + - Same as previous one, except for energy bin. + The energy of gammas are from 1. MeV to 10. MeV. + unit: Surface^(-1), collName: gammaSurfCurr003 + ------------------------------------------------- + + - Accumulating quantities during a RUN + A PrimitiveScorer creates one hits collection per event. + The physical quantity in the hits collection need to be accumulated + into another G4THitsMap object during a RUN, in order to obtain + integrated flux or dose in a RUN. The accumulation of quantities + are done at RE02Run class. + + RE02Run class can automatically generate G4THitsMap objects for a RUN, + and accumulate physical quantities of an event into it. The accumulation + is done at RE02Run::RecordEvent(G4Event* aEvent). + + - Generate a Run object, and print results + The RE02Run object is generated at RE02RunAction::GenerateRun(). + The accumulated physical quantities are printed at the end of RUN + ( RE02RunAction::EndOfEvent() ). This example prints only selected + physical quantities. + + + 5- VISUALIZATION + + The Visualization Manager is set in the main(). + The initialization of the drawing is done via a set of /vis/ commands + in the macro vis.mac. This macro is automatically read from + the main when running in interactive mode. + + The tracks are automatically drawn at the end of event and erased at + the beginning of the next run. + + The visualization (with OpenGL driver) assumes two things: + 1- the visualization & interfaces categories have been compiled + with the environment variable G4VIS_BUILD_OPENGLX_DRIVER. + 2- exampleRE02.cc has been compiled with G4VIS_USE_OPENGLX. + + (The same with DAWNFILE instead of OPENGLX) + + + 6- USER INTERFACES + + The default command interface, called G4UIterminal, is done via + standard G4cin/G4cout. + On Linux and Sun-cc on can use a smarter command interface G4UItcsh. + It is enough to set the environment variable G4UI_USE_TCSH before + compiling exampleRE02.cc + + + 7- HOW TO START ? + + - execute RE02 in 'batch' mode from macro files (without visualization) + % exampleRE02 run1.mac + + - execute RE02 in 'interactive mode' with visualization + % exampleRE02 + .... + Idle> type your commands. For instance: + Idle> /run/beamOn 10 + .... + Idle> /control/execute run2.mac + .... + Idle> exit + + - macros are for different primary particles. + vis.mac : 200 MeV proton with visualization + run1.mac : 150 MeV proton + run2.mac : 195 MeV/u Carbon ion + run3.mac : 30 MeV electron + run4.mac : 60 keV gamma + + + + diff --git a/examples/extended/runAndEvent/RE03/.README.txt b/examples/extended/runAndEvent/RE03/.README.txt new file mode 100644 index 0000000000..cc2d912140 --- /dev/null +++ b/examples/extended/runAndEvent/RE03/.README.txt @@ -0,0 +1,59 @@ + +///\file "runAndEvent/RE03/.README.txt" +///\brief Example RE03 README page + +/*! \page ExampleRE03 Example RE03 + + + Contact : M.Asai (SLAC), A.Kimura (AIT), T.Aso (TNCMT) + +\section RE03_s1 Introduction + + This example demonstrates how to use UI-command base scoring. +It create parallel world(s) for defining scoring mesh(es). + + Due to some performance overhead, this functionality is not +provided by default. To get it included, the pointer to +G4ScoringManager must be accessed. The access to the static +method G4ScoringManager::GetScoringManager() activates this +functionality. + +\subsection RE03_s11 Geometry and primary particle + + It has just one water box in the world volume filled by air. +No detector in the mass geometry. Particle gun shoots a gamma +into the water box. + +\subsection RE03_s12 Physics + + The physics list is taken from referenced physics-list QGS_BIC +in Geant4. + +\section RE03_s2 Macro files + + "run1.mac" through "run4.mac" macro files should be used +independently. Each macro file create its own scoring parallel +world(s). "vis.mac", "drawSlices.mac" and "drawCylinderSlices.mac" +are used internally. Each macro should work for both interactively +and batch, but interactive mode is advised for better visualization. + + IMPORTANT: DO NOT use more than one of these macro files in one +execution of this example. + +\section RE03_s3 RE03UserScoreWriter + + G4ScoringManager has a default score writer which dumps every +entry of one quantity of a mesh for all quantities of the mesh +one by one in CSV format. To alternate the file format the user +can implement his/her own score writer deriving from G4VUserScoreWriter +base class and set it to G4ScoringManager. To demonstrate this, +RE03UserScoreWriter is included in this example. To use this +alternative writer, un-comment its instantiation in RE03.cc. + +*/ + + + + + + diff --git a/examples/extended/runAndEvent/RE03/README b/examples/extended/runAndEvent/RE03/README new file mode 100644 index 0000000000..bfd1a8cad5 --- /dev/null +++ b/examples/extended/runAndEvent/RE03/README @@ -0,0 +1,55 @@ + + RE03 - An extended example for run and event + -------------------------------------------- + + Contact : M.Asai (SLAC), A.Kimura (AIT), T.Aso (TNCMT) + +1. Introduction + + This example demonstrates how to use UI-command base scoring. +It create parallel world(s) for defining scoring mesh(es). + + Due to some performance overhead, this functionality is not +provided by default. To get it included, the pointer to +G4ScoringManager must be accessed. The access to the static +method G4ScoringManager::GetScoringManager() activates this +functionality. + +1.1 Geometry and primary particle + + It has just one water box in the world volume filled by air. +No detector in the mass geometry. Particle gun shoots a gamma +into the water box. + +1.2 Physics + + The physics list is taken from referenced physics-list QGS_BIC +in Geant4. + +2. Macro files + + "run1.mac" through "run4.mac" macro files should be used +independently. Each macro file create its own scoring parallel +world(s). "vis.mac", "drawSlices.mac" and "drawCylinderSlices.mac" +are used internally. Each macro should work for both interactively +and batch, but interactive mode is advised for better visualization. + + IMPORTANT: DO NOT use more than one of these macro files in one +execution of this example. + +3. RE03UserScoreWriter + + G4ScoringManager has a default score writer which dumps every +entry of one quantity of a mesh for all quantities of the mesh +one by one in CSV format. To alternate the file format the user +can implement his/her own score writer deriving from G4VUserScoreWriter +base class and set it to G4ScoringManager. To demonstrate this, +RE03UserScoreWriter is included in this example. To use this +alternative writer, un-comment its instantiation in RE03.cc. + + + + + + + diff --git a/examples/extended/runAndEvent/RE04/.README.txt b/examples/extended/runAndEvent/RE04/.README.txt new file mode 100644 index 0000000000..0086136147 --- /dev/null +++ b/examples/extended/runAndEvent/RE04/.README.txt @@ -0,0 +1,97 @@ + +///\file "runAndEvent/RE04/.README.txt" +///\brief Example RE04 README page + +/*! \page ExampleRE04 Example RE04 + + + Contact : M.Asai (SLAC) + +\section RE04_s1 Introduction + + This example demonstrates how to define a layered mass +geometry in parallel world. In the mass (tracking) world, +there are two boxes only. One is the world volume and the +other is a box in the world. They both are made of air. +Thus, if tracks do not see materials (water and lead) +defined in the parallel world, they rarely interact. +In the parallel world, there are boxes made of water and +lead. + +\subsection RE04_s11 Geometry + + RE04DetectorConstruction defines the mass (tracking) +geometry. It firstly defines all materials which apear +either in mass world or parallel world. Then in SetupGeometry() +method, it defines the world volume and a box named "phantom". +Both boxes are made of air. + + RE04ParallelWorldConstruction defines the parallel world. +For a parallel world, solid, logical and physical volumes +which represent parallel world must not be created here but +should be taken through G4VUserParallelWorld::GetWorld() +method which creates clones of solid, logical and physical +volumes of the world volume of the mass world. Please note +that this cloned logical volume of the parallel world volume +does not have a valid pointer to aa material but null. + + In the parallel world, if a logical volume has a valid +material pointer, a track in this volume (precisely saying +a physical volume which is made of this logical volume) +will see the material defined in this logical volume, +regardless of the material in the mass geometry. If a +logical volume has a null material pointer, a track will +see the ordinary material defined in the mass world. + + RE04ParallelWorldConstruction defines one placement +volume of box-shape, which is made of water, and a mother +box (placement volume with null material pointer), which +contains parameterized volumes. RE04ParallelWorldParam +class defines a parameterization of the parameterized +volume "paraPara", which represents two boxes at different +locations and made of water and lead respectively. + +\subsection RE04_s12 Physics + + RE04PhysicsList uses ordinary physics builders. It also +defines G4ParallelWorldProcess which deals with the parallel +world. This G4ParallelWorldProcess is an extension of +G4ParallelWorldScoringProcess. If SetLayeredMaterialFlag() +of this process class is invoked, in addition to taking +care of sensitive detectors in the parallel world, it also +takes care of layered mass geometry. If this set method is +not invoked, it behaves exactly same as G4ParallelWorldScoringProcess. +The constructor of G4ParallelWorldProcess takes the name +of the parallel world physical volume as an argument. + + G4ParallelWorldProcess may be associated only to some +limited kinds of particle types. The parallel world is +seen only bythe particles which have G4ParallelWorldProcess +in their process manager objects. In this RE04 example +G4ParallelWorldProcess is defined to all particle types +except ChargedGeantino. Thus, if you shoot CargedGeantino, +it won't see any volume boundary defined in the parallel +world. + +\section RE04_s2 Macro files + + The macro file "score.mac" defines a scoring mesh which covers +the "Phantom" and scores energy deposition. It shoots 1000 +primary particles (by default 10 GeV muon-). Though the mass +world has only air, given tracks, both primary muons and +secondary particles see water and lead defined in the parallel +world, you will see the energy deposition is not evenly +distributed. + +\section RE04_s3 User action classes + + In the main () of RE04.cc, three user action classes, i.e. +RE04EventAction, RE04TrackingAction and RE04SteppingAction, +are commented out. By using RE04SteppingAction, you will +see a material name which a track sees for each step. +By using RE04EventAction and RE04TrackingAction, you will +see the similar information for all trajectories of one +event. + +*/ + diff --git a/examples/extended/runAndEvent/RE04/README b/examples/extended/runAndEvent/RE04/README new file mode 100644 index 0000000000..f8515eb600 --- /dev/null +++ b/examples/extended/runAndEvent/RE04/README @@ -0,0 +1,92 @@ + + RE04 - An extended example for run and event + -------------------------------------------- + + Contact : M.Asai (SLAC) + +1. Introduction + + This example demonstrates how to define a layered mass +geometry in parallel world. In the mass (tracking) world, +there are two boxes only. One is the world volume and the +other is a box in the world. They both are made of air. +Thus, if tracks do not see materials (water and lead) +defined in the parallel world, they rarely interact. +In the parallel world, there are boxes made of water and +lead. + +1.1 Geometry + + RE04DetectorConstruction defines the mass (tracking) +geometry. It firstly defines all materials which apear +either in mass world or parallel world. Then in SetupGeometry() +method, it defines the world volume and a box named "phantom". +Both boxes are made of air. + + RE04ParallelWorldConstruction defines the parallel world. +For a parallel world, solid, logical and physical volumes +which represent parallel world must not be created here but +should be taken through G4VUserParallelWorld::GetWorld() +method which creates clones of solid, logical and physical +volumes of the world volume of the mass world. Please note +that this cloned logical volume of the parallel world volume +does not have a valid pointer to aa material but null. + + In the parallel world, if a logical volume has a valid +material pointer, a track in this volume (precisely saying +a physical volume which is made of this logical volume) +will see the material defined in this logical volume, +regardless of the material in the mass geometry. If a +logical volume has a null material pointer, a track will +see the ordinary material defined in the mass world. + + RE04ParallelWorldConstruction defines one placement +volume of box-shape, which is made of water, and a mother +box (placement volume with null material pointer), which +contains parameterized volumes. RE04ParallelWorldParam +class defines a parameterization of the parameterized +volume "paraPara", which represents two boxes at different +locations and made of water and lead respectively. + +1.2 Physics + + RE04PhysicsList uses ordinary physics builders. It also +defines G4ParallelWorldProcess which deals with the parallel +world. This G4ParallelWorldProcess is an extension of +G4ParallelWorldScoringProcess. If SetLayeredMaterialFlag() +of this process class is invoked, in addition to taking +care of sensitive detectors in the parallel world, it also +takes care of layered mass geometry. If this set method is +not invoked, it behaves exactly same as G4ParallelWorldScoringProcess. +The constructor of G4ParallelWorldProcess takes the name +of the parallel world physical volume as an argument. + + G4ParallelWorldProcess may be associated only to some +limited kinds of particle types. The parallel world is +seen only bythe particles which have G4ParallelWorldProcess +in their process manager objects. In this RE04 example +G4ParallelWorldProcess is defined to all particle types +except ChargedGeantino. Thus, if you shoot CargedGeantino, +it won't see any volume boundary defined in the parallel +world. + +2. Macro files + + The macro file "score.mac" defines a scoring mesh which covers +the "Phantom" and scores energy deposition. It shoots 1000 +primary particles (by default 10 GeV muon-). Though the mass +world has only air, given tracks, both primary muons and +secondary particles see water and lead defined in the parallel +world, you will see the energy deposition is not evenly +distributed. + +3. User action classes + + In the main() of RE04.cc, three user action classes, i.e. +RE04EventAction, RE04TrackingAction and RE04SteppingAction, +are commented out. By using RE04SteppingAction, you will +see a material name which a track sees for each step. +By using RE04EventAction and RE04TrackingAction, you will +see the similar information for all trajectories of one +event. + diff --git a/examples/extended/runAndEvent/RE05/.README.txt b/examples/extended/runAndEvent/RE05/.README.txt new file mode 100644 index 0000000000..ced5b09ab4 --- /dev/null +++ b/examples/extended/runAndEvent/RE05/.README.txt @@ -0,0 +1,64 @@ + +///\file "runAndEvent/RE05/.README.txt" +///\brief Example RE05 README page + +/*! \page ExampleRE05 Example RE05 + + Example RE05 has a simplified collider detector geometry. This example +demonstrates the following features. \n + It was moved in extended examples from novice/N04 with removal of +novice examples. + +\section RE05_s1 PYTHIA primary events + + RE05PrimaryGeneratorAction has G4HEPEvtInterface as the generator. +G4HEPEvtInterface accesses to "pythia_event.data", which contains three +events of Higgs generation produced by PYTHIA. "pythia_main.f" is an +example FORTRAN code of PYTHIA for generating this event sample. + +\section RE05_s2 Readout geometry + + RE05DetectorConstruction defines a simplified collider detecor +geometry, a tracker made of cylindrical tubes, a calorimeter made of +cylindrical tubes, and muon trackers made of planes. + + The cylindrical calorimeter is made of tubes of lead and a scintillator. +Energy deposition in the scintillator is accumulated by RE05CalorimeterSD +sensitive detector, which is assigned to a dedicated parallel world, +RE05CalorimeterParallelWorld, which defines the phi-z cell. + +\section RE05_s3 Physics processes + + The example uses the QBBC physics list, which includes electromagnetic +and hadronic interactions. + +\section RE05_s4 Event filtering by the stacking mechanism + + Higgs events in "pythia_event.data" have two lepton pairs produced +by the Higgs decay via Z0. At the first stage of each event, only the +primary muons are tracked without tracking secondaries. then the number +of hits on the muon trackers are examined. At the next stage, only +the primary charged particles are tracked only inside the barrel +tracking area and the isolation of the primary muons are examined. +At the third stage, all particles in the RoI (Region of Interest) along +the isolated muons are tracked. All these examinations are applied in +RE05StackingAction. + +\section RE05_s5 How to start + +- Execute RE05 in 'batch' mode from macro files +\verbatim +% exampleRE05 exampleRE05.in +\endverbatim + +- Execute RE05 in 'interactive mode' with visualization +\verbatim +% exampleRE05 +.... +Idle> type your commands. For instance: +Idle> /run/beamOn 3 +.... +Idle> exit +\endverbatim + +*/ diff --git a/examples/extended/runAndEvent/RE05/README b/examples/extended/runAndEvent/RE05/README new file mode 100644 index 0000000000..1aea136648 --- /dev/null +++ b/examples/extended/runAndEvent/RE05/README @@ -0,0 +1,61 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example RE05 + ------------ + + Example RE05 has a simplified collider detector geometry. This example +demonstrates the following features. + It was moved in extended examples from novice/N04 with removal of +novice examples. + +1. PYTHIA primary events. + + RE05PrimaryGeneratorAction has G4HEPEvtInterface as the generator. +G4HEPEvtInterface accesses to "pythia_event.data", which contains three +events of Higgs generation produced by PYTHIA. "pythia_main.f" is an +example FORTRAN code of PYTHIA for generating this event sample. + +2. Readout geometry + + RE05DetectorConstruction defines a simplified collider detecor +geometry, tracker made of cylindrical tubes, calorimeter made of +cylindrical tubes, and muon trackers made of planes. + + The cylindrical calorimeter is made of tubes of lead and a scintillator. +Energy deposition in the scintillator is accumulated by RE05CalorimeterSD +sensitive detector, which is assigned to a dedicated parallel world, +RE05CalorimeterParallelWorld, which defines the phi-z cell. + +3. Physics processes + + The example uses the QBBC physics list, which includes electromagnetic +and hadronic interactions. + +4. Event filtering by the stacking mechanism. + + Higgs events in "pythia_event.data" have two lepton pairs produced +by the Higgs decay via Z0. At the first stage of each event, only the +primary muons are tracked without tracking secondaries. then the number +of hits on the muon trackers are examined. At the next stage, only +the primary charged particles are tracked only inside the barrel +tracking area and the isolation of the primary muons are examined. +At the third stage, all particles in the RoI (Region of Interest) along +the isolated muons are tracked. All these examinations are applied in +RE05StackingAction. + +5. How to start + +- Execute RE05 in 'batch' mode from macro files + % exampleRE05 exampleRE05.in + +- Execute RE05 in 'interactive mode' with visualization + % exampleRE05 + .... + Idle> type your commands. For instance: + Idle> /run/beamOn 3 + .... + Idle> exit diff --git a/examples/extended/runAndEvent/RE06/.README.txt b/examples/extended/runAndEvent/RE06/.README.txt new file mode 100644 index 0000000000..6242323acb --- /dev/null +++ b/examples/extended/runAndEvent/RE06/.README.txt @@ -0,0 +1,213 @@ + +///\file "runAndEvent/RE06/.README.txt" +///\brief Example RE06 README page + +/*! \page ExampleRE06 Example RE06 + + This example simulates three simplified sandwitch calorimeters. + The main features demonstrated in this example are : + +-# Utilizing a concrete run class derived from G4Run base class for + accumulating physics quantities for a run +-# Changing calorimeter geometries without re-building a world volume +-# Defining geometrical regions and setting production thresholds + for each region +-# Demonstrating the use of primitive scorer and filter classes without + implementing sensitive detector class +-# Demonstrating the use of parallel scoring geometry and associating + parallel world scoring process +-# Measuring the timing spent for each region, both for all particle + types and for e+/e- + + It was moved in extended examples from novice/N07 with removal of + novice examples. + + Note: Since this example utilizes its own RE06SteppingVerbose for the + timing measurement, the user cannot get the ordinary verbosity with + /tracking/verbose. + +\section RE06_s1 Utilizing a concrete run class derived from G4Run base class for accumulating physics quantities for a run + + G4Run is a class the user can inherit and create his/her own concrete + class for accumulating information useful to him/her. It has a virtual + method RecordEvent(const G4Event*), which will be invoked by G4RunManager + at the end of processing each event. By implemeting this method in the + user'r concrete run class, he/she can store information associating with + G4Event class itself and hits collections attached with G4Event. In this + example, RE06Run is the class derived from G4Run. In the method + RE06Run::RecordEvent(const G4Event*), in addition to counting the + number of events, all hits collections are accessed to accumulate + energy depositions, step lengths and number of steps. + + In case the user create his/her own run class, an object of this class + must be instantiated in the method GenerateRun() of his/her concrete + class derived from G4UserRunAction base class. The pointer to this run + object must be returned by this method. In this example, RE06RunAction + is the class which instantiating RE06Run class object. In + RE06RunAction::EndOfRunAction(const G4Run*) method, RE06Run object + is analized to output the run summary. + + It should be noted that some information about generated secondaries + are collected in RE06StackinAction instead of sensitive detector class. + RE06StackingAction::ClassifyNewTrack(const G4Track*) method is used + not for classifying tracks sent to the stack, but for accessing to all + secondaries generated in an event. + +\section RE06_s2 Changing calorimeter geometries without re-building a world volume + + In RE06DetectorConstruction, all solids, logical and physical volumes + are constructed only once at the first invocation of Constuct() method. + Positions and number of slices are changed not by re-constructing another + objects but by modifying data members of already existing objects as + it is implemented in RE06DetectorConstruction::SetNumberOfLayers(G4int) + for changing the number of parameterized volumes, and also + RE06DetectorConstruction::SetSerialGeometry(G4bool) for changing the + position of placed volumes. + +\section RE06_s3 Defining geometrical regions and setting production thresholds for each region + + Setting production thresholds (so-called production cuts) to individual + region of a detector geometry is the new feature provided by Geant4 5.1 + release. This feature is also called as "Cuts per region". + + Please note that this new feature is supporsed to be used only by the + users, + a) who is simulating most complex geometry such as an LHC detector, + b) and who has enough experience of simulating EM showers in matter. + We strongly recommend to compare the simulated results of this new + feature with the results of the same geometry but having uniform + production thresholds. Setting completely different cut values for + individual region may break the coherent and comprehensive accuracy + of the simulation. Thus such cut values should be carefully optimized + by the user with comparison with results of uniform cuts. + + In RE06DetectorConstruction::Construct(), Three objects of G4Region + class are instantiated and set to the logical volumes of each of three + calorimeter modules. Also, these individual logical volumes are + registered as "root logical volume" so that all daghter volumes in + these logical volumes are also affected by the corresponding regions. + + In RE06PhysicsList::SetCuts(), in addition to set the default threshold + values for the world volume, three threshold values are set to three + calorimeter regions respectively. By setting production thresholds to + a region, gamma, electron or positron will not be generated as a + secondary if its range is shorter than the production threshold of that + particular region. Please note that some EM processes still generate + such secondary below threshold. + +\section RE06_s4 Demonstrating the use of primitive scorer and filter classes without implementing sensitive detector class + + In RE06DetectorConstruction::SetupDetector() method, concrete classes + G4PSEnergyDeposit, G4PSNofSecondary, G4PSTrackLength, G4PSNofStep and + G4PSMinKinEAtGeneration, all of thich are derivalable of G4VPrimitiveScorer, + are used to define the sensitivity of the calorimeter. All of them are + registered to G4MultiFunctionalDetector and this detector object is set + to the logical volume. G4SDParticleFilter is used to define the particle + type(s) to be scored. + + In RE06Run::RecordEvent() method, the way of retreiving G4THitsMap + from each primitive scorer via G4HCofThisEvent is demonstrated. + In RE06RunAction::EndOfRunAction(), Run is summarized with data kept + in RE06Run class object. + +\section RE06_s5 Demonstrating the use of parallel scoring geometry and associating parallel world scoring process + + In RE06PhysicsList::ConstructGeneral(), G4ParallelWorldScoringProcess is + assigned to all the particle types. This process invokes sensitive detectors + (and scorers) defined in the parallel world "ParallelScoringWorld", the + name of the parallel world which is defined in main() (exampleRE06.cc) as + an argument of RE06ParallelWorld constructor. + + As implemented in RE06ParallelWorld::SetupGeometry(), the world volume of + the parallel world is obtained by GetWorld() method as a clone copy of the + world volume of the mass geometry. The user should not create the world volume. + + RE06ParallelWorld defines three cylindrical volumes, each of them is + located at the same position as three sandwitch calorimeters defined + in the mass geometry (RE06DetectorConstruction). Each cylinder is replicated + in Rho to define 20 layers, and scores the same quantities as the mass geometry. + These three cylinders are relocated accordingly when the mass geometry is + modified by RE06DetectorConstruction::SetSerialGeometry(). + +\section RE06_s6 Measuring the timing spent for each region, both for all particle types and for e+/e- + + RE06SteppingVerbose class has two G4SliceTimer class objects for each + detector region. One G4SliceTimer is measuring the time spent by a step + in a region for all types of particles, and another is measuring for + e+/e- only. + + RE06SteppingVerbose::InitializeTimers() is invoked by RE06RunAction:: + BeginOfRunAction(), and checks the number of regions appear in the + geometry and instantiates the necessary number of timers. Thus, this + RE06SteppingVerbose class can be used for any kind of geometry the user + defines without any modification. Given G4VSteppingVerbose is not invoked + if the verbosity of G4SteppingManager is 0, this verbosity is set to 1. + + NewStep() and StepInfo() are the methods defined in G4VSteppingVerbose + base class, and they are invoked at the beginning and the end of every + step, respectively, from G4SteppingManager. Thus, these methods are + utilized in RE06SteppingVerbose to start/resume and pause the timer. + + RE06SteppingVerbose::Report() method is used by RE06RunAction:: + EndOfRunAction() to get the timing measured. + +\section RE06_s7 Macro files + + - exampleRE06.in \n + To be used for batch mode. The reference output file is made by this + macro file. + + - sample.mac \n + To be used for interactive mode. Issue "/control/execute sample.mac" + when "Idle>" prompt appears. + + - vis.mac \n + Setting visualization parameters. This macro file will be called + automatically when interactive execution starts. + +\section RE06_s8 UI commands defined in this example + +
+Command /RE06/setAbsMat
+Guidance :
+Select Material of the Absorber.
+
+Parameter : choice
+ Parameter type  : s
+ Omittable       : False
+ Candidates      : Aluminium liquidArgon Lead Water Scintillator Air Galactic 
+
+
+
+Command /RE06/setGapMat
+Guidance :
+Select Material of the Gap.
+
+Parameter : choice
+ Parameter type  : s
+ Omittable       : False
+ Candidates      : Aluminium liquidArgon Lead Water Scintillator Air Galactic 
+
+
+
+Command /RE06/numberOfLayers
+Guidance :
+Set number of layers.
+ Range of parameters : nl>0
+
+Parameter : nl
+ Parameter type  : i
+ Omittable       : False
+
+
+
+Command /RE06/serialGeometry
+Guidance :
+Select calorimeters to be placed in serial or parallel.
+
+Parameter : serialize
+ Parameter type  : b
+ Omittable       : False
+
+
+*/ diff --git a/examples/extended/runAndEvent/RE06/README b/examples/extended/runAndEvent/RE06/README new file mode 100644 index 0000000000..09db343697 --- /dev/null +++ b/examples/extended/runAndEvent/RE06/README @@ -0,0 +1,222 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + ExampleRE06 + ---------- + + + This example simulates three simplified sandwitch calorimeters. + The main features demonstrated in this example are : + + 1. Utilizing a concrete run class derived from G4Run base class for + accumulating physics quantities for a run + 2. Changing calorimeter geometries without re-building a world volume + 3. Defining geometrical regions and setting production thresholds + for each region + 4. Demonstrating the use of primitive scorer and filter classes without + implementing sensitive detector class + 5. Demonstrating the use of parallel scoring geometry and associating + parallel world scoring process + 6. Measuring the timing spent for each region, both for all particle + types and for e+/e- + + It was moved in extended examples from novice/N07 with removal of + novice examples. + + ********************************************************************** + Note: Since this example utilizes its own RE06SteppingVerbose for the + timing measurement, the user cannot get the ordinary verbosity with + /tracking/verbose. + ********************************************************************** + + 1- Utilizing a concrete run class derived from G4Run base class for + accumulating physics quantities for a run + + G4Run is a class the user can inherit and create his/her own concrete + class for accumulating information useful to him/her. It has a virtual + method RecordEvent(const G4Event*), which will be invoked by G4RunManager + at the end of processing each event. By implemeting this method in the + user'r concrete run class, he/she can store information associating with + G4Event class itself and hits collections attached with G4Event. In this + example, RE06Run is the class derived from G4Run. In the method + RE06Run::RecordEvent(const G4Event*), in addition to counting the + number of events, all hits collections are accessed to accumulate + energy depositions, step lengths and number of steps. + + In case the user create his/her own run class, an object of this class + must be instantiated in the method GenerateRun() of his/her concrete + class derived from G4UserRunAction base class. The pointer to this run + object must be returned by this method. In this example, RE06RunAction + is the class which instantiating RE06Run class object. In + RE06RunAction::EndOfRunAction(const G4Run*) method, RE06Run object + is analized to output the run summary. + + It should be noted that some information about generated secondaries + are collected in RE06StackinAction instead of sensitive detector class. + RE06StackingAction::ClassifyNewTrack(const G4Track*) method is used + not for classifying tracks sent to the stack, but for accessing to all + secondaries generated in an event. + + 2- Changing calorimeter geometries without re-building a world volume + + In RE06DetectorConstruction, all solids, logical and physical volumes + are constructed only once at the first invocation of Constuct() method. + Positions and number of slices are changed not by re-constructing another + objects but by modifying data members of already existing objects as + it is implemented in RE06DetectorConstruction::SetNumberOfLayers(G4int) + for changing the number of parameterized volumes, and also + RE06DetectorConstruction::SetSerialGeometry(G4bool) for changing the + position of placed volumes. + + 3- Defining geometrical regions and setting production thresholds + for each region + + Setting production thresholds (so-called production cuts) to individual + region of a detector geometry is the new feature provided by Geant4 5.1 + release. This feature is also called as "Cuts per region". + + Please note that this new feature is supporsed to be used only by the + users, + a) who is simulating most complex geometry such as an LHC detector, + b) and who has enough experience of simulating EM showers in matter. + We strongly recommend to compare the simulated results of this new + feature with the results of the same geometry but having uniform + production thresholds. Setting completely different cut values for + individual region may break the coherent and comprehensive accuracy + of the simulation. Thus such cut values should be carefully optimized + by the user with comparison with results of uniform cuts. + + In RE06DetectorConstruction::Construct(), Three objects of G4Region + class are instantiated and set to the logical volumes of each of three + calorimeter modules. Also, these individual logical volumes are + registered as "root logical volume" so that all daghter volumes in + these logical volumes are also affected by the corresponding regions. + + In RE06PhysicsList::SetCuts(), in addition to set the default threshold + values for the world volume, three threshold values are set to three + calorimeter regions respectively. By setting production thresholds to + a region, gamma, electron or positron will not be generated as a + secondary if its range is shorter than the production threshold of that + particular region. Please note that some EM processes still generate + such secondary below threshold. + + 4- Demonstrating the use of primitive scorer and filter classes without + implementing sensitive detector class + + In RE06DetectorConstruction::SetupDetector() method, concrete classes + G4PSEnergyDeposit, G4PSNofSecondary, G4PSTrackLength, G4PSNofStep and + G4PSMinKinEAtGeneration, all of thich are derivalable of G4VPrimitiveScorer, + are used to define the sensitivity of the calorimeter. All of them are + registered to G4MultiFunctionalDetector and this detector object is set + to the logical volume. G4SDParticleFilter is used to define the particle + type(s) to be scored. + + In RE06Run::RecordEvent() method, the way of retreiving G4THitsMap + from each primitive scorer via G4HCofThisEvent is demonstrated. + In RE06RunAction::EndOfRunAction(), Run is summarized with data kept + in RE06Run class object. + + 5- Demonstrating the use of parallel scoring geometry and associating + parallel world scoring process + + In RE06PhysicsList::ConstructGeneral(), G4ParallelWorldScoringProcess is + assigned to all the particle types. This process invokes sensitive detectors + (and scorers) defined in the parallel world "ParallelScoringWorld", the + name of the parallel world which is defined in main() (exampleRE06.cc) as + an argument of RE06ParallelWorld constructor. + + As implemented in RE06ParallelWorld::SetupGeometry(), the world volume of + the parallel world is obtained by GetWorld() method as a clone copy of the + world volume of the mass geometry. The user should not create the world volume. + + RE06ParallelWorld defines three cylindrical volumes, each of them is + located at the same position as three sandwitch calorimeters defined + in the mass geometry (RE06DetectorConstruction). Each cylinder is replicated + in Rho to define 20 layers, and scores the same quantities as the mass geometry. + These three cylinders are relocated accordingly when the mass geometry is + modified by RE06DetectorConstruction::SetSerialGeometry(). + + 6- Measuring the timing spent for each region, both for all particle + types and for e+/e- + + RE06SteppingVerbose class has two G4SliceTimer class objects for each + detector region. One G4SliceTimer is measuring the time spent by a step + in a region for all types of particles, and another is measuring for + e+/e- only. + + RE06SteppingVerbose::InitializeTimers() is invoked by RE06RunAction:: + BeginOfRunAction(), and checks the number of regions appear in the + geometry and instantiates the necessary number of timers. Thus, this + RE06SteppingVerbose class can be used for any kind of geometry the user + defines without any modification. Given G4VSteppingVerbose is not invoked + if the verbosity of G4SteppingManager is 0, this verbosity is set to 1. + + NewStep() and StepInfo() are the methods defined in G4VSteppingVerbose + base class, and they are invoked at the beginning and the end of every + step, respectively, from G4SteppingManager. Thus, these methods are + utilized in RE06SteppingVerbose to start/resume and pause the timer. + + RE06SteppingVerbose::Report() method is used by RE06RunAction:: + EndOfRunAction() to get the timing measured. + + 7- Macro files + + exampleRE06.in + To be used for batch mode. The reference output file is made by this + macro file. + + sample.mac + To be used for interactive mode. Issue "/control/execute sample.mac" + when "Idle>" prompt appears. + + vis.mac + Setting visualization parameters. This macro file will be called + automatically when interactive execution starts. + + 8- UI commands defined in this example + +Command /RE06/setAbsMat +Guidance : +Select Material of the Absorber. + +Parameter : choice + Parameter type : s + Omittable : False + Candidates : Aluminium liquidArgon Lead Water Scintillator Air Galactic + + + +Command /RE06/setGapMat +Guidance : +Select Material of the Gap. + +Parameter : choice + Parameter type : s + Omittable : False + Candidates : Aluminium liquidArgon Lead Water Scintillator Air Galactic + + + +Command /RE06/numberOfLayers +Guidance : +Set number of layers. + Range of parameters : nl>0 + +Parameter : nl + Parameter type : i + Omittable : False + + + +Command /RE06/serialGeometry +Guidance : +Select calorimeters to be placed in serial or parallel. + +Parameter : serialize + Parameter type : b + Omittable : False + + diff --git a/examples/extended/runAndEvent/RE07/.README.txt b/examples/extended/runAndEvent/RE07/.README.txt new file mode 100644 index 0000000000..69d13d7aff --- /dev/null +++ b/examples/extended/runAndEvent/RE07/.README.txt @@ -0,0 +1,54 @@ +///\file "runAndEvent/RE07/.README.txt" +///\brief Example RE07 README page + +/*! \page ExampleRE07 Example RE07 + +This example is based on extended/electromagnetic/TestEm3 and +demonstrates how to register specialized tracking managers for +a particle or a set of particles. + +\section RE07_s1 Geometry definition + +The geometry of a simplified sampling calorimeter is used as +in \link ExampleTestEm3 TestEm3 \endlink, please refer to its +documentation for more details. +The same UI commands exist for modifying the geometry (number +of layers and absorbers, material and its thickness), without +the /testem/ prefix. + +In addition to the definition of the volumes, this example adds +two regions, "Front" and "Back", which contain the front and +rear half of the calorimeter. + +\section RE07_s2 Physics lists + +By default, the example uses G4EmStandardPhysics and registers +processes to the G4ProcessManager. This can be changed with the +/setMode UI command. Possible values are: + +- processes: use G4EmStandardPhysics, the default +- tracking: use the same physics as G4EmStandardPhysics, but + implemented as a specialized tracking manager for + electrons, positrons, and gammas; see the file + EmStandardPhysicsTrackingManager.cc for details. +- specialized: use a specialized tracking manager for gammas; for + the purpose of demonstration, + - it uses G4EmStandardPhysics as the basis, + - defers processing of gammas with a kinetic energy + of more than 100 MeV, + - implement a specialized stepping loop for the + "Back" region of the detector. + See the file SpecializedTrackingManager.cc for more + details on the exact implementation. + +\section RE07_s3 How to start? + +This example comes with one macro file for each of the described +modes that can be passed as a parameter to the executable: + +\verbatim +% exampleRE07 processes.mac +\endverbatim + +*/ + diff --git a/examples/extended/runAndEvent/RE07/README b/examples/extended/runAndEvent/RE07/README new file mode 100644 index 0000000000..8a5feb0267 --- /dev/null +++ b/examples/extended/runAndEvent/RE07/README @@ -0,0 +1,52 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + ExampleRE07 + ----------- + +This example is based on extended/electromagnetic/TestEm3 and +demonstrates how to register specialized tracking managers for +a particle or a set of particles. + +1- Geometry definition + + The geometry of a simplified sampling calorimeter is used as + in TestEm3, please refer to its documentation for more details. + The same UI commands exist for modifying the geometry (number + of layers and absorbers, material and its thickness), without + the /testem/ prefix. + + In addition to the definition of the volumes, this example adds + two regions, "Front" and "Back", which contain the front and + rear half of the calorimeter. + +2- Physics lists + + By default, the example uses G4EmStandardPhysics and registers + processes to the G4ProcessManager. This can be changed with the + /setMode UI command. Possible values are: + + processes: use G4EmStandardPhysics, the default + tracking: use the same physics as G4EmStandardPhysics, but + implemented as a specialized tracking manager for + electrons, positrons, and gammas; see the file + EmStandardPhysicsTrackingManager.cc for details. + specialized: use a specialized tracking manager for gammas; for + the purpose of demonstration, + - it uses G4EmStandardPhysics as the basis, + - defers processing of gammas with a kinetic energy + of more than 100 MeV, + - implement a specialized stepping loop for the + "Back" region of the detector. + See the file SpecializedTrackingManager.cc for more + details on the exact implementation. + +3- How to start? + + This example comes with one macro file for each of the described + modes that can be passed as a parameter to the executable: + + % exampleRE07 processes.mac diff --git a/examples/extended/runAndEvent/README b/examples/extended/runAndEvent/README new file mode 100644 index 0000000000..eda40dcf19 --- /dev/null +++ b/examples/extended/runAndEvent/README @@ -0,0 +1,68 @@ + + Geant4 extended examples - run and event + ---------------------------------------- + + Examples in this directory demonstrate the use of some features in +Run and Event categories. Since these categories are on the top of +hierarchy of Geant4 structure to control the full functionarities of +Geant4, some examples contain features in other categories such as +Tracking, Track, Particles, Detector responces, and even some cases +Geometry and Processes. + +RE01 +---- + + This example demonstrates how to connect the information between +primary particles and hits. It also utilizes some user-information +classes. Readout geometry is implemented as a parallel world. +Decay of "Unknown" particle (that may represent whatever a particle +Geant4 does not know how to deal with) is taken care as "pre-assigned +decay products". + +RE02 +---- + + This example demonstrates how to accumulate the physics quantities +such as energy deposition and dose for a run. It also demonstrates +the use of primitive scorers. + +RE03 +---- + + This example demonstrates how to use UI-command base scoring. +It create parallel world(s) for defining scoring mesh(es). + +RE04 +---- + + This example demonstrates how to define layered mass geometry in +a parallel world and use it in a simulation. + +RE05 +---- + + Defines a simplified collider detector setup. +Demonstrates interfacing to the PYTHIA primary generator. Includes +the definition of a 'readout' geometry. Exercises event filtering using +the stacking mechanism. Includes visualization. +It was moved in extended examples from novice/N04 with removal of +novice examples. + +RE06 +---- + +Implements three simplified sandwitch calorimeters. +Shows how to modify part of the geometry setup at run-time. Includes +detector description parameterisation by materials. Demonstrates +sharing of a sensitive detector definition for different sub-detectors. +Defines different geometrical regions with different production +thresholds. Shows customization of the G4Run. +It was moved in extended examples from novice/N07 with removal of +novice examples. + +RE07 +---- + +Based on extended/electromagnetic/TestEm3, this example demonstrates +how to register specialized tracking managers for a particle or a set +of particles. diff --git a/examples/extended/visualization/.README.txt b/examples/extended/visualization/.README.txt new file mode 100644 index 0000000000..396ef36124 --- /dev/null +++ b/examples/extended/visualization/.README.txt @@ -0,0 +1,28 @@ + +///\file "visualization/.README.txt" +///\brief Examples visualization README page + +/*! \page Examples_visualization Category "visualization" + +Examples in this directory demonstrate the use of Geant4 visualization. + +\link Examplestandalone standalone \endlink + +This example illustrates how one might use the Geant Visualization +System as a "stand alone" graphics library and viewer. + +\link Exampleperspective perspective \endlink + +This example is another example of using the Geant Visualization +System as a "stand-alone" graphics library and viewer. + +\link ExampleuserVisAction userVisAction \endlink + +This example illustrates how to create a "vis action". + +\link Examplemovies movies \endlink + +This example illustrates how to create movies. + +*/ + diff --git a/examples/extended/visualization/README b/examples/extended/visualization/README new file mode 100644 index 0000000000..31deb8dafb --- /dev/null +++ b/examples/extended/visualization/README @@ -0,0 +1,27 @@ + + Geant4 extended examples - visualization + ----------------------------------------- + +Examples in this directory demonstrate the use of Geant4 visualization. + +standalone +----------- + +This example illustrates how one might use the Geant Visualization +System as a "stand alone" graphics library and viewer. + +perspective +----------- + +This example is another example of using the Geant Visualization +System as a "stand-alone" graphics library and viewer. + +userVisAction +------------- + +This example illustrates how to create a "vis action". + +movies +------ + +This example illustrates how to create movies. diff --git a/examples/extended/visualization/movies/.README.txt b/examples/extended/visualization/movies/.README.txt new file mode 100644 index 0000000000..1f0634b37b --- /dev/null +++ b/examples/extended/visualization/movies/.README.txt @@ -0,0 +1,92 @@ +///\file "visualization/movies/.README.txt" +///\brief Example movies README page + +/*! \page ExampleMovies Example movies + +examples/extended/visualization/movies + +This example illustrates how to create a movie. + +See https://geant4-userdoc.web.cern.ch/UsersGuides/ForApplicationDeveloper/html/Visualization/makingamovie.html#. + +A) USING /vis/viewer/save AND /vis/viewer/interpolate +===================================================== + +1) a) To see a pre-prepared example, start this example in interactive mode + (i.e., without any command line arguments). Just type + /vis/viewer/interpolate viewfiles/movie-1 + If you want to see an electromagnetic shower + /run/beamOn + /vis/viewer/interpolate viewfiles/movie-1 + + b) To make your own movie, save a sequence of views with + "/vis/viewer/save". Then "fly through" with "/vis/viewer/interpolate". + + The procedure is: choose a view, save, choose another view, save, and + so on until you have, say, 10 saved views. Then you may + /vis/viewer/interpolate + + Note: This saves views to your current working directory. It is + always good to remove any pre-existing saved files: + rm *.g4view + or save them, e.g. + mkdir views + mv *.g4view views + which can subsequently be interpolated with + /vis/viewer/interpolate views + + c) Then you have a choice of how to export the movie - see 3 below. + +2) You can use time-slicing to see particles progress through time + + a) To see a pre-prepared example + /vis/modeling/trajectories/drawByCharge-0/default/setTimeSliceInterval 0.01 ns + /run/beamOn + /vis/viewer/interpolate viewfiles/movie-2 + + b) To make your own movie + /vis/scene/add/trajectories rich + /vis/modeling/trajectories/drawByCharge-0/default/setTimeSliceInterval 0.01 ns + # Optionally add features (see guidance on /vis/viewer/set/timeWindow/) + /vis/viewer/set/timeWindow/displayLightFront true 0 0 -20 cm -0.01 ns + /vis/viewer/set/timeWindow/displayHeadTime true + /vis/viewer/set/timeWindow/fadeFactor 1 + /run/beamOn + # Then set a time window and save + /vis/viewer/set/timeWindow/startTime 0 ns .1 ns + /vis/viewer/save + # Then zoom, pan etc to a view of interest + # Then set the next time window and save + /vis/viewer/set/timeWindow/startTime .5 ns .1 ns + /vis/viewer/save + # Then zoom, pan etc to a view of interest + # Then set the next time window and save + /vis/viewer/set/timeWindow/startTime 1 ns .1 ns + /vis/viewer/save + # Then another view, the next time window, and a save... + # ...repeat a few more times + # Then try + /vis/viewer/interpolate + +3) How to export images using /vis/viewer/interpolate (OpenGL only) + /vis/viewer/interpolate ! ! ! ! export + This produces lots of files. + You can change export format with (for example) + /vis/ogl/set/exportFormat jpg + Then import them into your favourite movie maker - see + https://geant4-userdoc.web.cern.ch/UsersGuides/ForApplicationDeveloper/html/Visualization/makingamovie.html# + +B) THE OLD WAY +============== + +These files are inherited from the old "novice" example N03. They draw (and +optionally, save) views using a macro loop. They have not been tested +recently. Best to run in batch mode in the build directory. E.g. + + ./movies -m visTutor/exN03Vis12.mac + ./movies -m visTutor/exN03Vis13.mac + + +John Allison +15th February 2021 +*/ diff --git a/examples/extended/visualization/movies/README b/examples/extended/visualization/movies/README new file mode 100644 index 0000000000..2dd34a2c8b --- /dev/null +++ b/examples/extended/visualization/movies/README @@ -0,0 +1,91 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + examples/extended/visualization/movies + -------------------------------------- + +This example illustrates how to create a movie. + +See https://geant4-userdoc.web.cern.ch/UsersGuides/ForApplicationDeveloper/html/Visualization/makingamovie.html#. + +A) USING /vis/viewer/save AND /vis/viewer/interpolate +===================================================== + +1) a) To see a pre-prepared example, start this example in interactive mode + (i.e., without any command line arguments). Just type + /vis/viewer/interpolate viewfiles/movie-1 + If you want to see an electromagnetic shower + /run/beamOn + /vis/viewer/interpolate viewfiles/movie-1 + + b) To make your own movie, save a sequence of views with + "/vis/viewer/save". Then "fly through" with "/vis/viewer/interpolate". + + The procedure is: choose a view, save, choose another view, save, and + so on until you have, say, 10 saved views. Then you may + /vis/viewer/interpolate + + Note: This saves views to your current working directory. It is + always good to remove any pre-existing saved files: + rm *.g4view + or save them, e.g. + mkdir views + mv *.g4view views + which can subsequently be interpolated with + /vis/viewer/interpolate views + + c) Then you have a choice of how to export the movie - see 3 below. + +2) You can use time-slicing to see particles progress through time + + a) To see a pre-prepared example + /vis/modeling/trajectories/drawByCharge-0/default/setTimeSliceInterval 0.01 ns + /run/beamOn + /vis/viewer/interpolate viewfiles/movie-2 + + b) To make your own movie + /vis/scene/add/trajectories rich + /vis/modeling/trajectories/drawByCharge-0/default/setTimeSliceInterval 0.01 ns + # Optionally add features (see guidance on /vis/viewer/set/timeWindow/) + /vis/viewer/set/timeWindow/displayLightFront true 0 0 -20 cm -0.01 ns + /vis/viewer/set/timeWindow/displayHeadTime true + /vis/viewer/set/timeWindow/fadeFactor 1 + /run/beamOn + # Then set a time window and save + /vis/viewer/set/timeWindow/startTime 0 ns .1 ns + /vis/viewer/save + # Then zoom, pan etc to a view of interest + # Then set the next time window and save + /vis/viewer/set/timeWindow/startTime .5 ns .1 ns + /vis/viewer/save + # Then zoom, pan etc to a view of interest + # Then set the next time window and save + /vis/viewer/set/timeWindow/startTime 1 ns .1 ns + /vis/viewer/save + # Then another view, the next time window, and a save... + # ...repeat a few more times + # Then try + /vis/viewer/interpolate + +3) How to export images using /vis/viewer/interpolate (OpenGL only) + /vis/viewer/interpolate ! ! ! ! export + This produces lots of files. + You can change export format with (for example) + /vis/ogl/set/exportFormat jpg + Then import them into your favourite movie maker - see + https://geant4-userdoc.web.cern.ch/UsersGuides/ForApplicationDeveloper/html/Visualization/makingamovie.html# + +B) THE OLD WAY +============== + +These files are inherited from the old "novice" example N03. They draw (and +optionally, save) views using a macro loop. They have not been tested +recently. Best to run in batch mode in the build directory. E.g. + + ./movies -m visTutor/exN03Vis12.mac + ./movies -m visTutor/exN03Vis13.mac + + +John Allison +15th February 2021 diff --git a/examples/extended/visualization/perspective/.README.txt b/examples/extended/visualization/perspective/.README.txt new file mode 100644 index 0000000000..d7efe3e274 --- /dev/null +++ b/examples/extended/visualization/perspective/.README.txt @@ -0,0 +1,28 @@ +///\file "visualization/perspective/.README.txt" +///\brief Example perspective README page + +/*! \page Exampleperspective Example perspective + +examples/extended/visualization/perspective + +This example is another example of using the Geant Visualization +System as a "stand-alone" graphics library and viewer. See +\ref Examplestandalone for a simpler introductory explanation. + +The particular feature of this example is the addition of "perspective +lines". The direction of these lines is controlled by + +\verbatim +/perspectiveDemo/optionString x +\endverbatim + +See vis.mac. + +Notes: +- /perspectiveDemo/scene is not used at present. +- visXm.mac is specially for use with G4UIXm and OGL*Xm. + +John Allison +11th June 2012 + +*/ diff --git a/examples/extended/visualization/perspective/README b/examples/extended/visualization/perspective/README new file mode 100644 index 0000000000..db0a4e9485 --- /dev/null +++ b/examples/extended/visualization/perspective/README @@ -0,0 +1,25 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + examples/extended/visualization/perspective + ------------------------------------------ + +This example is another example of using the Geant Visualization +System as a "stand-alone" graphics library and viewer. See +examples/extended/visualization/standalone for a simpler +introductory explanation. + +The particular feature of this example is the addition of "perspective +lines". The direction of these lines is controlled by + + /perspectiveDemo/optionString x + +See vis.mac. + +Notes: +- /perspectiveDemo/scene is not used at present. +- visXm.mac is specially for use with G4UIXm and OGL*Xm. + +John Allison +11th June 2012 diff --git a/examples/extended/visualization/standalone/.README.txt b/examples/extended/visualization/standalone/.README.txt new file mode 100644 index 0000000000..4330a79a42 --- /dev/null +++ b/examples/extended/visualization/standalone/.README.txt @@ -0,0 +1,41 @@ +///\file "visualization/standalone/.README.txt" +///\brief Example standalone README page + +/*! \page Examplestandalone Example standalone + +examples/extended/visualization/standalone + + +This example illustrates how one might use the Geant Visualization +System as a "stand alone" graphics library and viewer. It makes use +of the "user action" feature of the Geant4 vis manager - for a fuller +example of the use of this feature see +examples/extended/visualization/userVisAction. + +1) Define a G4VUserVisAction that implements a Draw method. An + example is provided - see StandaloneVisAction.hh/cc. + StandaloneVisAction::Draw illustrates: + a) a simple box; + b) a Boolean solid; + c) an alternative way of drawing a solid by obtaining the + polyhedral representation. + The last is included for interest, not as a recommendation. + +2) In the main () program (see standalone.cc), StandaloneVisAction must be instantiated and + its pointer registered with the visualization manager. You may + optionally specify an extent at this point to assist the viewers to + locate the objects. + +3) To visualise, use the usual Geant4 vis commands to create a view + and scene, then add the vis action to the scene, optionally with an + extent - see standalone.mac. + +Note: The system needs an "extent" in order to point the virtual +camera and adjust its field of view, etc. This defines the "standard +view". You may zoom, etc., from this standard view. The extent may +be specified as suggested above or by using /vis/scene/add/extent. + + +John Allison +27th November 2014 +*/ diff --git a/examples/extended/visualization/standalone/README b/examples/extended/visualization/standalone/README new file mode 100644 index 0000000000..8797c59551 --- /dev/null +++ b/examples/extended/visualization/standalone/README @@ -0,0 +1,39 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + examples/extended/visualization/standalone + ------------------------------------------ + +This example illustrates how one might use the Geant Visualization +System as a "stand alone" graphics library and viewer. It makes use +of the "user action" feature of the Geant4 vis manager - for a fuller +example of the use of this feature see +examples/extended/visualization/userVisAction. + +1) Define a G4VUserVisAction that implements a Draw method. An + example is provided - see StandaloneVisAction.hh/cc. + StandaloneVisAction::Draw illustrates: + a) a simple box; + b) a Boolean solid; + c) an alternative way of drawing a solid by obtaining the + polyhedral representation. + The last is included for interest, not as a recommendation. + +2) In the main program, StandaloneVisAction must be instantiated and + its pointer registered with the visualization manager. You may + optionally specify an extent at this point to assist the viewers to + locate the objects. + +3) To visualise, use the usual Geant4 vis commands to create a view + and scene, then add the vis action to the scene, optionally with an + extent - see standalone.mac. + +Note: The system needs an "extent" in order to point the virtual +camera and adjust its field of view, etc. This defines the "standard +view". You may zoom, etc., from this standard view. The extent may +be specified as suggested above or by using /vis/scene/add/extent. + + +John Allison +27th November 2014 diff --git a/examples/extended/visualization/userVisAction/.README.txt b/examples/extended/visualization/userVisAction/.README.txt new file mode 100644 index 0000000000..ade896a360 --- /dev/null +++ b/examples/extended/visualization/userVisAction/.README.txt @@ -0,0 +1,38 @@ +///\file "visualization/userVisAction/.README.txt" +///\brief Example userVisAction README page + +/*! \page ExampleuserVisAction Example userVisAction + +examples/extended/visualization/userVisAction + +This example illustrates how to create a "vis action". + +The idea is that you register a vis action with the vis manager and +activate it by a command /vis/scene/add/userAction. In this case, it +draws a simple logo. + +1) UVA_VisAction.cc defines a G4VUserVisAction and implements a Draw + method. + +2) In the main () program (see userVisAction.cc), UVA_VisAction is instantiated and + its pointer registerd with the visualization manager. You may + optionally specify an extent at this point to assist the viewers to + locate the objects. + +3) To visualise, use the usual Geant4 vis commands to create a view + and scene, then add the vis action to the scene with +\verbatim +/vis/scene/add/userAction +\endverbatim + see vis.mac. + +Note: The system needs an "extent" in order to point the virtual +camera and adjust its field of view, etc. This defines the "standard +view". You may zoom, etc., from this standard view. The extent may +be specified as suggested above or by using /vis/scene/add/extent. + + +John Allison +27th November 2014 + +*/ diff --git a/examples/extended/visualization/userVisAction/README b/examples/extended/visualization/userVisAction/README new file mode 100644 index 0000000000..42a6feb88d --- /dev/null +++ b/examples/extended/visualization/userVisAction/README @@ -0,0 +1,33 @@ + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + examples/extended/visualization/userVisAction + --------------------------------------------- + +This example illustrates how to create a "vis action". + +The idea is that you register a vis action with the vis manager and +activate it by a command /vis/scene/add/userAction. In this case, it +draws a simple logo. + +1) UVA_VisAction.cc defines a G4VUserVisAction and implements a Draw + method. + +2) In the main program, UVA_VisAction is instantiated and + its pointer registerd with the visualization manager. You may + optionally specify an extent at this point to assist the viewers to + locate the objects. + +3) To visualise, use the usual Geant4 vis commands to create a view + and scene, then add the vis action to the scene with + /vis/scene/add/userAction - see vis.mac. + +Note: The system needs an "extent" in order to point the virtual +camera and adjust its field of view, etc. This defines the "standard +view". You may zoom, etc., from this standard view. The extent may +be specified as suggested above or by using /vis/scene/add/extent. + + +John Allison +27th November 2014 diff --git a/source/externals/expat/README b/source/externals/expat/README new file mode 100644 index 0000000000..1f88467d1b --- /dev/null +++ b/source/externals/expat/README @@ -0,0 +1,139 @@ + + Expat, Release 2.1.0 + +This is Expat, a C library for parsing XML, written by James Clark. +Expat is a stream-oriented XML parser. This means that you register +handlers with the parser before starting the parse. These handlers +are called when the parser discovers the associated structures in the +document being parsed. A start tag is an example of the kind of +structures for which you may register handlers. + +Windows users should use the expat_win32bin package, which includes +both precompiled libraries and executables, and source code for +developers. + +Expat is free software. You may copy, distribute, and modify it under +the terms of the License contained in the file COPYING distributed +with this package. This license is the same as the MIT/X Consortium +license. + +Versions of Expat that have an odd minor version (the middle number in +the release above), are development releases and should be considered +as beta software. Releases with even minor version numbers are +intended to be production grade software. + +If you are building Expat from a check-out from the CVS repository, +you need to run a script that generates the configure script using the +GNU autoconf and libtool tools. To do this, you need to have +autoconf 2.58 or newer. Run the script like this: + + ./buildconf.sh + +Once this has been done, follow the same instructions as for building +from a source distribution. + +To build Expat from a source distribution, you first run the +configuration shell script in the top level distribution directory: + + ./configure + +There are many options which you may provide to configure (which you +can discover by running configure with the --help option). But the +one of most interest is the one that sets the installation directory. +By default, the configure script will set things up to install +libexpat into /usr/local/lib, expat.h into /usr/local/include, and +xmlwf into /usr/local/bin. If, for example, you'd prefer to install +into /home/me/mystuff/lib, /home/me/mystuff/include, and +/home/me/mystuff/bin, you can tell configure about that with: + + ./configure --prefix=/home/me/mystuff + +Another interesting option is to enable 64-bit integer support for +line and column numbers and the over-all byte index: + + ./configure CPPFLAGS=-DXML_LARGE_SIZE + +However, such a modification would be a breaking change to the ABI +and is therefore not recommended for general use - e.g. as part of +a Linux distribution - but rather for builds with special requirements. + +After running the configure script, the "make" command will build +things and "make install" will install things into their proper +location. Have a look at the "Makefile" to learn about additional +"make" options. Note that you need to have write permission into +the directories into which things will be installed. + +If you are interested in building Expat to provide document +information in UTF-16 encoding rather than the default UTF-8, follow +these instructions (after having run "make distclean"): + + 1. For UTF-16 output as unsigned short (and version/error + strings as char), run: + + ./configure CPPFLAGS=-DXML_UNICODE + + For UTF-16 output as wchar_t (incl. version/error strings), + run: + + ./configure CFLAGS="-g -O2 -fshort-wchar" \ + CPPFLAGS=-DXML_UNICODE_WCHAR_T + + 2. Edit the MakeFile, changing: + + LIBRARY = libexpat.la + + to: + + LIBRARY = libexpatw.la + + (Note the additional "w" in the library name.) + + 3. Run "make buildlib" (which builds the library only). + Or, to save step 2, run "make buildlib LIBRARY=libexpatw.la". + + 4. Run "make installlib" (which installs the library only). + Or, if step 2 was omitted, run "make installlib LIBRARY=libexpatw.la". + +Using DESTDIR or INSTALL_ROOT is enabled, with INSTALL_ROOT being the default +value for DESTDIR, and the rest of the make file using only DESTDIR. +It works as follows: + $ make install DESTDIR=/path/to/image +overrides the in-makefile set DESTDIR, while both + $ INSTALL_ROOT=/path/to/image make install + $ make install INSTALL_ROOT=/path/to/image +use DESTDIR=$(INSTALL_ROOT), even if DESTDIR eventually is defined in the +environment, because variable-setting priority is +1) commandline +2) in-makefile +3) environment + +Note: This only applies to the Expat library itself, building UTF-16 versions +of xmlwf and the tests is currently not supported. + +Note for Solaris users: The "ar" command is usually located in +"/usr/ccs/bin", which is not in the default PATH. You will need to +add this to your path for the "make" command, and probably also switch +to GNU make (the "make" found in /usr/ccs/bin does not seem to work +properly -- appearantly it does not understand .PHONY directives). If +you're using ksh or bash, use this command to build: + + PATH=/usr/ccs/bin:$PATH make + +When using Expat with a project using autoconf for configuration, you +can use the probing macro in conftools/expat.m4 to determine how to +include Expat. See the comments at the top of that file for more +information. + +A reference manual is available in the file doc/reference.html in this +distribution. + +The homepage for this project is http://www.libexpat.org/. There +are links there to connect you to the bug reports page. If you need +to report a bug when you don't have access to a browser, you may also +send a bug report by email to expat-bugs@mail.libexpat.org. + +Discussion related to the direction of future expat development takes +place on expat-discuss@mail.libexpat.org. Archives of this list and +other Expat-related lists may be found at: + + http://mail.libexpat.org/mailman/listinfo/ diff --git a/source/externals/ptl/.clang-tidy b/source/externals/ptl/.clang-tidy new file mode 100644 index 0000000000..175a5e32f2 --- /dev/null +++ b/source/externals/ptl/.clang-tidy @@ -0,0 +1,40 @@ +--- +Checks: "-*,\ +google-readability-casting,\ +misc-*,\ +-misc-incorrect-roundings,\ +-misc-macro-parentheses,\ +-misc-misplaced-widening-cast,\ +-misc-static-assert,\ +modernize-*,\ +-modernize-deprecated-headers,\ +-modernize-pass-by-value,\ +-modernize-raw-string-literal,\ +-modernize-return-braced-init-list,\ +-modernize-use-auto,\ +-modernize-use-default-member-init,\ +-modernize-use-emplace,\ +-modernize-use-equals-default,\ +-modernize-use-equals-delete,\ +-modernize-use-noexcept,\ +-modernize-use-transparent-functors,\ +-modernize-use-using,\ +performance-*,\ +-performance-inefficient-string-concatenation,\ +readability-*,\ +-readability-function-size,\ +-readability-identifier-naming,\ +-readability-implicit-bool-cast,\ +-readability-inconsistent-declaration-parameter-name,\ +-readability-named-parameter,\ +-readability-redundant-declaration,\ +-readability-redundant-member-init,\ +-readability-simplify-boolean-expr,\ +" +HeaderFilterRegex: 'source/[^/]*\.(hh|cc)$' +CheckOptions: + - key: readability-braces-around-statements.ShortStatementLines + value: '2' + - key: readability-implicit-bool-conversion.AllowPointerConditions + value: '1' +... diff --git a/source/externals/ptl/README.md b/source/externals/ptl/README.md new file mode 100644 index 0000000000..8a23b02af9 --- /dev/null +++ b/source/externals/ptl/README.md @@ -0,0 +1,2 @@ +# Parallel Tasking Library (PTL) +Lightweight C++11 multithreading tasking system featuring thread-pool, task-groups, and lock-free task queue diff --git a/source/externals/zlib/README b/source/externals/zlib/README new file mode 100644 index 0000000000..d756ff44eb --- /dev/null +++ b/source/externals/zlib/README @@ -0,0 +1,157 @@ +Gunter Folger - 12 June 2018 +============================ +- Switch to original zlib sources, using zlib 1.2.11. Use C as compiler. + Keep sources.cmake, this has most of zlib CMakeLists.txt code. + +Gunter Folger - 17 June 2015 +============================ +- Update to zlib-1.2.8, keeping Geant4 specific structure of files. + Compare files to new zlib, and transfer changes, keeping local + modifications, like function declarationss, and removed register keyword. + + +Gunter Folger - 27-March 2013 +============================= +Update to zlib 1.2.7 +Again, rename source files to .cc. +Add files for reading zlib format, i.e. zlib is now complete. +Re-modify functions to compile with C++ compiler, "type-name" rather than +"name { type" in all .cc code. +In {gzlib,gzread,gzwrite}.cc, introduced several casts to avoid compile error for invalid +converion +- May 2013: +Adapt to Geant4 cmake; copied portions of zlib CMakeLists.tzt to sources.cmake, +using standard G4 CMakeLists.txt. Private header are in src, include only has +zlib.h; zconf.h is configured and put into build tree; these two header files +are installed. + +Mark Donszelmann - 4 May 2005 +============================= +Files renamed to .cc +Removed all files for reading zlib format. +Functions were modified to compile with C++ compiler, "type-name" rather than +"name { type", in: + +adler32.cc, compress.cc, crc32.cc, deflate.cc, trees.cc + +In: deflate.cc and trees.cc all strings are casted to (char*) to avoid warnings. +============================================================= + + +Original zlib README: +===================== +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.2.7 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and +rfc1952 (gzip format). + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example +of the library is given in the file test/example.c which also tests that +the library is working correctly. Another example is given in the file +test/minigzip.c. The compression library itself is composed of all source +files in the root directory. + +To compile all files and run the test program, follow the instructions given at +the top of Makefile.in. In short "./configure; make test", and if that goes +well, "make install" should work for most flavors of Unix. For Windows, use +one of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use +make_vms.com. + +Questions about zlib should be sent to , or to Gilles Vollant + for the Windows DLL version. The zlib home page is +http://zlib.net/ . Before reporting a problem, please check this site to +verify that you have the latest version of zlib; otherwise get the latest +version and check whether the problem still exists or not. + +PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help. + +Mark Nelson wrote an article about zlib for the Jan. 1997 +issue of Dr. Dobb's Journal; a copy of the article is available at +http://marknelson.us/1997/01/01/zlib-engine/ . + +The changes made in version 1.2.7 are documented in the file ChangeLog. + +Unsupported third party contributions are provided in directory contrib/ . + +zlib is available in Java using the java.util.zip package, documented at +http://java.sun.com/developer/technicalArticles/Programming/compression/ . + +A Perl interface to zlib written by Paul Marquess is available +at CPAN (Comprehensive Perl Archive Network) sites, including +http://search.cpan.org/~pmqs/IO-Compress-Zlib/ . + +A Python interface to zlib written by A.M. Kuchling is +available in Python 1.5 and later versions, see +http://docs.python.org/library/zlib.html . + +zlib is built into tcl: http://wiki.tcl.tk/4610 . + +An experimental package to read and write files in .zip format, written on top +of zlib by Gilles Vollant , is available in the +contrib/minizip directory of zlib. + + +Notes for some targets: + +- For Windows DLL versions, please see win32/DLL_FAQ.txt + +- For 64-bit Irix, deflate.c must be compiled without any optimization. With + -O, one libpng test fails. The test works in 32 bit mode (with the -n32 + compiler flag). The compiler bug has been reported to SGI. + +- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works + when compiled with cc. + +- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is + necessary to get gzprintf working correctly. This is done by configure. + +- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with + other compilers. Use "make test" to check your compiler. + +- gzdopen is not supported on RISCOS or BEOS. + +- For PalmOs, see http://palmzlib.sourceforge.net/ + + +Acknowledgments: + + The deflate format used by zlib was defined by Phil Katz. The deflate and + zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; they + are too numerous to cite here. + +Copyright notice: + + (C) 1995-2012 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. diff --git a/source/g3tog4/README b/source/g3tog4/README new file mode 100644 index 0000000000..b85d1b2c25 --- /dev/null +++ b/source/g3tog4/README @@ -0,0 +1,105 @@ +G3toG4 +------ + +G3toG4 is the Geant4 facility to convert Geant3 geometries into Geant4. +This is done in two stages. + +First, the user supplies a Geant3 .rz file containing the initialization +data structures. An executable, rztog4, reads this file and produces an +ascii ("call list") file containing instructions on how to build the +geometry. The source code for this is fortran. + +Second, a call list interpreter (G4BuildGeom.cc) reads these instructions +and builds the geometry in the user's G4 client code. + +Two examples of how to use the call list interpreter are supplied in +examples/extended/g3tog4: + - the first example, cltog4, is a simple example which simply invokes the + call list interpreter method G4BuildGeom from G3toG4DetectorConstruction + class, builds the geometry and exits. + - the second example, clGeometry, is more complete and is patterned after + the novice G4 examples. It also invokes the call list interpreter, but + in addition, allows the geometry to be visualized and particles to be + tracked. Currently, G3toG4 does not provide a method for scoring hits + in G4. + +To build these examples, especially the one involving visualization, the +user must have one or more of the following environment variables set: + +setenv G4VIS_BUILD__DRIVER +setenv G4VIS_USE_ + +where the G4-supported drivers are listed in source/visualization/README. + +To use the freeware Mesa API, you must have the environment variable +OGLHOME defined to point to the directory containing the Mesa lib/ directory +specific to your platform. + +To compile and build the G3toG4 libraries, simply type + +gmake + +from the top-level G3toG4 directory. + +To build the converter executable "rztog4", simply type + +gmake bin + +To make everything, simply type: + +gmake global + +To remove all G3toG4 libraries, executables and .d files, simply type + +gmake clean + + the implementation (April 1999) +---------------------------------------- +- PGON, PCON are built using the CSG classes G4Polycone and G4Polyhedra. +- G3 MANY feature has not been tested. +- GsROTM is fully implemented and supports rotations and mirror reflections +- GSPOSP implemented via individual logical volumes for each instantiation + (G4PVIndexed doesn't exist yet) +- GSDV* routines for dividing volumes implemented, using + G4PVReplicas, G4PVParametrised +- GSROTM is implemented +- hits are not implemented. Hit code is do-nothing. (It is + coded up, but hit class references are commented out.) + The digits+hits code has to be updated before G3toG4's + hit code can be activated. +- GSPART has to be updated. +- Usage of magnetic field class has to be turned on. + + the implementation (February 2001) +---------------------------------------- +- Supported shapes: all G3 shapes except for + "HYPE", "GTRA", "CTUB" +- G3 MANY feature is not supported. +- GSDV* routines for dividing volumes implemented, using + G4PVReplicas, for shapes: + "BOX", "TUBE", "TUBS", "PARA" - all axes; + "CONE", "CONS" - axes 2, 3; + "TRD1", "TRD2", "TRAP" - axis 3; + "PGON", "PCON" - axis 2; + "PARA" -axis 1; axis 2,3 for a special case + Unsupported shapes: + "SPHE", "ELTU", "HYPE", "GTRA", "CTUB" + + the implementation (November 2001) +---------------------------------------- +- Support for G3 MANY feature: + + MANY positions are resolved in G3toG4MANY function, + which has to be processed before G3toG4BuildTree + (it is not called by default). + In order to resolve MANY user code has to provide + additional info using G4gsbool(G4String volName, G4String manyVolName) + function) for all overlapping volumes. Daughters of + overlapping volumes are then resolved automatically + and should not be specified via Gsbool. + + Limitation: a volume with a MANY position can have only this + one position; if more than one position is needed a new volume + has to be defined (gsvolu) for each position. + +See History file for modification history. diff --git a/source/physics_lists/constructors/decay/README b/source/physics_lists/constructors/decay/README new file mode 100644 index 0000000000..7b33ccd4f2 --- /dev/null +++ b/source/physics_lists/constructors/decay/README @@ -0,0 +1,14 @@ +------------------------------------------------------------------- + + + G4DecayPhysics + -------------- + + G4RadioactiveDecayPhysics + ------------------------- + + G4SpinDecayPhysics + ------------------ + + G4UnknownDecayPhysics + --------------------- diff --git a/source/physics_lists/constructors/electromagnetic/README b/source/physics_lists/constructors/electromagnetic/README new file mode 100644 index 0000000000..85f2d13323 --- /dev/null +++ b/source/physics_lists/constructors/electromagnetic/README @@ -0,0 +1,91 @@ +------------------------------------------------------------------- + + + G4EmDNAChemistry + ---------------- + + G4EmDNAPhysics + -------------- + + G4EmDNAPhysicsActivator + ----------------------- + + G4EmDNAPhysics_option1 + ---------------------- + + G4EmDNAPhysics_option2 + ---------------------- + + G4EmDNAPhysics_option3 + ---------------------- + + G4EmDNAPhysics_option4 + ---------------------- + + G4EmDNAPhysics_option5 + ---------------------- + + G4EmDNAPhysics_option7 + ---------------------- + + G4EmLEPTSPhysics + ---------------- + + G4EmLivermorePhysics + -------------------- + see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml + + G4EmLivermorePolarizedPhysics + ----------------------------- + see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml + + G4EmLowEPPhysics + ---------------- + + G4EmModelActivator + ------------------ + + G4EmPenelopePhysics + ------------------- + see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml + + G4EmStandardPhysics + ------------------- + see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml + + G4EmStandardPhysicsGS + --------------------- + see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml + + G4EmStandardPhysicsSS + --------------------- + see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml + + G4EmStandardPhysicsWVI + ---------------------- + see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml + + G4EmStandardPhysics_option1 + --------------------------- + see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml + + G4EmStandardPhysics_option2 + --------------------------- + see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml + + G4EmStandardPhysics_option3 + --------------------------- + see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml + + G4EmStandardPhysics_option4 + --------------------------- + see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml + + G4OpticalPhysics + ---------------- + + G4OpticalPhysicsMessenger + ------------------------- + + G4OpticalProcessIndex + --------------------- \ No newline at end of file diff --git a/source/physics_lists/constructors/factory/README b/source/physics_lists/constructors/factory/README new file mode 100644 index 0000000000..75d32ac20b --- /dev/null +++ b/source/physics_lists/constructors/factory/README @@ -0,0 +1,9 @@ +------------------------------------------------------------------- + + + G4PhysicsConstructorFactory + --------------------------- + + G4PhysicsConstructorRegistry + ---------------------------- + \ No newline at end of file diff --git a/source/physics_lists/constructors/gamma_lepto_nuclear/README b/source/physics_lists/constructors/gamma_lepto_nuclear/README new file mode 100644 index 0000000000..77b489994c --- /dev/null +++ b/source/physics_lists/constructors/gamma_lepto_nuclear/README @@ -0,0 +1,48 @@ +------------------------------------------------------------------- + + + G4BertiniElectroNuclearBuilder + ------------------------------ + It includes gamma-nuclear, electron-nuclear and positron-nuclear + processes. + For gamma-nuclear, it uses Bertini (BERT) model for gamma below 6 GeV, + and Quark-Gluon-String (QGS) model above 3 GeV. + For electron-nuclear and positron-nuclear, it uses the equivalent photon + approximation in which the incoming lepton generates a virtual photon, + and then the virtual photon is converted to a real photon. This real + photon is handled by BERT if its energy is below 10 GeV; if it is above + 10 GeV, then the real photon is transformed into a (on-shell) pi0 and + then handled by Fritiof (FTF) string model. + + + G4EmExtraPhysics + ---------------- + It uses G4BertiniElectroNuclearBuilder for gamma-nuclear, electron-nuclear + and positron-nuclear. + Moreover, it includes muon-nuclear process (for mu- and mu+), and + synchrotron process (either for electron & positron, or for all + charged particles). + The muon-nuclear process is treated similarly as for electrons and + positrons (i.e. the equivalent photon approximation in which the incoming + lepton generates a virtual photon, and then the virtual photon is converted + to a real photon, which is handled by BERT below 10 GeV or by FTF as a pi0 + above 10 GeV). + By default, gamma-nuclear, electron-nuclear, positron-nuclear, and + muon-nuclear are switched on, whereas synchrotron process is switched off + for all particles. It is however possible, at run time via macro commands, + to change this default (see G4EmMessenger below). + + + G4EmMessenger + ------------- + Used by G4EmExtraPhysics to be able to switch on/off: + - synchrotron radiation for electron and positron + (note: electron and positron together, not individually) + - synchrotron radiation for all charged particles + (note: all charged particles together, not individually) + - gamma-nuclear, electron-nuclear and positron-nuclear + (note: all these three particles together, not individually) + - muon-nuclear + (note: mu- and mu+ together, not individually) + at run time, via macro commands. + diff --git a/source/physics_lists/constructors/hadron_elastic/README b/source/physics_lists/constructors/hadron_elastic/README new file mode 100644 index 0000000000..5ef90ee463 --- /dev/null +++ b/source/physics_lists/constructors/hadron_elastic/README @@ -0,0 +1,104 @@ +------------------------------------------------------------------- + + + G4HadronElasticPhysics + ---------------------- + Hadron nuclear elastic process for all hadrons: + - proton + - cross section: Barashenkov-Glauber-Gribov + - final-state: Chips + - neutron: + - cross section: G4NeutronElasticXS + - final-state: Chips + - charged pions: + - cross section: Barashenkov-Glauber-Gribov + - final-state: Starkov's model (G4ElasticHadrNucleusHE) for all energies + - kaons, hyperons, anti-hyperons, charm and bottom hadrons + - cross section: Glauber-Gribov + - final-state: Gheisha + - deuteron, triton, He3, alpha + - cross section: Glauber-Gribov + - final-state: Gheisha + - anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3, + anti_alpha + - cross-section: Galoyan-Uzhinsky-Glauber-Gribov + - final-state: Galoyan-Uzhinsky model above 100 MeV/nucleon, + Gheisha below. + + G4HadronElasticPhysicsHP + ------------------------ + As G4HadronElasticPhysics, with the only difference that for neutrons + below 20 MeV, NeutronHP elastic is used (for both cross section and + final-state model). + + G4HadronElasticPhysicsLEND + -------------------------- + As G4HadronElasticPhysics, with the only difference that for neutrons + below 20 MeV, LEND elastic is used (for both cross section and + final-state model). + + G4HadronElasticPhysicsXS + ------------------------ + Now exactly as G4HadronElasticPhysics. + + G4HadronHElasticPhysics + ----------------------- + - proton + - cross section: Barashenkov-Glauber-Gribov + - final-state: Diffuse model, except for Hydrogen where Chips is used, + above 10 MeV, and Gheisha below + - neutron: + - cross section: G4NeutronElasticXS + - final-state: Diffuse model, except for Hydrogen where Chips is used, + above 10 MeV, and Gheisha below + - charged pions: + - cross section: Barashenkov-Glauber-Gribov + - final-state: Diffuse model, except for Hydrogen where Chips is used, + above 10 MeV, and Gheisha below + - kaons, hyperons, anti-hyperons, charm and bottom hadrons + - cross section: Glauber-Gribov + - final-state: Gheisha + - deuteron, triton, He3, alpha + - cross section: Glauber-Gribov + - final-state: Gheisha + - anti_proton, anti_neutron + - cross section: Galoyan-Uzhinsky-Glauber-Gribov + - final-state: Galoyan-Uzhinsky model above 100 MeV/nucleon, + Chips below. + - anti_deuteron, anti_triton, anti_He3, anti_alpha + - cross-section: Galoyan-Uzhinsky-Glauber-Gribov + - final-state: Galoyan-Uzhinsky model above 100 MeV/nucleon, + Gheisha below. + + G4IonElasticPhysics + ------------------- + As G4HadronElasticPhysics, with the addition of elastic process for + generic ion: + - cross section: Glauber-Gribov + - final-state: Diffuse model + + + G4HadronDElasticPhysics + ----------------------- + Hadron nuclear elastic process for all hadrons: + - proton and charged pions: + - cross section: Barashenkov-Glauber-Gribov + - final-state: Diffuse model where applicable, else Gheisha + - neutron: + - cross section: G4NeutronElasticXS + - final-state: Diffuse model where applicable, else Gheisha + - kaons, hyperons, anti-hyperons, charm and bottom hadrons, + deuteron, triton, He3, alpha + - cross section: Glauber-Gribov + - final-state: Gheisha + - anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3, + anti_alpha + - cross-section: Galoyan-Uzhinsky-Glauber-Gribov + - final-state: Galoyan-Uzhinsky model above 100 MeV/nucleon, + Gheisha below. + + G4ChargeExchangePhysics + ----------------------- + Hadron nuclear coherent charge exchange, used in this constructor + only for nucleons and charged pions. + diff --git a/source/physics_lists/constructors/hadron_inelastic/README b/source/physics_lists/constructors/hadron_inelastic/README new file mode 100644 index 0000000000..f9a4cd495c --- /dev/null +++ b/source/physics_lists/constructors/hadron_inelastic/README @@ -0,0 +1,282 @@ +------------------------------------------------------------------- + + + G4HadronInelasticQBBC + --------------------- + Hadron nuclear inelastic processes for all hadrons: + - proton inelastic: + - cross section: G4ParticleInelasticXS + - final-state: Fritiof coupled with Precompound/de-excitation (FTFP) above 3 GeV; + Bertini (BERT) between 1 and 6 GeV; + Binary coupled with Precompound/de-excitation (BIC) below 1.5 GeV + - neutron inelastic: + - cross section: G4NeutronInelasticXS + - final-state: FTFP > 3 GeV; 1 GeV < BERT < 6 GeV; BIC < 1.5 GeV + neutron capture: + - cross section: G4NeutronCaptureXS + - final-state: G4NeutronRadCapture + - charged pions inelastic: + - cross section: Barashenkov-Glauber-Gribov + - final-state: FTFP > 3 GeV; 1 GeV < BERT < 12 GeV; BIC < 1.5 GeV + - kaons inelastic: + - cross section: Glauber-Gribov + - final-state: FTFP > 3 GeV; BERT < 6 GeV + - hyperons inelastic: + - cross section: Glauber-Gribov + - final-state: FTFP > 3 GeV; BERT < 6 GeV + - anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3, anti_alpha inelastic: + - cross-section: Galoyan-Uzhinsky-Glauber-Gribov + - final-state: FTFP for all energies + - anti_hyperons inelastic: + - cross section: Glauber-Gribov + - final-state: FTFP for all energies + - charm and bottom hadrons inelastic: + - cross section: Glauber-Gribov + - final-state: FTFP for all energies + + + G4HadronPhysicsFTFP_BERT + ------------------------ + Hadron nuclear inelastic processes for all hadrons: + - proton inelastic: + - cross section: Barashenkov-Glauber-Gribov (G4BGGNucleonInelasticXS) + - final-state: FTFP > 3 GeV; BERT < 6 GeV + - neutron inelastic: + - cross section: G4NeutronInelasticXS + - final-state: FTFP > 3 GeV; BERT < 6 GeV + neutron capture: + - cross section: G4NeutronCaptureXS + - final-state: G4NeutronRadCapture + - charged pions inelastic: + - cross section: Barashenkov-Glauber-Gribov + - final-state: FTFP > 3 GeV; BERT < 6 GeV + - kaons inelastic: + - cross section: Glauber-Gribov + - final-state: FTFP > 3 GeV; BERT < 6 GeV + - hyperons inelastic: + - cross section: Glauber-Gribov + - final-state: FTFP > 3 GeV; BERT < 6 GeV + - anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3, anti_alpha inelastic: + - cross-section: Galoyan-Uzhinsky-Glauber-Gribov + - final-state: FTFP for all energies + - anti_hyperons inelastic: + - cross section: Glauber-Gribov + - final-state: FTFP for all energies + - charm and bottom hadrons inelastic: + - cross section: Glauber-Gribov + - final-state: FTFP for all energies + + + G4HadronPhysicsFTFP_BERT_ATL + ---------------------------- + Similar to G4HadronPhysicsFTFP_BERT, with the difference that for proton, + neutron, pions and kaons, the FTFP is used above 9 GeV and BERT below 12 GeV + (i.e. transition between these two models is in the interval [9, 12] GeV + for the most frequent hadrons). + + + G4HadronPhysicsFTFP_BERT_HP + -------------------------- + Similar to G4HadronPhysicsFTFP_BERT, but with a different treatment of + low-energy neutrons: + - neutron inelastic: use NeutronHP (for both cross section and final state) + below 20 MeV; above G4NeutronCaptureXS cross section; + final-state: BERT between 19.9 MeV and 6 GeV, + FTFP above 3 GeV. + - neutron capture: use NeutronHP (for both cross section and final state) + below 20 MeV; above G4NeutronCaptureXS cross section + and G4NeutronRadCapture final-state. + - neutron fission: use NeutronHP (for both cross section and final state) + below 20 MeV; above Gheisha (cross section and final state). + Moreover, RadioactiveDecay is activated (as in all the physics lists that use HP). + + + G4HadronPhysicsFTFP_BERT_TRV + ---------------------------- + The same as G4HadronPhysicsFTFP_BERT. + + + G4HadronPhysicsFTF_BIC + ---------------------- + Similar to G4HadronPhysicsFTFP_BERT, with the following differences: + - For proton and neutron, BIC is used (instead of BERT) below 6 GeV + - For pions, BIC is used below 1.5 GeV, whereas BERT is used in the + interval 1 GeV < BERT < 6 GeV + - FTF is coupled with BIC (instead of directly to Precompound/de-excitation). + + + G4HadronPhysicsQGS_BIC + ---------------------- + Similar to G4HadronPhysicsFTP_BIC, except that QGSP is used above 12 GeV + and FTFP below 25 GeV. + + + G4HadronPhysicsFTFQGSP_BERT + --------------------------- + Similar to G4HadronPhysicsFTFP_BERT, but with QGS fragmentation of strings + (instead of the Lund string fragmentation). + + + G4HadronPhysicsINCLXX + --------------------- + Similar to QGSP_BERT except for: + - proton inelastic: + - cross section: Barashenkov-Glauber-Gribov (G4BGGNucleonInelasticXS) + - final-state: QGSP > 15 GeV; 1 MeV < INCLXX < 20 GeV; Preco < 2 MeV + - neutron inelastic: + - cross section: G4NeutronInelasticXS + - final-state: QGSP > 15 GeV; 1 MeV < INCLXX < 20 GeV; Preco < 2 MeV + - charged pions inelastic: + - cross section: Barashenkov-Glauber-Gribov + - final-state: QGSP > 15 GeV; 1 MeV < INCLXX < 20 GeV; Preco < 2 MeV + - kaons inelastic: + - cross section: Glauber-Gribov + - final-state: QGSP > 14 GeV; BERT < 15 GeV + Note: it is possible to specify in the constructor the use of FTFP + instead of QGSP; + moreover, NeutronHP can also be activated in the constructor, + in which case inelastic, capture and fission below 20 MeV are + taken from NeutronHP (both cross section and final-state). + + + G4HadronPhysicsNuBeam + --------------------- + Similar to FTFP_BERT, except for the final-state models of proton: + - proton : QGSP with Lund string fragmentation > 100 GeV; + 3 GeV < FTFP < 101 GeV; BERT < 6 GeV + + + G4HadronPhysicsQGSP_BERT + ------------------------ + Hadron nuclear inelastic processes for all hadrons: + - proton inelastic: + - cross section: Barashenkov-Glauber-Gribov (G4BGGNucleonInelasticXS) + - final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV + - neutron inelastic: + - cross section: G4NeutronInelasticXS + - final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV + neutron capture: + - cross section: G4NeutronCaptureXS + - final-state: G4NeutronRadCapture + - charged pions inelastic: + - cross section: Barashenkov-Glauber-Gribov + - final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV + - kaons inelastic: + - cross section: Glauber-Gribov + - final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV + - hyperons inelastic: + - cross section: Glauber-Gribov + - final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV + - anti_proton and anti_neutron inelastic: + - cross-section: Galoyan-Uzhinsky-Glauber-Gribov + - final-state: QGSP > 12 GeV; FTFP < 25 GeV + - anti_deuteron, anti_triton, anti_He3, and anti_alpha inelastic: + - cross-section: Galoyan-Uzhinsky-Glauber-Gribov + - final-state: FTFP for all energies + - anti_hyperons inelastic: + - cross section: Glauber-Gribov + - final-state: QGSP > 12 GeV; FTFP < 25 GeV + - charm and bottom hadrons inelastic: + - cross section: Glauber-Gribov + - final-state: QGSP > 12 GeV; FTFP < 25 GeV + + +G4HadronPhysicsQGSP_FTFP_BERT + ----------------------------- + Currently it is the same as QGSP_BERT (this was not the case before G4 10.6). + It might be removed in future versions of Geant4. + + + G4HadronPhysicsQGSP_BERT_HP + --------------------------- + Similar to G4HadronPhysicsQGSP_BERT, but with a different treatment of + low-energy neutrons: + - neutron inelastic: use NeutronHP (for both cross section and final state) + below 20 MeV; above G4NeutronCaptureXS cross section; + final-state: BERT between 19.9 MeV and 6 GeV, + FTFP between 3 and 25 GeV, QGSP above 12 GeV. + - neutron capture: use NeutronHP (for both cross section and final state) + below 20 MeV; above G4NeutronCaptureXS cross section + and G4NeutronRadCapture final-state. + - neutron fission: use NeutronHP (for both cross section and final state) + below 20 MeV; above Gheisha (cross section and final state). + Moreover, RadioactiveDecay is activated (as in all the physics lists that use HP). + + + G4HadronPhysicsQGSP_BIC + ----------------------- + Hadron nuclear inelastic processes for all hadrons: + - proton inelastic: + - cross section: Barashenkov-Glauber-Gribov (G4BGGNucleonInelasticXS) + - final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BIC < 6 GeV + - neutron inelastic: + - cross section: G4NeutronInelasticXS + - final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BIC < 6 GeV + neutron capture: + - cross section: G4NeutronCaptureXS + - final-state: G4NeutronRadCapture + - charged pions inelastic: + - cross section: Barashenkov-Glauber-Gribov + - final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV + - kaons inelastic: + - cross section: Glauber-Gribov + - final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV + - hyperons inelastic: + - cross section: Glauber-Gribov + - final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV + - anti_proton and anti_neutron inelastic: + - cross-section: Galoyan-Uzhinsky-Glauber-Gribov + - final-state: QGSP > 12 GeV; FTFP < 25 GeV + - anti_deuteron, anti_triton, anti_He3, and anti_alpha inelastic: + - cross-section: Galoyan-Uzhinsky-Glauber-Gribov + - final-state: FTFP for all energies + - anti_hyperons inelastic: + - cross section: Glauber-Gribov + - final-state: QGSP > 12 GeV; FTFP < 25 GeV + + + G4HadronPhysicsQGSP_BIC_HP + -------------------------- + Similar to G4HadronPhysicsQGSP_BIC, but with a different treatment of + low-energy neutrons: + - neutron inelastic: use NeutronHP (for both cross section and final state) + below 20 MeV; above G4NeutronCaptureXS cross section; + final-state: BIC between 19.9 MeV and 6 GeV, + FTFP between 3 and 25 GeV, QGSP above 12 GeV. + - neutron capture: use NeutronHP (for both cross section and final state) + below 20 MeV; above G4NeutronCaptureXS cross section + and G4NeutronRadCapture final-state. + - neutron fission: use NeutronHP (for both cross section and final state) + below 20 MeV; above Gheisha (cross section and final state). + Moreover, RadioactiveDecay is activated (as in all the physics lists that use HP). + + + G4HadronPhysicsQGSP_BIC_AllHP + ----------------------------- + Similar to G4HadronPhysicsQGSP_BIC_HP, but with a different treatment of + low-energy protons: + ParticleHP is used (for both cross section and final state) below 200 MeV; + above it: Barashenkov-Glauber-Gribov inelastic cross section; + final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; 190 MeV < BIC < 6 GeV. + + + G4HadronPhysicsShielding + ------------------------ + Similar to G4HadronPhysicsFTFP_BERT_HP except for using + JENDLHEInelasticCrossSection for the neutron inelastic cross section + above 20 MeV. + Note: the variant "M" of the Shielding physics list has a transition region + between FTFP and BERT for pions between 9.5 and 9.9 GeV + (instead of 3-6 GeV). + + + G4HadronPhysicsShieldingLEND + ---------------------------- + Similar to G4HadronPhysicsShielding, except that LEND is used for neutrons + below 20 MeV instead of NeutronHP. + + + G4VHadronPhysics + ---------------- + Utility class which provides useful methods. + diff --git a/source/physics_lists/constructors/ions/README b/source/physics_lists/constructors/ions/README new file mode 100644 index 0000000000..a2607937c2 --- /dev/null +++ b/source/physics_lists/constructors/ions/README @@ -0,0 +1,44 @@ +------------------------------------------------------------------- + + + G4IonBinaryCascadePhysics + ------------------------- + Inelastic ion-ion processes (for deuteron, triton, He3, alpha and + generic ion projectiles), with Glauber-Gribov cross section and + Binary Light Ion (BIC, with Precompound/de-excitation) and Fritiof (FTF) + string model (with Precompound/de-excitation) for the final state. + BIC is used for projectiles of kinetic energies below 6 GeV/nucleon, and + FTF above 3 GeV/nucleon. + + G4IonINCLXXPhysics + ------------------ + Inelastic ion-ion processes (for deuteron, triton, He3, alpha and + generic ion projectiles), with Glauber-Gribov cross section and + INCLXX and FTFP for the final state. INCLXX is used below 3 GeV/nucleon, + and FTF above 2.9 GeV/nucleon. + + G4IonPhysics + ------------ + Currently equivalent to G4IonBinaryCascadePhysics. + + G4IonPhysicsXS + -------------- + As G4IonPhysics, except that for deuteron, triton, He3 and alpha + the corresponding G4ParticleInelasticXS cross section is used + (instead of G4ComponentGGNuclNuclXsc). + + G4IonPhysicsPHP + --------------- + Similar to G4IonBinaryCascadePhysics, except that ParticleHP (for both + cross sections and final states) is used below 200 MeV/n for deuteron, + triton, He3 and alpha (and BIC used above 190 MeV/n for these light ions). + + G4IonQMDPhysic + -------------- + Inelastic ion-ion processes (for deuteron, triton, He3, alpha and + generic ion projectiles), with Glauber-Gribov cross section and + BIC, QMD and FTFP for the final state. These three final-state models + are used in the following intervals of projectile kinetic energy: + - BIC below 110 MeV/nucleon; + - QMD between 100 and 6'000 MeV/nucleon; + - FTF above 5990 MeV/nucleon. diff --git a/source/physics_lists/constructors/limiters/README b/source/physics_lists/constructors/limiters/README new file mode 100644 index 0000000000..e3bd2c6c9a --- /dev/null +++ b/source/physics_lists/constructors/limiters/README @@ -0,0 +1,72 @@ + contructors/limiters + -------------------- + + This directory contains "technical" constructors in the sense they do not +add processes with physics content but add processes or modify physics lists to +allow for step limitation in parallel geometries, biasing, etc. + + +G4FastSimulationPhysics: +------------------------ + + Constructor that modifies a given physics list to allow for fast simulation. + + One, or several, G4FastSimulationManagerProcess objects are added to the + process manager of particles for which a fast simulation is requested. + + The fast simulation may be associated to regions in the mass geometry, in + what case a call like fastSimPhys->ActivateFastSimulation("e-") must be + done to allow for fast simulation of electrons. + Parallel geometries can be used also in what case the geometry is specified + by its name like fastSimPhys->ActivateFastSimulation("e-","parallelGeom") to + allow for fast simulation of electrons, with fast simulation models attached + to regions in "parallelGeom". + + +G4GenericBiasingPhysics: +------------------------ + + Constructor that modifies a given physics list to allow for generic biasing. + + It provides three type of functionnalities: + - wrap physics processes with G4BiasingProcessInterface processes to + make the generic biasing to control them (allowing change of + interaction law, change of final state generation). + - add G4BiasingProcessInterface processes, but without wrapping a + physics process, in what case these processes will be used for + "non-physics based biasing" : ie, spliting and killing + - add G4ParallelGeometriesLimiterProcess process (at most one per + process manager) that provides step limitation on the parallel + geometries used in generic biasing. A process can handle several + parallel geometries associated to one particle type. + + Various methods are provided to activate these functionnalities per + particle, set of particles, to activate physics-based only or + non-physics-based only or both functionnalities, and to activate the + parallel geometry functionnality. + This is documented in include/G4GenericBiasingPhysics.hh . + + +G4ImportanceBiasing: +------------------- + +G4MaxTimeCuts: +-------------- + +G4MinEkineCuts: +--------------- + +G4NeutronTrackingCut: +--------------------- + +G4ParallelWorldPhysics: +----------------------- + +G4SpecialCuts: +-------------- + +G4StepLimiterPhysics: +--------------------- + +G4WeightWindowBiasing: +---------------------- diff --git a/source/physics_lists/constructors/stopping/README b/source/physics_lists/constructors/stopping/README new file mode 100644 index 0000000000..ddc6be077f --- /dev/null +++ b/source/physics_lists/constructors/stopping/README @@ -0,0 +1,19 @@ +------------------------------------------------------------------- + + + G4StoppingPhysics + ----------------- + It uses Bertini/Precompound (i.e. Bertini followed by the official + Precompound/deexcitation of Geant4, not the internal one of Bertini) + for nuclear capture of: pi-, K-, Sigma-, Xi- and Omega-. + It uses Fritiof/Precompound model for nuclear capture of: anti_proton, + anti_neutron, anti_Lambda, anti_Sigma0, anti_Sigma+, anti_Xi0, + anti_deuteron, anti_triton, anti_He3, and anti_alpha. + For mu-, Bertini model is used for nuclear capture, together with + default element selector, EM cascade sampling and bound decay sampling. + + G4StoppingPhysicsFritiofWithBinaryCascade + ----------------------------------------- + The same as G4StoppingPhysics, except that for anti-proton and anti-neutron + annihilation at rest it uses Fritiof coupled with Binary Cascade. + diff --git a/source/processes/hadronic/models/de_excitation/photon_evaporation/README-LevelGammaData b/source/processes/hadronic/models/de_excitation/photon_evaporation/README-LevelGammaData new file mode 100644 index 0000000000..38762dbc2b --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/photon_evaporation/README-LevelGammaData @@ -0,0 +1,81 @@ + +The photo-evaporation database contains nuclear deexcitation data starting +from a given nuclear level. Each file contains data for a given isotope, +identified by Z and A. + +The database must first be downloaded from + +http://geant4.web.cern.ch/geant4/support/download.shtml + +and stored in a local directory. The environment variable +G4LEVELGAMMADATA must then be set to point to this directory. + +************************************************** + +Each line describes a de-excitation *step* from a given energy level to a lower +one (which might be the ground state). It contains data for gamma de-excitation +and internal conversion. Notice that if multiple de-excitation +channels are allowed for the starting energy level, these channels will be +described in more lines (all having the same starting level). + + +Each line contains 17 columns: + +1) Energy of the starting nuclear level (keV) + As mentioned before, it is possible to have more lines describing the same + starting level, in the case where multiple de-excitation schemes are + allowed. + +2) Energy of the transition (keV) + This is the energy difference between the initial and the final level. + +3) Gamma transition probability (Ig in %) + Note1: if the probability is less than minProbability = 1e-8%, it is forced + to be 1e-8%. + Note2: see column 7 how total branching ratio is computed. + +4) Polarity + Spin-parity variation in the transition + [never used in real simulation] + +5) Level half-life (s) + +6) Angular Momentum + Spin of the initial level + [never used in real simulation] + +7) Total internal conversion coefficient : alpha = Ic/Ig + Note1: total transition is the sum of gamma de-excitation and internal + conversion. Therefore total branching ratio is proportional to + (1+alpha)*Ig + Note2: total branching ratios from a given level do not always sum up to + 100%. They are re-normalized internally. + Note3: relative probabilities for gamma de-excitation and internal conversion + are 1/(1+alpha) and alpha/(1+alpha) respectively + +8-17) Partial conversion probabilities for + K-shell + L1-3 shells + M1-5 shells + Outer shells (shellID = 9 is used, when applicable) + +Note: if the nuclear excitation energy does not match any of the known levels, + the *nearest* level is always considered. In G4RadioactiveDecay, + metastable states are treated correctly if the excitation energy is + within 2.0 keV of the values in $G4RADIOACTIVEDATA. + + For instance: take file $G4LEVELGAMMADATA/z28.a60 (Ni-60) + Co-60 radioactive decay populates the 1332.5080-keV level of + Ni-60 (0.12%) or the 2505.7480-keV level of Ni-60 (99.88%). + + Deexcitation from the 2505.7480-keV level is described in lines + 6-8 of $G4LEVELGAMMADATA/z28.a60 (Ni-60) + Here, internal conversion coefficients are negligeable (column 7) + Therefore the nucleus will release + 1) 347 keV with 7.6e-3% probability, ending up in the 2158-keV level + (following de-excitation hence takes place, lines 2-4 of the file) + 2) 1173 keV with 100% probability, ending up in the 1332-keV + excited state (following de-excitation hence takes place, line 1) + 3) 2505 keV with 2e-6% probability ending up in the ground state. + + diff --git a/source/processes/hadronic/models/im_r_matrix/README b/source/processes/hadronic/models/im_r_matrix/README new file mode 100644 index 0000000000..c90cf08088 --- /dev/null +++ b/source/processes/hadronic/models/im_r_matrix/README @@ -0,0 +1,2 @@ +The tuning of resonances can still improve in a iteration on short-lived particles. + diff --git a/source/processes/hadronic/models/radioactive_decay/README_RDM b/source/processes/hadronic/models/radioactive_decay/README_RDM new file mode 100644 index 0000000000..037a0bb1b5 --- /dev/null +++ b/source/processes/hadronic/models/radioactive_decay/README_RDM @@ -0,0 +1,38 @@ + +This README file provides instructions for reading the radioactive decay +schemes in the files zXX.aYYY found in the directory RadioactiveDecay3.2 +(most recent version). This directory, as well as previous versions, is +available from the Geant4 download page + +http://geant4.web.cern.ch/geant4/support/download.shtml + +under the Data files heading. In order to use the radioactive decay module +correctly, you must download and unpack the above directory in your local +area, and set the environment variable + +G4RADIOACTIVEDATA + +to point to it. + +************************************************************************** +In each of the files, lines beginning with either a 'W' or a '#' are +comments. + +Lines beginning with a 'P' are headers, each of which describes a level of +the nucleus. The first number is the excitation energy in keV, the second +is the half life in seconds. Indented lines under the 'P' lines are decay +modes for that excitation. There are two type of records here, +distinguished by the number of columns. + +If there are 3 columns only, this is a header which describes all decays of +that type from this level. The first column is the decay mode, the second +column is zero, and the third column in the branching ratio to this mode, +as a fraction of unity. Therefore, the third columns of all the 3-column +records under a given 'P' line should sum to 1.0. + +If there are four columns, this is a record which describes a subset of the +decay type, specific to a given lower level in the daughter species. The +first column is the decay type, the second column is the excitation level +of the daughter (in keV), and the third column is the branching ratio as a +percentage (! note... not a fraction of unity) of the total branching ratio +which came from the 3-column record for this decay. diff --git a/source/processes/solidstate/phonon/README b/source/processes/solidstate/phonon/README new file mode 100644 index 0000000000..d32249805c --- /dev/null +++ b/source/processes/solidstate/phonon/README @@ -0,0 +1,38 @@ + +Contains processes for phonon propagation and interaction in materials. + +G4LatticeManager: Singleton (TLS) for logical and physical lattices + associated with materials and volumes. + +G4LatticeReader: Driver to create logical lattices by reading in + configuration files and velocity map tables. NOTE: This class will + be moved to source/materials/ once Release 10.0 is deployed. + +The lattice data files should be stored under $G4LATTICEDATA (set to +"./CrystalMaps" by default, to support the extended example). The +configuration and velocity map files for a given material should be stored +in a subdirectory with that material's name (e.g., "Ge"). + +Documentation for the lattice configuration files will be expanded in the +future. + +G4VPhononProcess: Virtual base class for all processes below, providing + some utility functions. + +G4PhononDownconversion: Process to convert single longitudinal phonons + either into pairs of two transverse phonons, or to emit a transverse + phonon. + +G4PhononReflection: Placeholder process to reflect phonons off of crystal + surfaces. Currently phonons are absorbed, or converted to hits. + +G4PhononScattering: Process to scatter phonons off the surrounding + lattice. Currently handles "transportation" as well, but each + scatter destroys the phonon and creates a new one. + +G4PhononPolarization: Enum with conversion functions to map the three + phonon particle definitions onto internal codes (L=0, TS=1, TF=2). + +G4PhononTrackMap: Singleton (TLS) map file to connect tracks with + wavevectors. for temporary use until wavevector is added to G4Track + as a data member, after Release 10.0. diff --git a/source/run/README.TXT b/source/run/README.TXT new file mode 100644 index 0000000000..5fa6b86c28 --- /dev/null +++ b/source/run/README.TXT @@ -0,0 +1,131 @@ + + GEANT4 + + This directory contains several examples of GEANT4 main programs, + from very simple cases (a purely batch program), + to interactive programs based on the G4 command line interface, + to more complex cases programs touching most of the G4 functionality. + + Those main programs provide just examples of initialization and usage + of the GEANT4 toolkit classes, but the user is also free to define his + own way and functions to initialize G4 and write the main program. + + A typical GEANT4 main program looks like the following: + +int main() { + + // Create Run Manager + G4RunManager * runManager = new G4RunManager; + + // Register User Classes to the RunManager + // Mandatory classes ----------------------- + // Detector geometry + runManager-> set_userInitialization(new MyDetectorConstruction); + // Physics List + runManager-> set_userInitialization(new MyPhysicsList); + // Primary Generator + runManager->set_userAction(new MyPrimaryGeneratorAction); + + // Optiolnal classes ----------------------- + // User Actions + runManager->set_userAction(new MyRunAction); + runManager->set_userAction(new MyEventAction); + runManager->set_userAction(new MyStackingAction); + runManager->set_userAction(new MyTrackingAction); + runManager->set_userAction(new MySteppingAction); + + + // Define (G)UI terminal for interactive mode + G4UIsession * session = new G4UIterminal; + + // User interactions + session->sessionStart(); + + // Termination + delete session; + delete runManager; + return 0; +} + + First of all, user must create the RunManager. The RunManager controles + run sequence by receiving messages from the user via UIsession. + The following are a part of commands for run controle; + /run/initialize * Initialize G4 kernel. + /run/beamOn * Start a Run. + /run/verbose * Set the verbose level of G4RunManager. + /run/abort * Abort current run processing. + For example, event loop will start by using "/run/beamOn" commands. + + In order to execute simulation, user must provide geometrical + configuration of his own detector. In addition information of + primary events must be given with a list of particle types and + processes for them. + + So, user must provide his own classes derived from the following + three abstract classes by implementing their pure virtual functions + and register those user classes to the RunManager. + + G4VUserDetectorConstruction - Detector Geometry, Materials + pure virtual functions + G4VPhysicalVolume* construct() + - construct detectors; + normally implemented to serve as the entry point + for the tree of methods describing solids, volumes, + materials and sensitive detectors. + + G4VUserPhysicsList - Particle types and Processes + pure virtual functions + void constructParticle() + - construct particles; + normally implemented to select desired particle types. + void constructPhysics() + - construct procesess; + normally implemented to select desired physics processes + for each particle types and register them to the ProcessManager. + void setCuts(G4double aValue) + - sets a cut value; + normally implemented to set cut value in range for all + particle types. + + G4VUserPrimaryGeneratorAction - Event Generator selection + pure virtual functions + void generatePrimaries(G4Event* anEvent) + - generate a event with primary particles + normally implemented to select the desired event generation + mechanism, such as the ParticleGun or the PYTHIA interface. + + In addition to the above mandatory classes, there are 5 user classes + to customize the default functionality of GEANT4 simulation. + + G4UserRunAction - Actions for each Run + G4UserEventAction - Actions for each Event + G4UserStackingAction - Tracks Stacking selection + G4UserTrackingAction - Actions for each Track + G4UserSteppingAction - Actions for each Step + + The virtual functions belonging to the classes above are: + + G4UserRunAction - void beginOfRunAction(G4Run*) + - void endOfRunAction(G4Run*) + + G4UserEventAction - void beginOfEventAction(G4Event*) + - void endOfEventAction(G4Event*) + + G4UserStackingAction - G4ClassificationOfNewTrack + classifyNewTrack(G4Track *const) + - void newStage() + - void prepareNewEvent() + + G4UserTrackingAction - void preUserTrackingAction() + - void postUserTrackingAction() + + G4UserSteppingAction - void userSteppingAction() + + Finally, more details can be found in the header files and in the source + code relative to the classes outlined above. + + + + + + diff --git a/source/tasking/README.md b/source/tasking/README.md new file mode 100644 index 0000000000..e06b9860bc --- /dev/null +++ b/source/tasking/README.md @@ -0,0 +1,226 @@ +# Geant4 Tasking + +This directory contains a Geant4 run manager which uses a tasking system for the G4Event loop. +This tasking system is fully compatible with TBB if `GEANT4_USE_TBB=ON` is specified when +configuring CMake. The default behavior, however, is to submit the tasks to an internal +thread-pool and task-queue. + +## G4TaskRunManager + +`G4TaskRunManager` multiply inherits from `G4MTRunManager` and `PTL::TaskRunManager`. +`PTL::TaskRunManager` holds the thread-pool instance, the size of the thread-pool, +and the default task-queue. The constructor of `G4TaskRunManager` takes a `G4VUserTaskQueue` +pointer (can be nullptr), a boolean for whether to use TBB if available, and a grainsize. + +### Concepts + +#### Grainsize + +> Environment Variable: `G4FORCE_GRAINSIZE=N` + +The grainsize is essentially the number of tasks. If set to 0, the default grainsize +will be `poolSize` and each thread will get `numEvents / poolSize` events. +If the grainsize is set to 1, then _all the events_ will be submitted as one task (i.e. be +processed serially by one thread in the pool). If the grainsize is set to 50 and there are 500 events, +then 50 tasks of 10 events will be submitted. + +#### Events Per Tasks + +> Environment Variable: `G4FORCE_EVENTS_PER_TASK=N` + +Sometimes is easier to specify the number of events in a task instead of the grainsize. +If the events-per-task is set to 10 and there are 500 events, +then 50 tasks of 10 events will be submitted. + +### Default Constructor + +```cpp + G4TaskRunManager(G4VUserTaskQueue* = nullptr, bool useTBB = false, G4int grainsize = 0); +``` + +## G4RunManagerFactory + +An enumeration `G4RunManagerType` and a function `G4RunManagerFactory::CreateRunManager(...)` +was added to `"G4RunManagerFactory.hh"` to simplify the selection of the various run managers. +The first parameter is either one of the enumerated `G4RunManagerType` or a string identifier + +| Enumeration | String ID | Class | +| ------------------------------- | ----------- | ------------------- | +| `G4RunManagerType::Serial` | `"Serial"` | `G4RunManager` | +| `G4RunManagerType::MT` | `"MT"` | `G4MTRunManager` | +| `G4RunManagerType::Tasking` | `"Tasking"` | `G4TaskRunManager` | +| `G4RunManagerType::TBB` | `"TBB"` | `G4TaskRunManager` | +| `G4RunManagerType::Default` | `"Default"` | Environment setting | +| `G4RunManagerType::SerialOnly` | `"Serial"` | `G4RunManager` | +| `G4RunManagerType::MTOnly` | `"MT"` | `G4MTRunManager` | +| `G4RunManagerType::TaskingOnly` | `"Tasking"` | `G4TaskRunManager` | +| `G4RunManagerType::TBBOnly` | `"TBB"` | `G4TaskRunManager` | + + +The `Default` enumeration value will defer to the following environment variable `G4RUN_MANAGER_TYPE` +if specified and will default to `"MT"` if MT is supported and serial if MT is not supported. +If the `G4FORCE_RUN_MANAGER_TYPE` environment variable is set, this variable will override the +value passed to the `CreateRunManager` function unless `G4RunManagerType` matches one of the `Only` +values. In this case, the environment variable is ignored and the run manager will be ``. + +| Environment Variable | Options | Description | +| -------------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------- | +| `G4RUN_MANAGER_TYPE` | `"Serial"`, `"MT"`, `"Tasking"`, `"TBB"` | Only applicable when `G4RunManagerType::Default` is used | +| `G4FORCE_RUN_MANAGER_TYPE` | `"Serial"`, `"MT"`, `"Tasking"`, `"TBB"` | Will override explicitly specifed `G4RunManagerType` if application allows and fail if type is not available | + +## Creating the G4RunManager + +- The `G4RunManagerFactory::CreateRunManager(...)` function takes either `G4RunManagerType` enumerated type or string to specify the desired G4RunManager + - If a string is used, regex matching is used which is case-insensitive + - Returns a `G4RunManager*` + - Various overloads exist which just reorder passing in: + - `int numberOfThreads` - executes `G4MTRunManager::SetNumberOfThreads(numberOfThreads)` before returning if > 0 + - default: `0` + - `bool fail_if_unavail` - will cause a runtime failure if requested type is not available with Geant4 build + - default: `true` + - `G4VTaskQueue*` - a task-queue manager + - default: `nullptr` + +```cpp +#include "G4RunManagerFactory.hh" + +int main() +{ + // specify {Serial, MT, Tasking, TBB} as the default, can be overridden + // with "G4FORCE_RUN_MANAGER_TYPE" env variable + auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::Serial); + auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::MT); + auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::Tasking); + auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::TBB); + + // specify {Serial, MT, Tasking, TBB} as the required type, cannot be overridden + // with "G4FORCE_RUN_MANAGER_TYPE" env variable + auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::SerialOnly); + auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::MTOnly); + auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::TaskingOnly); + auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::TBBOnly); + + // defer to "G4RUN_MANAGER_TYPE" env variable and default to MT if + // env variable is not set + auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default); + + // same as above + auto* runmanager = G4RunManagerFactory::CreateRunManager(); +} +``` + +## Using the Tasking System + +With G4TaskRunManager, Geant4 events will be launched asynchronously as tasks. These tasks are +placed into a queue until one of the thread in the pool is available to execute the task. Users can +take advantage of this system to load-balance expensive sub-event calculations which might have +previously resulted in serial bottlenecks. For example, if an application needs to do extensive event +analysis on electrons and thread #1 ends up with 10x as many of these events, the other threads +might finish their G4Run significantly eariler and be idle while thread #1 has a lot of work. +Tasking allows these analysis calculations to be offload back into the queue so that other +threads can contribute to their completion. + +### Option 1 - Submit Directly to Thread-Pool + +- To execute the function `foo(int, double)` asynchronously: + +```cpp +// get the task manager +auto* task_manager = G4TaskRunManager::GetTaskManager(); + +// submit task to thread-pool and receive a future for when the result is need +std::future _fvoid = task_manager->async(foo, 1, 1.0); +std::future _fint = task_manager->async(bar, 1.0); + +// wait for task to execute +_fvoid.wait(); +_fint.wait(); + +// get the result (if non-void) +auto result = _fint.get(); +``` + +### Option 2 - Submit to task-group + +- Obtain a pointer to the thread-pool instance +- Create a `task_group` object where `T` is the return type of all the functions in the group + - If `T` is non-void, you must provide a join functor who return type and first argument are both references + to the joined type and the second argument is type `T`, e.g. `task_group` can provide a join functor + with `vector&` as the return type and `T` as the second argument or `int&` as the return and first argument + and `int` as the second argument + - If `T` is void, the join functor is optional and can be treated as a final synchronization operation after + all the tasks have been completed. + +> NOTE: The join functor for task-groups are called sequentially on the thread that is +> waiting on `task_group::join()` member function. + +#### Global Definitions for Examples + +```cpp +// obtain thread-pool instance from task manager +static auto* thread_pool = G4TaskRunManager::GetThreadPool(); + +// trivial int function which just returns value passed +int foo(int v) { return v; } + +// function which launches CUDA kernel +void bar(int v) +{ + cuda_bar<<<512, 1>>>(v); +} +``` + +#### Example with non-void return types from tasks + +```cpp +// put all return values from tasks into an array +auto join_vec = [](std::vector& lhs, int rhs) { lhs.push_back(rhs); return lhs; }; + +// sum the values returned by tasks +auto sum_int = [](int& lhs, int rhs) { return lhs += rhs; }; + +// task group which applies 'join_vec' to all task return values +task_group vec_tg(join_vec, thread_pool); +// task group with applies 'sum_int' to all task return values +task_group sum_tg(sum_int, thread_pool); + +// submit work to task-groups +vec_tg.exec(foo, 1); +vec_tg.exec(foo, 2); +sum_tg.exec(foo, 1); +sum_tg.exec(foo, 2); + +// produces std::vector{ 1, 2 }; +auto vec_result = vec_tg.join(); + +// produces 1 + 2 = 3 +auto sum_result = sum_tg.join(); +``` + +#### Example with void return type from tasks + +```cpp +// wait for the GPU to finish +auto sync = []() { cudaDeviceSynchronize(); }; + +// task group which applies 'sync' after all tasks have been executed +task_group gpu_tg(sync, thread_pool); +// generic task group w/o a join functor +task_group general_tg(thread_pool); + +// submit work to task-groups +gpu_tg.exec(bar, 1); +gpu_tg.exec(bar, 2); +general_tg.exec(bar, 1); +general_tg.exec(bar, 2); + +// 'sync()' will get called after all tasks in group have executed +// (i.e. return from 'bar' function). 'sync' will then block until +// all GPU work has been completed +gpu_tg.join(); + +// will block only until all tasks in group have been executed +// (i.e. returned from 'bar' function) +generic_tg.join(); + +``` diff --git a/source/visualization/FukuiRenderer/README b/source/visualization/FukuiRenderer/README new file mode 100644 index 0000000000..136d819dbb --- /dev/null +++ b/source/visualization/FukuiRenderer/README @@ -0,0 +1,30 @@ +<< Portability >> + +Compilation of DAWN-file and DAWN-network drivers +are confirmed at the following platforms: + + Linux, DEC, HP, AIX, Solaris, IRIX + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/visualization/HepRep/README b/source/visualization/HepRep/README new file mode 100644 index 0000000000..2c3dfba5f3 --- /dev/null +++ b/source/visualization/HepRep/README @@ -0,0 +1,152 @@ +This G4 Graphics Driver creates a HepRep File suitable for viewing +by the HepRApp, Wired4 or FRED Event Display clients. +It requires no external packages. + +The HepRep graphics format is further described at +http://www.slac.stanford.edu/~perl/heprep/ + + +Two different drivers are available for either HepRep1 or HepRep2. + + +Driver: HepRepFile +------------------ +The version of HepRep produced by this driver is HepRep Version 1. + +Writes files with file extension .heprep. + +First file is written to current directory and is named G4Data0.heprep. +Subsequent files increment the number, as in G4Data1.heprep, G4Data2.heprep... + +To specify a different output file directory (instead of current directory), +set G4HEPREPFILE_DIR + +To specify a different output file name (instead of G4Data), +set G4HEPREPFILE_NAME + +To repeatedly overwrite the same output file (instead of having incremental +numbers at the end of the file name), +set G4HEPREPFILE_OVERWRITE + +By default, invisible objects are not culled but are left in the heprep file +with their visibility initially set to false (so that you can subsequently +choose to make them visible from within the heprep browser). +To force culling of invisible objects, +set G44HEPREPFILE_CULL + +View the file using the HepRApp HepRep Browser, available from: +http://www.slac.stanford.edu/~perl/HepRApp + +HepRApp can read xml files in zipped format as well as unzipped, +so you can save space by applying gzip to the xml file. +This will reduce the file to about five percent of its original size. + +Joseph Perl +15 November 2007 + + +Driver: HepRepXML +----------------- +The version of HepRep produced by this driver is HepRep Version 2. + +This driver can write both Binary HepRep (.bheprep) and XML HepRep +(.heprep) files. Binary HepRep files are a one-to-one translation +of XML HepRep files, but they are considerably shorter and faster +to parse by a HepRepViewer such as WIRED 4. + +You can view the files using the WIRED 4 Event Display, available from: + +http://wired4.freehep.org + +Both Binary HepRep and XML HepRep can be compressed using the standard +zlib library if linked into Geant4 using G4LIB_USE_ZLIB. If a standard +zlib is not available (WIN32-VC for instance) you should also set +G4LIB_BUILD_ZLIB to build G4zlib included with Geant4. + +HepRep files (Binary and XML) can contain multiple HepRep events/geometries. +If the file contains more than one HepRep it is not strictly XML anymore. +Files can be written in .heprep.zip, .heprep.gz or .heprep format and their +binary versions .bheprep.zip, .bheprep.gz or .bheprep. + +The .heprep.zip is the default for file output, the .heprep is the default +for stdout and stderr. + +(Optional) To set the filename with a particular extension such as: +.heprep.zip, .heprep.gz, .heprep, .bheprep.zip, .bheprep.gz or .bheprep +use for instance: + +/vis/scene/create filename.bheprep.zip + + +(Optional) To create separate files for each event, you can set a suffix such as +"-0001" to start writing files from filename-0001.bheprep.zip to +filename-9999.bheprep.zip (or up), while "-55-sub" will start write files +filename-55-sub.bheprep.zip to filename-99-sub.bheprep.zip (or up). + +/vis/heprep/setEventNumberSuffix -0001 +(Note: suffix has to contain at least one digit) + + +(Optional) To route the HepRep XML output to stdout (or stderr), +by default uncompressed, use: + +/vis/scene/create stdout + + +To select the driver, where the file if not create by scene is set to +G4HepRepOutput.heprep.zip, use: + +/vis/open HepRepXML + + +(Optional) To write a geometry, use: + +/vis/viewer/flush + + +(Optional) To signal a change in geometry (to be written with the next event), use: + +/vis/viewer/refresh + + +To write 10 events (and geometries), use: + +/run/beamOn 10 + + +(Optional) To accumulate multiple (5) G4 events into one HepRep event, use: +/vis/scene/endOfEventAction accumulate +/run/beamOn 5 +/vis/viewer/update + + +(Optional) To add attributes to each point on a trajectory, use: +/vis/heprep/addPointAttributes 1 +Be aware that this may increase the size of the output dramatically. + + +(Optional) You may use the commands: +/vis/viewer/zoom to set an initial zoom factor +/vis/viewer/set/viewpointThetaPhi to set an initial view point +/vis/heprep/setCoordinateSystem uvw to change the coordinate system, where uvw can be "xyz", "zxy", ... + + +(Optional) You may decide to write .zip files with events and geometry separated (but linked). +This results in a smaller zip file, as the geometry is only written once. Use the command: + +/vis/heprep/appendGeometry false + + +(Optional) To close the file, remove the SceneHandler, use: + +/vis/sceneHandler/remove scene-handler-0 + + +Limitations: + +Only one SceneHandler can exist at any time, connected to a single Viewer. +Since the HepRep format is a model rather than a view this is not a real +limitation. In WIRED 4 you can create as many views (SceneHandlers) as you like. + +1 June 2005 +Mark.Donszelmann@slac.stanford.edu diff --git a/source/visualization/HepRep/include/README b/source/visualization/HepRep/include/README new file mode 100644 index 0000000000..ea3533e33c --- /dev/null +++ b/source/visualization/HepRep/include/README @@ -0,0 +1,23 @@ +Apart from the heprep1 files: + +G4HepRepFile.hh +G4HepRepFileSceneHandler.hh +G4HepRepFileViewer.hh +G4HepRepFileXMLWriter.hh + +and heprep2 files: + +G4HepRep.hh +G4HepRepSceneHandler.hh +G4HepRepMessenger.hh +G4HepRepViewer.hh + +the other sources are copies from the FreeHEP library +(java.freehep.org) and are maintained there. + +The files starting with G4 are geant4 compliant, the others may not be. + +Changes made here may be overwritten. + +4 May 2005 +Mark Donszelmann diff --git a/source/visualization/OpenInventor/README.OIXExtendedViewer b/source/visualization/OpenInventor/README.OIXExtendedViewer new file mode 100644 index 0000000000..0e79431205 --- /dev/null +++ b/source/visualization/OpenInventor/README.OIXExtendedViewer @@ -0,0 +1,186 @@ +Extended OI Xt viewer +===================== +INCOMPLETE DRAFT + +G4OpenInventorXtExaminerViewer is based on and is +a plug-in replacement for SoXtExaminerViewer which +is a base class viewer provided by the SoXt (Coin3d) +library. SoXtExaminerViewer is the normal viewer +that you get when doing /vis/open OIX. +These viewers depend on X, Xt and Xm and so are +limited to UNIX/MAC and will not run on native +Windows. + +The SoXtExaminerViewer is instantiated by +G4OpenInventorXtViewer. This has been temporarily +disabled and has been replaced by an instantiation +of G4OpenInventorXtExaminerViewer, together with +some additional configuration. The intention +is to find a suitable mechanism to allow a choice +of viewer (standard or extended) at run time. + +No modifications to user code or to any other +Geant4 categories are required to use the extended +viewer. Many of the implemented features are made +possible by the SCENE GRAPH technology in Open +Inventor which stores the scene elements and +associated information in a structured way. + +Features +======== + +Reference Path navigation +------------------------- + +Most of the new features are concerned with navigation +along a "reference path" which is a piecewise +linear path through the world. The reference path +can be any particle trajectory, chosen as follows: + + The application can attach a "reference trajectory" + attribute to a particular trajectory. + + If there is no such designated trajectory, the viewer + chooses the longest trajectory as the initial reference + path. + + Any other trajectory can be selected as the reference + by selecting it with the mouse. + + Elements are assigned a "distance" along the reference + path, based on the perpendicular from the element's + placement coordinates to the path. Elements are then + sorted by distance and the list is displayed in an + auxiliary window of the viewer. NOTE: at present + the path is not extrapolated at the ends, so elements + "before" or "after" the path are assigned distances + of 0 or the total path length respectively. This + will be generalized in future. + +Reference path navigation controls: + + Select an element from the list: navigate along the + path to the element's "location" (distance along + the path. + + L,R,U,D refer to the arrow keys. + + Shift-L and Shift-R: navigate to the previous or next + element on the path (with wraparound). + + L and R: rotate 90 degrees around the vertical axis + + U and D: rotate 90 degrees around the path + + Ctrl-L and Ctrl-R: rotate 90 degrees around the horizontal axis + + All these keys have a "repeat" function for continuous motion. + + The rotation keys put the camera in a definite orientation. + The Shift-L and Shift-R keys can be used to "fly" along the + path in whatever orientation is in effect. + NOTE: if this appears to be "stuck", try switching from + orthonormal camera to perspective camera ("cube" viewer button). + + Tools / Go to start of reference path: useful if you get lost + + Tools / Invert reference path: flips the direction of travel + and the distance readout + + +Reference path animation + + This is a special mode which flys the camera steadily along the + path, without wraparound. Special controls are: + + Tools / Animate Ref Particle: start animation mode + + Page-Up: increase speed + Page-Down: decrease speed + U: raise camera + D: lower camera + ESC: exit animation mode + + For suitable geometries the U and D keys can be used to + get "Star Wars" style fly-over and fly-under effects. + +Bookmarks + + At any time, the viewpoint and other camera parameters can + be saved in a file as a labelled "bookmark". + The view can then be restored later in the current run or + in another run. + + The default name for the bookmark file is ".bookmarkFile" + The first time a viewpoint is saved, this file will be + created if it does not already exist. When the viewer + is first opened, it will automatically read this file + if present and load the viewpoints into the left-hand + panel of the viewer's auxiliary window. + + Controls: + + Select viewpoint from list: restore this view + + Right-arrow VIEWER button: go to next viewpoint + Left-arrow VIEWER button: go to next viewpoint + + "Floppy Disk" button: save current view. + The user can type in a label for the view, + or use the default label provided. + + File / Open Viewpoint File: loads an existing bookmark file + File / New Viewpoint File: creates a new bookmark file for + saving subsequent views + + +Special Picking Modes + + "Console" VIEWER button: enable brief trajectory picking and + mouse-over element readout + For trajectories, the list of all trajectory points is + replaced by the first and last point only, allowing easier + identification of the particle without scrolling back. + Passing the mouse over an element will give a readout + of the volume name, material, and position on the + reference path. + + "Star" VIEWER button: select new reference path + The cursor will change to a small cross (+) + after which a trajectory can be selected to become + the new reference path. + +Convenience feature + + Escape from viewer without using the mouse: + In addition to the File / Escape menu item, pressing the "e" + key on the keyboard will exit from the viewer's X event loop. + The viewer becomes inactive and control returns to the + Geant4 UI prompt. + +Prototype only: + + File / Save-Load Ref Coords: status to be determined + + File / Save-Load Scene Graph: this saves the current scene graph, + (whatever is being viewed and navigated in the viewer) + including the geometry, camera, lighting information, into a + file which can be read back, thus returning to a previous + viewing "experience". This only partially works and some + or all of the geometry may be missing. Geant4-specific + scene elements may be lacking a "save" method. + +Known problems: + + Viewer occasionally hangs in an unknown state. + Usually can be "cleared" by trying various viewer buttons + or menu items. Last resort: escape to the G4 prompt and + run more events. Viewer will usually be o.k. afterwards. + + Unpredictable mode-switching behaviour: switching between + orthonormal and perspective camera may give wierd results. + Navigation may appear "stuck" with orthonormal camera. + + Both the standard and extended viewers can crash the + executable or even the X server if they are pushed + too far (e.g. by excessive zooming). diff --git a/source/visualization/RayTracer/README b/source/visualization/RayTracer/README new file mode 100644 index 0000000000..608fb3db7d --- /dev/null +++ b/source/visualization/RayTracer/README @@ -0,0 +1,82 @@ + +G4RayTracer version 1.0 (29/Jan/00) + +1. Introduction + + G4RayTracer is a "ray tracing" package which uses Geant4 kernel mechanism +of tracking/navigation. It visualizes any kinds of solids that Geant4 +kernel can navigate. + +2. Building a library + + G4RayTracer is one of visualization driver which Geant4 supports. To build +a library of G4RayTracer (library name G4RayTracer), set an environment +variable G4VIS_BUILD_RAYTRACER_DRIVER. + + $ setenv G4VIS_BUILD_RAYTRACER_DRIVER 1 + +3. Using G4RayTracer + + To use G4RayTracer, set an environment variable G4VIS_USE_RAYTRACER. + + $ setenv G4VIS_USE_RAYTRACER 1 + +Also, G4RayTracer has to be registored to the user's concrete VisManager. +Refer an example given in + geant4/source/visualization/management/include/MyVisManager.cc. + +4. Notes + +a) G4RayTracer generates JPEG file(s). To visualize these files, use your +local program such as NetScape or xview, etc. + +b) The eye position must be inside of the defined world volume. If you want +to draw your detector setup from very far position, you need to enlarge +your world volume. + +c) G4RayTracer ignores volumes without G4VisAttributes, volumes which are +set as "forced wire frame", and volumes which are set as "invisible". + +d) In case you get unexpected figure, check + d.1) eye position and target position are properly set, + d.2) light direction is properly set (note light direction is from + illumination light source to the objects), + d.3) span angle (given by angle for 100 pixels) is reasonable, + d.4) there is no surrounding volume(s) without transparency. + +e) G4RayTracer can be executed ONLY AT "Idle" state. + +5. Basic UI commands + +a) /vis/rayTracer/eyePosition x y z unit + eye position + +b) /vis/rayTracer/target x y z unit + target position + in default it is set to the origine + +c) /vis/rayTracer/lightDirection ex ey ez + vector of the illuminating light (need not to be a unit vector) + note light direction is from illumination light source to the objects + +d) /vis/rayTracer/column nColumn + number of holizontal pixels + in default 640 pixels + +e) /vis/rayTracer/row nRow + number of virtical pixels + in default 640 pixels + +f) /vis/rayTracer/span angle unit + angle for 100 pixels + in default 5 degree + +g) /vis/rayTracer/trace fileName + execution of G4RayTracer + "fileName" is the out put JPEG file name + in default "g4RayTracer.jpeg" + NOTE THAT THIS COMMAND IS AVAILABLE ONLY AT IDLE STATE + + + + diff --git a/source/visualization/gMocren/README b/source/visualization/gMocren/README new file mode 100644 index 0000000000..a8efab8161 --- /dev/null +++ b/source/visualization/gMocren/README @@ -0,0 +1,13 @@ +//-- gMocren-file driver --// + +Oct. 12, 2009 : Akinori Kimura + Beta release. + It supports a geometry constructed with G4PhantomParameterisation or + G4VNestedParameterisation and a hits collection based on G4VHits, + primitive scorer or the interactive scorer. + +Apr. 1, 2009 : Akinori Kimura + + First version of the gMocren-file driver. + This is a prototype, not a release version. + diff --git a/source/visualization/modeling/README b/source/visualization/modeling/README new file mode 100644 index 0000000000..1a02c17078 --- /dev/null +++ b/source/visualization/modeling/README @@ -0,0 +1,6 @@ +Modeling +======= + +The idea is to put GEANT4-aware but user-enviroment-independent code +here. It introduces the concept of a G4VModel. +